<?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>206094</bug_id>
          
          <creation_ts>2020-01-10 14:37:58 -0800</creation_ts>
          <short_desc>Add Lightweight Optimization Level (LOL) to the compilation pipeline</short_desc>
          <delta_ts>2021-08-16 08:05:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          <dependson>202503</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>emilio</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mikhail</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>sam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1605305</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-10 14:37:58 -0800</bug_when>
    <thetext>original plan try to do this as a replacement of the baseline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607704</commentid>
    <comment_count>1</comment_count>
      <attachid>387969</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-16 15:26:37 -0800</bug_when>
    <thetext>Created attachment 387969
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610369</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-23 15:45:11 -0800</bug_when>
    <thetext>We&apos;re probably going to change directions here and invent a new optimizer that works over bytecode. The main optimizations we&apos;re planning on doing are type speculation and register allocation. To get fast compile times, the goal will also be to not have to construct an entirely new IR. We&apos;d also want to get to the point where each opcode can speculate on what its inputs are without doing some kind of prediction propagation phase. Many opcodes already have enough metadata to do this. However, not all do. We&apos;ll have to invent ways for all to do this.

Our reasoning for this was based on this data. Here is the JS2 score in various configurations of JSC:

[A] Baseline only: 67
[B] DFG only: 137
[C] DFG only, no inlining, no access inlining, AI says each structure set is infinite, but each variable still has a flush format: 116
[D] DFG only, no inlining, no access inlining, AI says each structure set is infinite, each variable has JSValue flush format: 109
[E] DFG only, no inlining, no access inlining, AI says each structure set is infinite, each variable has JSValue flush format, no intrinsic inlining: 106


Here are our compile time numbers on a large subset of JS2 in [E]:
                   Baseline Compile Time: 171.968 ms
                        DFG Compile Time: 1396.220 ms
                   FTL (B3) Compile Time: 0.000 ms
                  FTL (DFG) Compile Time: 0.000 ms
                        FTL Compile Time: 0.000 ms
                      Total Compile Time: 1568.189 ms
[DFG] bytecode parser total ms: 380.117813
[DFG] live catch variable preservation phase total ms: 1.461701
[DFG] CPS rethreading total ms: 48.442496
[DFG] unification total ms: 11.940636
[DFG] prediction injection total ms: 2.781105
[DFG] static execution count estimation total ms: 43.239496
[DFG] backwards propagation total ms: 22.783780
[DFG] prediction propagation total ms: 51.928968
[DFG] fixup total ms: 55.983858
[DFG] invalidation point injection total ms: 24.982650
[DFG] control flow analysis total ms: 101.180000
[DFG] tier-up check injection total ms: 0.332139
[DFG] fast store barrier insertion total ms: 22.395290
[DFG] dead code elimination total ms: 42.648463
[DFG] phantom insertion total ms: 47.266917
[DFG] stack layout total ms: 12.130792
[DFG] virtual register allocation total ms: 10.887650
[DFG] watchpoint collection total ms: 4.037530
[DFG] machine code generation total ms: 259.451395

Just building the IR and generating machine code makes us &gt; 2x slower than baseline compile times. As seen in [E], we get a lot of benefit just from register allocation and type speculation. Having a dedicated &quot;IR&quot; for making this fast could lead to really good results. The IR here could likely just be bit vectors for block boundaries representing the state of types. Or perhaps, we&apos;d just need one bit vector we update as we parse a block. The goal would be able to do this over bytecode itself. This also had a nice OSR exit story, since if we&apos;re compiling the bytecode, OSR exit is straight forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665498</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-23 12:30:01 -0700</bug_when>
    <thetext>I think we&apos;re gonna do this building off of baseline JIT. This allows us to incrementally improve the JIT without implementing all opcodes in optimized form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665624</commentid>
    <comment_count>4</comment_count>
      <attachid>402617</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-23 19:18:46 -0700</bug_when>
    <thetext>Created attachment 402617
WIP

it begins round 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665936</commentid>
    <comment_count>5</comment_count>
      <attachid>402702</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-24 17:53:16 -0700</bug_when>
    <thetext>Created attachment 402702
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665952</commentid>
    <comment_count>6</comment_count>
      <attachid>402702</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2020-06-24 19:01:21 -0700</bug_when>
    <thetext>Comment on attachment 402702
WIP

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

&gt; Source/JavaScriptCore/jit/JIT.cpp:63
&gt; +void JIT::stepOverInstruction(const Instruction* instruction, const HashMap&lt;ValueProfile*, SpeculatedType&gt;&amp; profiles)

Not sure you&apos;re going to want that to be a hashtable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666158</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-25 12:23:53 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #6)
&gt; Comment on attachment 402702 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402702&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JIT.cpp:63
&gt; &gt; +void JIT::stepOverInstruction(const Instruction* instruction, const HashMap&lt;ValueProfile*, SpeculatedType&gt;&amp; profiles)
&gt; 
&gt; Not sure you&apos;re going to want that to be a hashtable.

Yeah I kinda doubted this too, and questioned it when I first started. The other thing I convinced myself is ok to do is to just racily read out the prediction. Since the prediction should only get wider as we read it, it shouldn&apos;t cause the algorithm to be unsound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666219</commentid>
    <comment_count>8</comment_count>
      <attachid>402811</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-25 14:25:56 -0700</bug_when>
    <thetext>Created attachment 402811
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666319</commentid>
    <comment_count>9</comment_count>
      <attachid>402832</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-25 17:34:33 -0700</bug_when>
    <thetext>Created attachment 402832
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666552</commentid>
    <comment_count>10</comment_count>
      <attachid>402886</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-26 12:40:15 -0700</bug_when>
    <thetext>Created attachment 402886
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666685</commentid>
    <comment_count>11</comment_count>
      <attachid>402928</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-26 16:39:48 -0700</bug_when>
    <thetext>Created attachment 402928
WIP

Ok, I think the prediction propagator is good enough to start working on other parts of the system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666687</commentid>
    <comment_count>12</comment_count>
      <attachid>402930</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-26 16:44:07 -0700</bug_when>
    <thetext>Created attachment 402930
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667420</commentid>
    <comment_count>13</comment_count>
      <attachid>403159</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-29 19:19:20 -0700</bug_when>
    <thetext>Created attachment 403159
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668140</commentid>
    <comment_count>14</comment_count>
      <attachid>403342</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-01 21:01:36 -0700</bug_when>
    <thetext>Created attachment 403342
WIP

It can now speculate and register allocate this program:

```
function foo(x) {
    x += 2;
    let y;
    if (x &gt; 5) {
        y = 42;
    } else {
        y = 77;
    }

    x = x + 48;
    x = x + 1337;
    x = x + 42;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;
    x += y;

    return x + y;
}
```

Unsurprisingly, runs 2x faster than old baseline code. Seems to compile in a similar amount of time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669913</commentid>
    <comment_count>15</comment_count>
      <attachid>403811</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-08 15:35:27 -0700</bug_when>
    <thetext>Created attachment 403811
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670001</commentid>
    <comment_count>16</comment_count>
      <attachid>403839</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-08 20:20:05 -0700</bug_when>
    <thetext>Created attachment 403839
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670006</commentid>
    <comment_count>17</comment_count>
      <attachid>403841</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-08 20:49:48 -0700</bug_when>
    <thetext>Created attachment 403841
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670356</commentid>
    <comment_count>18</comment_count>
      <attachid>403941</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-09 19:25:03 -0700</bug_when>
    <thetext>Created attachment 403941
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670648</commentid>
    <comment_count>19</comment_count>
      <attachid>404019</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-10 16:23:49 -0700</bug_when>
    <thetext>Created attachment 404019
WIP

Starting to do some basic double math. It&apos;s ~2x faster also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670700</commentid>
    <comment_count>20</comment_count>
      <attachid>404037</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-10 20:14:09 -0700</bug_when>
    <thetext>Created attachment 404037
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672364</commentid>
    <comment_count>21</comment_count>
      <attachid>404517</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-16 19:35:16 -0700</bug_when>
    <thetext>Created attachment 404517
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690861</commentid>
    <comment_count>22</comment_count>
      <attachid>409399</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-22 14:34:30 -0700</bug_when>
    <thetext>Created attachment 409399
WIP

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690867</commentid>
    <comment_count>23</comment_count>
      <attachid>409401</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-22 14:50:42 -0700</bug_when>
    <thetext>Created attachment 409401
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690920</commentid>
    <comment_count>24</comment_count>
      <attachid>409417</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-22 16:00:33 -0700</bug_when>
    <thetext>Created attachment 409417
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691690</commentid>
    <comment_count>25</comment_count>
      <attachid>409625</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-24 15:31:56 -0700</bug_when>
    <thetext>Created attachment 409625
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693248</commentid>
    <comment_count>26</comment_count>
      <attachid>410075</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-29 17:52:29 -0700</bug_when>
    <thetext>Created attachment 410075
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693492</commentid>
    <comment_count>27</comment_count>
      <attachid>410146</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-30 12:36:07 -0700</bug_when>
    <thetext>Created attachment 410146
WIP

Getting silent refill working</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693974</commentid>
    <comment_count>28</comment_count>
      <attachid>410302</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-01 19:41:07 -0700</bug_when>
    <thetext>Created attachment 410302
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694335</commentid>
    <comment_count>29</comment_count>
      <attachid>410403</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-02 19:14:42 -0700</bug_when>
    <thetext>Created attachment 410403
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694913</commentid>
    <comment_count>30</comment_count>
      <attachid>410575</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-05 15:48:09 -0700</bug_when>
    <thetext>Created attachment 410575
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695003</commentid>
    <comment_count>31</comment_count>
      <attachid>410602</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-05 19:30:23 -0700</bug_when>
    <thetext>Created attachment 410602
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695431</commentid>
    <comment_count>32</comment_count>
      <attachid>410723</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-06 18:44:37 -0700</bug_when>
    <thetext>Created attachment 410723
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695639</commentid>
    <comment_count>33</comment_count>
      <attachid>410769</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-07 13:06:32 -0700</bug_when>
    <thetext>Created attachment 410769
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695782</commentid>
    <comment_count>34</comment_count>
      <attachid>410808</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-07 19:35:03 -0700</bug_when>
    <thetext>Created attachment 410808
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699520</commentid>
    <comment_count>35</comment_count>
      <attachid>411814</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-19 16:46:42 -0700</bug_when>
    <thetext>Created attachment 411814
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699562</commentid>
    <comment_count>36</comment_count>
      <attachid>411823</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-19 18:20:43 -0700</bug_when>
    <thetext>Created attachment 411823
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700032</commentid>
    <comment_count>37</comment_count>
      <attachid>411946</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-20 18:27:39 -0700</bug_when>
    <thetext>Created attachment 411946
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700033</commentid>
    <comment_count>38</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-20 18:29:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/69217617&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701566</commentid>
    <comment_count>39</comment_count>
      <attachid>412345</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-26 12:27:32 -0700</bug_when>
    <thetext>Created attachment 412345
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701729</commentid>
    <comment_count>40</comment_count>
      <attachid>412378</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-26 19:29:27 -0700</bug_when>
    <thetext>Created attachment 412378
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702159</commentid>
    <comment_count>41</comment_count>
      <attachid>412481</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-27 17:20:13 -0700</bug_when>
    <thetext>Created attachment 412481
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702163</commentid>
    <comment_count>42</comment_count>
      <attachid>412484</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-10-27 17:30:02 -0700</bug_when>
    <thetext>Created attachment 412484
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703774</commentid>
    <comment_count>43</comment_count>
      <attachid>412990</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-02 17:07:34 -0800</bug_when>
    <thetext>Created attachment 412990
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705858</commentid>
    <comment_count>44</comment_count>
      <attachid>413624</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-09 13:39:32 -0800</bug_when>
    <thetext>Created attachment 413624
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706242</commentid>
    <comment_count>45</comment_count>
      <attachid>413747</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-10 15:15:15 -0800</bug_when>
    <thetext>Created attachment 413747
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706298</commentid>
    <comment_count>46</comment_count>
      <attachid>413758</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-10 17:05:14 -0800</bug_when>
    <thetext>Created attachment 413758
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707050</commentid>
    <comment_count>47</comment_count>
      <attachid>413979</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-12 15:54:55 -0800</bug_when>
    <thetext>Created attachment 413979
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707052</commentid>
    <comment_count>48</comment_count>
      <attachid>413980</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-12 16:01:02 -0800</bug_when>
    <thetext>Created attachment 413980
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707109</commentid>
    <comment_count>49</comment_count>
      <attachid>414002</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-12 20:44:57 -0800</bug_when>
    <thetext>Created attachment 414002
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707373</commentid>
    <comment_count>50</comment_count>
      <attachid>414089</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-13 13:35:20 -0800</bug_when>
    <thetext>Created attachment 414089
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707454</commentid>
    <comment_count>51</comment_count>
      <attachid>414115</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-13 18:55:03 -0800</bug_when>
    <thetext>Created attachment 414115
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711169</commentid>
    <comment_count>52</comment_count>
      <attachid>415161</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-01 14:18:35 -0800</bug_when>
    <thetext>Created attachment 415161
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711574</commentid>
    <comment_count>53</comment_count>
      <attachid>415270</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-02 19:33:33 -0800</bug_when>
    <thetext>Created attachment 415270
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711852</commentid>
    <comment_count>54</comment_count>
      <attachid>415356</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-03 15:11:58 -0800</bug_when>
    <thetext>Created attachment 415356
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711938</commentid>
    <comment_count>55</comment_count>
      <attachid>415380</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-03 19:52:44 -0800</bug_when>
    <thetext>Created attachment 415380
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712202</commentid>
    <comment_count>56</comment_count>
      <attachid>415471</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-04 16:03:02 -0800</bug_when>
    <thetext>Created attachment 415471
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712215</commentid>
    <comment_count>57</comment_count>
      <attachid>415476</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-04 16:53:46 -0800</bug_when>
    <thetext>Created attachment 415476
WIP

Fixing a bunch of bugs in the baseline JIT when run without LOL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712223</commentid>
    <comment_count>58</comment_count>
      <attachid>415479</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-04 17:39:51 -0800</bug_when>
    <thetext>Created attachment 415479
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712233</commentid>
    <comment_count>59</comment_count>
      <attachid>415481</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-04 19:45:31 -0800</bug_when>
    <thetext>Created attachment 415481
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712647</commentid>
    <comment_count>60</comment_count>
      <attachid>415596</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-07 15:58:27 -0800</bug_when>
    <thetext>Created attachment 415596
WIP

it&apos;s starting to run some of our tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712664</commentid>
    <comment_count>61</comment_count>
      <attachid>415605</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-07 18:51:27 -0800</bug_when>
    <thetext>Created attachment 415605
WIP

Fixing lots of bugs and implementing opcodes I forgot to rewrite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712669</commentid>
    <comment_count>62</comment_count>
      <attachid>415608</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-07 19:53:47 -0800</bug_when>
    <thetext>Created attachment 415608
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712853</commentid>
    <comment_count>63</comment_count>
      <attachid>415658</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-08 11:46:07 -0800</bug_when>
    <thetext>Created attachment 415658
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712893</commentid>
    <comment_count>64</comment_count>
      <attachid>415670</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-08 13:30:47 -0800</bug_when>
    <thetext>Created attachment 415670
WIP

When running just LOL, without  any tier up past it, I&apos;m at about a 5% failure rate of tests. Working through the failures before I start to focus more on perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712924</commentid>
    <comment_count>65</comment_count>
      <attachid>415676</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-08 14:19:15 -0800</bug_when>
    <thetext>Created attachment 415676
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712972</commentid>
    <comment_count>66</comment_count>
      <attachid>415690</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-08 16:51:28 -0800</bug_when>
    <thetext>Created attachment 415690
WIP

Turns out negative zero is a thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713337</commentid>
    <comment_count>67</comment_count>
      <attachid>415803</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-09 15:33:57 -0800</bug_when>
    <thetext>Created attachment 415803
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713394</commentid>
    <comment_count>68</comment_count>
      <attachid>415817</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-09 17:44:43 -0800</bug_when>
    <thetext>Created attachment 415817
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713674</commentid>
    <comment_count>69</comment_count>
      <attachid>415914</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-10 12:48:21 -0800</bug_when>
    <thetext>Created attachment 415914
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713763</commentid>
    <comment_count>70</comment_count>
      <attachid>415942</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-10 16:32:17 -0800</bug_when>
    <thetext>Created attachment 415942
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714042</commentid>
    <comment_count>71</comment_count>
      <attachid>416032</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-11 12:34:46 -0800</bug_when>
    <thetext>Created attachment 416032
WIP

Seems to pass the tests now when running LOL instead of baseline and without tier up to DFG.

Now, I need to focus on perf, there&apos;s a lot of obvious work to be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714504</commentid>
    <comment_count>72</comment_count>
      <attachid>416177</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-14 11:20:23 -0800</bug_when>
    <thetext>Created attachment 416177
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714574</commentid>
    <comment_count>73</comment_count>
      <attachid>416193</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-14 14:10:12 -0800</bug_when>
    <thetext>Created attachment 416193
WIP

rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715297</commentid>
    <comment_count>74</comment_count>
      <attachid>416381</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-16 19:12:41 -0800</bug_when>
    <thetext>Created attachment 416381
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715450</commentid>
    <comment_count>75</comment_count>
      <attachid>416438</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-17 11:02:18 -0800</bug_when>
    <thetext>Created attachment 416438
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715636</commentid>
    <comment_count>76</comment_count>
      <attachid>416490</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-17 19:19:34 -0800</bug_when>
    <thetext>Created attachment 416490
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715882</commentid>
    <comment_count>77</comment_count>
      <attachid>416565</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-18 19:18:29 -0800</bug_when>
    <thetext>Created attachment 416565
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716055</commentid>
    <comment_count>78</comment_count>
      <attachid>416616</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-21 12:09:38 -0800</bug_when>
    <thetext>Created attachment 416616
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716128</commentid>
    <comment_count>79</comment_count>
      <attachid>416642</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-12-21 15:55:11 -0800</bug_when>
    <thetext>Created attachment 416642
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717765</commentid>
    <comment_count>80</comment_count>
      <attachid>417123</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-06 13:29:26 -0800</bug_when>
    <thetext>Created attachment 417123
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717775</commentid>
    <comment_count>81</comment_count>
      <attachid>417130</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-06 14:25:41 -0800</bug_when>
    <thetext>Created attachment 417130
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717807</commentid>
    <comment_count>82</comment_count>
      <attachid>417141</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-06 16:42:21 -0800</bug_when>
    <thetext>Created attachment 417141
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718048</commentid>
    <comment_count>83</comment_count>
      <attachid>417201</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-07 12:32:26 -0800</bug_when>
    <thetext>Created attachment 417201
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718765</commentid>
    <comment_count>84</comment_count>
      <attachid>417396</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-11 11:59:27 -0800</bug_when>
    <thetext>Created attachment 417396
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718798</commentid>
    <comment_count>85</comment_count>
      <attachid>417408</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-11 13:26:17 -0800</bug_when>
    <thetext>Created attachment 417408
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718878</commentid>
    <comment_count>86</comment_count>
      <attachid>417424</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-11 18:24:58 -0800</bug_when>
    <thetext>Created attachment 417424
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719092</commentid>
    <comment_count>87</comment_count>
      <attachid>417479</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-12 12:30:04 -0800</bug_when>
    <thetext>Created attachment 417479
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719095</commentid>
    <comment_count>88</comment_count>
      <attachid>417481</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-12 12:44:59 -0800</bug_when>
    <thetext>Created attachment 417481
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719177</commentid>
    <comment_count>89</comment_count>
      <attachid>417498</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-12 16:59:01 -0800</bug_when>
    <thetext>Created attachment 417498
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719469</commentid>
    <comment_count>90</comment_count>
      <attachid>417574</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-13 15:57:38 -0800</bug_when>
    <thetext>Created attachment 417574
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719498</commentid>
    <comment_count>91</comment_count>
      <attachid>417585</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-13 17:17:07 -0800</bug_when>
    <thetext>Created attachment 417585
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719732</commentid>
    <comment_count>92</comment_count>
      <attachid>417662</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-14 15:49:19 -0800</bug_when>
    <thetext>Created attachment 417662
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720096</commentid>
    <comment_count>93</comment_count>
      <attachid>417753</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-15 18:01:32 -0800</bug_when>
    <thetext>Created attachment 417753
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720745</commentid>
    <comment_count>94</comment_count>
      <attachid>417923</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-19 16:26:56 -0800</bug_when>
    <thetext>Created attachment 417923
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720765</commentid>
    <comment_count>95</comment_count>
      <attachid>417927</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-19 17:07:49 -0800</bug_when>
    <thetext>Created attachment 417927
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721007</commentid>
    <comment_count>96</comment_count>
      <attachid>417998</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-20 14:36:53 -0800</bug_when>
    <thetext>Created attachment 417998
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721017</commentid>
    <comment_count>97</comment_count>
      <attachid>418000</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-20 15:02:14 -0800</bug_when>
    <thetext>Created attachment 418000
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721699</commentid>
    <comment_count>98</comment_count>
      <attachid>418175</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-22 13:17:37 -0800</bug_when>
    <thetext>Created attachment 418175
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721798</commentid>
    <comment_count>99</comment_count>
      <attachid>418203</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-22 18:05:52 -0800</bug_when>
    <thetext>Created attachment 418203
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722186</commentid>
    <comment_count>100</comment_count>
      <attachid>418317</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-25 12:09:08 -0800</bug_when>
    <thetext>Created attachment 418317
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724984</commentid>
    <comment_count>101</comment_count>
      <attachid>419094</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-02-02 18:51:30 -0800</bug_when>
    <thetext>Created attachment 419094
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725254</commentid>
    <comment_count>102</comment_count>
      <attachid>419166</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-02-03 11:53:44 -0800</bug_when>
    <thetext>Created attachment 419166
WIP</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387969</attachid>
            <date>2020-01-16 15:26:37 -0800</date>
            <delta_ts>2020-06-23 19:18:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>7181</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25Nb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uTW9k
ZS5jcHAJKHJldmlzaW9uIDI1NDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tcGlsYXRpb25Nb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQ29tCiAgICAgY2FzZSBJbnZhbGlkQ29t
cGlsYXRpb25Nb2RlOgogICAgICAgICBvdXQucHJpbnQoIkludmFsaWRDb21waWxhdGlvbk1vZGUi
KTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTE9MTW9kZToKKyAgICAgICAgb3V0LnByaW50
KCJMT0xNb2RlIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIERGR01vZGU6CiAgICAgICAg
IG91dC5wcmludCgiREZHTW9kZSIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25Nb2RlLmgJKHJldmlzaW9uIDI1NDUx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25Nb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiBlbnVtIENvbXBpbGF0aW9uTW9kZSB7CiAgICAgSW52YWxpZENvbXBpbGF0aW9uTW9k
ZSwKKyAgICBMT0xNb2RlLAogICAgIERGR01vZGUsCiAgICAgRlRMTW9kZSwKICAgICBGVExGb3JP
U1JFbnRyeU1vZGUKQEAgLTQyLDcgKzQzLDkgQEAgaW5saW5lIGJvb2wgaXNGVEwoQ29tcGlsYXRp
b25Nb2RlIG1vZGUpCiAgICAgY2FzZSBGVExNb2RlOgogICAgIGNhc2UgRlRMRm9yT1NSRW50cnlN
b2RlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgorICAgIGNhc2UgSW52YWxp
ZENvbXBpbGF0aW9uTW9kZToKKyAgICBjYXNlIERGR01vZGU6CisgICAgY2FzZSBMT0xNb2RlOgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDggQEAgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uS2luZCBwcm9maWxlckNvbXBpbAogICAgIGNhc2UgSW52YWxpZENv
bXBpbGF0aW9uTW9kZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIFByb2ZpbGVyOjpERkc7CisgICAgY2FzZSBMT0xNb2RlOgorICAgICAgICBy
ZXR1cm4gUHJvZmlsZXI6OkxPTDsKICAgICBjYXNlIERGR01vZGU6CiAgICAgICAgIHJldHVybiBQ
cm9maWxlcjo6REZHOwogICAgIGNhc2UgRlRMTW9kZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDI1NDUxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjksNiArNjksOCBAQCBlbnVtIEdlbmVyYXRlZE9wZXJhbmRUeXBlIHsgR2VuZXJhdGVk
T3BlCiAvLyB0byBwcm9wYWdhdGUgdHlwZSBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIGluZm9ybWF0
aW9uIHRoYXQgaGFzCiAvLyBvbmx5IHNwZWN1bGF0aXZlbHkgYmVlbiBhc3NlcnRlZCkgdGhyb3Vn
aCB0aGUgZGF0YWZsb3cuCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihT
cGVjdWxhdGl2ZUpJVCk7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBBYnN0cmFjdEludGVycHJldGVy
VHlwZT4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RF9XSVRIX0hFQVBfSURFTlRJRklFUihTcGVjdWxhdGl2ZUpJVCk7CiAgICAgZnJpZW5kIHN0cnVj
dCBPU1JFeGl0OwpAQCAtMTczOSw3ICsxNzQxLDcgQEAgcHVibGljOgogICAgIE5vZGVPcmlnaW4g
bV9vcmlnaW47CiAgICAgCiAgICAgSW5QbGFjZUFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKLSAgICBB
YnN0cmFjdEludGVycHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOwor
ICAgIEFic3RyYWN0SW50ZXJwcmV0ZXJUeXBlIG1faW50ZXJwcmV0ZXI7CiAgICAgCiAgICAgVmFy
aWFibGVFdmVudFN0cmVhbSogbV9zdHJlYW07CiAgICAgTWluaWZpZWRHcmFwaCogbV9taW5pZmll
ZEdyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJ
KHJldmlzaW9uIDI1NDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzYsNyArNTM2LDkgQEAgdW5zaWduZWQgV29ya2xp
c3Q6OnNldE51bWJlck9mVGhyZWFkcyh1bgogICAgIHJldHVybiBjdXJyZW50TnVtYmVyT2ZUaHJl
YWRzOwogfQogCitzdGF0aWMgV29ya2xpc3QqIHRoZUdsb2JhbExPTFdvcmtsaXN0Owogc3RhdGlj
IFdvcmtsaXN0KiB0aGVHbG9iYWxERkdXb3JrbGlzdDsKK3N0YXRpYyBXb3JrbGlzdCogdGhlR2xv
YmFsRlRMV29ya2xpc3Q7CiBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlclRocmVh
ZHM7CiBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZGVExDb21waWxlclRocmVhZHM7CiAKQEAgLTU2
NCw2ICs1NjYsMjMgQEAgdW5zaWduZWQgc2V0TnVtYmVyT2ZGVExDb21waWxlclRocmVhZHModQog
ICAgIHJldHVybiBwcmV2aW91c051bWJlck9mVGhyZWFkczsKIH0KIAorV29ya2xpc3QmIGVuc3Vy
ZUdsb2JhbExPTFdvcmtsaXN0KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlh
bGl6ZUdsb2JhbFdvcmtsaXN0T25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6
ZUdsb2JhbFdvcmtsaXN0T25jZUZsYWcsIFtdIHsKKyAgICAgICAgLy8gT09QUy4gbnVtIHRocmVh
ZHMKKyAgICAgICAgV29ya2xpc3QqIHdvcmtsaXN0ID0gJldvcmtsaXN0OjpjcmVhdGUoIkxPTCIs
IDMsIE9wdGlvbnM6OnByaW9yaXR5RGVsdGFPZkRGR0NvbXBpbGVyVGhyZWFkcygpKS5sZWFrUmVm
KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHRoZUdsb2JhbExP
TFdvcmtsaXN0ID0gd29ya2xpc3Q7CisgICAgfSk7CisgICAgcmV0dXJuICp0aGVHbG9iYWxMT0xX
b3JrbGlzdDsKK30KKworV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsTE9MV29ya2xpc3RPck51bGwo
KQoreworICAgIHJldHVybiB0aGVHbG9iYWxMT0xXb3JrbGlzdDsKK30KKwogV29ya2xpc3QmIGVu
c3VyZUdsb2JhbERGR1dvcmtsaXN0KCkKIHsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5p
dGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZUZsYWc7CkBAIC01ODAsOCArNTk5LDYgQEAgV29ya2xp
c3QqIGV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bAogICAgIHJldHVybiB0aGVHbG9iYWxE
RkdXb3JrbGlzdDsKIH0KIAotc3RhdGljIFdvcmtsaXN0KiB0aGVHbG9iYWxGVExXb3JrbGlzdDsK
LQogV29ya2xpc3QmIGVuc3VyZUdsb2JhbEZUTFdvcmtsaXN0KCkKIHsKICAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZUZsYWc7CkBAIC02MDQsNiAr
NjIxLDggQEAgV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0Rm9yKENvbXBpbAogICAgIGNh
c2UgSW52YWxpZENvbXBpbGF0aW9uTW9kZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7CisgICAg
Y2FzZSBMT0xNb2RlOgorICAgICAgICByZXR1cm4gZW5zdXJlR2xvYmFsTE9MV29ya2xpc3QoKTsK
ICAgICBjYXNlIERGR01vZGU6CiAgICAgICAgIHJldHVybiBlbnN1cmVHbG9iYWxERkdXb3JrbGlz
dCgpOwogICAgIGNhc2UgRlRMTW9kZToKQEAgLTYxNCwxNCArNjMzLDE2IEBAIFdvcmtsaXN0JiBl
bnN1cmVHbG9iYWxXb3JrbGlzdEZvcihDb21waWwKICAgICByZXR1cm4gZW5zdXJlR2xvYmFsREZH
V29ya2xpc3QoKTsKIH0KIAotdW5zaWduZWQgbnVtYmVyT2ZXb3JrbGlzdHMoKSB7IHJldHVybiAy
OyB9Cit1bnNpZ25lZCBudW1iZXJPZldvcmtsaXN0cygpIHsgcmV0dXJuIDM7IH0KIAogV29ya2xp
c3QmIGVuc3VyZVdvcmtsaXN0Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCiB7CiAgICAgc3dpdGNo
IChpbmRleCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dv
cmtsaXN0KCk7CisgICAgICAgIHJldHVybiBlbnN1cmVHbG9iYWxMT0xXb3JrbGlzdCgpOwogICAg
IGNhc2UgMToKKyAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7CisgICAg
Y2FzZSAyOgogICAgICAgICByZXR1cm4gZW5zdXJlR2xvYmFsRlRMV29ya2xpc3QoKTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNjMzLDgg
KzY1NCwxMCBAQCBXb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsCiB7CiAg
ICAgc3dpdGNoIChpbmRleCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgcmV0dXJuIGV4aXN0aW5n
R2xvYmFsREZHV29ya2xpc3RPck51bGwoKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nR2xvYmFs
TE9MV29ya2xpc3RPck51bGwoKTsKICAgICBjYXNlIDE6CisgICAgICAgIHJldHVybiBleGlzdGlu
Z0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCk7CisgICAgY2FzZSAyOgogICAgICAgICByZXR1cm4g
ZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyNTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsMTAg
QEAgcHJpdmF0ZToKIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIHNldE51bWJlck9mREZHQ29t
cGlsZXJUaHJlYWRzKHVuc2lnbmVkKTsKIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIHNldE51
bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzKHVuc2lnbmVkKTsKIAorLy8gRm9yIExPTE1vZGUgY29t
cGlsYXRpb25zLgorSlNfRVhQT1JUX1BSSVZBVEUgV29ya2xpc3QmIGVuc3VyZUdsb2JhbExPTFdv
cmtsaXN0KCk7CitKU19FWFBPUlRfUFJJVkFURSBXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxMT0xX
b3JrbGlzdE9yTnVsbCgpOworCiAvLyBGb3IgREZHTW9kZSBjb21waWxhdGlvbnMuCiBKU19FWFBP
UlRfUFJJVkFURSBXb3JrbGlzdCYgZW5zdXJlR2xvYmFsREZHV29ya2xpc3QoKTsKIEpTX0VYUE9S
VF9QUklWQVRFIFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbktp
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlckNvbXBpbGF0aW9uS2luZC5jcHAJKHJldmlzaW9uIDI1NDUxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uS2luZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYgKzM5LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEpTQwogICAgIGNhc2UgSlNDOjpQcm9maWxlcjo6QmFzZWxpbmU6CiAgICAgICAgIG91dC5w
cmludCgiQmFzZWxpbmUiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpQcm9maWxl
cjo6TE9MOgorICAgICAgICBvdXQucHJpbnQoIkxPTCIpOworICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBKU0M6OlByb2ZpbGVyOjpERkc6CiAgICAgICAgIG91dC5wcmludCgiREZHIik7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckNvbXBpbGF0aW9uS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uS2luZC5oCShyZXZpc2lvbiAyNTQ1MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFByb2ZpbGVyIHsKIGVudW0gQ29tcGlsYXRpb25LaW5kIHsKICAgICBMTEludCwKICAgICBCYXNl
bGluZSwKKyAgICBMT0wsCiAgICAgREZHLAogICAgIEZUTCwKICAgICBGVExGb3JPU1JFbnRyeQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402617</attachid>
            <date>2020-06-23 19:18:46 -0700</date>
            <delta_ts>2020-06-24 17:53:16 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>10886</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxO
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNs
dWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAj
aW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgpAQCAt
NjAsNiArNjAsMjgwIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90
YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2
b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNv
bnN0IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+JiBwcm9maWxlcykKK3sK
KyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZXMpOworCisgICAgYXV0byBzZXRSZXN1bHQgPSBbJl0g
KGF1dG8mIGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVu
dE9wZXJhbmRzLm9wZXJhbmQoYnl0ZWNvZGUubV9kc3QpID0gdHlwZTsKKyAgICB9OworCisgICAg
YXV0byBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQgPSBbJl0gKGF1dG8mIGJ5dGVjb2RlKSB7CisgICAg
ICAgIHNldFJlc3VsdChieXRlY29kZSwgcHJvZmlsZXMuZ2V0KCZieXRlY29kZS5wcm9maWxlKSk7
CisgICAgfTsKKworICAgIGF1dG8gbWVyZ2VSZXN1bHQgPSBbJl0gKGF1dG8mIGJ5dGVjb2RlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudE9wZXJhbmRzLm9wZXJhbmQo
Ynl0ZWNvZGUubV9kc3QpID0gbWVyZ2VTcGVjdWxhdGlvbihtX2N1cnJlbnRPcGVyYW5kcy5vcGVy
YW5kKGJ5dGVjb2RlLm1fZHN0KSwgdHlwZSk7CisgICAgfTsKKworICAgIHN3aXRjaCAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAg
c2V0VmFsdWVQcm9maWxlUmVzdWx0KGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAg
c2V0VmFsdWVQcm9maWxlUmVzdWx0KGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsK
KyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0Ogor
ICAgICAgICAvLyBPT1BTCisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Zh
cmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0VmFsdWVQcm9maWxlUmVzdWx0KGluc3Ry
dWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1
Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9tdWw6CisgICAgY2FzZSBv
cF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoK
KyAgICBjYXNlIG9wX2NhbGw6CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAg
ICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50czoKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6Cisg
ICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBj
YXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgY2FzZSBvcF9nZXRf
YXJndW1lbnQ6CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgIGNhc2Ugb3BfcHV0
X2J5X2lkOgorICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgY2FzZSBvcF9nZXRfaW50ZXJu
YWxfZmllbGQ6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wcm9maWxl
X2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgIGNhc2Ugb3BfYml0eG9yOgor
ICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OgorICAgIGNhc2Ugb3BfYml0
bm90OgorICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICBjYXNlIG9wX2NyZWF0ZV9n
ZW5lcmF0b3I6CisgICAgY2FzZSBvcF90b190aGlzOgorICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgor
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9uZWdhdGU6Cisg
ICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICBjYXNl
IG9wX2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgIGNhc2Ug
b3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgY2FzZSBvcF9z
dWI6CisgICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF90b19v
YmplY3Q6CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
CisgICAgY2FzZSBvcF9jYXRjaDoKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAg
ICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAg
Y2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nv
cl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNh
c2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251
bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVm
aW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9q
bGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBj
YXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxl
c3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgor
ICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9s
b29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2No
YXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Cisg
ICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6
CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgIGNhc2Ugb3BfbmV3X2Fz
eW5jX2Z1bmM6CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgY2FzZSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9y
X2Z1bmNfZXhwOgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6CisgICAg
Y2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgor
ICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxf
ZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25t
ZW50OgorICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICBjYXNlIG9wX3Rocm93Ogor
ICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAg
Y2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgY2Fz
ZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1
cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgY2Fz
ZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVt
ZXJhdG9yOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgY2Fz
ZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJp
bmc6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0Ogor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgIGNhc2Ugb3BfeWllbGQ6CisgICAgY2Fz
ZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1
ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfcmVz
b2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6CisgICAgY2FzZSBvcF9w
dXRfaW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9z
YW1wbGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfc3VwZXJfc2Ft
cGxlcl9lbmQ6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICBj
YXNlIG9wX2dldF9zY29wZToKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgor
ICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF9jcmVhdGVf
Y2xvbmVkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5
OgorICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgor
ICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAg
Y2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAg
Y2FzZSBvcF9uZXdfcmVnZXhwOgorICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ugb3BfZXE6Cisg
ICAgY2FzZSBvcF9uZXE6CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICBjYXNlIG9wX25zdHJp
Y3RlcToKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgY2FzZSBv
cF9ncmVhdGVyOgorICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfYmVsb3c6Cisg
ICAgY2FzZSBvcF9iZWxvd2VxOgorICAgIGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3BfcG93Ogor
ICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgY2FzZSBvcF9u
ZXFfbnVsbDoKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgor
ICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgY2Fz
ZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAg
Y2FzZSBvcF9pc19udW1iZXI6CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgIGNhc2Ugb3Bf
aXNfb2JqZWN0OgorICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6CisgICAgY2FzZSBvcF9p
c19mdW5jdGlvbjoKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgIGNhc2Ugb3Bfbm90
OgorICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAgIGNhc2Ugb3Bfb3ZlcnJp
ZGVzX2hhc19pbnN0YW5jZToKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9p
bnN0YW5jZW9mX2N1c3RvbToKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lzX2Nl
bGxfd2l0aF90eXBlOgorICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
aWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBv
cF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFs
OgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdh
dGlvbigpCit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPiht
X2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rp
b25zQXRIZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0
aW9uc0F0SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIFNwZWNOb25l
KTsKKworICAgIEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+IHByZWRpY3Rp
b25zOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJs
b2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShb
Jl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJlZGljdGlv
bnMuYWRkKCZwcm9maWxlLCBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQo
MCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlu
ZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAg
ICBkYXRhTG9nTG4oKTsKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAg
ICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJn
dW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
ID0gcHJlZGljdGlvbnMuZ2V0KCZwcm9maWxlKTsKKworICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1w
U3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3Vt
ZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAg
ICAgICAgICBtX2N1cnJlbnRPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQo
aSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rl
cE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24sIHByZWRpY3Rpb25zKTsKKyAgICAg
ICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oYmxvY2sp
OworICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC0xNzYsNiArNDUwLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiB7CisgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklU
SW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2Rl
QmxvY2ssICJcbiIpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAyNjM0MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGVudW0gT3Bjb2RlSUQg
OiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xh
c3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29k
ZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTkyMiw2ICs5MjMsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3Bh
Z2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihJbnN0cnVjdGlvbios
IGNvbnN0IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+Jik7CisKICAgICAg
ICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29s
IGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05ODcsNiArOTkxLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAg
ICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4
IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGU+IG1fY3VycmVudE9wZXJhbmRzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402702</attachid>
            <date>2020-06-24 17:53:16 -0700</date>
            <delta_ts>2020-06-25 14:25:56 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>12216</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxO
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNs
dWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAj
aW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgpAQCAt
NjAsNiArNjAsMzEyIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90
YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2
b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIGNvbnN0IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+JiBwcm9maWxl
cykKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZXMpOworCisgICAgYXV0byBzZXRSZXN1bHQg
PSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9j
dXJyZW50T3BlcmFuZHMub3BlcmFuZChieXRlY29kZS5tX2RzdCkgPSB0eXBlOworICAgIH07CisK
KyAgICBhdXRvIHNldFZhbHVlUHJvZmlsZVJlc3VsdCA9IFsmXSAoYXV0byBieXRlY29kZSkgewor
ICAgICAgICBzZXRSZXN1bHQoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgIH07CisKKyAgICBhdXRvIG1lcmdlUmVz
dWx0ID0gWyZdIChhdXRvIGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAg
IG1fY3VycmVudE9wZXJhbmRzLm9wZXJhbmQoYnl0ZWNvZGUubV9kc3QpID0gbWVyZ2VTcGVjdWxh
dGlvbihtX2N1cnJlbnRPcGVyYW5kcy5vcGVyYW5kKGJ5dGVjb2RlLm1fZHN0KSwgdHlwZSk7Cisg
ICAgfTsKKyAgICBVTlVTRURfUEFSQU0obWVyZ2VSZXN1bHQpOyAvLyBPT1BTCisKKyAgICBhdXRv
IHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlw
ZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50T3BlcmFuZHMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ug
b3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Nv
bnN0cnVjdF92YXJhcmdzOgorICAgICAgICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2l0
ZXJhdG9yX29wZW46CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OgorICAgICAgICAvLyBPT1BT
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2Fz
ZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVf
bmFtZToKKyAgICAgICAgc2V0VmFsdWVQcm9maWxlUmVzdWx0KGluc3RydWN0aW9uLT5hczxPcEdl
dFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5
X2lkOgorICAgICAgICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5
R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgIGJyZWFrOworICAgICAg
ICAvL2F1dG8mIGJ5dGVjb2RlID0gCisgICAgfQorCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1
dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50
MzJTcGVjdWxhdGlvbih0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKSkgJiYgaXNJbnQzMlNwZWN1bGF0
aW9uKHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpKSAmJiAhcHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIm9wX2FkZCBpcyBnZW5lcmF0aW5n
IGludDMyIHNwZWN1bGF0aW9uISIpOworICAgICAgICAgICAgc2V0UmVzdWx0KGJ5dGVjb2RlLCBT
cGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
c2V0UmVzdWx0KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgY2FzZSBvcF9u
ZXdfYXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfY2FsbDoKKyAgICBjYXNlIG9wX2hhc19pbmRl
eGVkX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgIGNhc2Ug
b3BfbmV3X29iamVjdDoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNh
c2Ugb3BfZGl2OgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICBjYXNlIG9wX2dldF9h
cmd1bWVudDoKKyAgICBjYXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgY2FzZSBvcF9wdXRf
YnlfaWQ6CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5h
bF9maWVsZDoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVf
Y29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfYml0b3I6CisgICAgY2FzZSBvcF9iaXR4b3I6Cisg
ICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6CisgICAgY2FzZSBvcF9iaXRu
b3Q6CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgIGNhc2Ugb3BfY3JlYXRlX2dl
bmVyYXRvcjoKKyAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAgY2FzZSBvcF9pbl9ieV92YWw6Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX25lZ2F0ZToKKyAg
ICBjYXNlIG9wX2JpdGFuZDoKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICBjYXNlIG9wX3N1
YjoKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX3RvX29i
amVjdDoKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToK
KyAgICBjYXNlIG9wX2NhdGNoOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAg
IGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAg
IGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBj
YXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29y
X3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2Fz
ZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVs
bDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZp
bmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6Cisg
ICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2ps
ZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNh
c2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVz
c2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Cisg
ICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xv
b3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hh
cjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAg
ICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoK
KyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgY2FzZSBvcF9uZXdfYXN5
bmNfZnVuYzoKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICBjYXNlIG9wX25l
d19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuY19leHA6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3Jl
dDoKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKKyAgICBj
YXNlIG9wX3RvX3Byb3BlcnR5X2tleToKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6Cisg
ICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1l
bnQ6CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgIGNhc2Ugb3BfdGhyb3c6Cisg
ICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBj
YXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICBjYXNl
IG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBjYXNl
IG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3I6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNl
IG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmlu
ZzoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6Cisg
ICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgY2FzZSBvcF95aWVsZDoKKyAgICBjYXNl
IG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3Vl
OgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9yZXNv
bHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICBjYXNlIG9wX3B1
dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3Nh
bXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1w
bGVyX2VuZDoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIG9wX2VudGVyOgorICAgIGNh
c2Ugb3BfZ2V0X3Njb3BlOgorICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6Cisg
ICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX2NyZWF0ZV9j
bG9uZWRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6Cisg
ICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBj
YXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICBj
YXNlIG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9tb3Y6CisgICAgICAgIHNldFJlc3VsdChp
bnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92Pigp
Lm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBj
YXNlIG9wX2xlc3M6CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgY2FzZSBvcF9ncmVhdGVyOgor
ICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgY2FzZSBvcF9i
ZWxvd2VxOgorICAgIGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3BfcG93OgorICAgIGNhc2Ugb3Bf
dXJzaGlmdDoKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgIGNhc2Ugb3Bf
aXNfZW1wdHk6CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgY2FzZSBvcF9pc191bmRl
ZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19u
dW1iZXI6CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgIGNhc2Ugb3BfaXNfb2JqZWN0Ogor
ICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6CisgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoK
KyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgIGNhc2Ugb3Bfbm90OgorICAgIGNhc2Ug
b3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZToKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1
c3RvbToKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlz
OgorICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3Ro
aXM6CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVy
X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7Cisg
ICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywg
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJl
c2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVk
aWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtp
XSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIFNwZWNOb25lKTsKKworICAgIEhh
c2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+IHByZWRpY3Rpb25zOworCisgICAg
eworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2sp
OworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJv
ZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJlZGljdGlvbnMuYWRkKCZwcm9m
aWxlLCBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpKTsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJs
b2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7
CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBkYXRhTG9nTG4o
KTsKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsK
KyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJlZGljdGlv
bnMuZ2V0KCZwcm9maWxlKTsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAg
ZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24o
V1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOwor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNo
YW5nZWQ7CisgICAgZG8geworICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAo
Qnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1
cnJlbnRPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAg
ICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2Nr
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90
YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJ
bnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24sIHByZWRpY3Rpb25zKTsKKyAgICAgICAgICAg
ICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29y
IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGU+JiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vz
c29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudE9w
ZXJhbmRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
U3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudE9wZXJhbmRzW2ldKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworfQorCiB2
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtMTc2LDYgKzQ4Miw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogeworICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOwor
CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxp
bmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBl
bnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwog
ICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC05
MjIsNiArOTIzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blBy
ZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBIYXNoTWFwPFZhbHVlUHJvZmlsZSosIFNwZWN1bGF0
ZWRUeXBlPiYpOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwog
ICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAt
OTg3LDYgKzk5MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIFZlY3Rv
cjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAg
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJlbnRPcGVyYW5kczsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402811</attachid>
            <date>2020-06-25 14:25:56 -0700</date>
            <delta_ts>2020-06-25 17:34:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>15678</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxO
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgog
I2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgpAQCAtNjAs
NiArNjIsMzk5IEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxG
VExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lk
IEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IGNvbnN0IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+JiBwcm9maWxlcykK
K3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZXMpOworCisgICAgYXV0byBzZXRSZXN1bHQgPSBb
Jl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9jdXJy
ZW50T3BlcmFuZHMub3BlcmFuZChieXRlY29kZS5tX2RzdCkgPSB0eXBlOworICAgIH07CisKKyAg
ICBhdXRvIHNldFZhbHVlUHJvZmlsZVJlc3VsdCA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAg
ICAgICAvL3NldFJlc3VsdChieXRlY29kZSwgcHJvZmlsZXMuZ2V0KCZieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9wcm9maWxlKSk7CisgICAgICAgIC8vIFdlIHJhY2lseSByZWFkIHRo
aXMsIHNpbmNlIGl0IHNob3VsZCBvbmx5IGdyb3cgaW4gdGhlIHR5cGVzIGl0IHJlcHJlc2VudHMu
CisgICAgICAgIHNldFJlc3VsdChieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIG1lcmdlUmVz
dWx0ID0gWyZdIChhdXRvIGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAg
IG1fY3VycmVudE9wZXJhbmRzLm9wZXJhbmQoYnl0ZWNvZGUubV9kc3QpID0gbWVyZ2VTcGVjdWxh
dGlvbihtX2N1cnJlbnRPcGVyYW5kcy5vcGVyYW5kKGJ5dGVjb2RlLm1fZHN0KSwgdHlwZSk7Cisg
ICAgfTsKKyAgICBVTlVTRURfUEFSQU0obWVyZ2VSZXN1bHQpOyAvLyBPT1BTCisKKyAgICBhdXRv
IHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlw
ZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50T3BlcmFuZHMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ug
b3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QXJndW1lbnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Nh
bGxfZXZhbDoKKyAgICAgICAgc2V0VmFsdWVQcm9maWxlUmVzdWx0KGluc3RydWN0aW9uLT5hczxP
cENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAg
ICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXRWYWx1ZVBy
b2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBzZXRWYWx1ZVBy
b2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXRWYWx1
ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldFZhbHVlUHJvZmls
ZVJlc3VsdChpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rp
b24tPmFzPE9wQml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6
CisgICAgICAgIHNldFZhbHVlUHJvZmlsZVJlc3VsdChpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0VmFs
dWVQcm9maWxlUmVzdWx0KGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0VmFsdWVQcm9m
aWxlUmVzdWx0KGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXRWYWx1ZVByb2ZpbGVS
ZXN1bHQoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldFZhbHVlUHJvZmlsZVJlc3Vs
dChpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldFZhbHVlUHJvZmlsZVJlc3VsdChpbnN0
cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2l0ZXJhdG9yX29wZW46CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OgorICAgICAgICAvLyBP
T1BTCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxf
Y2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAg
ICAgICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5h
bWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAg
ICAgIHNldFZhbHVlUHJvZmlsZVJlc3VsdChpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAg
ICBzZXRWYWx1ZVByb2ZpbGVSZXN1bHQoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAg
ICAgICAgc2V0VmFsdWVQcm9maWxlUmVzdWx0KGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFs
RmllbGQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAg
ICAgc2V0VmFsdWVQcm9maWxlUmVzdWx0KGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAg
IHNldFZhbHVlUHJvZmlsZVJlc3VsdChpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93Ogor
ICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgYXV0byYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpKSAmJiBpc0ludDMyU3Bl
Y3VsYXRpb24odHlwZUZvcihieXRlY29kZS5tX3JocykpICYmICFwcm9maWxlLmRpZE9ic2VydmVJ
bnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigib3BfYWRkIGlzIGdlbmVy
YXRpbmcgaW50MzIgc3BlY3VsYXRpb24hIik7CisgICAgICAgICAgICBzZXRSZXN1bHQoYnl0ZWNv
ZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXRSZXN1bHQoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfbXVsOiB7CisgICAgICAgICBicmVhazsKKyAgICAgICAgLy9hdXRvJiBieXRlY29kZSA9IAor
ICAgIH0KKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAg
ICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRv
IGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJP
ckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxh
dGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYnl0ZWNvZGUsIFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHNldFZhbHVlUHJvZmlsZVJlc3VsdChieXRlY29kZSk7CisgICAgICAgIH07CisgICAg
ICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAg
ICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fdGhpczoKKyAgICAgICAgLy9PT1BTCisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9uZWdhdGU6CisgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAg
IHNldFJlc3VsdChpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgc3Bl
Y3VsYXRpb25Gcm9tQ2xhc3NJbmZvSW5oZXJpdGFuY2UoSlNBc3luY0dlbmVyYXRvcjo6aW5mbygp
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAg
ICAgc2V0UmVzdWx0KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgc3BlY3Vs
YXRpb25Gcm9tQ2xhc3NJbmZvSW5oZXJpdGFuY2UoSlNHZW5lcmF0b3I6OmluZm8oKSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0UmVzdWx0KGlu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldFJlc3VsdChpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXRSZXN1bHQoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0UmVz
dWx0KGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNldFJl
c3VsdChpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklY
TUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdl
IHdhbnQKKyAgICAgICAgc2V0UmVzdWx0KGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4o
KSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6
CisgICAgICAgIHNldFJlc3VsdChpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVj
RmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAg
ICAgICAgc2V0UmVzdWx0KGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAg
c2V0UmVzdWx0KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNl
T2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3N1YjoKKyAgICBjYXNlIG9w
X2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICBjYXNl
IG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX2Nh
dGNoOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdG9fbnVt
ZXJpYzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3Bfam5lcV9w
dHI6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9k
YXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAg
IGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6Cisg
ICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9w
X2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6Cisg
ICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVx
OgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ug
b3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJl
cToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVs
b3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBj
YXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9w
X3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19m
dW5jX2V4cDoKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICBj
YXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0
b3JfZnVuYzoKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAg
Y2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9w
X3N0cmNhdDoKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX3RvX3Byb3Bl
cnR5X2tleToKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXNo
X3dpdGhfc2NvcGU6CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF9nZXRfcGFyZW50X3Njb3BlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJv
d19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAg
ICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAg
ICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2hhc19nZW5lcmlj
X3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2Fz
ZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jf
Z2VuZXJpY19wbmFtZToKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICBjYXNlIG9w
X3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgY2FzZSBvcF9nZXRf
cmVzdF9sZW5ndGg6CisgICAgY2FzZSBvcF95aWVsZDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBz
OgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9o
b2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVs
ZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46Cisg
ICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBj
YXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIG9wX2VudGVyOgorICAgIGNhc2Ugb3BfZ2V0X3Njb3Bl
OgorICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF9jcmVh
dGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRz
OgorICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgY2FzZSBvcF9hcmd1
bWVudF9jb3VudDoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX25ld19hcnJh
eV93aXRoX3NwcmVhZDoKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICBjYXNlIG9wX25ld19yZWdl
eHA6CisgICAgY2FzZSBvcF9tb3Y6CisgICAgICAgIHNldFJlc3VsdChpbnN0cnVjdGlvbi0+YXM8
T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgY2FzZSBvcF9uZXE6CisgICAgY2FzZSBv
cF9zdHJpY3RlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9wX2xlc3M6Cisg
ICAgY2FzZSBvcF9sZXNzZXE6CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgIGNhc2Ugb3BfZ3Jl
YXRlcmVxOgorICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgIGNh
c2Ugb3BfbW9kOgorICAgIGNhc2Ugb3BfcG93OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBj
YXNlIG9wX2VxX251bGw6CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICBjYXNlIG9wX3RvX3N0
cmluZzoKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAg
Y2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgY2Fz
ZSBvcF9pc19iaWdfaW50OgorICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgIGNhc2Ugb3BfaXNf
b2JqZWN0X29yX251bGw6CisgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgIGNhc2Ugb3Bfbm90OgorICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOgorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICBjYXNl
IG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICBjYXNl
IG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgIGNhc2Ugb3Bf
aW5fYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3Bf
ZGVsX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBv
cF9kZWxfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoK
KyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwor
dm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAgbV9ncmFwaCA9IFdU
Rjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6ZShtX2dyYXBoLT5z
aXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0aW9uc0F0SGVhZC5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIFNwZWNOb25lKTsKKworICAgIEhhc2hNYXA8VmFsdWVQcm9m
aWxlKiwgU3BlY3VsYXRlZFR5cGU+IHByZWRpY3Rpb25zOworCisgICAgeworICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2Nv
ZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwg
Ym9vbCkgeworICAgICAgICAgICAgcHJlZGljdGlvbnMuYWRkKCZwcm9maWxlLCBwcm9maWxlLmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBkYXRhTG9nTG4oKTsKKyAgICBmb3IgKHNp
emVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBt
X2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVk
aWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJlZGljdGlvbnMuZ2V0KCZwcm9maWxl
KTsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwg
YXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgp
LCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0
YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8g
eworICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Js
b2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRPcGVyYW5kcyA9
IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAgIGlmICgh
YmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNl
dCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHByZWRpY3Rpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNj
ZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudE9wZXJhbmRzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3Vj
Y2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudE9wZXJhbmRzW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtMTc2LDYgKzU3MSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogeworICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJs
b2NrLCAiXG4iKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBlbnVtIE9wY29kZUlEIDog
dW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNz
IEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVC
bG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC05MjIsNiArOTIzLDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdh
dGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBjb25zdCBIYXNoTWFwPFZhbHVlUHJvZmlsZSosIFNwZWN1bGF0ZWRUeXBlPiYpOworCiAg
ICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTg3LDYgKzk5MSwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVk
OwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlPiBtX2N1cnJlbnRPcGVyYW5kczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402832</attachid>
            <date>2020-06-25 17:34:33 -0700</date>
            <delta_ts>2020-06-26 12:40:15 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>23425</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxO
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgog
I2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgpAQCAtNjAs
NiArNjIsNTgzIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxG
VExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lk
IEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IGNvbnN0IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+JiBwcm9maWxlcykK
K3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZXMpOworCisgICAgYXV0byBzZXRUeXBlID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1f
Y3VycmVudE9wZXJhbmRzLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8g
c2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0
byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAg
ICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0
aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRz
LgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gbWVyZ2VS
ZXN1bHQgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAg
ICAgbV9jdXJyZW50T3BlcmFuZHMub3BlcmFuZChieXRlY29kZS5tX2RzdCkgPSBtZXJnZVNwZWN1
bGF0aW9uKG1fY3VycmVudE9wZXJhbmRzLm9wZXJhbmQoYnl0ZWNvZGUubV9kc3QpLCB0eXBlKTsK
KyAgICB9OworICAgIFVOVVNFRF9QQVJBTShtZXJnZVJlc3VsdCk7IC8vIE9PUFMKKworICAgIGF1
dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRU
eXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5k
KSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRPcGVyYW5kcy5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2Fz
ZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
YWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxW
YXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJn
czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWxf
d2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0eG9y
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9y
X25leHQ6CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX21v
djoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3Io
aW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2Nh
bGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50
cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoK
KyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBj
YXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2Vu
ZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAg
Y2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhy
b3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6Cisg
ICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNl
IG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6
CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVx
X3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3Bf
amZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6Cisg
ICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9v
cl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNh
c2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoK
KyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9w
X2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToK
KyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hp
bnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6Cisg
ICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6
CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xf
ZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoK
KyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgor
ICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1
dF9nZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAg
ICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChp
c0ludDMyU3BlY3VsYXRpb24odHlwZUZvcihieXRlY29kZS5tX2xocykpICYmIGlzSW50MzJTcGVj
dWxhdGlvbih0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKSkgJiYgIXByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJh
dGluZyBpbnQzMiBzcGVjdWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IG9wX211bDogeworICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vYXV0byYgYnl0ZWNvZGUgPSAK
KyAgICB9CisKKyAgICBjYXNlIG9wX3N1YjoKKyAgICAgICAgLy8gT09QUworICAgICAgICBicmVh
azsKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJv
b2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07Cisg
ICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAg
ICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAg
YXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICh0eXBlICYg
U3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgbWVyZ2VTcGVj
dWxhdGlvbnModHlwZSAmIH5TcGVjT2JqZWN0LCBTcGVjUHJpbWl0aXZlKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+
KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAg
ICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b190aGlzOgorICAgICAg
ICAvL09PUFMKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgIGNh
c2Ugb3BfbW9kOgorICAgIGNhc2Ugb3BfcG93OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBj
YXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZToKKyAgICAg
ICAgLy8gT09QUworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY2F0Y2g6CisgICAgICAg
IC8vIE9PUFMKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQorICAg
ICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVyKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJh
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNG
aW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToK
KyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNv
bHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlW
YWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
c3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVu
Yz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVu
Y19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJh
dG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwg
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2Vu
ZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVu
dF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRT
Y29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVBy
b3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5f
c3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNw
ZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVy
ZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVjU3Ry
aW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRleF9z
dHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmlu
Zz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jlc3Rf
bGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5n
dGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2
YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigp
LCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9k
aXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVjU2Nv
cGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVk
X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVD
bG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9i
amVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRv
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVy
YXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Jl
Z2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0
cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVz
czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09i
amVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29i
amVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2Jq
ZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNGdW5j
dGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Nv
bnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3Ry
dWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9u
dWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
ZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9w
UHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9i
b3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgc3BlY3VsYXRpb24p
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3Rh
bmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0lu
c3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5z
dGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2Vv
Zl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
ZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5
cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNw
ZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRo
X3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5
cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9p
ZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7
CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9j
aywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFk
LnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
cmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVh
ZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIFNwZWNOb25lKTsKKworICAg
IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+IHByZWRpY3Rpb25zOworCisg
ICAgeworICAgICAgICAvLyBPT1BTOiBkbyBpdCBmb3IgY2F0Y2ggcHJvZmlsZXMgdG9vCisgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAg
ICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBw
cm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcmVkaWN0aW9ucy5hZGQoJnByb2ZpbGUsIHBy
b2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcikpOworICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAg
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAgIGRhdGFMb2dMbigpOworICAg
IGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJv
ZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAg
ICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcmVkaWN0aW9ucy5nZXQo
JnByb2ZpbGUpOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9n
KCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRh
dGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAg
ICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hhbmdlZDsK
KyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJz
ZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdl
IHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEg
c2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9u
IHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRj
aCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAg
ICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYg
YmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50T3BlcmFuZHMgPSBtX3By
ZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2Nr
LmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSku
cHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudElu
c3RydWN0aW9uLCBwcmVkaWN0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMo
KSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29y
T3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRPcGVyYW5kcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nv
ck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRPcGVyYW5kc1tpXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbCgKQEAgLTE3Niw2ICs3NTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkK
IHsKKyAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5h
bDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywg
IlxuIik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2MzQz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDYgKzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7
CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtOTIyLDYgKzkyMyw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBm
YWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24o
KTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKiwg
Y29uc3QgSGFzaE1hcDxWYWx1ZVByb2ZpbGUqLCBTcGVjdWxhdGVkVHlwZT4mKTsKKwogICAgICAg
ICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Y29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTk4Nyw2ICs5OTEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAg
ICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxC
eXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4gbV9jdXJyZW50T3BlcmFuZHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402886</attachid>
            <date>2020-06-26 12:40:15 -0700</date>
            <delta_ts>2020-06-26 16:39:48 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>31905</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkJ5dGVjb2RlRHVtcGVyLmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgpAQCAtMzksNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJX
YXNtU2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRp
b25BbmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBv
cCkKQEAgLTIxMSw4ICsyMTQsOCBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6ZHVtCiAgICAgfQogfQogCi10ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2Nr
Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wQmxvY2soQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0
YXR1c01hcCYgc3RhdHVzTWFwKQordGVtcGxhdGUgPHR5cGVuYW1lIEJsb2NrPgorc3RhdGljIHZv
aWQgZHVtcEhlYWRlcihCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvbnMsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291
bnQgPSAwOwogICAgIHNpemVfdCB3aWRlMTZJbnN0cnVjdGlvbkNvdW50ID0gMDsKQEAgLTI0MSwy
MCArMjQ0LDg0IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KICAg
ICAgICAgYmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYmxvY2stPm51bUNhbGxlZUxvY2FscygpLCBi
bG9jay0+bnVtVmFycygpKTsKICAgICBvdXQucHJpbnQoIjsgc2NvcGUgYXQgIiwgYmxvY2stPnNj
b3BlUmVnaXN0ZXIoKSk7CiAgICAgb3V0LnByaW50ZigiXG4iKTsKK30KIAotICAgIENvZGVCbG9j
a0J5dGVjb2RlRHVtcGVyPEJsb2NrPiBkdW1wZXIoYmxvY2ssIG91dCk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBpdCA6IGluc3RydWN0aW9ucykKLSAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShp
dCwgc3RhdHVzTWFwKTsKLQordGVtcGxhdGUgPHR5cGVuYW1lIER1bXBlcj4KK3N0YXRpYyB2b2lk
IGR1bXBGb290ZXIoRHVtcGVyJiBkdW1wZXIpCit7CiAgICAgZHVtcGVyLmR1bXBJZGVudGlmaWVy
cygpOwogICAgIGR1bXBlci5kdW1wQ29uc3RhbnRzKCk7CiAgICAgZHVtcGVyLmR1bXBFeGNlcHRp
b25IYW5kbGVycygpOwogICAgIGR1bXBlci5kdW1wU3dpdGNoSnVtcFRhYmxlcygpOwogICAgIGR1
bXBlci5kdW1wU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBC
bG9jaz4KK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wQmxvY2soQmxv
Y2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQoreworICAgIGR1bXBIZWFk
ZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKKworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPiBkdW1wZXIoYmxvY2ssIG91dCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IGluc3RydWN0aW9ucykKKyAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShpdCwgc3RhdHVzTWFw
KTsKKworICAgIGR1bXBGb290ZXIoZHVtcGVyKTsKKworICAgIG91dC5wcmludGYoIlxuIik7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIEJsb2NrPgordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxC
bG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3sKKyAgICBkdW1wSGVhZGVyKGJsb2Nr
LCBpbnN0cnVjdGlvbnMsIG91dCk7CisKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9j
az4gZHVtcGVyKGJsb2NrLCBvdXQpOworCisgICAgb3V0LnByaW50ZigiXG4iKTsKKworICAgIGZv
ciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6IGdyYXBoKSB7CisgICAgICAgIGlmIChibG9j
ay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsK
KworICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9j
ay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAg
ICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGlj
dGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBT
cGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAg
ICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKTsKKyAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudElu
c3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CisgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVj
dGlvbi5wdHIoKS0+c2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgb3V0LnByaW50KCJTdWNj
ZXNzb3JzOiBbIik7CisgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICBpZiAoIWdyYXBoW3N1Y2Nlc3Nvcl0uaXNFeGl0Qmxv
Y2soKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgc3VjY2Vzc29yKTsKKyAgICAg
ICAgfQorICAgICAgICBvdXQucHJpbnQoIiBdXG5cbiIpOworICAgIH0KKworICAgIGR1bXBGb290
ZXIoZHVtcGVyKTsKIAogICAgIG91dC5wcmludGYoIlxuIik7CiB9CiAKKwogdGVtcGxhdGUgY2xh
c3MgQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjsKIHRlbXBsYXRlIGNsYXNzIENvZGVCbG9ja0J5
dGVjb2RlRHVtcGVyPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPjsKIHRlbXBsYXRlIGNsYXNz
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNDMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEJ5dGVjb2RlR3JhcGg7CisKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIAogY2xhc3MgQnl0ZWNvZGVE
dW1wZXJCYXNlIHsKQEAgLTEwNCw2ICsxMDYsMTMgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uc0F0SGVhZCA9IFdURjo6bnVs
bG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7CisKKyAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOworICAg
IHZvaWQgZHVtcENvbnN0YW50cygpOworICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKCk7
CisgICAgdm9pZCBkdW1wU3dpdGNoSnVtcFRhYmxlcygpOworICAgIHZvaWQgZHVtcFN0cmluZ1N3
aXRjaEp1bXBUYWJsZXMoKTsKIAogcHJpdmF0ZToKICAgICB1c2luZyBCeXRlY29kZUR1bXBlcjxC
bG9jaz46OkJ5dGVjb2RlRHVtcGVyOwpAQCAtMTExLDEyICsxMjAsNiBAQCBwcml2YXRlOgogICAg
IEFMV0FZU19JTkxJTkUgVk0mIHZtKCkgY29uc3Q7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKGludCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2b2lkIGR1bXBJZGVudGlmaWVycygp
OwotICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRs
ZXJzKCk7Ci0gICAgdm9pZCBkdW1wU3dpdGNoSnVtcFRhYmxlcygpOwotICAgIHZvaWQgZHVtcFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsKIH07CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJ
KHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVE
dW1wZXIuaCIKICNpbmNsdWRlIDx3dGYvSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC05
OSw2ICsxMDAsMTMgQEAgcHVibGljOgogICAgIEJ5dGVjb2RlQmFzaWNCbG9jayYgZmlyc3QoKSB7
IHJldHVybiBhdCgwKTsgfQogICAgIEJ5dGVjb2RlQmFzaWNCbG9jayYgbGFzdCgpIHsgcmV0dXJu
IGF0KHNpemUoKSAtIDEpOyB9CiAKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBX
VEY6OmRhdGFGaWxlKCkpCisgICAgeworICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxD
b2RlQmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywg
c3BlY3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBCYXNp
Y0Jsb2Nrc1ZlY3RvciBtX2Jhc2ljQmxvY2tzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTEx
LDYgKzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVk
aWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29k
ZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZh
bHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjYzNDMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1
ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwg
ZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJl
RGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVj
a2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2Zp
bGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlz
aW9uIDI2MzQzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2Zp
bGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVk
aWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkg
dGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3Vs
YXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJP
ZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVC
bG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1
ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRl
ICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgpAQCAtNjAsNiArNjIs
NTg5IEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdD
b21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6
c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0
IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+JiBwcm9maWxlcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocHJvZmlsZXMpOworCisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVu
dE9wZXJhbmRzLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0
VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAv
L3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBz
aW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gbWVyZ2VSZXN1bHQg
PSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9j
dXJyZW50T3BlcmFuZHMub3BlcmFuZChieXRlY29kZS5tX2RzdCkgPSBtZXJnZVNwZWN1bGF0aW9u
KG1fY3VycmVudE9wZXJhbmRzLm9wZXJhbmQoYnl0ZWNvZGUubV9kc3QpLCB0eXBlKTsKKyAgICB9
OworICAgIFVOVVNFRF9QQVJBTShtZXJnZVJlc3VsdCk7IC8vIE9PUFMKKworICAgIGF1dG8gdHlw
ZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsK
KyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7Cisg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRPcGVyYW5kcy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07
CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9n
ZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
YWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxs
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdz
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZh
cmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90
aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRv
cjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Qml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6
CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX21vdjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1
Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBj
YXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9w
X3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAg
ICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBv
cF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3Rh
dGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2Fz
ZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1
dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAg
Y2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoK
KyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNl
OgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2Fz
ZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxs
OgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bf
am5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBj
YXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVh
dGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBj
YXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bf
amJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6Cisg
ICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoK
KyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBj
YXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNh
c2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6Cisg
ICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBhdXRv
JiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24odHlwZUZvcihieXRlY29kZS5tX2xocykpICYmIGlzSW50MzJTcGVjdWxhdGlv
bih0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKSkgJiYgIXByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3Zl
cmZsb3coKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBp
bnQzMiBzcGVjdWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX211
bDogeworICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vYXV0byYgYnl0ZWNvZGUgPSAKKyAgICB9
CisKKyAgICBjYXNlIG9wX3N1YjoKKyAgICAgICAgLy8gT09QUworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5T
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAg
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBo
YW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0
eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICh0eXBlICYgU3BlY09i
amVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgbWVyZ2VTcGVjdWxhdGlv
bnModHlwZSAmIH5TcGVjT2JqZWN0LCBTcGVjUHJpbWl0aXZlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Cisg
ICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAo
ISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b190aGlzOgorICAgICAgICAvL09P
UFMKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgIGNhc2Ugb3Bf
bW9kOgorICAgIGNhc2Ugb3BfcG93OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBjYXNlIG9w
X2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZToKKyAgICAgICAgLy8g
T09QUworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY2F0Y2g6CisgICAgICAgIC8vIE9P
UFMKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1W
YXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVj
QXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3By
ZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNw
cmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJ
bmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0
dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9u
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGlj
YWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9z
dHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVt
ZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5
RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1l
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmlj
UG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9p
c3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1l
bnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50
czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1
bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJm
bHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19w
cm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+
KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNz
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2Vx
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3RPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0
cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlw
ZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRU
eXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5
X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5
dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgU3BlY05vbmUpOworCisgICAgSGFzaE1hcDxWYWx1ZVByb2ZpbGUqLCBTcGVjdWxhdGVk
VHlwZT4gcHJlZGljdGlvbnM7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNo
VmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAg
ICAgICBwcmVkaWN0aW9ucy5hZGQoJnByb2ZpbGUsIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcikpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVh
Y2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHBy
b2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCku
aXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4
KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBk
YXRhTG9nTG4oKTsKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJlZGljdGlvbnMuZ2V0KCZwcm9maWxlKTsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3Bl
Y3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50
KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBE
RlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIg
aW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgor
ICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQg
YXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBP
T1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYg
d2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRl
Y29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVu
dE9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAg
ICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkg
eworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExl
bmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChpICsgYmxvY2su
bGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3Ry
dWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbiwgcHJlZGljdGlvbnMpOworICAgICAgICAgICAgICAg
ICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBi
bG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3Jd
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50T3BlcmFu
ZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVj
dWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50T3BlcmFuZHNbaV0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtMTc2LDYgKzc2MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWMKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIHJ1blBy
ZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjYzNDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBj
bGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAg
ICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBG
dW5jdGlvbkV4ZWN1dGFibGU7CkBAIC05MjIsNiArOTIzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5k
aWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2
b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBIYXNoTWFw
PFZhbHVlUHJvZmlsZSosIFNwZWN1bGF0ZWRUeXBlPiYpOworCiAgICAgICAgIHN0YXRpYyBib29s
IHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGls
ZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTg3LDYgKzk5MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+
IG1fZ3JhcGg7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJl
ZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJl
bnRPcGVyYW5kczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402928</attachid>
            <date>2020-06-26 16:39:48 -0700</date>
            <delta_ts>2020-06-26 16:44:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>40544</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkJ5dGVjb2RlRHVtcGVyLmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgpAQCAtMzksNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJX
YXNtU2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRp
b25BbmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBv
cCkKQEAgLTIxMSw4ICsyMTQsOCBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6ZHVtCiAgICAgfQogfQogCi10ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2Nr
Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wQmxvY2soQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0
YXR1c01hcCYgc3RhdHVzTWFwKQordGVtcGxhdGUgPHR5cGVuYW1lIEJsb2NrPgorc3RhdGljIHZv
aWQgZHVtcEhlYWRlcihCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvbnMsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291
bnQgPSAwOwogICAgIHNpemVfdCB3aWRlMTZJbnN0cnVjdGlvbkNvdW50ID0gMDsKQEAgLTI0MSwy
MCArMjQ0LDg0IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KICAg
ICAgICAgYmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYmxvY2stPm51bUNhbGxlZUxvY2FscygpLCBi
bG9jay0+bnVtVmFycygpKTsKICAgICBvdXQucHJpbnQoIjsgc2NvcGUgYXQgIiwgYmxvY2stPnNj
b3BlUmVnaXN0ZXIoKSk7CiAgICAgb3V0LnByaW50ZigiXG4iKTsKK30KIAotICAgIENvZGVCbG9j
a0J5dGVjb2RlRHVtcGVyPEJsb2NrPiBkdW1wZXIoYmxvY2ssIG91dCk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBpdCA6IGluc3RydWN0aW9ucykKLSAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShp
dCwgc3RhdHVzTWFwKTsKLQordGVtcGxhdGUgPHR5cGVuYW1lIER1bXBlcj4KK3N0YXRpYyB2b2lk
IGR1bXBGb290ZXIoRHVtcGVyJiBkdW1wZXIpCit7CiAgICAgZHVtcGVyLmR1bXBJZGVudGlmaWVy
cygpOwogICAgIGR1bXBlci5kdW1wQ29uc3RhbnRzKCk7CiAgICAgZHVtcGVyLmR1bXBFeGNlcHRp
b25IYW5kbGVycygpOwogICAgIGR1bXBlci5kdW1wU3dpdGNoSnVtcFRhYmxlcygpOwogICAgIGR1
bXBlci5kdW1wU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBC
bG9jaz4KK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wQmxvY2soQmxv
Y2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQoreworICAgIGR1bXBIZWFk
ZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKKworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPiBkdW1wZXIoYmxvY2ssIG91dCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IGluc3RydWN0aW9ucykKKyAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShpdCwgc3RhdHVzTWFw
KTsKKworICAgIGR1bXBGb290ZXIoZHVtcGVyKTsKKworICAgIG91dC5wcmludGYoIlxuIik7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIEJsb2NrPgordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxC
bG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3sKKyAgICBkdW1wSGVhZGVyKGJsb2Nr
LCBpbnN0cnVjdGlvbnMsIG91dCk7CisKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9j
az4gZHVtcGVyKGJsb2NrLCBvdXQpOworCisgICAgb3V0LnByaW50ZigiXG4iKTsKKworICAgIGZv
ciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6IGdyYXBoKSB7CisgICAgICAgIGlmIChibG9j
ay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsK
KworICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9j
ay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAg
ICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGlj
dGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBT
cGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAg
ICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKTsKKyAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudElu
c3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CisgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVj
dGlvbi5wdHIoKS0+c2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgb3V0LnByaW50KCJTdWNj
ZXNzb3JzOiBbIik7CisgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICBpZiAoIWdyYXBoW3N1Y2Nlc3Nvcl0uaXNFeGl0Qmxv
Y2soKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgc3VjY2Vzc29yKTsKKyAgICAg
ICAgfQorICAgICAgICBvdXQucHJpbnQoIiBdXG5cbiIpOworICAgIH0KKworICAgIGR1bXBGb290
ZXIoZHVtcGVyKTsKIAogICAgIG91dC5wcmludGYoIlxuIik7CiB9CiAKKwogdGVtcGxhdGUgY2xh
c3MgQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjsKIHRlbXBsYXRlIGNsYXNzIENvZGVCbG9ja0J5
dGVjb2RlRHVtcGVyPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPjsKIHRlbXBsYXRlIGNsYXNz
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNDMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEJ5dGVjb2RlR3JhcGg7CisKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIAogY2xhc3MgQnl0ZWNvZGVE
dW1wZXJCYXNlIHsKQEAgLTEwNCw2ICsxMDYsMTMgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uc0F0SGVhZCA9IFdURjo6bnVs
bG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7CisKKyAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOworICAg
IHZvaWQgZHVtcENvbnN0YW50cygpOworICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKCk7
CisgICAgdm9pZCBkdW1wU3dpdGNoSnVtcFRhYmxlcygpOworICAgIHZvaWQgZHVtcFN0cmluZ1N3
aXRjaEp1bXBUYWJsZXMoKTsKIAogcHJpdmF0ZToKICAgICB1c2luZyBCeXRlY29kZUR1bXBlcjxC
bG9jaz46OkJ5dGVjb2RlRHVtcGVyOwpAQCAtMTExLDEyICsxMjAsNiBAQCBwcml2YXRlOgogICAg
IEFMV0FZU19JTkxJTkUgVk0mIHZtKCkgY29uc3Q7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKGludCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2b2lkIGR1bXBJZGVudGlmaWVycygp
OwotICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRs
ZXJzKCk7Ci0gICAgdm9pZCBkdW1wU3dpdGNoSnVtcFRhYmxlcygpOwotICAgIHZvaWQgZHVtcFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsKIH07CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJ
KHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVE
dW1wZXIuaCIKICNpbmNsdWRlIDx3dGYvSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC05
OSw2ICsxMDAsMTMgQEAgcHVibGljOgogICAgIEJ5dGVjb2RlQmFzaWNCbG9jayYgZmlyc3QoKSB7
IHJldHVybiBhdCgwKTsgfQogICAgIEJ5dGVjb2RlQmFzaWNCbG9jayYgbGFzdCgpIHsgcmV0dXJu
IGF0KHNpemUoKSAtIDEpOyB9CiAKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBX
VEY6OmRhdGFGaWxlKCkpCisgICAgeworICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxD
b2RlQmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywg
c3BlY3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBCYXNp
Y0Jsb2Nrc1ZlY3RvciBtX2Jhc2ljQmxvY2tzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTEx
LDYgKzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVk
aWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29k
ZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZh
bHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjYzNDMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1
ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwg
ZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJl
RGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVj
a2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2Zp
bGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShy
ZXZpc2lvbiAyNjM0MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9v
bCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFs
dWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYg
ISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdElu
dDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVl
ICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRo
ZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBp
c24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjYzNDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwx
MSBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5o
IgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgpAQCAtNjAsNiArNjIsNzkzIEBAIFNlY29uZHMgdG90YWxG
VExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMg
dG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEhhc2hNYXA8VmFsdWVQcm9maWxl
KiwgU3BlY3VsYXRlZFR5cGU+JiBwcm9maWxlcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZmls
ZXMpOworCisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVj
dWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudE9wZXJhbmRzLm9wZXJhbmQocmVn
KSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRl
Y29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
ZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUs
IHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkp
OworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBn
cm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRPcGVyYW5k
cy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JpdHhvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9i
aXRub3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEJpdG5vdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVj
dFBuYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1
Y3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JP
cGVuPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5t
X2l0ZXJhdG9yUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fbmV4dCwgbWV0YWRhdGEubV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1
ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9tb3Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0
eXBlRm9yKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFs
RmllbGQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2Jq
ZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21B
cmd1bWVudHM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVt
ZXJpYz4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlm
ICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYg
cHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gdHlwZSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHR5cGUgfD0gU3BlY0J5
dGVjb2RlRG91YmxlOworICAgICAgICAgICAgLy9kYXRhTG9nTG4oIm9wX2FkZCBpcyBnZW5lcmF0
aW5nIGludDMyIHNwZWN1bGF0aW9uISIpOworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVj
RG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4p
IHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgIHJlc3Vs
dCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRklYTUUgLi4uIEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1
bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyAuLi4gTWF5YmUgd2UgY2FuIGRv
IGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsK
KyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsK
KworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0J5dGVjb2Rl
RG91YmxlOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cisg
ICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5h
TkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUUgQ2FuIHByb2JhYmx5IGRvIGJldHRlciB3
LyBiaWdpbnQzMi4uLgorICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkg
JiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9zdWIpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3ViPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcE11bD4o
KSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdikK
KyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgLy8g
TWF5YmUgd2UgY2FuIGRvIGJldHRlciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9uICUgMAorICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSB8IFNwZWNEb3VibGVQdXJl
TmFOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgICAgICAv
LyBNYXliZSBidWlsZCBpbiBzb21lIGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRiYWNrIGZvciBzcGVj
dWxhdGluZyBpbnQzMiByZXN1bHQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BVbnNpZ25lZD4oKSwgU3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfbmVn
YXRlOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBlRm9yKHNyYyk7CisgICAgICAgICAgICBp
ZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNBbnlJbnRB
c0RvdWJsZTsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91
YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJl
TmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAg
ICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmln
SW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVj
b2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNE
c3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0
ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4o
KTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xo
cyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jo
cyk7CisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
QmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0
ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9w
X3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgewor
ICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAg
ICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBp
ZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxO
dW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShi
eXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNo
aWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5h
czxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9f
cHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BU
b1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3Ny
Yyk7CisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgbWVyZ2VTcGVjdWxhdGlvbnModHlwZSAmIH5TcGVjT2JqZWN0LCBTcGVj
UHJpbWl0aXZlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3Io
Ynl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3Bl
Y1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAg
ICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIp
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJl
IHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1
dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8v
IFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJh
Y3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAg
ICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7
CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVy
OgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5
YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3Bl
Y09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFs
T2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVj
U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rp
b24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5
bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1
bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fz
eW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhw
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0
aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNj
b3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3Ro
ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3Ro
PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3Ry
dWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhh
c1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmlj
X3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVy
aWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3Bl
Y1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3Rpbmdf
ZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9w
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigp
LCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1l
bnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3Ro
ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2Nv
dW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+
KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxs
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3Rl
cToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVm
aW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
VW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
c19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3RPck51bGw+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BU
b1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRo
UHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNf
Y2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRp
Y19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90
aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2Zp
ZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoK
KyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19j
aGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6Cisg
ICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNh
c2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBv
cF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9w
X3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAg
Y2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nv
cl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAg
IGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVs
bDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVs
bDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6Cisg
ICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5z
dHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBj
YXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pu
bGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAg
IGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9q
YmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06
CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToK
KyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90
eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAg
ICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lk
OgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJy
ZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQorewor
ICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ss
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5y
ZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJl
ZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRb
aV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBTcGVjTm9uZSk7CisKKyAgICBI
YXNoTWFwPFZhbHVlUHJvZmlsZSosIFNwZWN1bGF0ZWRUeXBlPiBwcmVkaWN0aW9uczsKKworICAg
IHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVBy
b2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZCgmcHJv
ZmlsZSwgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKSk7CisgICAgICAg
IH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsm
XSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAg
ICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
JiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhw
ciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAgIGRhdGFMb2dMbigpOworICAgIGZvciAoc2l6
ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1f
Y29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRp
Y3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcmVkaWN0aW9ucy5nZXQoJnByb2ZpbGUp
OworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBh
cmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCks
IG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7
CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9y
ZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNl
IGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERG
UyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlu
cHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVk
IGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAq
bV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50T3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25z
QXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlC
bG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9u
LCBwcmVkaWN0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAg
ICAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMg
PSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRPcGVyYW5kcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRz
W2ldLCBtX2N1cnJlbnRPcGVyYW5kc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZv
aWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC0xNzYsNiArOTY1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisK
ICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGlu
ZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAyNjM0MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGVu
dW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2Zp
bGU7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAg
ICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTky
Miw2ICs5MjMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihj
b25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRl
ZFR5cGU+Jik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05
ODcsNiArOTkxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRp
bWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAg
ICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgVmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudE9wZXJhbmRzOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402930</attachid>
            <date>2020-06-26 16:44:07 -0700</date>
            <delta_ts>2020-06-29 19:19:20 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>40640</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkJ5dGVjb2RlRHVtcGVyLmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgpAQCAtMzksNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJX
YXNtU2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRp
b25BbmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBv
cCkKQEAgLTIxMSw4ICsyMTQsOCBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6ZHVtCiAgICAgfQogfQogCi10ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2Nr
Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wQmxvY2soQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0
YXR1c01hcCYgc3RhdHVzTWFwKQordGVtcGxhdGUgPHR5cGVuYW1lIEJsb2NrPgorc3RhdGljIHZv
aWQgZHVtcEhlYWRlcihCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvbnMsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291
bnQgPSAwOwogICAgIHNpemVfdCB3aWRlMTZJbnN0cnVjdGlvbkNvdW50ID0gMDsKQEAgLTI0MSwy
MCArMjQ0LDg0IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KICAg
ICAgICAgYmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYmxvY2stPm51bUNhbGxlZUxvY2FscygpLCBi
bG9jay0+bnVtVmFycygpKTsKICAgICBvdXQucHJpbnQoIjsgc2NvcGUgYXQgIiwgYmxvY2stPnNj
b3BlUmVnaXN0ZXIoKSk7CiAgICAgb3V0LnByaW50ZigiXG4iKTsKK30KIAotICAgIENvZGVCbG9j
a0J5dGVjb2RlRHVtcGVyPEJsb2NrPiBkdW1wZXIoYmxvY2ssIG91dCk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBpdCA6IGluc3RydWN0aW9ucykKLSAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShp
dCwgc3RhdHVzTWFwKTsKLQordGVtcGxhdGUgPHR5cGVuYW1lIER1bXBlcj4KK3N0YXRpYyB2b2lk
IGR1bXBGb290ZXIoRHVtcGVyJiBkdW1wZXIpCit7CiAgICAgZHVtcGVyLmR1bXBJZGVudGlmaWVy
cygpOwogICAgIGR1bXBlci5kdW1wQ29uc3RhbnRzKCk7CiAgICAgZHVtcGVyLmR1bXBFeGNlcHRp
b25IYW5kbGVycygpOwogICAgIGR1bXBlci5kdW1wU3dpdGNoSnVtcFRhYmxlcygpOwogICAgIGR1
bXBlci5kdW1wU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBC
bG9jaz4KK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wQmxvY2soQmxv
Y2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQoreworICAgIGR1bXBIZWFk
ZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKKworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPiBkdW1wZXIoYmxvY2ssIG91dCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IGluc3RydWN0aW9ucykKKyAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShpdCwgc3RhdHVzTWFw
KTsKKworICAgIGR1bXBGb290ZXIoZHVtcGVyKTsKKworICAgIG91dC5wcmludGYoIlxuIik7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIEJsb2NrPgordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxC
bG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3sKKyAgICBkdW1wSGVhZGVyKGJsb2Nr
LCBpbnN0cnVjdGlvbnMsIG91dCk7CisKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9j
az4gZHVtcGVyKGJsb2NrLCBvdXQpOworCisgICAgb3V0LnByaW50ZigiXG4iKTsKKworICAgIGZv
ciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6IGdyYXBoKSB7CisgICAgICAgIGlmIChibG9j
ay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsK
KworICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3QgT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9j
ay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAg
ICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGlj
dGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBT
cGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAg
ICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKTsKKyAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudElu
c3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CisgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVj
dGlvbi5wdHIoKS0+c2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgb3V0LnByaW50KCJTdWNj
ZXNzb3JzOiBbIik7CisgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICBpZiAoIWdyYXBoW3N1Y2Nlc3Nvcl0uaXNFeGl0Qmxv
Y2soKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgc3VjY2Vzc29yKTsKKyAgICAg
ICAgfQorICAgICAgICBvdXQucHJpbnQoIiBdXG5cbiIpOworICAgIH0KKworICAgIGR1bXBGb290
ZXIoZHVtcGVyKTsKIAogICAgIG91dC5wcmludGYoIlxuIik7CiB9CiAKKwogdGVtcGxhdGUgY2xh
c3MgQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjsKIHRlbXBsYXRlIGNsYXNzIENvZGVCbG9ja0J5
dGVjb2RlRHVtcGVyPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPjsKIHRlbXBsYXRlIGNsYXNz
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNDMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEJ5dGVjb2RlR3JhcGg7CisKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIAogY2xhc3MgQnl0ZWNvZGVE
dW1wZXJCYXNlIHsKQEAgLTEwNCw2ICsxMDYsMTMgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uc0F0SGVhZCA9IFdURjo6bnVs
bG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7CisKKyAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOworICAg
IHZvaWQgZHVtcENvbnN0YW50cygpOworICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKCk7
CisgICAgdm9pZCBkdW1wU3dpdGNoSnVtcFRhYmxlcygpOworICAgIHZvaWQgZHVtcFN0cmluZ1N3
aXRjaEp1bXBUYWJsZXMoKTsKIAogcHJpdmF0ZToKICAgICB1c2luZyBCeXRlY29kZUR1bXBlcjxC
bG9jaz46OkJ5dGVjb2RlRHVtcGVyOwpAQCAtMTExLDEyICsxMjAsNiBAQCBwcml2YXRlOgogICAg
IEFMV0FZU19JTkxJTkUgVk0mIHZtKCkgY29uc3Q7CiAKICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKGludCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2b2lkIGR1bXBJZGVudGlmaWVycygp
OwotICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwotICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRs
ZXJzKCk7Ci0gICAgdm9pZCBkdW1wU3dpdGNoSnVtcFRhYmxlcygpOwotICAgIHZvaWQgZHVtcFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsKIH07CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJ
KHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVE
dW1wZXIuaCIKICNpbmNsdWRlIDx3dGYvSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC05
OSw2ICsxMDAsMTMgQEAgcHVibGljOgogICAgIEJ5dGVjb2RlQmFzaWNCbG9jayYgZmlyc3QoKSB7
IHJldHVybiBhdCgwKTsgfQogICAgIEJ5dGVjb2RlQmFzaWNCbG9jayYgbGFzdCgpIHsgcmV0dXJu
IGF0KHNpemUoKSAtIDEpOyB9CiAKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBX
VEY6OmRhdGFGaWxlKCkpCisgICAgeworICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxD
b2RlQmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywg
c3BlY3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBCYXNp
Y0Jsb2Nrc1ZlY3RvciBtX2Jhc2ljQmxvY2tzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTEx
LDYgKzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVk
aWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29k
ZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZh
bHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjYzNDMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1
ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwg
ZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJl
RGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVj
a2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2Zp
bGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShy
ZXZpc2lvbiAyNjM0MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9v
bCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFs
dWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYg
ISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdElu
dDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVl
ICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI2MzQzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRo
ZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBp
c24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjYzNDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwx
MSBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5o
IgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgpAQCAtNjAsNiArNjIsODAwIEBAIFNlY29uZHMgdG90YWxG
VExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMg
dG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEhhc2hNYXA8VmFsdWVQcm9maWxl
KiwgU3BlY3VsYXRlZFR5cGU+JiBwcm9maWxlcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvZmls
ZXMpOworCisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVj
dWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudE9wZXJhbmRzLm9wZXJhbmQocmVn
KSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRl
Y29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
ZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUs
IHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkp
OworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBn
cm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRPcGVyYW5k
cy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JpdHhvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9i
aXRub3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEJpdG5vdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVj
dFBuYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1
Y3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JP
cGVuPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5t
X2l0ZXJhdG9yUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fbmV4dCwgbWV0YWRhdGEubV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1
ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9tb3Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0
eXBlRm9yKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFs
RmllbGQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2Jq
ZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21B
cmd1bWVudHM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVt
ZXJpYz4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlm
ICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYg
cHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gdHlwZSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHR5cGUgfD0gU3BlY0J5
dGVjb2RlRG91YmxlOworICAgICAgICAgICAgLy9kYXRhTG9nTG4oIm9wX2FkZCBpcyBnZW5lcmF0
aW5nIGludDMyIHNwZWN1bGF0aW9uISIpOworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVj
RG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4p
IHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgIHJlc3Vs
dCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0
aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRv
IGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsK
KyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsK
KworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0J5dGVjb2Rl
RG91YmxlOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cisg
ICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5h
TkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIg
dy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9u
LT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdo
dCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1h
eWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5h
Tik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2Rl
RG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8g
TWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3Vs
YXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0
ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmly
dHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYg
KCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBT
cGVjSW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjQW55SW50QXNE
b3VibGU7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJs
ZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5h
TjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNw
ZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0lu
dCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29k
ZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9w
Y29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0
LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVj
b2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
cG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7
CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMp
OworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMp
OworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0
aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0lu
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2Rl
RG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hp
ZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAg
ICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAg
YXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEo
bGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBp
ZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVy
T3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNv
ZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0g
b3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4o
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BS
c2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1p
dGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9Qcmlt
aXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOwor
CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0
eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgbWVy
Z2VTcGVjdWxhdGlvbnModHlwZSAmIH5TcGVjT2JqZWN0LCBTcGVjUHJpbWl0aXZlKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5
X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9Qcmlt
aXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOwor
ICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlw
ZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcv
IGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBw
cm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHll
dCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0
aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHBy
b2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1W
YXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVj
QXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3By
ZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNw
cmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJ
bmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0
dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9u
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGlj
YWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9z
dHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVt
ZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5
RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1l
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmlj
UG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9p
c3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1l
bnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50
czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1
bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJm
bHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19w
cm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+
KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNz
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2Vx
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3RPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0
cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlw
ZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRU
eXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5
X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dp
dGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3Bf
Y2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bf
bm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgor
ICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190
cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAg
Y2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNl
IG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1l
OgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0
YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBj
YXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6Cisg
ICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2pu
ZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pu
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0
ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNl
IG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgor
ICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9w
X2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVy
ZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNl
IG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0
Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2Zp
bGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19h
cmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3Zv
aWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6
Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6
ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpLCAwLCBTcGVjTm9uZSk7CisKKyAgICBIYXNoTWFwPFZhbHVlUHJvZmls
ZSosIFNwZWN1bGF0ZWRUeXBlPiBwcmVkaWN0aW9uczsKKworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJv
b2wpIHsKKyAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZCgmcHJvZmlsZSwgcHJvZmlsZS5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKSk7CisgICAgICAgIH0pOworICAgICAgICBtX2Nv
ZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAg
ICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFw
aC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBm
YWxzZTsKKworICAgIGRhdGFMb2dMbigpOworICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8
IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJn
KSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVBy
b2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFy
Z3VtZW50KGFyZykgPSBwcmVkaWN0aW9ucy5nZXQoJnByb2ZpbGUpOworCisgICAgICAgIGlmICh2
ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAg
ICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhl
YWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6
IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBP
T1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRo
bSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBi
eXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/
CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdz
IHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAg
ICAgICAgbV9jdXJyZW50T3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4
KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5p
c0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAg
IHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uLCBwcmVkaWN0aW9ucyk7Cisg
ICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRI
ZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2N1cnJlbnRPcGVyYW5kcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRPcGVy
YW5kc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2Vk
KTsKKworICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoCkBAIC0xNzYsNiArOTcyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2Fz
ZUNhbGwoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiB7CisgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjM0
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw2ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0
ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2Nr
OwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTkyMiw2ICs5MjMsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9u
KCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbios
IGNvbnN0IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+Jik7CisKICAgICAg
ICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29s
IGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05ODcsNiArOTkxLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAg
ICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4
IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGU+IG1fY3VycmVudE9wZXJhbmRzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403159</attachid>
            <date>2020-06-29 19:19:20 -0700</date>
            <delta_ts>2020-07-01 21:01:36 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>47837</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAg
ICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSAr
IGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUo
Y3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNz
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJs
b2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
PSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0g
V1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAg
ICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYs
IEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+
Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBX
VEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAg
ICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAg
Z2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMs
IHRoaXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2Rl
QmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1
c01hcCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBo
KHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01h
cCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0
dXNNYXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAg
U3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmls
ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0
b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFs
bG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9y
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tJbmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1
IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAg
IGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAg
fSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZv
ckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3Rv
ciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7
CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJv
ZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1
bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQog
CitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUg
dmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91
YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRU
eXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25s
eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3Qg
VmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRl
cyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlz
IGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgog
ICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
dGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAog
I2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUu
aCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAg
LTYwLDYgKzYyLDgwMCBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRv
dGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAor
dm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBjb25zdCBIYXNoTWFwPFZhbHVlUHJvZmlsZSosIFNwZWN1bGF0ZWRUeXBlPiYgcHJvZmls
ZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVzKTsKKworICAgIGF1dG8gc2V0VHlwZSA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAg
ICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisKKyAg
ICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKwor
ICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUp
IHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5
IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVw
cmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRv
IHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlw
ZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsK
KyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNh
c2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxs
VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFy
Z3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFs
X3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4b3I6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhv
cj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUu
bV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNl
dFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1f
bmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
ZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+
YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgor
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9w
cml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUgPSBTcGVj
SW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZs
b3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVjdWxhdGlv
biEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAg
ICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNE
b3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVO
YU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmln
SW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
QmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmlu
Z09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwg
U3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2Ogor
ICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxl
ID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICgh
KGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisK
KyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMy
T25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNBbnlJ
bnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wg
bWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9k
aXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxl
ZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikp
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAg
ICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJ
bnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAg
ICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAg
ICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAo
aW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxlKGlu
c3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVy
IGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUg
a2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50
MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlm
dD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6
CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBo
YW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVu
YXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBp
bnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsKKyAgICAg
ICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
ICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihp
bnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOwor
ICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAg
c2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0
KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShk
c3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2Rl
Lm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUp
OworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykg
eworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsK
KyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3Qs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAg
ICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVm
dCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKwor
ICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9v
bGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQz
Mk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAg
ICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAg
ICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBh
dXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25zKHR5cGUg
JiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBh
dXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0eXBlKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVm
ZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZmZXI7Cisg
ICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91
bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBp
ZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGluZy4KKyAg
ICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTog
dGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAgICB9Cisg
ICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFuZCwgcHJv
ZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQorICAgICAg
ICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5h
bE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAg
ICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZl
ZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BS
ZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJv
bWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNl
PigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3Ry
Y2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJh
dG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19l
eHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwg
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9y
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9z
Y29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3Bl
cnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3Ry
dWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
U3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWND
ZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5n
IHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJp
bmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4o
KSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVu
Z3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+
KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVf
c2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+
KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Nj
b3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJl
Y3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVk
QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2Fy
Z3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9u
ZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVj
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRv
cj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
U3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4
cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmlj
dGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BH
cmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9i
ZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVj
dD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVj
dF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0
T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
ZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBv
cF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNl
IG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1
cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBj
YXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFk
b3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91
bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGlj
X2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBv
cF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9z
ZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2Fz
ZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAg
ICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgor
ICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBv
cF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgor
ICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5l
cToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNl
IG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVy
ZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNl
IG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJl
bG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBv
cF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2Fz
ZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAg
ICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ug
b3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAg
Y2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJf
YnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2Rl
R3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1f
cHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBt
X3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwg
U3BlY05vbmUpOworCisgICAgSGFzaE1hcDxWYWx1ZVByb2ZpbGUqLCBTcGVjdWxhdGVkVHlwZT4g
cHJlZGljdGlvbnM7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQ
cm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBw
cmVkaWN0aW9ucy5hZGQoJnByb2ZpbGUsIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlcikpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBkYXRhTG9n
TG4oKTsKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVBy
b2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJn
KTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJlZGlj
dGlvbnMuZ2V0KCZwcm9maWxlKTsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAg
ICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRp
b24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykp
OworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29s
IGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1h
eWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0
IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAgICAg
ICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRl
cGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BTOiBI
b3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8g
REZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJh
c2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFByZWRp
Y3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAgICAg
ICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0
aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVh
ZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbiwgcHJlZGljdGlvbnMpOworICAgICAgICAgICAgICAgICAg
ICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9j
ay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlv
bnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVj
dWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBt
X2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1f
cHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
YWxsKApAQCAtNzYsNiArODcyLDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAg
bV91c2VMT0wgPSB0cnVlOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTc2LDYgKzk3Myw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogeworICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOwor
CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxp
bmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTEwNTgsNiArMTg1NywxNjAgQEAg
U2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogICAgIHJldHVybiB0b3RhbEJhc2VsaW5l
Q29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsK
IH0KIAordm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIC8vIE9PUFMhCisgICAg
Ym9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgYnJlYWtwb2ludCgpOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVt
cHMuYXBwZW5kKEp1bXBMaXN0IHsganVtcCB9KTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBh
bGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdo
ZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNv
bXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5p
Z2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0u
Li4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5
TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShv
bmNlS2V5LCBbXSB7CisgICAgICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgICAgIFJlZ2lz
dGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAg
ICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgIGlm
ICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29u
dGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgICAgICB9
CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoYWxsb3dlZCk7CisgICAgfSk7CisgICAgcmV0dXJu
IHJlc3VsdC5nZXQoKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBt
X3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdWYWx1
ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6c2V0VW5ib3hl
ZEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2dwcl0uaXNBbGxvY2F0ZWQpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIHJlZ0Zvck9wZXJhbmQob3BlcmFuZCkgPSBn
cHI7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SW50MzI7CisgICAg
bV9yZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OmxvY2so
UmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAg
UkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9j
a0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVn
VmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAg
IC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBq
aXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6Omdwcigp
Cit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dw
cjsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgYXV0
byYgcmVnVmFsdWUgPSBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl07CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUubG9ja0NvdW50ID09IDEpOworICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9
OyAvLyBXZSB3ZXJlIGEgdGVtcCwgbm9ib2R5IHNob3VsZCBiZSByZXVzaW5nIHRoaXMgaW4gYW55
IHdheS4KK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQo
b3BlcmFuZCkKK3sKKyAgICBSZWcgcmVnID0gbV9qaXQucmVnRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6
OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBSZWcgcmVn
ID0gbV9qaXQucmVnRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgJiYgcmVnLmlz
R1BSKCkpCisgICAgICAgIG1fZ3ByID0gcmVnLmdwcigpOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dw
cik7CisKKyAgICBhdXRvJiByZWdWYWx1ZSA9IG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXTsKKyAg
ICBpZiAoaXNKU0ludDMyKHJlZ1ZhbHVlLmZvcm1hdCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIShtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiB+U3BlY0ludDMyT25seSkpOworICAg
ICAgICByZXR1cm4gbV9ncHI7CisgICAgfQorCisgICAgaWYgKHJlZ1ZhbHVlLmZvcm1hdCA9PSBE
YXRhRm9ybWF0SlMpIHsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0ludDMyT25seSkKKyAg
ICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMy
KG1fZ3ByKSk7CisgICAgICAgIG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmPSBTcGVjSW50
MzJPbmx5OworICAgICAgICByZWdWYWx1ZS5mb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnQzMjsKKyAg
ICAgICAgcmV0dXJuIG1fZ3ByOworICAgIH0KKworICAgIC8vIE9PUFM6IEFueSBvdGhlciBjYXNl
cyB3ZSBjYXJlIGFib3V0PworICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5qdW1w
KCkpOworICAgIHJldHVybiBtX2dwcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAy
NjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAu
aCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC01Myw2ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87
CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAg
LTE4Myw2ICsxODUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQg
SklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0lu
dGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMTk0LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAg
ICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2lu
dGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zm
c2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90
IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2Vt
YmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBt
YXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJs
aWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAg
IH5KSVQoKTsKQEAgLTI2Myw2ICsyNjEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICAvL0NhbGwgY2FsbChQdHJUYWcgdGFnKQorICAgICAg
ICAvL3sKKyAgICAgICAgLy8gICAgYXV0byByZXN1bHQgPSBCYXNlOjpjYWxsKHRhZyk7CisgICAg
ICAgIC8vICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIC8vfQorCisgICAgICAgIHZvaWQgc3Bp
bGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNw
aWxsRm9yQ2FsbEltcGwoKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBj
b2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxs
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsK
QEAgLTc4Niw2ICs3OTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CisgICAg
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJh
dGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAg
fQpAQCAtNzk1LDYgKzgwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBl
Pjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVy
OjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBB
cmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJu
VHlwZShvcGVyYXRpb24pOwogICAgICAgICB9CkBAIC04MTMsNiArODI2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBG
dW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5U
eXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0
VHlwZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZT46
OnZhbHVlLCAiV2luNjQgY2Fubm90IHVzZSBzdGFuZGFyZCBjYWxsIHdoZW4gcmV0dXJuIHR5cGUg
aXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4iKTsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9w
ZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTkyMiw2ICs5MzYsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7
IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7Cisg
ICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiosIGNvbnN0
IEhhc2hNYXA8VmFsdWVQcm9maWxlKiwgU3BlY3VsYXRlZFR5cGU+Jik7CisKICAgICAgICAgc3Rh
dGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1
dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzIsNiArOTQ5LDQ1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAg
Y2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklU
Jik7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQ
UlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3Bl
cmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMg
YXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dl
ZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWcmIHJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb25zdGFudFRvUmVnW29wZXJhbmQudG9Db25zdGFu
dEluZGV4KCldOworICAgICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBo
ZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKCk7
CisgICAgICAgIHZvaWQgc2V0VW5ib3hlZEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsK
KyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisKICAg
ICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxS
ZWNvcmQ+IG1fY2FsbHM7CkBAIC05ODcsNiArMTA0MywyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1f
Z3JhcGg7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJlZGlj
dGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJlbnRQ
cmVkaWN0aW9uczsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fcHJvdmVuVHlw
ZXM7CisgICAgICAgIE9wZXJhbmRzPFJlZz4gbV9vcGVyYW5kVG9SZWc7CisgICAgICAgIFZlY3Rv
cjxSZWc+IG1fY29uc3RhbnRUb1JlZzsKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIERhdGFGb3Jt
YXQgZm9ybWF0IHsgRGF0YUZvcm1hdE5vbmUgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0Nv
dW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisgICAg
ICAgIH07CisgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiBtX3JlZ2lzdGVyczsKKyAgICAg
ICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9l
eGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDggQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAg
ICAgbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykK
ICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlv
bigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9m
ZnNldF0sIHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403342</attachid>
            <date>2020-07-01 21:01:36 -0700</date>
            <delta_ts>2020-07-08 15:35:27 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>60324</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAg
ICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSAr
IGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUo
Y3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNz
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJs
b2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
PSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0g
V1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAg
ICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYs
IEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+
Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBX
VEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAg
ICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAg
Z2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMs
IHRoaXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2Rl
QmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1
c01hcCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBo
KHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01h
cCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0
dXNNYXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAg
U3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmls
ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0
b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFs
bG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9y
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tJbmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1
IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAg
IGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAg
fSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZv
ckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3Rv
ciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7
CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJv
ZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1
bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQog
CitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUg
dmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91
YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRU
eXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25s
eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3Qg
VmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRl
cyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlz
IGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgog
ICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
dGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAog
I2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUu
aCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAg
LTYwLDYgKzYyLDc5OSBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRv
dGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAor
dm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5k
KHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8g
Ynl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29k
ZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVj
b2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2Zp
bGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9u
bHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRp
Y3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJl
ZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFu
ZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Qml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1l
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJl
Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
KyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0
YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRh
Lm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1v
dj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVP
Zj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJ
bnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1l
cmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBhdXRvIHR5cGUgPSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHBy
b2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9
IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMg
Z2VuZXJhdGluZyBpbnQzMiBzcGVjdWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQ
dXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0Jp
Z0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RT
cGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdl
IGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3Ry
aW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3Bf
bXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAg
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5t
X3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0g
bWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNC
eXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0IHw9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91
YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVBy
b2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEo
cmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8g
YmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
ZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQg
JiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJs
ZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0lu
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAg
ICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9y
IHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBv
cF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAg
ICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNl
cnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0Fu
eUludEFzRG91YmxlOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNw
ZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRl
Y29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUo
ZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7
CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNw
ZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlm
IChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUo
Ynl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0
LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
QWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ug
b3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7
CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVs
bE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BM
c2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90
b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1f
c3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIG1lcmdlU3BlY3VsYXRpb25zKHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19w
cm9wZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1f
c3JjKTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
ICghKHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBt
ZXJnZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5
IGhhdmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNo
IGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhl
IG1haW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0
VHlwZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9j
ay0+bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25l
d19hcnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4o
KSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVm
ZmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVy
PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93
aXRoX3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlX
aXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0
PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93
aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxk
IGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVj
RnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4
cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1
bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hh
c19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVy
dHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBT
cGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJp
Y19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9p
bl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVj
dEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9h
cmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJm
bHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRz
QnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
QmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3Jf
bnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9y
TnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jv
b2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
cU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19z
dHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCks
IFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3Vs
YXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVj
dWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBj
YXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBj
YXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBv
cF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9s
b2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3Bf
Y2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93
OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6Cisg
ICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rp
b25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVm
aW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6
CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0
cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2Fz
ZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2Fz
ZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3Bf
anN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6Cisg
ICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3Jl
YXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAg
Y2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pu
Z3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6Cisg
ICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ug
b3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBv
cF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9w
dXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNl
IG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
fQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBo
ID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3Jh
cGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRI
ZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBt
X2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmls
ZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQ
cm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIm
IGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlC
bG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDAp
OworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJn
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKyth
cmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVl
UHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0u
YXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRb
MF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0
IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BT
OiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdz
IHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRl
Y29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/Cisg
ICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJl
YWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAg
ICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4
KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5p
c0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAg
IHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDog
YmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGU+JiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29y
XTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRp
Y3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
U3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ld
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisg
ICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSAvLyBPT1BTOiBhZGQgbmV3IG9wdGlv
bi4KKyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTc2LDYgKzg3MSw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkK
ICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQogeworICAgIG1fdXNlTE9MID0gU3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUo
KS5kYXRhKCkpID09ICJmb28iOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTU2LDEzICs5NTIsMTUg
QEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5F
X1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xv
d18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBpZiAoaGFzQW55
U2xvd0Nhc2VzKGl0ZXIpKSBcCisgICAgICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0K
IAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8j
I25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgXAorICAgICAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFt
ZSk7IFwKICAgICB9CiAKQEAgLTE3Niw2ICs5NzQsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkK
IHsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigp
OworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21w
aWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3ICsxMDMyLDI3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVj
b2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICBtX3Byb3ZlblR5cGVzID0gT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCk7CisgICAgICAgIG1fb3BlcmFuZFRvUmVnID0g
T3BlcmFuZHM8UmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDApOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvbnN0YW50
VG9SZWcuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9jb25zdGFudFRvUmVnLnJlc2l6ZShtX2NvZGVC
bG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3Ry
dWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlm
ICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJl
bnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkp
IHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Js
b2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYm
ICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmZpbGwoU3BlY0J5dGVjb2RlVG9w
KTsKKyAgICAgICAgICAgICAgICBtX29wZXJhbmRUb1JlZy5maWxsKFJlZygpKTsKKyAgICAgICAg
ICAgICAgICBtX2NvbnN0YW50VG9SZWcuZmlsbChSZWcoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dD
YXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29k
ZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAg
IC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUg
YXJlIHVucmVhY2hhYmxlLgpAQCAtNDc2LDYgKzEyOTcsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0
LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxOSw2ICsxMzQz
LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgYnJl
YWtwb2ludCgpOyAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdpc3RlciBhbGxvY2F0ZSB0
aGUgc2xvdyBwYXRocy4KKwogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVj
b2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigp
OwpAQCAtNzcyLDYgKzE1OTksMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhK
SVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgp
KTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICAvLyBP
T1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisgICAgeworICAgICAgICBmb3IgKGF1dG8ganVtcCA6
IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAganVtcC5saW5rKHRoaXMpOworICAgICAgICBicmVh
a3BvaW50KCk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsxODkyLDIzMSBAQCBTZWNvbmRzIEpJVDo6dG90
YWxDb21waWxlVGltZSgpCiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRv
dGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQogCit2b2lkIEpJVDo6
c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgLy8gT09QUyEKKyAgICBib29sIGIgPSB0cnVlOwor
ICAgIGlmIChiKQorICAgICAgICBicmVha3BvaW50KCk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExp
c3QgeyBqdW1wIH0pOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sK
KyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBh
IGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0
dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcwor
ICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxS
ZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAg
ICAgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICAgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENh
bGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCk7CisgICAgICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIEdQUlJlZyByZWcg
PSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZl
cy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAg
ICAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0
LmNvbnN0cnVjdChhbGxvd2VkKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOwor
fQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUigpCit7CisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRv
cCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3ByXS5p
c0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZl
VGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisK
KyAgICByZWdGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgPSBTcGVjSW50MzJPbmx5OworICAgIG1fcmVnaXN0ZXJzW2dwcl0uZm9ybWF0ID0gRGF0YUZv
cm1hdEpTSW50MzI7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30K
Kwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBn
cHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3ByXS5pc0FsbG9jYXRlZCk7
CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHJlZ0Zvck9wZXJh
bmQob3BlcmFuZCkgPSBncHI7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5mb3JtYXQgPSBEYXRhRm9y
bWF0SlM7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9p
ZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJz
W3JlZ107CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsr
cmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7Cisg
ICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgIFJFTEVBU0VfQVNTRVJU
KHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2Nr
Q291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQUlRlbXA6OkdQ
UlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJlZyBKSVQ6OkdQ
UlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IHJldHVybiBtX2dwcjsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1w
Ojp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJl
Zyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6Oklu
dDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBSZWcgcmVnID0gbV9qaXQu
cmVnRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpCisg
ICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5k
OjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1
cm4gbV9ncHI7CisKKyAgICBSZWcgcmVnID0gbV9qaXQucmVnRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpCisgICAgICAgIG1fZ3ByID0gcmVnLmdwcigp
OworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAg
ICAgIC8vIE9PUFM6IGRvIHNtYXJ0ZXIgdGhpbmdzIGZvciBhIGNvbnN0YW50IGhlcmUuCisgICAg
ICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAg
ICAgIG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAg
ICAgIG1faml0LnJlZ0Zvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2pp
dC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9qaXQubV9yZWdpc3Rl
cnNbbV9ncHJdOworICAgIGlmIChpc0pTSW50MzIocmVnVmFsdWUuZm9ybWF0KSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghKG1faml0LnByb3ZlblR5cGVGb3IobV9vcGVyYW5kKSAmIH5TcGVj
SW50MzJPbmx5KSk7CisgICAgICAgIHJldHVybiBtX2dwcjsKKyAgICB9CisKKyAgICBpZiAocmVn
VmFsdWUuZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICBTcGVjdWxhdGVkVHlwZSB0
eXBlID0gbV9qaXQucHJvdmVuVHlwZUZvcihtX29wZXJhbmQpOworICAgICAgICBpZiAodHlwZSAm
IH5TcGVjSW50MzJPbmx5KQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgICAgICAvLyBPT1BTOiBBZGQgbGlr
ZSBhIGZpbHRlclR5cGUgZnVuY3Rpb24uCisgICAgICAgIGlmICghbV9vcGVyYW5kLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmPSBTcGVjSW50
MzJPbmx5OworCisgICAgICAgIHJlZ1ZhbHVlLmZvcm1hdCA9IERhdGFGb3JtYXRKU0ludDMyOwor
ICAgICAgICByZXR1cm4gbV9ncHI7CisgICAgfQorCisgICAgLy8gT09QUzogQW55IG90aGVyIGNh
c2VzIHdlIGNhcmUgYWJvdXQ/CisgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0Lmp1
bXAoKSk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVP
cGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGpp
dCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIFJlZyByZWcgPSBtX2ppdC5yZWdG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAmJiByZWcuaXNHUFIoKSkKKyAgICAg
ICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAg
ICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6Omdw
cigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIFJlZyByZWcgPSBtX2ppdC5yZWdGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgaWYgKHJlZyAmJiByZWcuaXNHUFIoKSkgeworICAgICAgICBtX2dwciA9IHJlZy5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAg
ICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAg
ICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLmZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAg
ICAgICAgLy8gT09QUzogYWRkIGFuIGFzc2lnblJlZyBoZWxwZXIKKyAgICAgICAgbV9qaXQucmVn
Rm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0Lm1fcmVnaXN0ZXJz
W21fZ3ByXS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgYXV0byYgcmVnVmFsdWUgPSBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl07CisK
KyAgICBpZiAoISEocmVnVmFsdWUuZm9ybWF0ICYgRGF0YUZvcm1hdEpTKSkKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgaWYgKHJlZ1ZhbHVlLmZvcm1hdCA9PSBEYXRhRm9ybWF0SW50MzIp
IHsKKyAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIobV9ncHIsIG1fZ3ByKTsKKyAgICAg
ICAgbV9qaXQuYm94SW50MzIobV9ncHIsIEpTVmFsdWVSZWdzIHsgbV9ncHIgfSwgSGF2ZVRhZ1Jl
Z2lzdGVycyk7CisgICAgICAgIHJldHVybiBtX2dwcjsKKyAgICB9CisKKyAgICBkYXRhTG9nTG4o
InVua25vd24gZm9ybWF0OiAiLCByZWdWYWx1ZS5mb3JtYXQpOworCisgICAgLy8gT09QUzoKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9y
aWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9p
bnRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUzLDYgKzU0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3Mg
Qnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJs
b2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTE4Myw2ICsxODYsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1
cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0
aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0lu
dGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMTk1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBh
dGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0
aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAg
Ly8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUg
YXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3
aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8g
Zml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNo
UHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChW
TSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2
ICsyNjIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGls
ZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAor
ICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwo
KTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKwogICAgICAg
ICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBj
aGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTcyNSw4ICs3MzEsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1Zh
bHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIp
OwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzg2LDYgKzc5MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+
OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAg
ICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgICAgICB9CkBAIC03OTUsNiArODAwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+
Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgeworICAgICAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25U
eXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKG9wZXJhdGlvbik7CiAgICAgICAgIH0KQEAgLTgx
Myw2ICs4MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwh
c3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1
bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+
CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4g
YXJncykKICAgICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXRUeXBlPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+OjpSZXN1bHRUeXBlPjo6dmFsdWUsICJXaW42NCBjYW5ub3QgdXNlIHN0YW5kYXJk
IGNhbGwgd2hlbiByZXR1cm4gdHlwZSBpcyBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwogICAgICAg
ICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtOTIy
LDYgKzkyOSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVk
aWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNv
bnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRp
bWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAg
ICAgCkBAIC05MzIsNiArOTQyLDcxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFy
aXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+R1BSVGVt
cCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0
cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0
ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZUZvcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIHByb3ZlblR5
cGUob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZyYgcmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtX2NvbnN0YW50VG9SZWdbb3BlcmFuZC50b0NvbnN0YW50SW5k
ZXgoKV07CisgICAgICAgICAgICByZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUg
Zm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZv
aWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9j
ayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworCiAgICAgICAgIEludGVycHJldGVy
KiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpA
QCAtOTg3LDYgKzEwNjIsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5C
ZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7
CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBC
eXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBW
ZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAg
ICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAg
ICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX3Byb3ZlblR5cGVzOworICAgICAgICBPcGVy
YW5kczxSZWc+IG1fb3BlcmFuZFRvUmVnOworICAgICAgICBWZWN0b3I8UmVnPiBtX2NvbnN0YW50
VG9SZWc7CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdCB7IERhdGFG
b3JtYXROb25lIH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAg
ICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworICAgICAgICB9OworICAgICAgICBz
dHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7Cisg
ICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9y
PExvZ0VudHJ5PiBtX2V4aXRMb2c7CisgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiBtX3Jl
Z2lzdGVyczsKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3Rv
cjxKdW1wTGlzdD4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlz
aW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKFZpcnR1YQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUK
IAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3AxKSkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Ay
KSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRs
ZSBjbG9iYmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOwpAQCAtNDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1Qx
LCByZWdUMCk7CkBAIC05MDEsMTQgKzkxNiw0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0
KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQ
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwor
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3AxKSkgJiYg
aXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3AyKSkpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAg
ICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAg
ICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09Q
UworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJ
VEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBpZiAoIWhh
c0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJ
Qyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjYzNjY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5MywxMSArMzkzLDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5k
Q29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zv
cihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAy
NjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMg
d2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlRm9yKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTEwMjMs
OCArMTAzNCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nh
cmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdD
IHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0g
ICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9
IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVk
KCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMTA1MCwyMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBl
bHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjM2NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7Cisg
ICAgICAgIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1
Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNv
ZGVPZmZzZXRdLCB0cnVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403811</attachid>
            <date>2020-07-08 15:35:27 -0700</date>
            <delta_ts>2020-07-08 20:20:05 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>70272</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjM2
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDc5OSBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X29iamVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAg
ICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoK
KyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2Fz
ZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAg
Y2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0
cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZh
bHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAg
Y2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9u
dWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAg
ICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ug
b3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6
CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5
dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFj
aFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAg
ICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAg
ICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHBy
b2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7
CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
Y2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5
YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qg
b2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAg
IC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVw
ZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhv
dyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBE
RlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFz
aWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGlj
dGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAg
ICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3Ro
KCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFk
ZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpKSAvLyBPT1BTOiBhZGQgbmV3IG9wdGlvbi4KKyAgICAgICAgbV9ncmFw
aC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRp
Y3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgK
QEAgLTc2LDYgKzg3MSw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNl
TE9MID0gU3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCkpID09ICJmb28i
OwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTU2LDEzICs5NTIsMTUgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUp
IFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSBc
CisgICAgICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsg
XAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMj
bmFtZSk7IFwKKyAgICAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgXAorICAgICAgICAg
ICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8j
I25hbWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKQEAg
LTE3Niw2ICs5NzQsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVj
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAobV91c2VM
T0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJs
b2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3ICsxMDMyLDMwIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOworICAgICAgICBtX3Byb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSk7CisgICAgICAgIG1f
b3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8UmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFu
dHMoKS5zaXplKCkpOworICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFk
ZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29k
ZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJs
b2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rp
b25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcuZmlsbChSZWcoKSk7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmFyZ3VtZW50KGkpID0g
U3BlY0J5dGVjb2RlVG9wOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3Byb3ZlblR5cGVzLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcm92ZW5UeXBlcy5sb2NhbChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0
YW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMuY29uc3RhbnQo
aSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVh
bFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAg
ICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUo
KTsKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYg
c3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUg
cHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFj
aGFibGUuCkBAIC00NzYsNiArMTMwMCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE5LDYgKzEzNDYsOSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKIAorICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBicmVha3BvaW50KCk7
IC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2lzdGVyIGFsbG9jYXRlIHRoZSBzbG93IHBh
dGhzLgorCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
IAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC03NzIs
NiArMTYwMiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxl
bWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVt
cHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC0xMDU4LDYgKzE4OTUsMjI5IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVU
aW1lKCkKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21w
aWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9CiAKK3ZvaWQgSklUOjpzcGlsbEZvckNh
bGxJbXBsKCkKK3sKKyAgICAvLyBPT1BTIQorICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIp
CisgICAgICAgIGJyZWFrcG9pbnQoKTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2lu
ZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhpdEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAg
fSk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9P
UFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50
IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHBy
b2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09Q
UzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0
PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBSZWdp
c3RlclNldCBhbGxvd2VkOworICAgICAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAg
ICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86
OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5z
KHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAg
ICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuY29uc3RydWN0
KGFsbG93ZWQpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK0dQUlJl
ZyBKSVQ6OmFsbG9jYXRlR1BSKCkKK3sKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
aWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxv
Y2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJl
IHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVk
KTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3Rl
cnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHJlZ0Zv
ck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJ
bnQzMk9ubHk7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnQz
MjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJ
VDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9y
ZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgcmVnRm9yT3BlcmFuZChvcGVyYW5k
KSA9IGdwcjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLmZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAg
ICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9j
ayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5s
b2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiBy
ZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7Cisg
ICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQm
IGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1w
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIFJlZyByZWcgPSBtX2ppdC5yZWdGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAmJiByZWcuaXNHUFIoKSkKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIFJlZyByZWcgPSBtX2ppdC5yZWdGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAmJiByZWcuaXNHUFIoKSkKKyAgICAgICAgbV9ncHIgPSByZWcuZ3ByKCk7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09Q
UzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
bV9yZWdpc3RlcnNbbV9ncHJdLmZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgbV9qaXQu
cmVnRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0Lm1fcmVnaXN0
ZXJzW21fZ3ByXS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgYXV0byYgcmVnVmFsdWUgPSBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl07
CisgICAgaWYgKGlzSlNJbnQzMihyZWdWYWx1ZS5mb3JtYXQpKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCEobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgflNwZWNJbnQzMk9ubHkpKTsK
KyAgICAgICAgcmV0dXJuIG1fZ3ByOworICAgIH0KKworICAgIGlmIChyZWdWYWx1ZS5mb3JtYXQg
PT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCk7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNJbnQzMk9ubHkp
CisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJ
bnQzMihtX2dwcikpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
SW50MzJPbmx5KTsKKworICAgICAgICByZWdWYWx1ZS5mb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnQz
MjsKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworICAgIH0KKworICAgIC8vIE9PUFM6IEFueSBvdGhl
ciBjYXNlcyB3ZSBjYXJlIGFib3V0PworICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5qdW1wKCkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZh
bHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBSZWcgcmVnID0gbV9qaXQu
cmVnRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpCisg
ICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5k
OjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1
cm4gbV9ncHI7CisKKyAgICBSZWcgcmVnID0gbV9qaXQucmVnRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpIHsKKyAgICAgICAgbV9ncHIgPSByZWcuZ3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
CisgICAgICAgIG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlM7
CisgICAgICAgIC8vIE9PUFM6IGFkZCBhbiBhc3NpZ25SZWcgaGVscGVyCisgICAgICAgIG1faml0
LnJlZ0Zvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lz
dGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJd
OworCisgICAgaWYgKCEhKHJlZ1ZhbHVlLmZvcm1hdCAmIERhdGFGb3JtYXRKUykpCisgICAgICAg
IHJldHVybiBtX2dwcjsKKworICAgIGlmIChyZWdWYWx1ZS5mb3JtYXQgPT0gRGF0YUZvcm1hdElu
dDMyKSB7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKG1fZ3ByLCBtX2dwcik7Cisg
ICAgICAgIG1faml0LmJveEludDMyKG1fZ3ByLCBKU1ZhbHVlUmVncyB7IG1fZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gbV9ncHI7CisgICAgfQorCisgICAgZGF0YUxv
Z0xuKCJ1bmtub3duIGZvcm1hdDogIiwgcmVnVmFsdWUuZm9ybWF0KTsKKworICAgIC8vIE9PUFM6
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNl
ZFBvaW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01Myw2ICs1NCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5
QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNs
YXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENv
ZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xODMsNiArMTg2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5NSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjYyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKICAg
ICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRp
b24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC03MjUsOCArNzMxLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc4Niw2ICs3OTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25U
eXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJh
dGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJn
cy4uLiBhcmdzKQogICAgICAgICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQpAQCAtNzk1LDYgKzgwMCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBG
dW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5U
eXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0
aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShvcGVyYXRpb24pOwogICAgICAgICB9CkBA
IC04MTMsNiArODE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpD
YWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdz
Li4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAg
ICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0VHlwZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZT46OnZhbHVlLCAiV2luNjQgY2Fubm90IHVzZSBzdGFu
ZGFyZCBjYWxsIHdoZW4gcmV0dXJuIHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4iKTsKICAg
ICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAg
LTkyMiw2ICs5MjksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVu
UHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlv
bihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBp
bGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIApAQCAtOTMyLDYgKzk0Miw2NSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3Bp
ZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQ
UlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVy
IGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVj
dWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fcHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIH0KKworICAgICAgICBSZWcmIHJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX29wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhp
dEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBt
b3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxv
Y2F0ZUdQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVn
KTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAg
ICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisKICAgICAg
ICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNv
cmQ+IG1fY2FsbHM7CkBAIC05ODcsNiArMTA1NiwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxk
RW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXg7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3Jh
cGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRy
IH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJlZGljdGlv
bnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJlbnRQcmVk
aWN0aW9uczsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fcHJvdmVuVHlwZXM7
CisgICAgICAgIE9wZXJhbmRzPFJlZz4gbV9vcGVyYW5kVG9SZWc7CisgICAgICAgIHN0cnVjdCBS
ZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAg
ICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdCB7IERhdGFGb3JtYXROb25lIH07CisgICAgICAgICAg
ICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQg
eyBmYWxzZSB9OworICAgICAgICB9OworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7Cisg
ICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiBtX3JlZ2lzdGVyczsKKyAgICAgICAgYm9vbCBt
X3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0SnVtcHM7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
Niw3ICsxNzYsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YQog
ICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8g
LSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3AxKSkgJiYgaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3AyKSkpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBjbG9iYmVyaW5nIHRoZSByZWdzCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisKICAgICBib29s
IGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7
CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtNDczLDYg
KzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwog
ICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC05MDEsMTQgKzkx
Niw0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQg
SklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
OworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3AxKSkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3AyKSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShsaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhz
LmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29k
ZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVEFk
ZElDKiBhZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5MywxMSArMzkzLDYgQEAgQUxX
QVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAvLyBPT1BT
OiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFs
bG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3By
KCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTEwMjMsOCArMTAzNCwxMiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFs
ZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2Jq
ZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3Vu
dCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAg
ICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAg
IHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkg
PSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7
CiAKQEAgLTEwMzUsOSArMTA1MCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29u
c3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwor
ICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7
CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNP
YmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3Bl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0
aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRo
Q2FsbC5oCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKIAog
ICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIG1faml0LT5zcGlsbEZvckNhbGwo
KTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9i
eXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAg
ICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403839</attachid>
            <date>2020-07-08 20:20:05 -0700</date>
            <delta_ts>2020-07-08 20:49:48 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>70949</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjM2
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDc5OSBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X29iamVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAg
ICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoK
KyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2Fz
ZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAg
Y2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0
cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZh
bHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAg
Y2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9u
dWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAg
ICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ug
b3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6
CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5
dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFj
aFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAg
ICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAg
ICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHBy
b2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7
CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
Y2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5
YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qg
b2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAg
IC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVw
ZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhv
dyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBE
RlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFz
aWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGlj
dGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAg
ICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3Ro
KCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFk
ZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpKSAvLyBPT1BTOiBhZGQgbmV3IG9wdGlvbi4KKyAgICAgICAgbV9ncmFw
aC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRp
Y3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgK
QEAgLTc2LDYgKzg3MSw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNl
TE9MID0gU3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCkpID09ICJmb28i
OwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTU2LDEzICs5NTIsMTUgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUp
IFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSBc
CisgICAgICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsg
XAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMj
bmFtZSk7IFwKKyAgICAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgXAorICAgICAgICAg
ICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8j
I25hbWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKQEAg
LTE3Niw2ICs5NzQsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVj
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAobV91c2VM
T0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJs
b2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3ICsxMDMyLDMwIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOworICAgICAgICBtX3Byb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSk7CisgICAgICAgIG1f
b3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8UmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFu
dHMoKS5zaXplKCkpOworICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFk
ZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29k
ZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJs
b2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rp
b25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcuZmlsbChSZWcoKSk7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmFyZ3VtZW50KGkpID0g
U3BlY0J5dGVjb2RlVG9wOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3Byb3ZlblR5cGVzLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcm92ZW5UeXBlcy5sb2NhbChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0
YW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMuY29uc3RhbnQo
aSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVh
bFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAg
ICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUo
KTsKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYg
c3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUg
cHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFj
aGFibGUuCkBAIC00NzYsNiArMTMwMCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE5LDYgKzEzNDYsOSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKIAorICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBicmVha3BvaW50KCk7
IC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2lzdGVyIGFsbG9jYXRlIHRoZSBzbG93IHBh
dGhzLgorCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
IAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC03NzIs
NiArMTYwMiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxl
bWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVt
cHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC0xMDU4LDYgKzE4OTUsMjI5IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVU
aW1lKCkKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21w
aWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9CiAKK3ZvaWQgSklUOjpzcGlsbEZvckNh
bGxJbXBsKCkKK3sKKyAgICAvLyBPT1BTIQorICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIp
CisgICAgICAgIGJyZWFrcG9pbnQoKTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2lu
ZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhpdEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAg
fSk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9P
UFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50
IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHBy
b2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09Q
UzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0
PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBSZWdp
c3RlclNldCBhbGxvd2VkOworICAgICAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAg
ICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86
OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5z
KHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAg
ICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuY29uc3RydWN0
KGFsbG93ZWQpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK0dQUlJl
ZyBKSVQ6OmFsbG9jYXRlR1BSKCkKK3sKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
aWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxv
Y2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJl
IHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVk
KTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3Rl
cnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHJlZ0Zv
ck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJ
bnQzMk9ubHk7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnQz
MjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJ
VDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9y
ZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgcmVnRm9yT3BlcmFuZChvcGVyYW5k
KSA9IGdwcjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLmZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAg
ICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9j
ayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5s
b2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiBy
ZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7Cisg
ICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQm
IGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1w
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIFJlZyByZWcgPSBtX2ppdC5yZWdGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAmJiByZWcuaXNHUFIoKSkKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIFJlZyByZWcgPSBtX2ppdC5yZWdGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAmJiByZWcuaXNHUFIoKSkKKyAgICAgICAgbV9ncHIgPSByZWcuZ3ByKCk7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09Q
UzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
bV9yZWdpc3RlcnNbbV9ncHJdLmZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgbV9qaXQu
cmVnRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0Lm1fcmVnaXN0
ZXJzW21fZ3ByXS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgYXV0byYgcmVnVmFsdWUgPSBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl07
CisgICAgaWYgKGlzSlNJbnQzMihyZWdWYWx1ZS5mb3JtYXQpKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCEobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgflNwZWNJbnQzMk9ubHkpKTsK
KyAgICAgICAgcmV0dXJuIG1fZ3ByOworICAgIH0KKworICAgIGlmIChyZWdWYWx1ZS5mb3JtYXQg
PT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCk7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNJbnQzMk9ubHkp
CisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJ
bnQzMihtX2dwcikpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
SW50MzJPbmx5KTsKKworICAgICAgICByZWdWYWx1ZS5mb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnQz
MjsKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworICAgIH0KKworICAgIC8vIE9PUFM6IEFueSBvdGhl
ciBjYXNlcyB3ZSBjYXJlIGFib3V0PworICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5qdW1wKCkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZh
bHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBSZWcgcmVnID0gbV9qaXQu
cmVnRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpCisg
ICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5k
OjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1
cm4gbV9ncHI7CisKKyAgICBSZWcgcmVnID0gbV9qaXQucmVnRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpIHsKKyAgICAgICAgbV9ncHIgPSByZWcuZ3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
CisgICAgICAgIG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlM7
CisgICAgICAgIC8vIE9PUFM6IGFkZCBhbiBhc3NpZ25SZWcgaGVscGVyCisgICAgICAgIG1faml0
LnJlZ0Zvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lz
dGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJd
OworCisgICAgaWYgKCEhKHJlZ1ZhbHVlLmZvcm1hdCAmIERhdGFGb3JtYXRKUykpCisgICAgICAg
IHJldHVybiBtX2dwcjsKKworICAgIGlmIChyZWdWYWx1ZS5mb3JtYXQgPT0gRGF0YUZvcm1hdElu
dDMyKSB7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKG1fZ3ByLCBtX2dwcik7Cisg
ICAgICAgIG1faml0LmJveEludDMyKG1fZ3ByLCBKU1ZhbHVlUmVncyB7IG1fZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gbV9ncHI7CisgICAgfQorCisgICAgZGF0YUxv
Z0xuKCJ1bmtub3duIGZvcm1hdDogIiwgcmVnVmFsdWUuZm9ybWF0KTsKKworICAgIC8vIE9PUFM6
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNl
ZFBvaW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01Myw2ICs1NCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5
QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNs
YXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENv
ZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xODMsNiArMTg2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5NSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjYyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKICAg
ICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRp
b24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC03MjUsOCArNzMxLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc4Niw2ICs3OTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25U
eXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJh
dGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJn
cy4uLiBhcmdzKQogICAgICAgICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQpAQCAtNzk1LDYgKzgwMCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBG
dW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5U
eXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0
aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShvcGVyYXRpb24pOwogICAgICAgICB9CkBA
IC04MTMsNiArODE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpD
YWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdz
Li4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAg
ICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0VHlwZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZT46OnZhbHVlLCAiV2luNjQgY2Fubm90IHVzZSBzdGFu
ZGFyZCBjYWxsIHdoZW4gcmV0dXJuIHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4iKTsKICAg
ICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAg
LTkyMiw2ICs5MjksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVu
UHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlv
bihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBp
bGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIApAQCAtOTMyLDYgKzk0Miw3MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3Bp
ZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQ
UlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVy
IGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVj
dWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fcHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQp
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICB9CisKKyAgICAgICAgUmVnJiByZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9vcGVyYW5kVG9S
ZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1
cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKCk7CisgICAgICAg
IHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIHNl
dEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVn
KTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9p
bnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAgLTk4
Nyw2ICsxMDYzLDI3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRp
bWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAg
ICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9wcm92ZW5UeXBlczsKKyAgICAgICAgT3BlcmFuZHM8
UmVnPiBtX29wZXJhbmRUb1JlZzsKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIERhdGFGb3JtYXQg
Zm9ybWF0IHsgRGF0YUZvcm1hdE5vbmUgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50
IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisgICAgICAg
IH07CisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9Owor
ICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKyAgICAgICAgUmVnaXN0ZXJNYXA8
UmVnVmFsdWU+IG1fcmVnaXN0ZXJzOworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsK
KyAgICAgICAgVmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3NiwyMSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhCiAgICAgLy8gLSBjb25zdGFudCBp
bnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8g
aW50IGltbWVkaWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBjbG9iYmVyaW5n
IHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwpAQCAtNDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBA
IC03ODYsNiArODAxLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVj
dGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwgcmVz
dWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAj
ZWxzZQpAQCAtOTAxLDE0ICs5MjgsNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25z
dCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmls
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCks
IHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQo
Y3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFk
ZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlQWRkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogeworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUQWRkSUMqIGFk
ZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDExICszOTMsNiBAQCBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJ
bml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE3IEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2Ug
dGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIgYWxsb2NhdGVk
IHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKQpAQCAtMTAyMyw4ICsxMDM0LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50
ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlm
ZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9j
b2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsg
KytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGop
KTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1
dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVU
cnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAg
ICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNP
dGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAt
MTAzNSw5ICsxMDUwLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0
cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNj
b3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVD
aGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BS
UmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0g
cmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2Nv
cGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90
aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJ
KHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhD
YWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogCiAgICAgSklU
OjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAj
aWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2Rl
T2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAg
ICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403841</attachid>
            <date>2020-07-08 20:49:48 -0700</date>
            <delta_ts>2020-07-09 19:25:03 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>74050</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjM2
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDc5OSBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X29iamVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAg
ICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoK
KyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2Fz
ZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAg
Y2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0
cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZh
bHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAg
Y2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9u
dWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAg
ICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ug
b3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6
CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5
dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFj
aFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAg
ICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAg
ICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHBy
b2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7
CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
Y2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5
YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qg
b2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAg
IC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVw
ZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhv
dyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBE
RlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFz
aWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGlj
dGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAg
ICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3Ro
KCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFk
ZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpKSAvLyBPT1BTOiBhZGQgbmV3IG9wdGlvbi4KKyAgICAgICAgbV9ncmFw
aC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRp
Y3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgK
QEAgLTc2LDYgKzg3MSw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNl
TE9MID0gU3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCkpID09ICJmb28i
OwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTU2LDEzICs5NTIsMTUgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUp
IFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSBc
CisgICAgICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsg
XAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMj
bmFtZSk7IFwKKyAgICAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgXAorICAgICAgICAg
ICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8j
I25hbWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKQEAg
LTE3Niw2ICs5NzQsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVj
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAobV91c2VM
T0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJs
b2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3ICsxMDMyLDMwIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOworICAgICAgICBtX3Byb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSk7CisgICAgICAgIG1f
b3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8UmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFu
dHMoKS5zaXplKCkpOworICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFk
ZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29k
ZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJs
b2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rp
b25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcuZmlsbChSZWcoKSk7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmFyZ3VtZW50KGkpID0g
U3BlY0J5dGVjb2RlVG9wOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3Byb3ZlblR5cGVzLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcm92ZW5UeXBlcy5sb2NhbChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0
YW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMuY29uc3RhbnQo
aSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVh
bFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAg
ICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUo
KTsKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYg
c3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUg
cHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFj
aGFibGUuCkBAIC00NzYsNiArMTMwMCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE5LDYgKzEzNDYsOSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKIAorICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBicmVha3BvaW50KCk7
IC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2lzdGVyIGFsbG9jYXRlIHRoZSBzbG93IHBh
dGhzLgorCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
IAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC03NzIs
NiArMTYwMiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxl
bWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVt
cHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC0xMDU4LDYgKzE4OTUsMjI5IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVU
aW1lKCkKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21w
aWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9CiAKK3ZvaWQgSklUOjpzcGlsbEZvckNh
bGxJbXBsKCkKK3sKKyAgICAvLyBPT1BTIQorICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIp
CisgICAgICAgIGJyZWFrcG9pbnQoKTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2lu
ZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhpdEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAg
fSk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9P
UFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50
IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHBy
b2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09Q
UzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0
PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBSZWdp
c3RlclNldCBhbGxvd2VkOworICAgICAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAg
ICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86
OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5z
KHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAg
ICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuY29uc3RydWN0
KGFsbG93ZWQpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK0dQUlJl
ZyBKSVQ6OmFsbG9jYXRlR1BSKCkKK3sKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
aWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxv
Y2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJl
IHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVk
KTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3Rl
cnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHJlZ0Zv
ck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJ
bnQzMk9ubHk7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnQz
MjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJ
VDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9y
ZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgcmVnRm9yT3BlcmFuZChvcGVyYW5k
KSA9IGdwcjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLmZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAg
ICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9j
ayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5s
b2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiBy
ZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7Cisg
ICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQm
IGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1w
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIFJlZyByZWcgPSBtX2ppdC5yZWdGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAmJiByZWcuaXNHUFIoKSkKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIFJlZyByZWcgPSBtX2ppdC5yZWdGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAmJiByZWcuaXNHUFIoKSkKKyAgICAgICAgbV9ncHIgPSByZWcuZ3ByKCk7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09Q
UzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
bV9yZWdpc3RlcnNbbV9ncHJdLmZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgbV9qaXQu
cmVnRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0Lm1fcmVnaXN0
ZXJzW21fZ3ByXS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgYXV0byYgcmVnVmFsdWUgPSBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl07
CisgICAgaWYgKGlzSlNJbnQzMihyZWdWYWx1ZS5mb3JtYXQpKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCEobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgflNwZWNJbnQzMk9ubHkpKTsK
KyAgICAgICAgcmV0dXJuIG1fZ3ByOworICAgIH0KKworICAgIGlmIChyZWdWYWx1ZS5mb3JtYXQg
PT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCk7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNJbnQzMk9ubHkp
CisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJ
bnQzMihtX2dwcikpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
SW50MzJPbmx5KTsKKworICAgICAgICByZWdWYWx1ZS5mb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnQz
MjsKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworICAgIH0KKworICAgIC8vIE9PUFM6IEFueSBvdGhl
ciBjYXNlcyB3ZSBjYXJlIGFib3V0PworICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5qdW1wKCkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZh
bHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBSZWcgcmVnID0gbV9qaXQu
cmVnRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpCisg
ICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5k
OjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1
cm4gbV9ncHI7CisKKyAgICBSZWcgcmVnID0gbV9qaXQucmVnRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgJiYgcmVnLmlzR1BSKCkpIHsKKyAgICAgICAgbV9ncHIgPSByZWcuZ3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
CisgICAgICAgIG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlM7
CisgICAgICAgIC8vIE9PUFM6IGFkZCBhbiBhc3NpZ25SZWcgaGVscGVyCisgICAgICAgIG1faml0
LnJlZ0Zvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lz
dGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJd
OworCisgICAgaWYgKCEhKHJlZ1ZhbHVlLmZvcm1hdCAmIERhdGFGb3JtYXRKUykpCisgICAgICAg
IHJldHVybiBtX2dwcjsKKworICAgIGlmIChyZWdWYWx1ZS5mb3JtYXQgPT0gRGF0YUZvcm1hdElu
dDMyKSB7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKG1fZ3ByLCBtX2dwcik7Cisg
ICAgICAgIG1faml0LmJveEludDMyKG1fZ3ByLCBKU1ZhbHVlUmVncyB7IG1fZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gbV9ncHI7CisgICAgfQorCisgICAgZGF0YUxv
Z0xuKCJ1bmtub3duIGZvcm1hdDogIiwgcmVnVmFsdWUuZm9ybWF0KTsKKworICAgIC8vIE9PUFM6
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNl
ZFBvaW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01Myw2ICs1NCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5
QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNs
YXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENv
ZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xODMsNiArMTg2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5NSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjYyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKICAg
ICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRp
b24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC03MjUsOCArNzMxLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc4Niw2ICs3OTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25U
eXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJh
dGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJn
cy4uLiBhcmdzKQogICAgICAgICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQpAQCAtNzk1LDYgKzgwMCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBG
dW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5U
eXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0
aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShvcGVyYXRpb24pOwogICAgICAgICB9CkBA
IC04MTMsNiArODE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpD
YWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdz
Li4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAg
ICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0VHlwZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZT46OnZhbHVlLCAiV2luNjQgY2Fubm90IHVzZSBzdGFu
ZGFyZCBjYWxsIHdoZW4gcmV0dXJuIHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4iKTsKICAg
ICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAg
LTkyMiw2ICs5MjksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVu
UHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlv
bihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBp
bGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIApAQCAtOTMyLDYgKzk0Miw3MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3Bp
ZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQ
UlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVy
IGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVj
dWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fcHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQp
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICB9CisKKyAgICAgICAgUmVnJiByZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9vcGVyYW5kVG9S
ZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1
cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKCk7CisgICAgICAg
IHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIHNl
dEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVn
KTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9p
bnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAgLTk4
Nyw2ICsxMDYzLDI3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRp
bWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAg
ICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9wcm92ZW5UeXBlczsKKyAgICAgICAgT3BlcmFuZHM8
UmVnPiBtX29wZXJhbmRUb1JlZzsKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIERhdGFGb3JtYXQg
Zm9ybWF0IHsgRGF0YUZvcm1hdE5vbmUgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50
IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisgICAgICAg
IH07CisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9Owor
ICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKyAgICAgICAgUmVnaXN0ZXJNYXA8
UmVnVmFsdWU+IG1fcmVnaXN0ZXJzOworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsK
KyAgICAgICAgVmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3NiwyMSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhCiAgICAgLy8gLSBjb25zdGFudCBp
bnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8g
aW50IGltbWVkaWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBjbG9iYmVyaW5n
IHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwpAQCAtNDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBA
IC03ODYsNiArODAxLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVj
dGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwgcmVz
dWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAj
ZWxzZQpAQCAtOTAxLDE0ICs5MjgsNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25z
dCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmls
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCks
IHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQo
Y3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFk
ZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlQWRkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogeworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUQWRkSUMqIGFk
ZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKQEAgLTEyMTUsMTQgKzEyNzAsNDEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAg
ICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkp
OworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewor
ICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICByZXR1cm47CisKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9j
YXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24pKTsKQEAgLTEyMzEsOCArMTMxMywzMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJm
bG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMs
MTEgKzM5Myw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAg
ICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQot
ewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7
Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
RG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjYzNjY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0
aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgLy8gT09QUzogTWFrZSB0aGlzIGJldHRlciBmb3IgY29uc3RhbnRzIHdoaWNoIGFy
ZW4ndCByZWdpc3RlciBhbGxvY2F0ZWQgeWV0LgorICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAg
ICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50
KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC0xMDIzLDggKzEwMzQsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIHJlZ2lz
dGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9u
Z2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4K
ICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6
ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNv
dW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNz
Rm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHByb3Zl
blR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJp
ZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzEwNTAsMjMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0OworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAg
ICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
OCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICBtX2pp
dC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAg
ICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2pp
dC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwg
dHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403941</attachid>
            <date>2020-07-09 19:25:03 -0700</date>
            <delta_ts>2020-07-10 16:23:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>76598</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjM2
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDc5OSBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X29iamVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAg
ICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoK
KyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2Fz
ZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAg
Y2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0
cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZh
bHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAg
Y2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9u
dWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAg
ICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ug
b3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6
CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5
dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFj
aFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAg
ICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAg
ICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHBy
b2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7
CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
Y2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5
YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qg
b2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAg
IC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVw
ZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhv
dyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBE
RlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFz
aWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGlj
dGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAg
ICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3Ro
KCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFk
ZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpKSAvLyBPT1BTOiBhZGQgbmV3IG9wdGlvbi4KKyAgICAgICAgbV9ncmFw
aC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRp
Y3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgK
QEAgLTc2LDYgKzg3MSw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNl
TE9MID0gU3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCkpID09ICJmb28i
OwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTU2LDEzICs5NTIsMTUgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUp
IFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSBc
CisgICAgICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsg
XAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMj
bmFtZSk7IFwKKyAgICAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgXAorICAgICAgICAg
ICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8j
I25hbWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKQEAg
LTE3Niw2ICs5NzQsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVj
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAobV91c2VM
T0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJs
b2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3ICsxMDMyLDMwIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOworICAgICAgICBtX3Byb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSk7CisgICAgICAgIG1f
b3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZz4obV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+
Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9u
Q291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9j
dXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9j
ay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9y
Qnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1
cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQ
cmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCld
OworICAgICAgICAgICAgICAgIG1fb3BlcmFuZFRvUmVnLmZpbGwoQWxsb2NlZFJlZygpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMu
YXJndW1lbnQoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAg
ICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmxvY2FsKGkpID0gU3BlY0J5dGVjb2RlVG9w
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVz
Lm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5U
eXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKICAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9z
bG93Q2FzZXMuc2l6ZSgpOwogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0
ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CiAgICAgICAg
ICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBo
ZXJlIGFyZSB1bnJlYWNoYWJsZS4KQEAgLTQ3Niw2ICsxMzAwLDkgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklU
SW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9m
ZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTksNiAr
MTM0Niw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwogCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAg
IGJyZWFrcG9pbnQoKTsgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnaXN0ZXIgYWxsb2Nh
dGUgdGhlIHNsb3cgcGF0aHMuCisKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5w
dHIoKTsKQEAgLTc3Miw2ICsxNjAyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFi
ZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAg
Ly8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1
bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAg
YnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTg5NSwyOTYgQEAgU2Vjb25kcyBKSVQ6
OnRvdGFsQ29tcGlsZVRpbWUoKQogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUg
KyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KIAordm9pZCBK
SVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIC8vIE9PUFMhCisgICAgYm9vbCBiID0gdHJ1
ZTsKKyAgICBpZiAoYikKKyAgICAgICAgYnJlYWtwb2ludCgpOworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1
bXBMaXN0IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3Rl
clNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVy
U2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJh
bms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMo
cmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFs
bG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMg
UmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIg
c3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0
aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVk
IHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEg
aG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21w
dXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8g
T09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJl
bnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBP
T1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJT
ZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJl
c3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOwor
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKCkK
K3sKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lz
dGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAg
ICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworR1BSUmVnIEpJ
VDo6YWxsb2NhdGVGUFIoKQoreworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxv
Y2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBh
dXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFsdWUu
aXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0g
bV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUu
aXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sK
KyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAg
UkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3ByXS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50
MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9y
ZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJh
bmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAg
IG1fcmVnaXN0ZXJzW2dwcl0uZm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50MzI7CisgICAgbV9yZWdp
c3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9yZWdpc3RlcnNbZ3ByXS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJl
c3NGb3Iob3BlcmFuZCkpOworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAg
bV9yZWdpc3RlcnNbZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAgbV9yZWdpc3RlcnNb
Z3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sK
KyAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQor
Cit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSBtX3Jl
Z2lzdGVyc1tyZWddOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUu
bG9ja0NvdW50OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBt
X2ppdChqaXQpCit7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
Z3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1f
Z3ByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQo
b3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisK
K0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICAvLyBPT1BTOiBkbyBzbWFy
dGVyIHRoaW5ncyBmb3IgYSBjb25zdGFudCBoZXJlLgorICAgICAgICBtX2ppdC5lbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJd
Lm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisK
KyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkp
KQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQz
MihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9u
bHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVn
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IGNvbnNpZGVyIHVzaW5nIEZQUiBpZiB0
aGVyZSdzIGFuIEZQUiBhbGxvY2F0ZWQgZm9yCisgICAgICAgIC8vIHRoaXMgb3BlcmFuZC4KKyAg
ICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIG1faml0Lm1fcmVn
aXN0ZXJzW21fZ3ByXS5mb3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAgICAgIC8vIE9PUFM6IGFk
ZCBhbiBhc3NpZ25SZWcgaGVscGVyCisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9
IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9
CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7Cisg
ICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKwor
ICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2Zw
ciA9IHJlZzsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSUmVnIGdwciA9IHZh
bHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAg
bV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNw
ZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQu
c3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0s
IEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3By
LCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKK30KKworcHJpdmF0
ZToKKyAgICBKSVQmIG1faml0OworICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVP
cmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBv
aW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01Myw2ICs1NCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNz
IEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVC
bG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xODMsNiArMTg2LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5j
dGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJ
bnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAg
IC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxl
IGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMs
NiArMjYyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAK
KyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBs
KCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC03MjUsOCArNzMxLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc4Niw2ICs3OTAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBl
Pjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlv
bihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4u
LiBhcmdzKQogICAgICAgICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQpAQCAtNzk1LDYgKzgwMCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5j
dGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBl
Pjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9u
VHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShvcGVyYXRpb24pOwogICAgICAgICB9CkBAIC04
MTMsNiArODE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
IXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVz
dWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxs
PgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChpczY0Qml0VHlwZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVy
YXRpb25UeXBlPjo6UmVzdWx0VHlwZT46OnZhbHVlLCAiV2luNjQgY2Fubm90IHVzZSBzdGFuZGFy
ZCBjYWxsIHdoZW4gcmV0dXJuIHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4iKTsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTky
Miw2ICs5MjksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihj
b25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVU
aW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAg
ICAgIApAQCAtOTMyLDYgKzk0Miw4OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRB
cml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQUlRl
bXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJp
dHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBH
UFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBE
b3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3Bl
cmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRG
UFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAg
IH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb3ZlblR5cGVzLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGlj
dGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3By
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9
CisKKyAgICAgICAgRlBSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChv
cGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUlu
dDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
KTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcg
cHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUigpOworICAgICAgICBHUFJSZWcg
YWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyk7CisgICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7
CisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworCiAg
ICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxs
UmVjb3JkPiBtX2NhbGxzOwpAQCAtOTg3LDYgKzEwODAsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBt
X2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVs
bHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRp
Y3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50
UHJlZGljdGlvbnM7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX3Byb3ZlblR5
cGVzOworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91
Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAg
Ly8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsg
SW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcg
fTsKKyAgICAgICAgfTsKKyAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZz4gbV9vcGVyYW5kVG9S
ZWc7CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdCB7IERhdGFGb3Jt
YXROb25lIH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAg
ICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworICAgICAgICB9OworICAgICAgICBzdHJ1
Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAg
ICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9yPExv
Z0VudHJ5PiBtX2V4aXRMb2c7CisgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiBtX3JlZ2lz
dGVyczsKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxK
dW1wTGlzdD4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9u
IDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBp
bnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMu
Z3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBkaXNh
bGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIo
b3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTQ3Myw2ICs0ODcs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAv
LyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsK
ICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNzg2LDYgKzgwMSwxOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7Cisg
ICAgICAgICAgICBub3QzMihyZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIo
cmVzdWx0LCByZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIC8vIE9PUFMKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNCAr
OTI4LDQyIEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJv
ZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+
KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisK
KyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsK
KyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQ
cm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAg
ICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2VfY2Fz
dDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9u
KSk7CkBAIC0xMjE1LDE0ICsxMjcwLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2Zp
bGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZs
b3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAg
ICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVE11bElD
KiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAg
IGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBpZiAoIWhhc0FueVNs
b3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CkBAIC0xMjMxLDgg
KzEzMTMsMzIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCBy
aHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDExICszOTMsNiBAQCBBTFdB
WVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0
ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE3
IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIC8vIE9PUFM6
IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIgYWxs
b2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1dC5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpKQpAQCAtMTAyMyw4ICsxMDM0LDEyIEBAIHZvaWQgSklUOjplbWl0
X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxl
IHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmpl
Y3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50
ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBj
b3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAg
ICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAg
c3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOwor
ICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9
IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsK
IApAQCAtMTAzNSw5ICsxMDUwLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25z
dCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9m
U2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Cisg
ICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
b3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsK
KworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRo
Q2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhD
YWxsLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xv
d1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogCiAg
ICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgbV9qaXQtPnNwaWxsRm9yQ2FsbCgp
OworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5
dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAg
ICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404019</attachid>
            <date>2020-07-10 16:23:49 -0700</date>
            <delta_ts>2020-07-10 20:14:09 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>82611</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjM2
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDc5OSBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X29iamVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAg
ICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoK
KyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2Fz
ZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAg
Y2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0
cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZh
bHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAg
Y2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9u
dWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAg
ICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ug
b3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6
CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5
dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFj
aFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAg
ICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAg
ICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHBy
b2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7
CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
Y2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5
YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qg
b2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAg
IC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVw
ZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhv
dyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBE
RlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFz
aWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGlj
dGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAg
ICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3Ro
KCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFk
ZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpKSAvLyBPT1BTOiBhZGQgbmV3IG9wdGlvbi4KKyAgICAgICAgbV9ncmFw
aC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRp
Y3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgK
QEAgLTc2LDYgKzg3MSw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNl
TE9MID0gU3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCkpID09ICJmb28i
OwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTU2LDEzICs5NTIsMTUgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUp
IFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSBc
CisgICAgICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsg
XAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMj
bmFtZSk7IFwKKyAgICAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgXAorICAgICAgICAg
ICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8j
I25hbWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKQEAg
LTE3Niw2ICs5NzQsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVj
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAobV91c2VM
T0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJs
b2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3ICsxMDMyLDMwIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOworICAgICAgICBtX3Byb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSk7CisgICAgICAgIG1f
b3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZz4obV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+
Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9u
Q291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9j
dXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9j
ay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9y
Qnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1
cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQ
cmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCld
OworICAgICAgICAgICAgICAgIG1fb3BlcmFuZFRvUmVnLmZpbGwoQWxsb2NlZFJlZygpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMu
YXJndW1lbnQoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAg
ICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmxvY2FsKGkpID0gU3BlY0J5dGVjb2RlVG9w
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVz
Lm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5U
eXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKICAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9z
bG93Q2FzZXMuc2l6ZSgpOwogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0
ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CiAgICAgICAg
ICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBo
ZXJlIGFyZSB1bnJlYWNoYWJsZS4KQEAgLTQ3Niw2ICsxMzAwLDkgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklU
SW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9m
ZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTksNiAr
MTM0Niw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwogCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAg
IGJyZWFrcG9pbnQoKTsgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnaXN0ZXIgYWxsb2Nh
dGUgdGhlIHNsb3cgcGF0aHMuCisKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5w
dHIoKTsKQEAgLTc3Miw2ICsxNjAyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFi
ZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAg
Ly8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1
bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAg
YnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTg5NSwzMzIgQEAgU2Vjb25kcyBKSVQ6
OnRvdGFsQ29tcGlsZVRpbWUoKQogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUg
KyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KIAordm9pZCBK
SVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIC8vIE9PUFMhCisgICAgYm9vbCBiID0gdHJ1
ZTsKKyAgICBpZiAoYikKKyAgICAgICAgYnJlYWtwb2ludCgpOworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1
bXBMaXN0IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3Rl
clNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVy
U2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJh
bms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMo
cmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFs
bG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMg
UmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIg
c3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0
aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVk
IHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEg
aG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21w
dXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8g
T09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJl
bnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBP
T1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJT
ZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJl
c3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOwor
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKCkK
K3sKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lz
dGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAg
ICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJ
VDo6YWxsb2NhdGVGUFIoKQoreworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxv
Y2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBh
dXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFsdWUu
aXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0g
bV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUu
aXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sK
KyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAg
UkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3ByXS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50
MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9y
ZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJh
bmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAg
IG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9yZWdpc3RlcnNbZnByXS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJs
ZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3Jl
NjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFu
ZCkgPSBncHI7CisgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICBtX3JlZ2lz
dGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworICAgIG1fcmVnaXN0ZXJzW2Zwcl0ub3BlcmFu
ZCA9IG9wZXJhbmQ7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91
YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxs
b2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgZ3By
Rm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQg
PSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJl
Z1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1
bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9
CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sK
K30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitK
SVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisK
K0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRG
UFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2Nh
dGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30K
KworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIg
IT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJ
bnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5k
Ojp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJS
ZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgICAgICAvLyBPT1BTOiBkbyBzbWFydGVyIHRoaW5ncyBmb3IgYSBj
b25zdGFudCBoZXJlLgorICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3Bl
cmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBt
X2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9wZXJhbmQgPSBtX29wZXJh
bmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQo
b3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisK
K0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE9PUFM6IGNvbnNpZGVyIHVzaW5nIEZQUiBpZiB0aGVyZSdzIGFuIEZQUiBhbGxv
Y2F0ZWQgZm9yCisgICAgICAgIC8vIHRoaXMgb3BlcmFuZC4KKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1f
b3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIC8vIE9PUFM6IGFkZCBhbiBhc3NpZ25SZWcgaGVs
cGVyCisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAg
ICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9
CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6
RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3Bl
cmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisK
K0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIHsKKyAgICAgICAgRlBS
UmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAg
ICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAg
ICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29w
ZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2
YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisg
ICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOwor
CisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJh
bmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAg
ICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3du
Tm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAg
ICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9
CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1f
aml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZnByOworCisgICAgcmV0dXJuIG1fZnBy
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNp
bmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VK
SVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVy
TWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTUzLDYgKzU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxs
TGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0
YWJsZTsKQEAgLTE4Myw2ICsxODYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19B
TElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJh
c2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhD
YWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMTk1
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1
bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWRE
ZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZz
ZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhl
IFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQs
IGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0K
ICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNjIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3Bp
bGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNw
aWxsRm9yQ2FsbEltcGwoKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBj
b2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxs
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsK
QEAgLTQ3NCw4ICs0ODAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxV
RTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CkBAIC03MjUsOCArNzMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAg
dm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAg
ICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdp
c3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKTsKQEAgLTc4Niw2ICs3OTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjpl
bmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7
CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRz
PE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICAgICAgfQpAQCAtNzk1LDYgKzgwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRp
b25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAg
ICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRo
UmV0dXJuVHlwZShvcGVyYXRpb24pOwogICAgICAgICB9CkBAIC04MTMsNiArODE5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTx0eXBl
bmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhS
ZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3Bl
cmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
KyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc3RhdGljX2Fzc2VydChp
czY0Qml0VHlwZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0
VHlwZT46OnZhbHVlLCAiV2luNjQgY2Fubm90IHVzZSBzdGFuZGFyZCBjYWxsIHdoZW4gcmV0dXJu
IHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4iKTsKICAgICAgICAgICAgIHNldHVwQXJndW1l
bnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTkyMiw2ICs5MjksOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9u
KCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiop
OworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBz
dGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTMyLDYgKzk0
MiwxMDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFy
eU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFy
eU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgR1BSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisK
KyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBs
b3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBN
aWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVn
IH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAg
RlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3Byb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBm
cHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2lu
ZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUg
aW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRl
R1BSKCk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldElu
dDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmly
dHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJl
Z2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1
bmxvY2soUmVnKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAg
ICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAgLTk4Nyw2ICsxMDk2LDMyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAg
ICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4
IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1
cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4gbV9wcm92ZW5UeXBlczsKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAg
ICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFu
dHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAg
ICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIg
eyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRS
ZWc+IG1fb3BlcmFuZFRvUmVnOworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2Nr
Q291bnQgeyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKyAg
ICAgICAgfTsKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAg
IH07CisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworICAgICAgICBSZWdpc3Rl
ck1hcDxSZWdWYWx1ZT4gbV9yZWdpc3RlcnM7CisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxz
ZSB9OworICAgICAgICBWZWN0b3I8SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw0MiArNDYsNDMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEps
ZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFu
QW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Smxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JF
cXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
T3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
bk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3Nl
cT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQpAQCAtMTYwLDIzICsxNjEsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29u
c3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBE
b3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBp
bmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAg
IC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBj
b25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1l
ZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogaGFuZGxlIGNs
b2JiZXJpbmcgdGhlIHJlZ3MKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CkBAIC00NjMsNyArNDg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChj
b25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVu
YW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24p
CiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7
CkBAIC00NzMsNiArNDk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAg
LTc4Niw2ICs4MDksMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0
aQogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1w
IHJlc3VsdEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1
bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAg
ICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNl
bHNlCkBAIC05MDEsMTQgKzkzNiw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0
IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJ
bnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwg
cmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikp
CisgICAgICAgIHJldHVybjsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBK
SVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9N
YXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwpAQCAtMTIxNSwxNCArMTI4Nyw0MSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygp
KQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVz
dWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
TXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVNdWwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRNdWxJQyogbXVsSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwpAQCAtMTIzMSw4ICsxMzMwLDMyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9j
b2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNo
U3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAg
ICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjYzNjY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5MywxMSArMzkzLDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVy
YW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVz
c0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFu
dHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTEwMjMs
OCArMTAzNCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nh
cmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdD
IHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0g
ICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9
IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVk
KCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMTA1MCwyMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBl
bHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjM2NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7Cisg
ICAgICAgIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1
Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNv
ZGVPZmZzZXRdLCB0cnVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404037</attachid>
            <date>2020-07-10 20:14:09 -0700</date>
            <delta_ts>2020-07-16 19:35:16 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>84608</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjM2
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDc5OSBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X29iamVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAg
ICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoK
KyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2Fz
ZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAg
Y2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0
cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZh
bHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAg
Y2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9u
dWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAg
ICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ug
b3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6
CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5
dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFj
aFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAg
ICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAg
ICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHBy
b2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7
CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
Y2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5
YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qg
b2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAg
IC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVw
ZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhv
dyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBE
RlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFz
aWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGlj
dGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAg
ICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3Ro
KCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFk
ZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpKSAvLyBPT1BTOiBhZGQgbmV3IG9wdGlvbi4KKyAgICAgICAgbV9ncmFw
aC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRp
Y3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgK
QEAgLTc2LDYgKzg3MSw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNl
TE9MID0gU3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCkpID09ICJmb28i
OwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTQwLDYgKzkzNiw3IEBAIHZvaWQgSklUOjphc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKQogI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCiAgICAg
Y2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0
Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAg
ICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgp
OyBcCiAgICAgICAgIH0gXApAQCAtMTU2LDEzICs5NTMsMTUgQEAgdm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwK
ICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSBcCisg
ICAgICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAog
ICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFt
ZSk7IFwKKyAgICAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgXAorICAgICAgICAgICAg
ZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25h
bWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKQEAgLTE3
Niw2ICs5NzUsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAobV91c2VMT0wp
CisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKICAgICAKQEAgLTIzMSw3ICsxMDMzLDMwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2Fz
ZSA9IDA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBu
dWxscHRyOworICAgICAgICBtX3Byb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+
KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSk7CisgICAgICAgIG1fb3Bl
cmFuZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZz4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29u
c3RhbnRzKCkuc2l6ZSgpKTsKKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291
bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJy
ZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+
bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOwor
ICAgICAgICAgICAgICAgIG1fb3BlcmFuZFRvUmVnLmZpbGwoQWxsb2NlZFJlZygpKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMuYXJn
dW1lbnQoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAg
ICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmxvY2FsKGkpID0gU3BlY0J5dGVjb2RlVG9wOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51
bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBl
cy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKICAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93
Q2FzZXMuc2l6ZSgpOwogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNv
ZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgICAg
ICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJl
IGFyZSB1bnJlYWNoYWJsZS4KQEAgLTQ3Niw2ICsxMzAxLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNl
dCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTksNiArMTM0
Nyw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIGJy
ZWFrcG9pbnQoKTsgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnaXN0ZXIgYWxsb2NhdGUg
dGhlIHNsb3cgcGF0aHMuCisKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRl
Y29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIo
KTsKQEAgLTc3Miw2ICsxNjAzLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmco
SklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwo
KSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8g
T09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAg
OiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJl
YWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBt
X2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTcsNiArMTg5NSwzNTUgQEAgU2Vjb25kcyBKSVQ6OnRv
dGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUg
KyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklU
OjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBl
bmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1Jl
Z2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0
dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZv
ciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3Qg
bmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNv
cnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVn
aXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVn
ID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250
YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAg
ICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0
YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJl
dHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBm
b3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0
IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBz
b3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtl
eTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0
KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAg
ICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRp
ZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJl
LCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAg
IC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdp
c3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAg
ICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAg
fSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVH
UFIoKQoreworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1f
cmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAg
ICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJS
ZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcv
IGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkg
eworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdW
YWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNv
bWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFw
IGFncmVlLgorCisgICAgaWYgKG1fcmVnaXN0ZXJzW3JlZ10uaXNBbGxvY2F0ZWQpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBtX3JlZ2lzdGVyc1tyZWddLm9wZXJhbmQ7Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQ
UigpKQorICAgICAgICAgICAgICAgIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3By
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX29w
ZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAg
IH0KKyAgICB9CisgICAgbV9yZWdpc3RlcnNbcmVnXSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2
b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2
ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9i
YmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7Cisg
ICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAg
ICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIo
YWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCisKK3Zv
aWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sK
KyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAg
UkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3ByXS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50
MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9y
ZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJh
bmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAg
IG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9yZWdpc3RlcnNbZnByXS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJs
ZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3Jl
NjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFu
ZCkgPSBncHI7CisgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICBtX3JlZ2lz
dGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworICAgIG1fcmVnaXN0ZXJzW2Zwcl0ub3BlcmFu
ZCA9IG9wZXJhbmQ7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91
YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxs
b2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgZ3By
Rm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQg
PSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJl
Z1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1
bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9
CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sK
K30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitK
SVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisK
K0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRG
UFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2Nh
dGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30K
KworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIg
IT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJ
bnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5k
Ojp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJS
ZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgICAgICAvLyBPT1BTOiBkbyBzbWFydGVyIHRoaW5ncyBmb3IgYSBj
b25zdGFudCBoZXJlLgorICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3Bl
cmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBt
X2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9wZXJhbmQgPSBtX29wZXJh
bmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQo
b3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisK
K0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE9PUFM6IGNvbnNpZGVyIHVzaW5nIEZQUiBpZiB0aGVyZSdzIGFuIEZQUiBhbGxv
Y2F0ZWQgZm9yCisgICAgICAgIC8vIHRoaXMgb3BlcmFuZC4KKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1f
b3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIC8vIE9PUFM6IGFkZCBhbiBhc3NpZ25SZWcgaGVs
cGVyCisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAg
ICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9
CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6
RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3Bl
cmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisK
K0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIHsKKyAgICAgICAgRlBS
UmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAg
ICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAg
ICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29w
ZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2
YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisg
ICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOwor
CisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJh
bmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAg
ICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3du
Tm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAg
ICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9
CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1f
aml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZnByOworCisgICAgcmV0dXJuIG1fZnBy
OworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNl
ZFBvaW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01Myw2ICs1NCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5
QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNs
YXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENv
ZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xODMsNiArMTg2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5NSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjYyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTQ3NCw4ICs0ODcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJl
bGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwor
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
biwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC03MjUsOCArNzM4LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
KTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQog
ICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc4Niw2ICs3OTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFz
UmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVy
YXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdz
KQogICAgICAgICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICAgICAgfQpAQCAtNzk1LDYgKzgwNyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRy
YWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFs
dWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4o
YXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a0FuZFNsb3dQYXRoUmV0dXJuVHlwZShvcGVyYXRpb24pOwogICAgICAgICB9CkBAIC04MTMsNiAr
ODI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6
aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlw
ZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAg
ICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3Mp
CiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc3Rh
dGljX2Fzc2VydChpczY0Qml0VHlwZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25U
eXBlPjo6UmVzdWx0VHlwZT46OnZhbHVlLCAiV2luNjQgY2Fubm90IHVzZSBzdGFuZGFyZCBjYWxs
IHdoZW4gcmV0dXJuIHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4iKTsKICAgICAgICAgICAg
IHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTkyMiw2ICs5
MzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
KCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJ
bnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygp
OwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApA
QCAtOTMyLDYgKzk0OSwxMDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQ
cm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgR1BSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7
CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIo
KTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJl
IGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJ
bnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwor
ICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3By
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVy
YW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOwor
ICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb3ZlblR5cGVzLm9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAg
ICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5m
cHI7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQz
MlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1
bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJs
eSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BS
UmVnIGFsbG9jYXRlR1BSKCk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAg
ICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBz
ZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFs
dWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAg
ICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnBy
ZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAgLTk4Nyw2ICsx
MTAzLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBC
eXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4gbV9wcm92ZW5UeXBlczsKKyAgICAgICAgc3RydWN0IEFsbG9jZWRS
ZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVu
Ym94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1l
LgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisgICAgICAgIE9wZXJh
bmRzPEFsbG9jZWRSZWc+IG1fb3BlcmFuZFRvUmVnOworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUg
eworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAg
dWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsg
ZmFsc2UgfTsKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3Jt
YXQ7CisgICAgICAgIH07CisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworICAg
ICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gbV9yZWdpc3RlcnM7CisgICAgICAgIGJvb2wgbV91
c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw0
MiArNDYsNDMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdy
ZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFu
QW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICAvLyBPT1BTOiB2ZXJpZnkg
TmFOCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFs
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTYwLDIzICsxNjEsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBX
ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFz
dCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0
YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09Q
UzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFs
c2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC00NjMsNyArNDg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
K3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qg
bm90SW50MzJPcDI7CkBAIC00NzMsNiArNDk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEs
IHJlZ1QwKTsKQEAgLTc4Niw2ICs4MDksMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNv
bnN0IEluc3RydWN0aQogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHJlc3VsdEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0
LmdwcigpLCByZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdw
cigpKTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKICNlbHNlCkBAIC05MDEsMTQgKzkzNiw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91
cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYg
YXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUo
bGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxl
LmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3cs
IHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgaWYgKCFoYXNBbnlTbG93
Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2lu
c3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwpAQCAtMTIxNSwxNCAr
MTI4Nyw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZv
aWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50
MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJo
cy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVs
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgaWYgKCFoYXNBbnlTbG93Q2Fz
ZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwpAQCAtMTIzMSw4ICsxMzM5
LDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5MywxMSArMzkzLDYg
QEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3Rv
cmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmly
dHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2
ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAv
LyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lz
dGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUo
aW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTEwMjMsOCArMTAzNCwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gcmVnaXN0ZXJzIHRvIHph
cCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAg
Ly8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVf
dCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENv
ZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikg
eworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7Cisg
ICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFi
bGUpKTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJp
YWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVC
bG9jayk7CiAKQEAgLTEwMzUsOSArMTA1MCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2Nv
cGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVn
VDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0g
cmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
bG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJs
aWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAg
ICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAg
ICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1Q
TElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0
cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRl
Y29kZU9mZnNldF0sIHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404517</attachid>
            <date>2020-07-16 19:35:16 -0700</date>
            <delta_ts>2020-09-22 14:34:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>145438</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjYzNjY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjM2
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2MzY2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDc5OSBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X29iamVjdF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAg
ICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoK
KyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2Fz
ZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAg
Y2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0
cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZh
bHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAg
Y2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9u
dWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAg
ICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ug
b3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6
CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5
dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFj
aFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAg
ICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAg
ICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHBy
b2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7
CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
Y2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5
YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qg
b2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAg
IC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVw
ZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhv
dyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBE
RlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFz
aWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGlj
dGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAg
ICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3Ro
KCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFk
ZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpKSAvLyBPT1BTOiBhZGQgbmV3IG9wdGlvbi4KKyAgICAgICAgbV9ncmFw
aC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRp
Y3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgK
QEAgLTc2LDYgKzg3MSw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNl
TE9MID0gU3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCkpID09ICJmb28i
OwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTQwLDYgKzkzNiw3IEBAIHZvaWQgSklUOjphc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKQogI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCiAgICAg
Y2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0
Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAg
ICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgp
OyBcCiAgICAgICAgIH0gXApAQCAtMTU2LDI2ICs5NTMsMjcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwK
ICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAK
ICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNu
YW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICBORVhUX09QQ09ERShv
cF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dD
YXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1
bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiB7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBydW5QcmVkaWN0aW9uUHJv
cGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0
YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCkBAIC0yMzEsNyAr
MTAyOSwzMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAg
ICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgbV9wcm92ZW5U
eXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25z
dGFudHMoKS5zaXplKCkpOworICAgICAgICBtX29wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9j
ZWRSZWc+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxs
ZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSk7CisgICAgfQor
CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50
QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJs
b2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOwor
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRI
ZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBtX29wZXJhbmRU
b1JlZy5maWxsKEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAg
ICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmFyZ3VtZW50KGkpID0gU3BlY0J5dGVjb2RlVG9w
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVz
Lm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBl
cy5sb2NhbChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0YW50cygpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29u
c3RhbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVk
IHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUlu
ZGV4Lm9mZnNldCgpID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRl
Y29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCkBAIC00NzYs
NiArMTI5Nyw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAorICAgICAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0
cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUo
KSwgIlxuIik7CiAgICAgfQpAQCAtNTE0LDEyICsxMzM4LDE3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3VudGVk
QXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CiAg
ICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBm
b3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93Q2Fz
ZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRleDsK
IAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCks
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBm
aXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wcy5saW5rKHRo
aXMpOworCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsg
Ly8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnaXN0ZXIgYWxsb2NhdGUgdGhlIHNsb3cgcGF0
aHMuCisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7
CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAg
ICAKQEAgLTYzMSwxMSArMTQ2MCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxv
ZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwg
IlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9z
bG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwg
Ik5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAt
IDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29k
ZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRI
X01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9
IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNl
IGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0
VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBs
aW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBB
YnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CkBAIC03NzIsNiAr
MTU5OSwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxlbWVu
dCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVtcHMp
CisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAg
ICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCkBAIC0xMDU3LDYgKzE4OTEsMzk5IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVUaW1l
KCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21w
aWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4
aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1bXBMaXN0IHsg
anVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBjb21w
dXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJl
LiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAv
LyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hl
bmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3Ig
YXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93
ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6
bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVn
aXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBh
bGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYWRk
KHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0ZXJT
ZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVy
ZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAg
Ly8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNo
ZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9y
IGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dl
ZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30K
Kworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzogZ2V0
IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJs
b2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkg
ZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlz
IGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3Vs
dDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25z
dHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVy
biByZXN1bHQuZ2V0KCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKCkKK3sKKyAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0g
bV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgewor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWdd
OworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFs
dWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2Nh
dGVGUFIoKQoreworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigp
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3Rl
cnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpj
bG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5
IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAg
IGlmIChtX3JlZ2lzdGVyc1tyZWddLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gbV9yZWdpc3RlcnNbcmVnXS5vcGVyYW5kOworICAgICAgICBpZiAob3Bl
cmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAg
ICAgICAgICBtX29wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcub3Bl
cmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAgfQorICAg
IG1fcmVnaXN0ZXJzW3JlZ10gPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6OnNwaWxs
Rm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0
byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYg
KCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBs
KHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkp
OworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1
c2VkUmVnaXN0ZXJzKCkKK3sKKyAgICAvLyBPT1BTOgorICAgIHJldHVybiB7IH07Cit9CisKKwor
dm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQor
eworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJ
bnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0
b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7Cisg
ICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNl
dERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tmcHJdLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRl
bXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91
YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGdwcjsKKyAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgIG1fcmVn
aXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgbV9yZWdpc3RlcnNbZnByXS5vcGVy
YW5kID0gb3BlcmFuZDsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNvZGVE
b3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2dwcl0uaXNB
bGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICBn
cHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFu
ZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYg
cmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6
OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVn
XTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsK
K30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQor
eworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30K
KworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxv
Y2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOwor
fQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2Zw
ciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6
OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJh
bmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIC8vIE9PUFM6IGRvIHNtYXJ0ZXIgdGhpbmdzIGZvciBh
IGNvbnN0YW50IGhlcmUuCisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9v
cGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9
IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3Bl
cmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQz
MlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0
LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAg
ICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJu
IG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQo
b3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisK
K0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
Z3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9w
ZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAg
ICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9n
cHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5k
LCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVy
YW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVl
T3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6
VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBjb25zaWRlciB1
c2luZyBGUFIgaWYgdGhlcmUncyBhbiBGUFIgYWxsb2NhdGVkIGZvcgorICAgICAgICAvLyB0aGlz
IG9wZXJhbmQuCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAg
ICAvLyBPT1BTOiBhZGQgYW4gYXNzaWduUmVnIGhlbHBlcgorICAgICAgICBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9n
cHJdLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7
CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAg
ICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5k
OjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1
cm4gbV9mcHI7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAg
ICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1w
IHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVG
UFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9q
aXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlw
ZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3By
IH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUo
Z3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCkgPSBtX2ZwcjsKKworICAgIHJldHVybiBtX2ZwcjsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2
LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpT
SW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRl
ICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3
dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNv
ZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAg
ICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAg
ICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1
bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSArMTA1LDE3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAg
ICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0
ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQp
CisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBzOworICAgICAgICBS
ZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFz
ZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiB7IElu
dmFsaWRGUFJSZWcgfTsKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0x
ODMsNiArMTg5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRl
cmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5OCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAg
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRl
cjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNl
dCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBi
ZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJs
ZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5
IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGlj
OgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+
SklUKCk7CkBAIC0yNjMsNiArMjY1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBz
cGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJ
bXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOwor
ICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4K
ICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMwMiw3ICszMTgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwogICAgICAgICB2b2lkIGFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNlKCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChK
dW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzI2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2
b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAg
ICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29k
ZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKQEAgLTMyNyw3ICszNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBj
b21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29s
IGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM1Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxl
T3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVx
LCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAg
ICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBl
LCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
VmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9k
ZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZp
bHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTQ3NCw4ICs0OTAsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00
ODMsOCArNDk5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAg
IAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCkBAIC01MTEsOSAr
NTI3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93
aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
YnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDEsNjggKzY1Nyw2OCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
IAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5j
dGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wg
aXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5z
aWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKQEAgLTcyNSw4ICs3NDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lk
IGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZv
aWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
KTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIp
OwpAQCAtNzQzLDM0ICs3NTcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1
bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxp
bmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAg
IGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5p
c1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBW
aXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29k
ZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZz
ZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2Vz
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlu
a0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC03ODYsNiArNzgwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAg
IGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsK
ICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KQEAgLTc5NSw2ICs3OTAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8
dHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OlJlc3VsdFR5cGUsIFNsb3dQ
YXRoUmV0dXJuVHlwZT46OnZhbHVlLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2Fs
bE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgICAgIHNldHVwQXJndW1l
bnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUob3BlcmF0aW9uKTsKICAg
ICAgICAgfQpAQCAtODEzLDYgKzgwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46OlJlc3VsdFR5cGUsIFNsb3dQYXRoUmV0dXJuVHlwZT46OnZhbHVlLCBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwo
KTsKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoaXM2NEJpdFR5cGU8dHlwZW5hbWUgRnVuY3Rp
b25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OlJlc3VsdFR5cGU+Ojp2YWx1ZSwgIldpbjY0IGNhbm5v
dCB1c2Ugc3RhbmRhcmQgY2FsbCB3aGVuIHJldHVybiB0eXBlIGlzIGxhcmdlciB0aGFuIDY0IGJp
dHMuIik7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4u
KTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7CkBAIC05MjIsNiArOTE5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAg
ICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCBy
ZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVU
aW1lcygpOwogICAgICAgICAKQEAgLTkzMiw2ICs5MzIsMTE3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BS
VGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJik7CisgICAg
ICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJUZW1w
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAg
ICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3BlcmFu
ZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAg
ICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMy
LiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3Qg
YmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3BlcmFu
ZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAg
ICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
Y2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVP
cGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1
ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAg
ICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnBy
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYg
cHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fcHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRl
ZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRp
b25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFu
ZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX29wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUg
Zm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVh
bFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyk7CisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcp
OworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKCk7CisKICAgICAgICAgSW50ZXJw
cmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2Fs
bHM7CkBAIC05NTAsNyArMTA2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8
SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29k
ZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3Rv
cjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
dW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC05ODcsNiArMTA5OCwzMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAg
ICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJy
ZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+IG1fcHJvdmVuVHlwZXM7CisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAg
ICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRz
CisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAg
IEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVn
PiBtX29wZXJhbmRUb1JlZzsKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0Nv
dW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisgICAg
ICAgIH07CisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9
OworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKyAgICAgICAgUmVnaXN0ZXJN
YXA8UmVnVmFsdWU+IG1fcmVnaXN0ZXJzOworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2Ug
fTsKKyAgICAgICAgVmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBAIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFu
ZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEps
ZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1
YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9y
RXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgLy8gT09QUzogdmVyaWZ5IE5hTgorICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5P
ckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9y
ZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5n
cmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9y
RXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhh
bkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxB
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNl
LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2Us
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxl
c3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5n
cmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBz
bG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEs
IHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIz
ICsxNjEsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24g
ZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91
YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9u
IGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3Ig
dGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVk
aWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGlt
bWVkaWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25k
aXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRp
dGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJl
Z3MKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAg
IGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0y
NzIsMTYgKzI5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24g
Y29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNp
emUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCks
IGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMjg5LDggKzMxMSw2
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAvLyAtIGNv
bnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBm
bG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkg
ewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMjk5LDggKzMxOSw2IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9
IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7CkBAIC0zMjUsOCArMzQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYg
KHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0
ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiArMzY2LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAg
ICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwz
ID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZklu
dDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAg
ICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9E
b3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY4LDkgKzM4Myw5IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAg
ICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAg
ICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC00MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KKyAgICAvLyBPT1BTOiBzbG93IHBhdGggc2xvdyBvcAogICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQpAQCAtNDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOwogfQpAQCAtNDYzLDcgKzQ3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
KQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3Ay
OwpAQCAtNDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBA
IC01NjEsMTUgKzU3NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3Qg
SW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1Qz
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CkBAIC03MjMsMTAgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAv
LyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVO
ZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNT
bG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOwpAQCAtNzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBu
b3QzMihyZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1
bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IE9PUFMKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBAIHZv
aWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRk
SUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAg
IGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAg
ICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZw
cigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQ
cm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRB
ZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihh
ZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1p
emUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUp
OwogfQpAQCAtMTIxNSwzMiArMTI3MCw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJm
bG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVs
SUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVs
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklD
KGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5n
cHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQz
MihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjM2NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsMTAgKzE0NSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxF
dmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIHJlZ1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
ICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBA
IC0zMzQsNDQgKzMzMCw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5z
dHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxs
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2Fs
bFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZh
cmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikK
QEAgLTQxMSwxNCArNDA3LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29u
c3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAg
IC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBp
dGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCAr
NTEzLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBm
YXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0
ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9y
TmV4dD4oKTsKQEAgLTUyNiw3ICs1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2Rl
Lm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAg
ICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAg
ICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7
CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29ucwogICAgIH0KIAogICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
KyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJl
c3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAkocmV2aXNpb24gMjYzNjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NiwyNSArMTY2LDYgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5
dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
LXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYg
aXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50
KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNiwyNyArMTg3LDI5IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtU
byhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xv
d0Nhc2UoKQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Ns
b3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9i
eXRlY29kZUluZGV4KQorICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4
KTsKKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBlbnN1cmVTbG93Q2FzZSgpLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQogewogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtl
IFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1w
dHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UoKTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygp
KQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0z
OTMsMTEgKzM3Niw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0
KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlz
aW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlz
aW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihj
b25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0
YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIgYWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChz
cmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtMTA2
LDEwICsxMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAg
ICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBA
IC0xNzMsMTAgKzE4Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHIKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKQEAgLTc0
OCwyMCArNzU1LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIK
ICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKQEAgLTEwMjMsOCArMTAyNiwx
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gcmVn
aXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9s
b25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJl
LgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChz
aXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJl
c3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcHJv
dmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMTA0MiwyMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHQ7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA5OSwyMCArMTEyMCwxNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1CiAKIC8vIFNsb3cgY2Fz
ZXMKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CkBAIC0x
MTIwLDMwICsxMTM3LDI0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1
Y3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTY5LDEzICsxMTgwLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQg
dGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNh
bkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAg
LTExOTIsNyArMTIwMSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwot
ICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjE1LDEwICsxMjIzLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3Vw
ZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTE0NjMsMTAgKzE0NjksOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
by5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgs
IFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBh
dGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAg
ICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC00NjUsNyArNDU5
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
ICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVy
IHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9u
IEFSTS4KQEAgLTUwMyw4ICs0OTYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lk
KGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC01NDIsOCArNTMzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg4LDggKzU3Nyw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjI5LDggKzYxNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjc4LDggKzY2Myw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcxOSw4ICs3MDIsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDAwLDggKzk4MSw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTE1Nyw4ICsxMTM2LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dElu
Zm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVs
ZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewot
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFs
PigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0K
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKytt
X2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
ICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHBy
b2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMjkzLDcgKzI4OSw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxX
aXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAg
IGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0
X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zMDEsNyArMjk3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJp
Y3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBn
ZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzA5LDEzICszMDUsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJl
Y3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0
PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
RGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTQwMywxMCArMzk4
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwpAQCAtNDUyLDEwICs0NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRG
aWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC00
OTYsMTAgKzQ4Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4K
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTM1LDEwICs1MjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYwNSwx
MCArNTkyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjIyLDEwICs2MDcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjcx
LDEwICs2NTQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIApAQCAtNzA4LDEwICs2ODksOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC05ODksMTAgKzk2OCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKQEAgLTExNDUsMTAgKzExMjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2MzY2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8v
IE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xv
dyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUo
T1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQt
PnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21f
aml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409399</attachid>
            <date>2020-09-22 14:34:30 -0700</date>
            <delta_ts>2020-09-22 14:50:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>146311</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDc5OSBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6Cisg
ICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6Cisg
ICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNh
c2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
cHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNl
IG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90
aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVn
OgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1
bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9w
X2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3Bl
cnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBv
cF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAg
IGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNl
IG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVx
OgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bf
amdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgor
ICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBv
cF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2Vx
OgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBj
YXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNh
c2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ug
b3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAg
Y2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAgbV9n
cmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6ZSht
X2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0aW9u
c0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9IE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2Nv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsKKyAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2ZpbGUm
IHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFj
aENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
QnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgcHJv
ZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5p
c0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5kZXgo
KSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFyZyA9
IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJsb2Nr
LT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25zQXRI
ZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAgICBp
ZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7Cisg
ICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAvLyBP
T1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAg
Ly8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdv
cml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0
aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5
cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRo
YXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAg
ICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9j
ay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAmJiAh
YmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAgICAg
ICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nl
c3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1
Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJl
bnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVkaWN0
aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2Vk
KTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRkIG5l
dyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC03Niw2ICs4NzEsNyBAQCBKSVQ6OkpJVChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmco
ZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKIHsKKyAgICBtX3VzZUxPTCA9IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJy
ZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5
MzYsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTUz
LDI3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwMjksMzAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
ID0gMDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIG1fcHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICAgICAgbV9vcGVy
YW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25z
dGFudHMoKS5zaXplKCkpOworICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3Vu
dDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJl
bnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5s
ZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVu
dEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRp
Y3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcuZmlsbChBbGxvY2VkUmVnKCkpOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBlcy5hcmd1
bWVudChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMubG9jYWwoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVt
YmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVz
LmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dD
YXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29k
ZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAg
IC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUg
YXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEyOTgsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0
LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTMz
OSwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJl
Q2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29k
ZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRI
YXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgp
OykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dD
YXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9
IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICBpZiAobV91c2VMT0wpCisg
ICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2lz
dGVyIGFsbG9jYXRlIHRoZSBzbG93IHBhdGhzLgorCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBm
aXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC02MzMsMTEgKzE0NjIsOSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRl
ciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0
KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZp
cnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1w
cyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAg
ICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5k
KCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9m
ZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUt
Pm1fY291bnRlcikpOwpAQCAtNzc0LDYgKzE2MDEsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRo
b3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93
UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisgICAgeworICAgICAgICBmb3Ig
KGF1dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAganVtcC5saW5rKHRoaXMpOwor
ICAgICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRo
aXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsxODkyLDM5OSBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhp
dEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9i
YWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6
IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dl
ZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAg
ICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxl
ZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykp
CisgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dl
ZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09Q
UzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQg
Y29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJv
YmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BT
OiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+
IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3Vs
dC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAg
IHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQ
UnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFs
bG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGlu
IHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlr
ZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVz
dHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwg
W10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZv
PigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitHUFJSZWcgSklU
OjphbGxvY2F0ZUdQUigpCit7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICgh
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291
bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICAvLyBPT1BTOiBmaXggZHVw
bGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJz
KCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAg
ICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0Fs
bG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBh
dXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAg
ICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBP
T1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVz
IG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBpZiAobV9yZWdpc3RlcnNbcmVnXS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG1fcmVnaXN0ZXJzW3JlZ10u
b3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBp
ZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcub3BlcmFuZChv
cGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJl
ZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3JlZ2lzdGVyc1tyZWddID0gUmVnVmFsdWUgeyB9
OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dXNlZFJlZ2lzdGVycygpCit7CisgICAgLy8gT09QUzoK
KyAgICByZXR1cm4geyB9OworfQorCisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0
IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3By
XS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBI
YXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9w
ZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZnByXS5pc0Fs
bG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0g
dGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhh
dmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsK
KworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgZnByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGZwcjsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOwor
ICAgIG1fcmVnaXN0ZXJzW2Zwcl0ub3BlcmFuZCA9IG9wZXJhbmQ7CisKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRk
cmVzc0ZvcihvcGVyYW5kKSk7CisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAg
ICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9j
ayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5s
b2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiBy
ZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7Cisg
ICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQm
IGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1w
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQp
CisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7
CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsK
KworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnBy
KTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQu
dW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNl
IHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICAvLyBPT1BT
OiBkbyBzbWFydGVyIHRoaW5ncyBmb3IgYSBjb25zdGFudCBoZXJlLgorICAgICAgICBtX2ppdC5l
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3Rl
cnNbbV9ncHJdLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayht
X2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1f
b3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNo
SWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNw
ZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6
Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9q
aXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQo
KQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAg
ICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1f
aml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBt
X2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKwor
SklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9j
YXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9v
cGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgLy8gT09QUzogYWRkIGFuIGFzc2lnblJlZyBoZWxw
ZXIKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAg
ICAgIG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVy
YW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKwor
RlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgeworICAgICAgICBGUFJS
ZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVn
ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAg
ICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZh
bHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAg
ICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisK
KyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1f
b3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25O
b3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAg
IG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0K
KworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9q
aXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9mcHI7CisKKyAgICByZXR1cm4gbV9mcHI7
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9D
b2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVz
ZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFy
cmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAg
IGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNz
IENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDEsMTUgKzEw
NSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3Qg
U2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAg
ICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJv
bShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAg
IFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0
ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBqdW1wczsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsgLy8gT09Q
UzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cg
cGF0aHMuCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgeyBJbnZhbGlkRlBSUmVnIH07CiAgICAgfTsKIAogICAgIHN0
cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE4OSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xh
c3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAg
ICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApA
QCAtMTkwLDEyICsxOTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7
CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVs
dFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50
IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIg
LSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0
IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhl
IGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9m
ZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9m
ZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9
IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRl
Y29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI2NSwyMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxl
bmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91
c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihS
ZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJ
bXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0
aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMDIs
NyArMzE4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKICAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZSgp
OwogICAgICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1w
KGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChK
dW1wLCBpbnQpOwpAQCAtMzEwLDcgKzMyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZf
dDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zMjcsNyArMzQzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExp
bmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAg
ICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0
IE9wJik7CiAKQEAgLTMzNyw3ICszNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBj
bGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9w
RXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFU
eXBlLCBpbnQganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhT
bG93Q2FzZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29s
IGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAg
ICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBT
aG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlIH07CkBAIC00NzUsOCArNDkxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNF
KEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJl
bGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNDg0LDggKzUwMCw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlv
biosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6
ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVy
dCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50
ZXJPZmZzZXQoKTsKIApAQCAtNTEyLDkgKzUyOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjQz
LDY5ICs2NTksNjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
Y2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVu
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9w
dXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlm
dChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1p
dFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdo
dFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNp
Z25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcyOCw4ICs3NDQsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0
YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3NjAsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24p
OwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJv
bS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAg
ICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lk
IGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYg
c2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNs
b3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFz
QW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0g
ICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVy
KTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAg
ICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9s
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRl
Y29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPik7CkBAIC03ODksNiArNzgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
eworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgICAgIH0KQEAgLTc5OCw2ICs3OTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46OlJlc3VsdFR5cGUsIFNsb3dQYXRoUmV0dXJuVHlwZT46OnZhbHVlLCBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwo
KTsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwog
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0
aFJldHVyblR5cGUob3BlcmF0aW9uKTsKICAgICAgICAgfQpAQCAtODE2LDYgKzgxMiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8dHlw
ZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OlJlc3VsdFR5cGUsIFNsb3dQYXRo
UmV0dXJuVHlwZT46OnZhbHVlLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9w
ZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7
CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
aXM2NEJpdFR5cGU8dHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46OlJlc3Vs
dFR5cGU+Ojp2YWx1ZSwgIldpbjY0IGNhbm5vdCB1c2Ugc3RhbmRhcmQgY2FsbCB3aGVuIHJldHVy
biB0eXBlIGlzIGxhcmdlciB0aGFuIDY0IGJpdHMuIik7CiAgICAgICAgICAgICBzZXR1cEFyZ3Vt
ZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CkBAIC05MjUsNiArOTIyLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlv
bigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAg
c3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5
MzUsMTE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5h
cnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5h
cnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIEdQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBG
UFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkg
bG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4g
TWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJs
ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJ
VCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5k
KCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJl
ZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsK
KworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvdmVuVHlwZXMub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9u
cy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKwor
ICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX29wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJh
bmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
c3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHBy
b2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAg
ICBHUFJSZWcgYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7Cisg
ICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2
b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0
SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9jayhSZWcp
OworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVn
aXN0ZXJzKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAg
ICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyArMTA2NCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4g
bV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAK
ICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7
CkBAIC05OTAsNiArMTEwMSwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAg
IEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAg
IFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7Cisg
ICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAg
ICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fcHJvdmVuVHlwZXM7CisgICAgICAgIHN0
cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2
ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQg
dGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9Owor
ICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnPiBtX29wZXJhbmRUb1JlZzsKKyAgICAgICAgc3Ry
dWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsK
KyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBp
c0FsbG9jYXRlZCB7IGZhbHNlIH07CisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCBMb2dFbnRy
eSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERh
dGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1f
ZXhpdExvZzsKKyAgICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IG1fcmVnaXN0ZXJzOworICAg
ICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPEp1bXBMaXN0PiBt
X2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
bik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9y
ZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3Vi
bGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgLy8g
T09QUzogdmVyaWZ5IE5hTgorICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExl
c3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9y
VW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
biwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBm
YWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Nl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
c0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFu
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0
ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNl
LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBz
bG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwg
dHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIzICsxNjEsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBX
ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFz
dCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0
YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09Q
UzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFs
c2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMTYgKzI5NCwxNiBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBv
cDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGlu
dmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0
YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQs
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAKICAgICAv
LyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUg
c2xvdyBwYXRoOgpAQCAtMjg5LDggKzMxMSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmkKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRp
bmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRp
bmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBp
c09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjAp
OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMjk5LDgg
KzMxOSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9
CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkg
ewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAg
ICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjUsOCArMzQz
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAg
ICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAg
ICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiArMzY2LDEx
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQu
Ci0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWls
MSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIo
cmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAg
ICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY4
LDkgKzM4Myw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAg
ICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAg
ICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAK
LSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC00
MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9t
b2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBPT1BTOiBzbG93IHBhdGggc2xv
dyBvcAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQpAQCAt
NDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQog
ewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAtNDYzLDcgKzQ3Nyw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShK
U1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3Vi
bGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3Ax
OwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBs
ZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzU3NiwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTAgKzczNiw4IEBA
IHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElD
RmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5l
Z0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRv
IGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBi
ZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOwpAQCAt
Nzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rp
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3Vs
dEdQUi5ncHIoKSk7CisgICAgICAgICAgICBub3QzMihyZXN1bHRHUFIuZ3ByKCkpOworICAgICAg
ICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIC8vIE9PUFMKKyAgICB9CisKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vs
c2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3Qg
SW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJ
VEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJl
c3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
YWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklU
QWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwog
ICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOwogfQpAQCAtMTIxNSwzMiArMTI3MCw5NCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygp
KQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVz
dWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG11
bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11
bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAg
ICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQ
cm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMs
IG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkp
KTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0Lmdwcigp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURv
dWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxo
cy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91Ymxl
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2lu
c3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRo
SUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSw4IEBAIGJvb2wgSklUOjpjb21w
aWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBA
IC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzAsNDQgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1
Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsK
KyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
KTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29u
c3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC00MTEsMTQgKzQwNywxNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBsaW5r
QWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhz
bG93Q2FzZSk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlz
dCBub3RPYmplY3Q7CkBAIC01MTUsMTAgKzUxMywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTI1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAg
ICAgLy8gT09QUworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAg
SnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nh
c2UpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYs
MjUgKzE2Niw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAg
ICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5
PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2Vz
LmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0
ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklU
OjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
X2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
Iik7CkBAIC0yMDYsMjcgKzE4NywyOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5F
IFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQot
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRl
eCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxh
c3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3Qo
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBq
dW1wKQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDog
anVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UoKS5qdW1wcy5h
cHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1w
TGlzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8g
RG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKCk7CisgICAgZm9yIChjb25zdCBKdW1w
JiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5k
KGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwg
aW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzkzLDExICszNzYsNiBAQCBBTFdBWVNfSU5MSU5FIGRv
dWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1Vu
ZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
IAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBG
UFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsx
MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0
Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX3NyYzsKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBN
YWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9j
YXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSkKQEAgLTEwNiwxMCArMTE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTczLDEwICsxODIsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgCkBAIC03NDgsMjAgKzc1NSwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5z
dHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CkBAIC0xMDIzLDggKzEwMjYsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29u
c3QgSW5zdHJ1Y3RpbwogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0g
ICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAg
IGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJp
YWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRW
YWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOwor
ICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkg
KzEwNDIsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2Nv
cGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQt
PmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSksIHNjb3BlKTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTEwOTksMjAgKzExMjAsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNv
bnN0IEluc3RydQogCiAvLyBTbG93IGNhc2VzCiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVk
SW1tMzIoMHgxKSwgcmVnVDApOwpAQCAtMTEyMCwzMCArMTEzNywyNCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwpAQCAtMTE4NywxMyArMTE5OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1p
emF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JS
ZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0
ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjEwLDcgKzEyMTksNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYK
IH0KIApAQCAtMTIzMywxMCArMTI0MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBs
ZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhi
aXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xNDgx
LDEwICsxNDg3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwog
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4
ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
ICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJl
ZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2
MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMs
OCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsx
MDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAx
LDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDIyICs3OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBpZiAo
aGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dl
dEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5
VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwg
cmVnVDEpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMCwxNiArMTE2LDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
QVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKICAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKQEAgLTMzNCw3ICszMjcsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJ
VDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
OwpAQCAtMzQyLDcgKzMzNSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUg
PSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29k
ZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1MCwxMyArMzQz
LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9Owog
CiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5
VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CkBAIC00NDQsMTAgKzQzNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTQ5MywxMCArNDgzLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwpAQCAtNTM3LDEwICs1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU3NiwxMCArNTYyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC02NDYsMTAgKzYzMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY28KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTY2MywxMCArNjQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTcxMiwxMCArNjkyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRl
ckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKQEAgLTc0OSwxMCArNzI3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTAzMCwx
MCArMTAwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTExODYsMTAgKzExNjAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwog
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSku
cmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkK
ICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhp
cyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxs
KCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1f
Ynl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409401</attachid>
            <date>2020-09-22 14:50:42 -0700</date>
            <delta_ts>2020-09-22 16:00:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>147827</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBTdHJpbmcobV9jb2RlQmxvY2stPmluZmVycmVkTmFtZSgpLmRhdGEoKSkgPT0gImZv
byI7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC0xNDAsNiArOTczLDcgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKICAg
ICBjYXNlIG9wXyMjbmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3Rh
cnRCeXRlY29kZUluZGV4KSB7IFwKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyBcCiAgICAg
ICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7IFwKICAgICAgICAgfSBcCkBAIC0xNTYsMjYgKzk5MCwyNyBAQCB2b2lkIEpJVDo6YXNzZXJ0
U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkg
XAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0K
IAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8j
I25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RF
KG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRo
RnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIp
OwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIHsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Q
cm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBk
YXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3
ICsxMDY2LDMwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAK
ICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICBtX3Byb3Zl
blR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNv
bnN0YW50cygpLnNpemUoKSk7CisgICAgICAgIG1fb3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxs
b2NlZFJlZz4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICB9
CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJl
bnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNB
dEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgICAgIG1fb3BlcmFu
ZFRvUmVnLmZpbGwoQWxsb2NlZFJlZygpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMuYXJndW1lbnQoaSkgPSBTcGVjQnl0ZWNvZGVU
b3A7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlw
ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5
cGVzLmxvY2FsKGkpID0gU3BlY0J5dGVjb2RlVG9wOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0
aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JD
b25zdGFudChpKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgdW5zaWdu
ZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwogICAgICAgICBp
ZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5
dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KQEAgLTQ3
Nyw2ICsxMzM1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAg
IGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudElu
c3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
ICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6
ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTUsMTIgKzEzNzYsMTcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50
ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsK
ICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAg
IGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMu
YmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29k
ZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dD
YXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4
OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwo
KSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4
IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmxpbmso
dGhpcyk7CisKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgYnJlYWtwb2ludCgp
OyAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdpc3RlciBhbGxvY2F0ZSB0aGUgc2xvdyBw
YXRocy4KKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRl
eDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAg
ICAgIApAQCAtNjMzLDExICsxNDk5LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigp
LCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBt
X3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgp
LCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVy
IC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBj
b2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJ
VEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkg
IT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNh
c2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmly
c3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBz
IGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKQEAgLTc3NCw2
ICsxNjM4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzogaW1wbGVt
ZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4aXRKdW1w
cykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOwor
ICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKQEAgLTEwNTgsNiArMTkyOSwzOTkgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRp
bWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0Nv
bXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUo
RXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExpc3Qg
eyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNv
bXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhl
cmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAg
IC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBz
aGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZv
ciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxs
b3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5r
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9S
ZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8
IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5h
ZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3Rl
clNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBo
ZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxs
X29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxv
d2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOwor
fQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBn
ZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2Rl
YmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJs
eSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRo
aXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVz
dWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNv
bnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0
dXJuIHJlc3VsdC5nZXQoKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3Jl
Z107CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdW
YWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxv
Y2F0ZUZQUigpCit7CisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BS
KCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lz
dGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAg
ICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6
OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVu
Y3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisg
ICAgaWYgKG1fcmVnaXN0ZXJzW3JlZ10uaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBtX3JlZ2lzdGVyc1tyZWddLm9wZXJhbmQ7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAg
ICAgICAgICAgIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX29wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgbV9yZWdpc3RlcnNbcmVnXSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3Bp
bGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChh
dXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBp
ZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlcklt
cGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMo
KSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitSZWdpc3RlclNldCBKSVQ6
OnVzZWRSZWdpc3RlcnMoKQoreworICAgIC8vIE9PUFM6CisgICAgcmV0dXJuIHsgfTsKK30KKwor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2dwcl0uaXNBbGxvY2F0ZWQpOworICAgIGJv
eEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsK
KyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6
c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2Zwcl0uaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAg
dGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hE
b3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBz
dG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9w
ZXJhbmQpID0gZ3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgbV9y
ZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICBtX3JlZ2lzdGVyc1tmcHJdLm9w
ZXJhbmQgPSBvcGVyYW5kOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29k
ZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3ByXS5p
c0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRv
JiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFs
dWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJ
VDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1ty
ZWddOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50
OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQp
Cit7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQorewor
fQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZh
bGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ZwciA9IG1faml0LmFs
bG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7
Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJ
VDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3Bl
cmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKwor
R1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9y
IGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
ID0gbV9ncHI7CisgICAgICAgIG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5vcGVyYW5kID0gbV9v
cGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0lu
dDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9q
aXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKwor
ICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1
cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0u
b3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKwor
ICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbCht
X2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9w
ZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcg
cmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFs
dWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklU
OjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IGNvbnNpZGVy
IHVzaW5nIEZQUiBpZiB0aGVyZSdzIGFuIEZQUiBhbGxvY2F0ZWQgZm9yCisgICAgICAgIC8vIHRo
aXMgb3BlcmFuZC4KKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAg
ICAgIC8vIE9PUFM6IGFkZCBhbiBhc3NpZ25SZWcgaGVscGVyCisgICAgICAgIG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1tt
X2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnBy
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQor
eworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJh
bmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2ZwcjsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7Cisg
ICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVP
cGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRl
bXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAg
R1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0
ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBt
X2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7
IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRU
eXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3Bl
cmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJs
ZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKSA9IG1fZnByOworCisgICAgcmV0dXJuIG1fZnByOworfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyAr
NDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUg
PHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwor
ICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwog
ICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMTcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwot
ICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBC
eXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8o
dCkKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBi
YXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICBGUFJSZWcgcmVzdWx0RlBSIHsg
SW52YWxpZEZQUlJlZyB9OwogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAg
LTE4Myw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQg
SklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0lu
dGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMTk4LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAg
ICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2lu
dGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zm
c2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90
IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2Vt
YmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBt
YXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJs
aWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAg
IH5KSVQoKTsKQEAgLTI2Myw2ICsyNjUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxs
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAg
IHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2Fs
bEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7
CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAgICAgICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAyLDcgKzMxOCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CiAgICAgICAgIHZvaWQgYWRk
U2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoKTsKICAgICAgICAgdm9pZCBhZGRKdW1w
KEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICsz
MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwpAQCAtMzI3LDcgKzM0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJv
b2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzUz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBp
bGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsg
RXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwor
ICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5
cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJN
b2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxk
RmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5MSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAg
LTQ4NCw4ICs1MDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKQEAgLTUxMiw5
ICs1MjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5
X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0Myw2OSArNjU5LDY5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShj
b25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3Vt
ZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRo
RnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBi
b29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBp
c1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC03MjgsOCArNzQ0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAg
dm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAg
ICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdp
c3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKTsKQEAgLTc0NiwzNCArNzYwLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0
Y2hGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNs
b3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAg
ICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAg
IH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZy
b20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNs
b3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dD
YXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lk
IGxpbmtBbGxTbG93Q2FzZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BT
CisgICAgICAgICAgICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0K
IAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtNzg5LDYgKzc4Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAg
ICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4u
Lik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CkBAIC03OTgsNiArNzkz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBT
bG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAg
IGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAg
ICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgICAgICBzZXR1cEFy
Z3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKG9wZXJhdGlvbik7
CiAgICAgICAgIH0KQEAgLTgxNiw2ICs4MTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXRUeXBlPHR5cGVuYW1lIEZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlPjo6dmFsdWUsICJXaW42NCBj
YW5ub3QgdXNlIHN0YW5kYXJkIGNhbGwgd2hlbiByZXR1cm4gdHlwZSBpcyBsYXJnZXIgdGhhbiA2
NCBiaXRzLiIpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJn
cy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwpAQCAtOTI1LDYgKzkyMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAg
ICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVw
T3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJv
b2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21w
aWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTM1LDExNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNz
IEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYpOwor
ICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBS
VGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAg
ICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2Zw
ciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBp
bnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQg
bm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+
VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsg
SW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVn
IGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX3Byb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1
bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZFRvUmVnLm9w
ZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBo
ZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKCk7
CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZp
cnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJl
Z2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2so
UmVnKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycygpOworCiAgICAgICAgIElu
dGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBt
X2NhbGxzOwpAQCAtOTUzLDcgKzEwNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVj
dG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0
ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwor
ICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBW
ZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzExMDEsMzIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsK
ICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1f
Y3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlPiBtX3Byb3ZlblR5cGVzOworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAg
ICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJp
YW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
ICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZw
ciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKyAgICAgICAgT3BlcmFuZHM8QWxsb2Nl
ZFJlZz4gbV9vcGVyYW5kVG9SZWc7CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxv
Y2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9Owor
ICAgICAgICB9OworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAg
ICAgfTsKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisgICAgICAgIFJlZ2lz
dGVyTWFwPFJlZ1ZhbHVlPiBtX3JlZ2lzdGVyczsKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZh
bHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgyICs0Niw4MyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Smxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1Ro
YW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5P
ckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6IHZlcmlmeSBOYU4KKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1Ro
YW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5v
cmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5B
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBm
YWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2
MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWMK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24s
IGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUg
Zm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBp
bW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50
IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGlu
dCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVD
b25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBjbG9iYmVyaW5nIHRo
ZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisK
ICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpA
QCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChW
aXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlv
biBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9u
LT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6
ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXpl
LCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXpl
LCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNv
ZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKQEAgLTI4OSw4ICsz
MTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgLy8g
LSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8v
IC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9w
MikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTksNiBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFp
bDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9
IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0g
ICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBm
YWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7
CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2
NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICszODMsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7
CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7Cisg
ICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEwICs0NTAsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AKICAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7
CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3ICs0NjUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRp
dGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQz
Mk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDAp
OwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNv
bnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCBy
ZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdh
dGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVRO
ZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAg
ICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZh
bHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0
aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2ICs3OTcsMTggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdEdQUiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAg
ICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCwg
cmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC05MDEsMTYgKzkyNCw0OCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjpl
bWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJ
VEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAg
ICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJo
cy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
SklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRv
TWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9w
dGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGlt
aXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihP
dmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAg
ICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigpLCByaHMu
ZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJ
VE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRp
bWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6
ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRT
dWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBs
aHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBK
SVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1
YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2Fs
bEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0LDEzICsyNjIsMTEgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlE
OwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAK
QEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJ
bnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENh
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFp
bENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25z
dHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0
VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogCiAgICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpAQCAtNTE1LDEw
ICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
IGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
SXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0
b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNv
ZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAg
ICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwog
ICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIp
KTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4
dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVy
UmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsxNjYsNiBAQCBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAg
aWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBi
eXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAm
JiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODcsMjkg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlu
a1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRk
U2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVT
bG93Q2FzZSgpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1f
c2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBt
X2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5k
ZXgpOworICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKIHsKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRl
eCkpOworICAgIGVuc3VyZVNsb3dDYXNlKCkuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCiB7CiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1h
a2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShl
bXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZSgpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBz
KCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAg
LTM5MywxMSArMzc2LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29u
cwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihk
c3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVj
dD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCAr
MTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1
c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92
KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0aGlzIGJldHRlciBmb3IgY29u
c3RhbnRzIHdoaWNoIGFyZW4ndCByZWdpc3RlciBhbGxvY2F0ZWQgeWV0LgorICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKworICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYg
KHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC0x
MDYsMTAgKzExNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
QEAgLTE3MywxMCArMTgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIApAQCAt
NzQ4LDIwICs3NTUsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtMTAyMyw4ICsxMDI2
LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBy
ZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHBy
b2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1
cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVy
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGog
PCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRk
cmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBw
cm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVC
YXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsxMDQyLDIzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDk5LDIwICsxMTIwLDE2
IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnUKIAogLy8gU2xvdyBj
YXNlcwogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKQEAg
LTExMjAsMzAgKzExMzcsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExODcsMTMgKzExOTgsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1p
dCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAo
Y2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpA
QCAtMTIxMCw3ICsxMjE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7
Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzEyNDEs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19z
dXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3Ry
YXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4MSwxMCArMTQ4Nyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRl
eCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90
UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAg
ICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1
MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0
ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcg
b24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkg
ewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAg
KyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMo
aXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CkBAIC0zMzQs
NyArMzI3LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAg
IHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICszMzUsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwog
Ci0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRl
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0LDEwICs0MzYsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUzNywxMCAr
NTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEwICs2MzAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02
NjMsMTAgKzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4K
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIsMTAgKzY5
Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlv
bik7CkBAIC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYg
KHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBA
QCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BT
PworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0
aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1w
bGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+
bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409417</attachid>
            <date>2020-09-22 16:00:33 -0700</date>
            <delta_ts>2020-09-24 15:31:56 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>147827</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBTdHJpbmcobV9jb2RlQmxvY2stPmluZmVycmVkTmFtZSgpLmRhdGEoKSkgPT0gImZv
byI7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC0xNDAsNiArOTczLDcgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKICAg
ICBjYXNlIG9wXyMjbmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3Rh
cnRCeXRlY29kZUluZGV4KSB7IFwKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyBcCiAgICAg
ICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7IFwKICAgICAgICAgfSBcCkBAIC0xNTYsMjYgKzk5MCwyNyBAQCB2b2lkIEpJVDo6YXNzZXJ0
U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkg
XAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0K
IAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8j
I25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RF
KG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRo
RnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIp
OwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIHsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Q
cm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBk
YXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3
ICsxMDY2LDMwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAK
ICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICBtX3Byb3Zl
blR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNv
bnN0YW50cygpLnNpemUoKSk7CisgICAgICAgIG1fb3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxs
b2NlZFJlZz4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICB9
CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJl
bnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNB
dEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgICAgIG1fb3BlcmFu
ZFRvUmVnLmZpbGwoQWxsb2NlZFJlZygpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMuYXJndW1lbnQoaSkgPSBTcGVjQnl0ZWNvZGVU
b3A7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlw
ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5
cGVzLmxvY2FsKGkpID0gU3BlY0J5dGVjb2RlVG9wOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0
aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JD
b25zdGFudChpKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgdW5zaWdu
ZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwogICAgICAgICBp
ZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5
dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KQEAgLTQ3
Nyw2ICsxMzM1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAg
IGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudElu
c3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
ICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6
ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTUsMTIgKzEzNzYsMTcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50
ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsK
ICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAg
IGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMu
YmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29k
ZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dD
YXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4
OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwo
KSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4
IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmxpbmso
dGhpcyk7CisKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgYnJlYWtwb2ludCgp
OyAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdpc3RlciBhbGxvY2F0ZSB0aGUgc2xvdyBw
YXRocy4KKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRl
eDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAg
ICAgIApAQCAtNjMzLDExICsxNDk5LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigp
LCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBt
X3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgp
LCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVy
IC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBj
b2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJ
VEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkg
IT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNh
c2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmly
c3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBz
IGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKQEAgLTc3NCw2
ICsxNjM4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzogaW1wbGVt
ZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4aXRKdW1w
cykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOwor
ICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKQEAgLTEwNTgsNiArMTkyOSwzOTkgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRp
bWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0Nv
bXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUo
RXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExpc3Qg
eyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNv
bXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhl
cmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAg
IC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBz
aGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZv
ciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxs
b3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5r
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9S
ZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8
IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5h
ZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3Rl
clNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBo
ZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxs
X29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxv
d2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOwor
fQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBn
ZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2Rl
YmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJs
eSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRo
aXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVz
dWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNv
bnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0
dXJuIHJlc3VsdC5nZXQoKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3Jl
Z107CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdW
YWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxv
Y2F0ZUZQUigpCit7CisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BS
KCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lz
dGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAg
ICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6
OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVu
Y3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisg
ICAgaWYgKG1fcmVnaXN0ZXJzW3JlZ10uaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBtX3JlZ2lzdGVyc1tyZWddLm9wZXJhbmQ7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAg
ICAgICAgICAgIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX29wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgbV9yZWdpc3RlcnNbcmVnXSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3Bp
bGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChh
dXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBp
ZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlcklt
cGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMo
KSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitSZWdpc3RlclNldCBKSVQ6
OnVzZWRSZWdpc3RlcnMoKQoreworICAgIC8vIE9PUFM6CisgICAgcmV0dXJuIHsgfTsKK30KKwor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2dwcl0uaXNBbGxvY2F0ZWQpOworICAgIGJv
eEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsK
KyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6
c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2Zwcl0uaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAg
dGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hE
b3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBz
dG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9w
ZXJhbmQpID0gZ3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgbV9y
ZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICBtX3JlZ2lzdGVyc1tmcHJdLm9w
ZXJhbmQgPSBvcGVyYW5kOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29k
ZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3ByXS5p
c0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRv
JiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFs
dWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJ
VDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1ty
ZWddOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50
OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQp
Cit7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQorewor
fQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZh
bGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ZwciA9IG1faml0LmFs
bG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7
Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJ
VDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3Bl
cmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKwor
R1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9y
IGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
ID0gbV9ncHI7CisgICAgICAgIG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5vcGVyYW5kID0gbV9v
cGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0lu
dDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9q
aXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKwor
ICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1
cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0u
b3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKwor
ICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbCht
X2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9w
ZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcg
cmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFs
dWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklU
OjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IGNvbnNpZGVy
IHVzaW5nIEZQUiBpZiB0aGVyZSdzIGFuIEZQUiBhbGxvY2F0ZWQgZm9yCisgICAgICAgIC8vIHRo
aXMgb3BlcmFuZC4KKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAg
ICAgIC8vIE9PUFM6IGFkZCBhbiBhc3NpZ25SZWcgaGVscGVyCisgICAgICAgIG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1tt
X2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnBy
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQor
eworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJh
bmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2ZwcjsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7Cisg
ICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVP
cGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRl
bXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAg
R1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0
ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBt
X2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7
IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRU
eXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3Bl
cmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJs
ZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKSA9IG1fZnByOworCisgICAgcmV0dXJuIG1fZnByOworfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyAr
NDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUg
PHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwor
ICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwog
ICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMTcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwot
ICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBC
eXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8o
dCkKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBi
YXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICBGUFJSZWcgcmVzdWx0RlBSIHsg
SW52YWxpZEZQUlJlZyB9OwogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAg
LTE4Myw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQg
SklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0lu
dGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMTk4LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAg
ICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2lu
dGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zm
c2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90
IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2Vt
YmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBt
YXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJs
aWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAg
IH5KSVQoKTsKQEAgLTI2Myw2ICsyNjUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxs
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAg
IHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2Fs
bEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7
CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAgICAgICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAyLDcgKzMxOCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CiAgICAgICAgIHZvaWQgYWRk
U2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoKTsKICAgICAgICAgdm9pZCBhZGRKdW1w
KEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICsz
MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwpAQCAtMzI3LDcgKzM0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJv
b2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzUz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBp
bGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsg
RXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwor
ICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5
cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJN
b2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxk
RmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5MSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAg
LTQ4NCw4ICs1MDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKQEAgLTUxMiw5
ICs1MjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5
X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0Myw2OSArNjU5LDY5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShj
b25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3Vt
ZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRo
RnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBi
b29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBp
c1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC03MjgsOCArNzQ0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAg
dm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAg
ICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdp
c3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKTsKQEAgLTc0NiwzNCArNzYwLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0
Y2hGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNs
b3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAg
ICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAg
IH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZy
b20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNs
b3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dD
YXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lk
IGxpbmtBbGxTbG93Q2FzZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BT
CisgICAgICAgICAgICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0K
IAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtNzg5LDYgKzc4Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAg
ICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4u
Lik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CkBAIC03OTgsNiArNzkz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBT
bG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAg
IGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAg
ICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgICAgICBzZXR1cEFy
Z3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKG9wZXJhdGlvbik7
CiAgICAgICAgIH0KQEAgLTgxNiw2ICs4MTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXRUeXBlPHR5cGVuYW1lIEZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlPjo6dmFsdWUsICJXaW42NCBj
YW5ub3QgdXNlIHN0YW5kYXJkIGNhbGwgd2hlbiByZXR1cm4gdHlwZSBpcyBsYXJnZXIgdGhhbiA2
NCBiaXRzLiIpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJn
cy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwpAQCAtOTI1LDYgKzkyMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAg
ICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVw
T3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJv
b2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21w
aWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTM1LDExNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNz
IEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYpOwor
ICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBS
VGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAg
ICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2Zw
ciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBp
bnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQg
bm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+
VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsg
SW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVn
IGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX3Byb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1
bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZFRvUmVnLm9w
ZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBo
ZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKCk7
CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZp
cnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJl
Z2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2so
UmVnKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycygpOworCiAgICAgICAgIElu
dGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBt
X2NhbGxzOwpAQCAtOTUzLDcgKzEwNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVj
dG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0
ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwor
ICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBW
ZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzExMDEsMzIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsK
ICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1f
Y3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlPiBtX3Byb3ZlblR5cGVzOworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAg
ICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJp
YW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
ICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZw
ciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKyAgICAgICAgT3BlcmFuZHM8QWxsb2Nl
ZFJlZz4gbV9vcGVyYW5kVG9SZWc7CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxv
Y2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9Owor
ICAgICAgICB9OworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAg
ICAgfTsKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisgICAgICAgIFJlZ2lz
dGVyTWFwPFJlZ1ZhbHVlPiBtX3JlZ2lzdGVyczsKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZh
bHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgyICs0Niw4MyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Smxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1Ro
YW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5P
ckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6IHZlcmlmeSBOYU4KKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1Ro
YW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5v
cmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5B
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBm
YWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2
MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWMK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24s
IGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUg
Zm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBp
bW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50
IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGlu
dCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVD
b25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBjbG9iYmVyaW5nIHRo
ZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisK
ICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpA
QCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChW
aXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlv
biBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9u
LT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6
ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXpl
LCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXpl
LCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNv
ZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKQEAgLTI4OSw4ICsz
MTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgLy8g
LSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8v
IC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9w
MikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTksNiBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFp
bDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9
IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0g
ICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBm
YWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7
CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2
NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICszODMsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7
CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7Cisg
ICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEwICs0NTAsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AKICAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7
CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3ICs0NjUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRp
dGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQz
Mk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDAp
OwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNv
bnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCBy
ZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdh
dGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVRO
ZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAg
ICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZh
bHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0
aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2ICs3OTcsMTggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdEdQUiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAg
ICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCwg
cmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC05MDEsMTYgKzkyNCw0OCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjpl
bWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJ
VEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAg
ICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJo
cy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
SklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRv
TWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9w
dGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGlt
aXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihP
dmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAg
ICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigpLCByaHMu
ZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJ
VE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRp
bWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6
ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRT
dWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBs
aHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBK
SVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1
YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2Fs
bEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0LDEzICsyNjIsMTEgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlE
OwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAK
QEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJ
bnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENh
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFp
bENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25z
dHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0
VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogCiAgICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpAQCAtNTE1LDEw
ICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
IGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
SXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0
b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNv
ZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAg
ICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwog
ICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIp
KTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4
dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVy
UmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsxNjYsNiBAQCBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAg
aWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBi
eXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAm
JiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODcsMjkg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlu
a1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRk
U2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVT
bG93Q2FzZSgpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1f
c2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBt
X2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5k
ZXgpOworICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKIHsKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRl
eCkpOworICAgIGVuc3VyZVNsb3dDYXNlKCkuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCiB7CiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1h
a2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShl
bXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZSgpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBz
KCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAg
LTM5MywxMSArMzc2LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29u
cwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihk
c3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVj
dD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCAr
MTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1
c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92
KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0aGlzIGJldHRlciBmb3IgY29u
c3RhbnRzIHdoaWNoIGFyZW4ndCByZWdpc3RlciBhbGxvY2F0ZWQgeWV0LgorICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKworICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYg
KHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC0x
MDYsMTAgKzExNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
QEAgLTE3MywxMCArMTgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIApAQCAt
NzQ4LDIwICs3NTUsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtMTAyMyw4ICsxMDI2
LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBy
ZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHBy
b2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1
cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVy
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGog
PCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRk
cmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBw
cm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVC
YXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsxMDQyLDIzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDk5LDIwICsxMTIwLDE2
IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnUKIAogLy8gU2xvdyBj
YXNlcwogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKQEAg
LTExMjAsMzAgKzExMzcsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExODcsMTMgKzExOTgsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1p
dCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAo
Y2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpA
QCAtMTIxMCw3ICsxMjE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7
Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzEyNDEs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19z
dXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3Ry
YXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4MSwxMCArMTQ4Nyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRl
eCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90
UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAg
ICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1
MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0
ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcg
b24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkg
ewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAg
KyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMo
aXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CkBAIC0zMzQs
NyArMzI3LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAg
IHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICszMzUsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwog
Ci0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRl
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0LDEwICs0MzYsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUzNywxMCAr
NTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEwICs2MzAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02
NjMsMTAgKzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4K
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIsMTAgKzY5
Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlv
bik7CkBAIC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYg
KHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBA
QCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BT
PworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0
aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1w
bGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+
bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409625</attachid>
            <date>2020-09-24 15:31:56 -0700</date>
            <delta_ts>2020-09-29 17:52:29 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>149138</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJy
ZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5
NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkw
LDI3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNjYsMzAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
ID0gMDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIG1fcHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICAgICAgbV9vcGVy
YW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25z
dGFudHMoKS5zaXplKCkpOworICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3Vu
dDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJl
bnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5s
ZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVu
dEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRp
Y3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcuZmlsbChBbGxvY2VkUmVnKCkpOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBlcy5hcmd1
bWVudChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMubG9jYWwoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVt
YmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVz
LmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dD
YXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29k
ZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAg
IC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUg
YXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzMzUsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0
LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTM3
NiwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJl
Q2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29k
ZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRI
YXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgp
OykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dD
YXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9
IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICBpZiAobV91c2VMT0wpCisg
ICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2lz
dGVyIGFsbG9jYXRlIHRoZSBzbG93IHBhdGhzLgorCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBm
aXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC02MzMsMTEgKzE0OTksOSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRl
ciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0
KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZp
cnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1w
cyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAg
ICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5k
KCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9m
ZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUt
Pm1fY291bnRlcikpOwpAQCAtNzc0LDYgKzE2MzgsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRo
b3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93
UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisgICAgeworICAgICAgICBmb3Ig
KGF1dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAganVtcC5saW5rKHRoaXMpOwor
ICAgICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRo
aXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsxOTI5LDQyNCBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhp
dEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9i
YWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6
IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dl
ZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAg
ICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxl
ZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykp
CisgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dl
ZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09Q
UzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQg
Y29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJv
YmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BT
OiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+
IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3Vs
dC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAg
IHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQ
UnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFs
bG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGlu
IHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlr
ZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVz
dHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwg
W10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZv
PigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6
YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Ns
b3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAg
IENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKCkKK3sKKyAgICBhc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkg
eworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdW
YWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1f
cmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
ID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1w
bChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRp
b24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGlmIChtX3Jl
Z2lzdGVyc1tyZWddLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gbV9yZWdpc3RlcnNbcmVnXS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBt
X29wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVy
YW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAgfQorICAgIG1fcmVnaXN0
ZXJzW3JlZ10gPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbElt
cGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0byBzZXQpIHsK
KyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYgKCFjYWxsZWVT
YXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkpOworICAgIGRv
Q2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1c2VkUmVnaXN0
ZXJzKCkKK3sKKyAgICAvLyBPT1BTOgorICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisg
ICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2b2lkIEpJVDo6c2V0SW50
MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8gT09QUzog
QWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0VfQVNTRVJU
KG1fcmVnaXN0ZXJzW2dwcl0uaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNWYWx1
ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJl
c3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAg
ICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAgICBtX3JlZ2lzdGVyc1tn
cHJdLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVn
aXN0ZXJzW2Zwcl0uaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07Cisg
ICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVl
UmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVz
c0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAg
IGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVy
YW5kID0gb3BlcmFuZDsKKyAgICBtX3JlZ2lzdGVyc1tmcHJdLm9wZXJhbmQgPSBvcGVyYW5kOwor
CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9p
ZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWdpc3RlcnNbZ3ByXS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30K
Kwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVn
aXN0ZXJzW3JlZ107CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOwor
ICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcp
Cit7CisgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1
ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQUlRl
bXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJlZyBK
SVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKwor
ICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDog
bV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBS
KCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJ
VDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJP
cGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fklu
dDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJ
VDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09Q
UzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0Lm1fcmVnaXN0
ZXJzW21fZ3ByXS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6
OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0u
b3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKwor
ICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbCht
X2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9w
ZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcg
cmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFs
dWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklU
OjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IGNvbnNpZGVyIHVzaW5nIEZQUiBpZiB0aGVyZSdzIGFu
IEZQUiBhbGxvY2F0ZWQgZm9yCisgICAgICAgIC8vIHRoaXMgb3BlcmFuZC4KKyAgICAgICAgbV9n
cHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIC8vIE9PUFM6IGFkZCBhbiBhc3Np
Z25SZWcgaGVscGVyCisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1f
Z3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFu
ZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9
CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6
RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zw
cik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1f
ZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0
LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBS
UmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2so
bV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBH
UFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3By
KCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2pp
dC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5
dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgewor
ICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1Zh
bHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1
ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJU
eXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51
bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmZwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZnByOworCisgICAgcmV0dXJuIG1fZnByOworfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5o
IgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgor
I2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Q
cm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29k
ZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUlu
ZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAg
ICAgICwgdG8odCkKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7
CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7IC8vIE9PUFM6IE1heWJlIGhhdmUg
YSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICBGUFJSZWcgcmVz
dWx0RlBSIHsgSW52YWxpZEZQUlJlZyB9OwogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVj
b3JkIHsKQEAgLTE4Myw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19B
TElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJh
c2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhD
YWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMTk4
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1
bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWRE
ZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZz
ZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhl
IFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQs
IGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0K
ICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNjUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3Bp
bGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNw
aWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJ
bXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAg
ICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0
aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAwLDkgKzMxNiwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAorICAg
ICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKwogICAgICAgICB2b2lkIGFkZFNsb3dDYXNl
KEp1bXApOwogICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAg
ICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNl
KCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1
bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90
KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNDUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxs
TGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwot
ICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29u
c3QgT3AmKTsKIApAQCAtMzM3LDcgKzM1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVt
IGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxl
T3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BF
cVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93
KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAg
ICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIs
IFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUgfTsKQEAgLTQ3NSw4ICs0OTMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
UmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsOCArNTAyLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5z
aWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlv
blNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpOwogCkBAIC01MTIsOSArNTMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02
NDMsNjkgKzY2MSw2OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3Vt
ZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRf
ZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNo
aWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vu
c2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNzI4LDggKzc0Niw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGly
ZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVn
aXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29u
c3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDYsMzQgKzc2MiwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxl
ZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1h
dGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
bik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9t
OwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5m
cm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAg
ICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVy
OwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZv
aWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+
JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxs
U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nh
c2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBo
YXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsK
LSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVy
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nh
c2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0
ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAv
L2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5
dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+KTsKQEAgLTc4OSw2ICs3ODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rk
OjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgICAgIHNldHVwQXJndW1l
bnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICAgICAgfQpAQCAtNzk4LDYgKzc5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVy
YXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1BhdGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7
CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQ
YXRoUmV0dXJuVHlwZShvcGVyYXRpb24pOwogICAgICAgICB9CkBAIC04MTYsNiArODE0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTx0
eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVzdWx0VHlwZSwgU2xvd1Bh
dGhSZXR1cm5UeXBlPjo6dmFsdWUsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxs
T3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dChpczY0Qml0VHlwZTx0eXBlbmFtZSBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6UmVz
dWx0VHlwZT46OnZhbHVlLCAiV2luNjQgY2Fubm90IHVzZSBzdGFuZGFyZCBjYWxsIHdoZW4gcmV0
dXJuIHR5cGUgaXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4iKTsKICAgICAgICAgICAgIHNldHVwQXJn
dW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTkyNSw2ICs5MjQsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0
aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlv
biopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAg
ICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTM1LDYg
KzkzNywxMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJp
bmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJp
bmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgR1BSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25s
eSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5n
LiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91
YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQo
SklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJh
bmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wcm92ZW5UeXBlcy5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rp
b25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZv
ck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX29wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQor
CisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3Bl
cmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2Ug
cHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAg
ICAgIEdQUlJlZyBhbGxvY2F0ZUdQUigpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsK
KyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAg
IHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBz
ZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2NrKFJl
Zyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRS
ZWdpc3RlcnMoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAg
ICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAgLTk1Myw3ICsxMDY2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNl
PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsK
IAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZv
czsKQEAgLTk5MCw2ICsxMTAzLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmls
aW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsK
KworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAg
ICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsK
KyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOwor
ICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9wcm92ZW5UeXBlczsKKyAgICAgICAg
c3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBo
YXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBh
dCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07
CisgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWc+IG1fb3BlcmFuZFRvUmVnOworICAgICAgICBz
dHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9
OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBib29s
IGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IExvZ0Vu
dHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAg
RGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07CisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4g
bV9leGl0TG9nOworICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gbV9yZWdpc3RlcnM7Cisg
ICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8SnVtcExpc3Q+
IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklUOjpl
bWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5k
T3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpn
cmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICAv
LyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFs
T3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3Ms
IGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdy
ZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFs
c2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUs
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBzbG93
Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3Ax
LCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIC8v
IFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBm
YXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlh
dGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogICAg
IC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMuZ3ByKCkp
LCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIp
KSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSks
IHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBP
T1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBm
YWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiArMjk0LDE2IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEs
IG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwg
aW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIs
IHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVy
dCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKIAogICAg
IC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRo
ZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9h
dGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9h
dGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8
IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BS
MCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwog
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0yOTks
OCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
IH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
KSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwog
ICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNSw4ICsz
NDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQog
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsK
ICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAg
ICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEyICszNjYs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IElu
dC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZh
aWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQz
MihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3Rl
ciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0z
NjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAg
ICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0K
IAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
aW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAg
LTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIE9PUFM6IHNsb3cgcGF0aCBz
bG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CkBA
IC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9t
b2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
CiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyArNDc3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNF
KEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJP
cDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNDg3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVy
IGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVt
aXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNTc2LDEzIEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
ICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9w
ZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1
Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMCArNzM2LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVROZWdJQyog
bmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIg
dG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2Fu
IGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0
aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSk7CkBA
IC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVj
dGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwgcmVz
dWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAj
ZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25z
dCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmls
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCks
IHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Fk
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2VfY2FzdDxK
SVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7
CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC0xMjE1LDMyICsxMjcwLDk0IEBA
IHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
TXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09Q
UworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5k
OjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
bXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklU
TXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwog
ICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93
LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIo
KSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3By
KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUo
bGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3Vi
bGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQo
Y3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1
YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1h
dGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
U3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAgYm9vbCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsK
QEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2Fs
bF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzMCw0NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0
cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIp
OworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4o
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
b25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwxNCArNDA3LDE2IEBAIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxp
bmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0
ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4o
aW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1MjUsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJS
ZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAg
ICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAg
ICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93
Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
NiwyNSArMTY2LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6Ogog
ICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJl
ZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50
cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2Fz
ZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMo
VmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAo
aXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQiKTsKQEAgLTIwNiwyNyArMTg3LDMyIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJ
TkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoKQogewogICAgIEFTU0VSVChtX2J5dGVj
b2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Lgot
Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUlu
ZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMu
bGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpCisg
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkudXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3Rl
cnMoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMo
KSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRl
Y29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UoKS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKIHsKICAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3
YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExp
c3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zm
c2V0KQpAQCAtMzkzLDExICszNzksNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9w
ZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRy
ZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFs
dWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAg
LTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0
YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2
LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsK
IAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVy
IGZvciBjb25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKQEAgLTEwNiwxMCArMTE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cgogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwpAQCAtMTczLDEwICsxODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RyCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAg
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgCkBAIC03NDgsMjAgKzc1NSwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CkBAIC0xMDIz
LDggKzEwMjYsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNz
YXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBH
QyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwot
ICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0
UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGog
PSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5l
ZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzEwNDIsMjMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHJlc3Vs
dC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0g
ZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwOTksMjAg
KzExMjAsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogCiAv
LyBTbG93IGNhc2VzCiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVn
VDApOwpAQCAtMTEyMCwzMCArMTEzNywyNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
Q3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE4NywxMyAr
MTE5OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAg
fQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgog
ICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0Jp
dHMoKSk7CkBAIC0xMjEwLDcgKzEyMTksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9o
aW50KGNvbnN0IEluCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3Ry
dWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywx
MCArMTI0MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xNDgxLDEwICsxNDg3LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRl
Y29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUs
IG5leHRIb3RQYXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI3OSw4ICsy
NzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhd
OwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
ICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAt
NTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
IAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRo
ZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBz
d2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2MjEsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyMiw4ICs3MDcs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMsOCArNzQ2LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsxMDI1LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAxLDggKzExODAsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29w
aWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDIyICs3OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwot
ICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEyMCwxNiArMTE2LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNs
b3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKICAgICBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAg
ICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
QEAgLTMzNCw3ICszMjcsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFs
V2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAg
ICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1
dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzMz
NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3Ry
aWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8g
Z2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAg
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1MCwxMyArMzQzLDEyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGly
ZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVj
dD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC00NDQsMTAgKzQz
Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTQ5MywxMCArNDgzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAt
NTM3LDEwICs1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTU3NiwxMCArNTYyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NDYs
MTAgKzYzMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTY2MywxMCArNjQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbgogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcx
MiwxMCArNjkyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKQEAgLTc0OSwxMCArNzI3LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTAzMCwxMCArMTAwNiw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudElu
c3RydWN0aW9uKTsKQEAgLTExODYsMTAgKzExNjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYg
KzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAg
IC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qg
c2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFC
TEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQg
IT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9q
aXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
W21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWlu
CiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJQ01GdXp6ZXIsIDQyNDI0MiwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNNUHJvYmFiaWxpdHksIDAuNSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9i
YWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29s
LCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2
YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410075</attachid>
            <date>2020-09-29 17:52:29 -0700</date>
            <delta_ts>2020-09-30 12:36:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>151312</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJy
ZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5
NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkw
LDI3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNjYsMzAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
ID0gMDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIG1fcHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICAgICAgbV9vcGVy
YW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25z
dGFudHMoKS5zaXplKCkpOworICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3Vu
dDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJl
bnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5s
ZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVu
dEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRp
Y3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcuZmlsbChBbGxvY2VkUmVnKCkpOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBlcy5hcmd1
bWVudChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMubG9jYWwoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVt
YmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVz
LmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dD
YXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29k
ZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAg
IC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUg
YXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzMzUsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0
LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTM3
NiwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJl
Q2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29k
ZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRI
YXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgp
OykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dD
YXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9
IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICBpZiAobV91c2VMT0wpCisg
ICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2lz
dGVyIGFsbG9jYXRlIHRoZSBzbG93IHBhdGhzLgorCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBm
aXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC02MzMsMTEgKzE0OTksOSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRl
ciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0
KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZp
cnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1w
cyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAg
ICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5k
KCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9m
ZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUt
Pm1fY291bnRlcikpOwpAQCAtNzc0LDYgKzE2MzgsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRo
b3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93
UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisgICAgeworICAgICAgICBmb3Ig
KGF1dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAganVtcC5saW5rKHRoaXMpOwor
ICAgICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRo
aXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsxOTI5LDQzMCBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhp
dEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9i
YWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6
IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dl
ZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAg
ICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxl
ZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykp
CisgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dl
ZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09Q
UzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQg
Y29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJv
YmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BT
OiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+
IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3Vs
dC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAg
IHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQ
UnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFs
bG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGlu
IHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlr
ZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVz
dHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwg
W10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZv
PigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6
YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Ns
b3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAg
IENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKCkKK3sKKyAgICBhc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkg
eworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdW
YWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1f
cmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
ID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1w
bChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRp
b24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGlmIChtX3Jl
Z2lzdGVyc1tyZWddLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gbV9yZWdpc3RlcnNbcmVnXS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBt
X29wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVy
YW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAgfQorICAgIG1fcmVnaXN0
ZXJzW3JlZ10gPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbElt
cGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0byBzZXQpIHsK
KyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYgKCFjYWxsZWVT
YXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkpOworICAgIGRv
Q2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworSklUOjpTYXZlUGxhbiBKSVQ6OnNsb3dQYXRo
U2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisg
ICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyBy
ZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAg
ICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZCkKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7
CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFw
cGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAg
ICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1
ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lz
dGVyc1tncHJdLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tm
cHJdLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJl
ZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBmcHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgIG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9w
ZXJhbmQ7CisgICAgbV9yZWdpc3RlcnNbZnByXS5vcGVyYW5kID0gb3BlcmFuZDsKKworICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpz
ZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2dwcl0uaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgIG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQg
SklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1ty
ZWddOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3Jl
Z1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAg
IGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0Nv
dW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklUOjpHUFJUZW1wOjpHUFJU
ZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitHUFJSZWcgSklUOjpHUFJU
ZW1wOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dw
ciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBy
ZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dw
cik7Cit9CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGpp
dCkKK3sKK30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIg
IT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAg
IG1faml0LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRl
bXA6On5GUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBS
UmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6
SW50MzJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJh
bmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMy
T3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIC8vIE9PUFM6IGRvIHNt
YXJ0ZXIgdGhpbmdzIGZvciBhIGNvbnN0YW50IGhlcmUuCisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dw
cl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdElu
dDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMy
T25seSk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6Omdw
cigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIg
PSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9wZXJhbmQg
PSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAo
IWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAg
IG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhh
dmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
Q2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpW
YWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9q
aXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFu
ZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVP
cGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBPT1BTOiBjb25zaWRlciB1c2luZyBGUFIgaWYgdGhlcmUncyBhbiBGUFIgYWxs
b2NhdGVkIGZvcgorICAgICAgICAvLyB0aGlzIG9wZXJhbmQuCisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICAvLyBPT1BTOiBhZGQgYW4gYXNzaWduUmVnIGhl
bHBlcgorICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAg
ICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9w
ZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQor
CitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJ
bnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgewor
ICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0
ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2Nh
dGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3Mg
eyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29w
ZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3Vi
bGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCkgPSBtX2ZwcjsKKworICAgIHJldHVybiBtX2ZwcjsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMg
KzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNs
dWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRl
IDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBP
cGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsK
KyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsK
ICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNz
IEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSArMTA1LDE4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsK
LSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwg
Qnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRv
KHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJl
Z2lzdGVyPj47CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7
CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEg
YmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJl
c3VsdDsKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkw
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxs
ZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZh
dGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7
CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5OSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5n
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRw
dHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0g
ICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNl
bnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAg
ICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBh
YmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAg
ICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBA
IC0yNjMsNiArMjY2LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNh
bGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisK
KyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9
CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxs
IG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAg
Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAg
ICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgp
OworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpKTsK
KyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBS
ZWcoKSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0KTsKICAg
ICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25z
dCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwg
aW50KTsKQEAgLTMxMCw3ICszMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5m
byosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAg
IHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYp
OwogCkBAIC0zMzcsNyArMzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3Mg
Q29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVt
cFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwg
aW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nh
c2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAg
ZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxk
RmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9
OwpAQCAtNDc1LDggKzQ5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZB
TFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRp
b24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVD
b25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRp
b24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCw4ICs1MDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERv
dWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwg
RG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCk7CiAKQEAgLTUxMiw5ICs1MzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0Myw2OSAr
NjYyLDY5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9u
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxl
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29w
X2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3Rv
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xv
d1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdo
dFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlm
dFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQp
OwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdG
dW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC03MjgsOCArNzQ3LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0NiwzNCArNzYzLDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAot
ICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAg
ICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
aXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2Fz
ZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAg
ICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFz
QW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0
ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXRlcik7Cisg
ICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVlOworICAgICAgICAg
ICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIC8vbGlua0Fs
bFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4p
OwpAQCAtNzg5LDYgKzc4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3Bl
cmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAg
ICB9CkBAIC03OTgsNiArNzk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IEFyZ3MuLi4gYXJncykKICAgICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAg
ICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1
cm5UeXBlKG9wZXJhdGlvbik7CiAgICAgICAgIH0KQEAgLTgxNiw2ICs4MTUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPHR5cGVuYW1l
IEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVy
blR5cGU+Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRp
b24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgeworICAg
ICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRC
aXRUeXBlPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBl
Pjo6dmFsdWUsICJXaW42NCBjYW5ub3QgdXNlIHN0YW5kYXJkIGNhbGwgd2hlbiByZXR1cm4gdHlw
ZSBpcyBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8
T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtOTI1LDYgKzkyNSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxz
ZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsK
KyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisK
ICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRp
YyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTM4LDEx
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+
CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3Ap
OwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBHUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisK
KyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQ
UlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVn
IGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
fkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2Vy
IDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0
IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+
Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJ
bnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwor
ICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3By
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVy
YW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOwor
ICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb3ZlblR5cGVzLm9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAg
ICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5m
cHI7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQz
MlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1
bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJs
eSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BS
UmVnIGFsbG9jYXRlR1BSKCk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAg
ICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBz
ZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFs
dWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAg
ICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxh
bigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZl
Y3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcgKzEwNjcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBC
eXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50
cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xv
d0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAg
ICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAt
OTkwLDYgKzExMDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9w
dGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0
b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAg
ICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAg
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX3Byb3ZlblR5cGVzOworICAgICAgICBzdHJ1Y3Qg
QWxsb2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94
ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBz
YW1lIHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAg
ICAgICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKyAgICAg
ICAgT3BlcmFuZHM8QWxsb2NlZFJlZz4gbV9vcGVyYW5kVG9SZWc7CisgICAgICAgIHN0cnVjdCBS
ZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAg
ICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxv
Y2F0ZWQgeyBmYWxzZSB9OworICAgICAgICB9OworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9y
bWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRM
b2c7CisgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiBtX3JlZ2lzdGVyczsKKyAgICAgICAg
Ym9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0
SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDgyICs0Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6
IHZlcmlmeSBOYU4KKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2Us
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2ln
bmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRh
cmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwg
dGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0
aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAg
IC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBp
bnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdl
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhh
bmRsZSBjbG9iYmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOwor
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0
YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cg
cGF0aDoKQEAgLTI4OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTks
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBK
dW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICsz
ODMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZh
aWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEw
ICs0NTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AK
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3
ICs0NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAg
ICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4K
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQo
b3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9
IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxs
IHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBC
aWdJbnQKICAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2
ICs3OTcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIu
Z3ByKCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBA
IC05MDEsMTYgKzkyNCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3Ry
dWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBl
bWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3Vi
bGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+
KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1p
dE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnBy
KCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3Vi
SUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xv
dzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yk9wdGltaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0
LDEzICsyNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93
Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
OwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29w
X2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0Pihj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9
CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
b25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNs
b3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JP
cGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nh
c2UpOwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwpAQCAtNTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93
Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsx
NjYsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdp
c3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9
IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRl
Y29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpA
QCAtMjA2LDI3ICsxODcsMzQgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93
Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0KQogewogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29k
ZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2Fz
ZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2
ZVBsYW4oKTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBM
aXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcg
cmVzdWx0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1w
IDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0
KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBM
aXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4
KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAg
ICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhh
cHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9i
eXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzkzLDEx
ICszODEsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAg
cmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsK
LSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwot
fQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMg
d2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlz
Q29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDI2ICsx
MDEsNDUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9j
YXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9j
YXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBS
ZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVn
ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVn
IHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNo
UmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3By
KCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAg
ICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAg
ICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJl
c3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAg
ICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0
QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2Nh
dG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwg
c2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnKTsK
ICAgICB9CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkg
PSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CkBAIC0xNzMsMTAgKzIwMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICAKQEAgLTc0OCwyMCArNzc2LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmlj
dGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
QEAgLTEwMjMsOCArMTA0NywxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0
cnVjdGlvCiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQg
dW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNy
ZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1W
YXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAg
ZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChz
aXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKG1fdXNlTE9M
KQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQog
CiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMTA2Mywy
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1Qw
KTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2Nv
cGUpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29w
ZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTA5OSwyMCArMTE0MSwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1CiAKIC8vIFNsb3cgY2FzZXMKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
PigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigw
eDEpLCByZWdUMCk7CkBAIC0xMTIwLDMwICsxMTU4LDI0IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0x
MTg3LDEzICsxMjE5LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24g
Y2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVy
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKQEAgLTEyMTAsNyArMTI0MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBA
IC0xMjMzLDEwICsxMjYyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQo
Y29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTE0ODEsMTAgKzE1
MDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZv
LCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmls
ZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0
eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVs
QnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAt
Mjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkK
ICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlW
YWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAg
ICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJl
Z2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5
R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjczLDggKzY2MCw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIy
LDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc2Myw4ICs3NDYs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsMjIgKzc4LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHIKIAogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGlmIChoYXNBbnlT
bG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRl
eDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTIwLDE2ICsxMTYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBBU1NFUlQo
aGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwogICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5k
ZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwpAQCAtMzM0LDcgKzMyNyw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0z
NDIsNyArMzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFN
b2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Cisg
ICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICszNDMsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBp
ZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZv
OwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxh
YmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTQ0
NCwxMCArNDM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNDkzLDEwICs0ODMsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkBAIC01MzcsMTAgKzUyNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW4KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTc2LDEwICs1NjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTY0NiwxMCArNjMwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjbwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwpAQCAtNjYzLDEwICs2NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNzEyLDEwICs2OTIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIApAQCAtNzQ5LDEwICs3MjcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDMwLDEwICsxMDA2
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9t
U2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTE4NiwxMCArMTE2MCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZl
VHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsK
KyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZh
c3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwog
I2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29k
ZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAg
ICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5
U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0
eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRl
cnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAg
ICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0
aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410146</attachid>
            <date>2020-09-30 12:36:07 -0700</date>
            <delta_ts>2020-10-01 19:41:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>152769</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJy
ZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5
NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkw
LDI3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNjYsMzAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
ID0gMDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIG1fcHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICAgICAgbV9vcGVy
YW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25z
dGFudHMoKS5zaXplKCkpOworICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3Vu
dDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJl
bnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5s
ZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVu
dEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRp
Y3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcuZmlsbChBbGxvY2VkUmVnKCkpOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBlcy5hcmd1
bWVudChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMubG9jYWwoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVt
YmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVz
LmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dD
YXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29k
ZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAg
IC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUg
YXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzMzUsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0
LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTM3
NiwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJl
Q2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29k
ZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRI
YXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgp
OykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dD
YXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9
IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXgg
Zmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNDk2LDE3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBp
dGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZz
ZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNs
b3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
Zmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAg
ICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5l
bmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3Vn
aCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8u
b2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmls
ZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKworCiAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNjM5LDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91
dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1Bh
dGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwog
CisgICAgLy8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChh
dXRvIGp1bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAg
ICAgICAgYnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlz
KTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTkzMCw0NTQgQEAgU2Vjb25k
cyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29t
cGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0K
K3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRK
dW1wcy5hcHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7
CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVl
U2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAg
IGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVT
YXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQor
ICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7
Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiBy
ZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQu
Y29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJz
KCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxv
Y2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0
aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2Ug
dGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtd
IHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4o
KSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFz
c2VydE5vU2xvd1BhdGgoKQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93
Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBD
UkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUigpCit7CisgICAgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAg
ICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFs
dWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFs
dWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3Jl
Z2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAg
ICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
cmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107Cisg
ICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9
IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwo
UmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9u
IGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBpZiAobV9yZWdp
c3RlcnNbcmVnXS5pc0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IG1fcmVnaXN0ZXJzW3JlZ10ub3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxp
ZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgbV9v
cGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFu
ZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3JlZ2lzdGVy
c1tyZWddID0gUmVnVmFsdWUgeyB9OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBs
KCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7Cisg
ICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxh
bigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZl
UGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmIChy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5k
KSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAg
IGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkK
KyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNs
b3dDYXNlKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7Cisg
ICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICBkYXRhTG9nTG4oImNvbnN0YW50IG9wZXJhbmQsICIsIHJlZywgIiAgIiwgbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgaWYgKHJlZyA9PSBzbG93
Q2FzZS5yZXN1bHQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlz
R1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5n
cHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3Jh
dGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlu
cyhzY3JhdGNoKSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQs
IHNjcmF0Y2gpOworICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVn
LmZwcigpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1
ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lz
dGVyc1tncHJdLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tm
cHJdLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJl
ZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBmcHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgIG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9w
ZXJhbmQ7CisgICAgbV9yZWdpc3RlcnNbZnByXS5vcGVyYW5kID0gb3BlcmFuZDsKKworICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpz
ZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2dwcl0uaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgIG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQg
SklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1ty
ZWddOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3Jl
Z1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAg
IGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0Nv
dW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklUOjpHUFJUZW1wOjpHUFJU
ZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitHUFJSZWcgSklUOjpHUFJU
ZW1wOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dw
ciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBy
ZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dw
cik7Cit9CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGpp
dCkKK3sKK30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIg
IT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAg
IG1faml0LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRl
bXA6On5GUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBS
UmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6
SW50MzJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJh
bmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMy
T3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIC8vIE9PUFM6IGRvIHNt
YXJ0ZXIgdGhpbmdzIGZvciBhIGNvbnN0YW50IGhlcmUuCisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dw
cl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdElu
dDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMy
T25seSk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6Omdw
cigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIg
PSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9wZXJhbmQg
PSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAo
IWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAg
IG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhh
dmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
Q2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpW
YWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9q
aXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFu
ZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVP
cGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBPT1BTOiBjb25zaWRlciB1c2luZyBGUFIgaWYgdGhlcmUncyBhbiBGUFIgYWxs
b2NhdGVkIGZvcgorICAgICAgICAvLyB0aGlzIG9wZXJhbmQuCisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICAvLyBPT1BTOiBhZGQgYW4gYXNzaWduUmVnIGhl
bHBlcgorICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAg
ICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9w
ZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQor
CitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJ
bnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgewor
ICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0
ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2Nh
dGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3Mg
eyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29w
ZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3Vi
bGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCkgPSBtX2ZwcjsKKyAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2Zwcl0ub3BlcmFuZCA9IG1f
b3BlcmFuZDsKKworICAgIHJldHVybiBtX2ZwcjsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3
IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50
ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJS
ZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
U2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJ
RCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBj
bGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBj
bGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0
aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSArMTA1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAg
ICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNv
ZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisg
ICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVy
Pj47CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAg
ICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQg
c3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsK
ICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkwLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5j
dGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJ
bnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAg
IC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxl
IGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMs
NiArMjY2LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAK
KyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBs
KCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAg
ICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAg
ICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBh
cHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAg
ICAgICAgIHsKQEAgLTMwMCw5ICszMTcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1w
KTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpKTsKKyAgICAg
ICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0KTsKICAgICAgICAg
dm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1w
TGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsK
QEAgLTMxMCw3ICszMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbios
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAg
ICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBA
IC0zMzcsNyArMzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVj
dGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGls
ZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3co
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1
bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBD
b21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBX
cml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVy
QmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAt
NDc1LDggKzQ5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJf
NjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwot
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbios
IFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRp
b24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwog
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKQEAgLTQ4NCw4ICs1MDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
KiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVy
dCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nh
c2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7
CiAKQEAgLTUxMiw5ICs1MzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0Myw2OSArNjYyLDY5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3By
b3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhG
dW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC03MjgsOCArNzQ3LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
KTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQog
ICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0NiwzNCArNzYzLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5
cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAotICAgICAg
ICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2
b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAg
ICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAg
ICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+
ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2
b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAg
ICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxT
bG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xv
d0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1f
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAg
ICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYg
KGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dD
YXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7
CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAt
Nzg5LDYgKzc4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVy
OjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKKyAgICAgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9u
VHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CkBA
IC03OTgsNiArNzk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpS
ZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNh
bGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3Mu
Li4gYXJncykKICAgICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBl
KG9wZXJhdGlvbik7CiAgICAgICAgIH0KQEAgLTgxNiw2ICs4MTUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+
Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgeworICAgICAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXRUeXBl
PHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlPjo6dmFs
dWUsICJXaW42NCBjYW5ub3QgdXNlIHN0YW5kYXJkIGNhbGwgd2hlbiByZXR1cm4gdHlwZSBpcyBs
YXJnZXIgdGhhbiA2NCBiaXRzLiIpOwogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0
aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtOTI1LDYgKzkyNSw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQog
I2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAg
ICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAg
ICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29s
IGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTM4LDExOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAg
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisg
ICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJU
ZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBn
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAo
SklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMy
T3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJp
dHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRh
Z2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
Y2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BS
UmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAg
ICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVy
YW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChv
cGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fb3Bl
cmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBS
UmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShF
eGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50
IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFs
bG9jYXRlR1BSKCk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lk
IHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmly
dHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAg
dm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOwor
ICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYp
OworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3Rv
cjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcgKzEwNjgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRl
Y29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+
IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nh
c2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkw
LDYgKzExMDUsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGlt
aXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX3Byb3ZlblR5cGVzOworICAgICAgICBzdHJ1Y3QgQWxs
b2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQg
YW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1l
IHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKyAgICAgICAg
T3BlcmFuZHM8QWxsb2NlZFJlZz4gbV9vcGVyYW5kVG9SZWc7CisgICAgICAgIHN0cnVjdCBSZWdW
YWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAg
ICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0
ZWQgeyBmYWxzZSB9OworICAgICAgICB9OworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0
IGZvcm1hdDsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7
CisgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiBtX3JlZ2lzdGVyczsKKyAgICAgICAgYm9v
bCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0SnVt
cHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDgyICs0Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JF
cXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRl
clRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVh
bCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRl
cmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6IHZl
cmlmeSBOYU4KKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxl
c3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9y
RXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3Vi
bGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFs
c2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFs
c2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRl
clRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNz
VGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVk
KGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
biwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdl
dCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJh
dGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoK
ICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8v
IC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQg
aW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRs
ZSBjbG9iYmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0
aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJv
b2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBp
bnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2Fz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3Qg
aW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3Qg
aW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0
aDoKQEAgLTI4OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50
IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50
IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTksNiBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAg
ICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAg
ICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAg
ICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFk
ZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1w
IGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICszODMs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZh
aWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwz
LmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEwICs0
NTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AKICAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3ICs0
NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAgICBV
TlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0
KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBK
dW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3Ay
LCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91
YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xv
d0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BO
ZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRl
UHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
Z2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJp
dHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudElu
c3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRo
b3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJ
bnQKICAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2ICs3
OTcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdEdQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIuZ3By
KCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHNl
dEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC05
MDEsMTYgKzkyNCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3By
KCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
T09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRL
aW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0Lmdw
cigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJs
ZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4o
YWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4o
bV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0
TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZUFkZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVs
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93
LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIo
KSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3By
KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUo
bGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3Vi
bGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQo
Y3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11
bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1h
dGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVNdWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYg
YXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1
YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAg
ICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ay
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCks
IHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMo
JmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVT
dWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlv
blRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxP
cFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9w
dGltaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2Nv
ZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAg
ICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0LDEz
ICsyNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwog
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2Nv
bnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAg
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZh
cmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25z
dHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dD
YXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVu
PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2Up
OwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwpAQCAtNTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2Fz
ZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRv
bmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8vIE9P
UFMKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBMaXN0
IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRl
clJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0
KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsxNjYs
NiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJu
IGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3Rl
ciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5r
QWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dD
YXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAm
JiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNs
b3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29k
ZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAt
MjA2LDI3ICsxODcsMzQgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2Fz
ZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0KQogewogICAgIEFTU0VSVChtX2J5dGVj
b2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Lgot
Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUlu
ZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMu
bGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBs
YW4oKTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0
KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVz
dWx0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDog
anVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0KS5q
dW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0
JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBK
dW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5
LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRl
Y29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzkzLDExICsz
ODEsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAg
ICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQot
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03
NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMgd2hp
Y2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
CisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29u
c3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMDEs
NTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRv
ckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRp
b25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdp
c3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0g
cmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJl
c3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVn
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7
CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBkYXRhTG9nTG4oIk5ldyBv
YmplY3Q6Iik7CisgICAgICAgIGRhdGFMb2dMbigiXHRyZXN1bHRSZWcgPSAiLCByZXN1bHRSZWcp
OworICAgICAgICBkYXRhTG9nTG4oIlx0YWxsb2NhdG9yUmVnID0gIiwgYWxsb2NhdG9yUmVnKTsK
KyAgICAgICAgZGF0YUxvZ0xuKCJcdHNjcmF0Y2hSZWcgPSAiLCBzY3JhdGNoUmVnKTsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVn
ID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMsIHJlc3VsdFJlZyk7CiAgICAgfQorCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUo
Ynl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUo
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigm
dm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNf
aW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3Mywx
MCArMjA5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIApAQCAtNzQ4LDIwICs3
ODIsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNv
bXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtMTAyMyw4ICsxMDUzLDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyByZWdpc3RlcnMg
dG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcK
ICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAg
c2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBq
ID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsg
KytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChq
KTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2
YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92ZW5UeXBl
KHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsxMDY5LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rp
b246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2Nv
cGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDk5LDIwICsxMTQ3LDE2IEBAIHZvaWQg
SklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnUKIAogLy8gU2xvdyBjYXNlcwogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKQEAgLTExMjAsMzAg
KzExNjQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExODcsMTMgKzEyMjUsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xv
dyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRp
bWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNv
cHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIxMCw3
ICsxMjQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAg
IH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzEyNjgsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBs
ZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4MSwxMCArMTUxNCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hh
YmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0
aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpA
QCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3Bl
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29w
ZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0
ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMTggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5
VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5
VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjAs
MTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5h
bWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CkBAIC0zMzQsNyArMzI3LDcg
QEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBn
ZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICszMzUsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
OwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0
byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1
dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9h
ZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBn
ZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAg
IGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkp
OworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkp
OwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0LDEwICs0MzYsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUzNywxMCArNTI1LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEwICs2MzAsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NjMsMTAgKzY0
NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIsMTAgKzY5Miw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0x
MTg2LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNv
cGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93
UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQ
YXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6
CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAg
ICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAg
ICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElO
RykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVj
dGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29k
ZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAg
Y29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQs
IHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91
YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGlu
ZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2Ft
ZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410302</attachid>
            <date>2020-10-01 19:41:07 -0700</date>
            <delta_ts>2020-10-02 19:14:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>159451</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJy
ZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5
NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkw
LDI3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNjYsMzAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
ID0gMDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIG1fcHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICAgICAgbV9vcGVy
YW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25z
dGFudHMoKS5zaXplKCkpOworICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3Vu
dDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJl
bnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5s
ZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVu
dEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRp
Y3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgbV9vcGVyYW5kVG9SZWcuZmlsbChBbGxvY2VkUmVnKCkpOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBlcy5hcmd1
bWVudChpKSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMubG9jYWwoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVt
YmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVz
LmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dD
YXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29k
ZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAg
IC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUg
YXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzMzUsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0
LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTM3
NiwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJl
Q2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29k
ZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRI
YXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgp
OykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dD
YXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9
IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXgg
Zmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNDk2LDE3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBp
dGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZz
ZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNs
b3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
Zmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAg
ICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5l
bmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3Vn
aCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8u
b2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmls
ZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKworCiAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNjM5LDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91
dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1Bh
dGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwog
CisgICAgLy8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChh
dXRvIGp1bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAg
ICAgICAgYnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlz
KTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTkzMCw0OTQgQEAgU2Vjb25k
cyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29t
cGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0K
K3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRK
dW1wcy5hcHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7
CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVl
U2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAg
IGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVT
YXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQor
ICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7
Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiBy
ZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQu
Y29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJz
KCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxv
Y2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0
aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2Ug
dGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtd
IHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4o
KSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFz
c2VydE5vU2xvd1BhdGgoKQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93
Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBD
UkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUigpCit7CisgICAgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAg
ICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFs
dWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gbV9yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFs
dWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3Jl
Z2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAg
ICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
cmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107Cisg
ICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9
IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwo
UmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9u
IGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBpZiAobV9yZWdp
c3RlcnNbcmVnXS5pc0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IG1fcmVnaXN0ZXJzW3JlZ10ub3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxp
ZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgbV9v
cGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFu
ZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3JlZ2lzdGVy
c1tyZWddID0gUmVnVmFsdWUgeyB9OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBs
KCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7Cisg
ICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxh
bigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZl
UGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmIChy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5k
KSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAg
IGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkK
KyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNs
b3dDYXNlKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7Cisg
ICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3VsdCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3Rlcigp
OworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7Cisg
ICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3Ag
Yml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2dwcl0uaXNB
bGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisg
ICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ID0gU3BlY0ludDMyT25seTsKKyAgICBtX3JlZ2lzdGVyc1tncHJdLm9wZXJhbmQgPSBvcGVyYW5k
OworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJS
ZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzW2Zwcl0uaXNBbGxvY2F0
ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAu
Z3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAg
ICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFu
ZCkgPSBmcHI7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICBt
X3JlZ2lzdGVyc1tmcHJdLm9wZXJhbmQgPSBvcGVyYW5kOworCisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9yZWdpc3RlcnNbZ3ByXS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NG
b3Iob3BlcmFuZCkpOworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgbV9y
ZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVn
IHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0Nv
dW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFs
dWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0t
cmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQp
CisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsK
K30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9n
cHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklU
OjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitG
UFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBS
UmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayht
X2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1f
aml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQo
SklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAg
bV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIo
KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9n
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0g
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0g
bV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3Mg
Zm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpID0gbV9ncHI7CisgICAgICAgIG1faml0Lm1fcmVnaXN0ZXJzW21fZ3ByXS5vcGVyYW5kID0g
bV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFp
c0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsK
KworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICBy
ZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBp
ZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9j
YXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5k
LCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3By
OworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3Vs
YXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVy
cykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQor
eworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgLy8gT09QUzogYXNzaWduR1BS
IGZ1bmN0aW9uCisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3By
OworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IGNv
bnNpZGVyIHVzaW5nIEZQUiBpZiB0aGVyZSdzIGFuIEZQUiBhbGxvY2F0ZWQgZm9yCisgICAgICAg
IC8vIHRoaXMgb3BlcmFuZC4KKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
CisgICAgICAgIC8vIE9PUFM6IGFkZCBhbiBhc3NpZ25SZWcgaGVscGVyCisgICAgICAgIG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lz
dGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91
YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9q
aXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJl
ZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJh
bmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJs
ZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAg
ICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
IHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9
IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJu
IG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFu
ZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAg
IEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0
LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9q
aXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVn
aXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
Zk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lz
dGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2Rl
RG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1f
ZnByKTsKKworICAgIC8vIE9PUFM6IGFzc2lnbkZQUiBmdW5jdGlvbi4KKyAgICBtX2ppdC5mcHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2ZwcjsKKyAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2Zw
cl0ub3BlcmFuZCA9IG1fb3BlcmFuZDsKKworICAgIHJldHVybiBtX2ZwcjsKK30KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAu
aCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIK
KyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNv
ZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwog
ICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSArMTA1LDE4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5
IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJ
bmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAg
ICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywg
VmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93
Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QganVtcHM7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZl
IGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAg
ICAgUmVnIHJlc3VsdDsKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0x
ODMsNiArMTkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRl
cmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzE5OSw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAg
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRl
cjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNl
dCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBi
ZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJs
ZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5
IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGlj
OgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+
SklUKCk7CkBAIC0yNjMsNiArMjY2LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBz
cGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJ
bXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOwor
ICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4K
ICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTcsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9p
ZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlz
dCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9
IFJlZygpKTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyBy
ZXN1bHQgPSBSZWcoKSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVz
dWx0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRk
SnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9I
b3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENh
bGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7
Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChj
b25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVt
cChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVu
dW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBp
bGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVP
cEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNs
b3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAg
Ym9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAK
ICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9u
YWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
LCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9u
YWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCw4ICs1MDMsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlv
blNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCk7CiAKQEAgLTUxMiw5ICs1MzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAg
LTY0Myw2OSArNjYyLDY5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxf
ZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWls
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJn
dW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jl
c29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93
Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1p
dF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lk
IGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlz
VW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC03MjgsOCArNzQ3LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRD
b25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0NiwzNCArNzYzLDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2Zp
bGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24q
LCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0
aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZy
b207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNs
b3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1Nl
dCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAg
ICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtB
bGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nh
c2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
cyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRl
ciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xv
d0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAg
IGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0o
aXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVlOwor
ICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
IC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1f
Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4pOwpAQCAtNzg5LDYgKzc4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQs
IE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAg
ICAgIHsKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICAgICAgc2V0dXBBcmd1
bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgICAgICB9CkBAIC03OTgsNiArNzk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgeworICAgICAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4u
KTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xv
d1BhdGhSZXR1cm5UeXBlKG9wZXJhdGlvbik7CiAgICAgICAgIH0KQEAgLTgxNiw2ICs4MTUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1l
PHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpSZXN1bHRUeXBlLCBTbG93
UGF0aFJldHVyblR5cGU+Ojp2YWx1ZSwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNh
bGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAg
ICAgeworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGlzNjRCaXRUeXBlPHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpS
ZXN1bHRUeXBlPjo6dmFsdWUsICJXaW42NCBjYW5ub3QgdXNlIHN0YW5kYXJkIGNhbGwgd2hlbiBy
ZXR1cm4gdHlwZSBpcyBsYXJnZXIgdGhhbiA2NCBiaXRzLiIpOwogICAgICAgICAgICAgc2V0dXBB
cmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtOTI1LDYgKzkyNSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJl
dHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFn
YXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0
aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAg
ICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUs
NiArOTM4LDEzNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
QmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUo
QmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBHUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYg
bV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
ICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAg
ICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAg
ICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBP
bmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhp
bmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAg
ICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVl
T3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
OworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIo
KTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAg
ICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBw
cm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVk
VHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
bkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
IH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX29wZXJhbmRUb1JlZy5vcGVyYW5k
KG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb25DZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RD
ZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBP
T1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxl
cy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKCk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0
ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsK
KyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAg
ICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lk
IGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4g
c2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihjb25zdCBTbG93Q2FzZSYpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJl
dGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcgKzEw
ODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBU
YWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAg
VmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBt
X3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGll
ZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzExMjEsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3Vs
ZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4OworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dy
YXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0
ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rp
b25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJl
ZGljdGlvbnM7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX3Byb3ZlblR5cGVz
OworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxl
cywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8g
YWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52
YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsK
KyAgICAgICAgfTsKKyAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZz4gbV9vcGVyYW5kVG9SZWc7
CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAg
ICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworICAgICAgICB9OworICAgICAgICBz
dHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7Cisg
ICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9y
PExvZ0VudHJ5PiBtX2V4aXRMb2c7CisgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiBtX3Jl
Z2lzdGVyczsKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3Rv
cjxKdW1wTGlzdD4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgyICs0Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEps
ZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhh
bk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVh
dGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVh
dGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1
YWwpOworICAgIC8vIE9PUFM6IHZlcmlmeSBOYU4KKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
bik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNz
VGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Smxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxB
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwg
c2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9y
VW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBz
bG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxl
c3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5v
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEs
IHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQg
SklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24p
CiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2Fz
ZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQg
aW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1t
ZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCks
IHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwg
cmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE9PUFM6IGhhbmRsZSBjbG9iYmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxs
b2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwg
b3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
KQogewogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcg
Y2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKQEAgLTI4OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRp
YXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVt
YmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
YXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3Vt
ZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
KTsKQEAgLTI5OSw4ICszMTksNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJl
cihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpA
QCAtMzI1LDggKzM0Myw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5n
UG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0z
NTAsMTIgKzM2NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExI
UyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAg
ICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAg
ZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAg
ICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJl
clRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJl
Z1QwKTsKQEAgLTM2OCw5ICszODMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmso
dGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhp
cyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4K
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQpAQCAtNDM1LDEwICs0NTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzog
c2xvdyBwYXRoIHNsb3cgb3AKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKIH0KQEAgLTQ1MSw3ICs0NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJikKIHsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2
Myw3ICs0NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlz
dCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAv
LyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsK
ICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09Q
RVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEs
IHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIz
LDEwICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxk
IGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUg
b3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVn
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9w
dGltaXplKTsKQEAgLTc4Niw2ICs3OTcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNv
bnN0IEluc3RydWN0aQogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHJlc3VsdEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0
LmdwcigpLCByZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdw
cigpKTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKICNlbHNlCkBAIC05MDEsMTYgKzkyNCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91
cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYg
YXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUo
bGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxl
LmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3cs
IHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0
d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIg
KzEyNzAsOTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11
bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCBy
aHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUTXVsSUMqIG11
bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdp
c2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3Ry
dWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJ
VFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9P
UFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2lu
ZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwg
cmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3Vi
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJ
VFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
ICAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBi
b29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgcmVnVDApOwpAQCAtMjY0LDEzICsyNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJ
RCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQog
ICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBA
IHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BD
YWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90
YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1
bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAg
ICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNl
LmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JP
cGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBP
T1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7
CiAKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgLy8gT09QUworICAgIGxpbmtB
bGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7
CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpAQCAtNTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlu
a0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRl
cmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcg
KzUyNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2Fz
ZSk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBw
ZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAg
eyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY2LDI1ICsxNjYsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVy
ICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0Fu
eVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQot
ewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29k
ZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlu
bGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODcsMzQgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlz
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQor
QUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0KQog
ewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5z
aXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUlu
ZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAg
ICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZl
UGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3Qo
KS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nh
c2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29u
c3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9y
IChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5z
dXJlU2xvd0Nhc2UocmVzdWx0KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCkKIHsKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkg
dG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVt
cExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZl
T2Zmc2V0KQpAQCAtMzkzLDExICszODEsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6Omdl
dE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91Ymxl
KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBh
ZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
QEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShj
b25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAt
NzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Ny
YzsKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0
dGVyIGZvciBjb25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSkKQEAgLTkwLDMyICsxMDEsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9i
amVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lz
dGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0g
cmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOwor
ICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVn
ID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRl
bXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JS
ZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlm
ICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcywgcmVzdWx0UmVnKTsKICAgICB9CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVy
ZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hh
c19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcz
LDEwICsyMDUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCkBAIC0yMTEsMjgg
KzI0MSw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5l
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5j
aElmQ2VsbChyZWdUMCk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm9uQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisg
ICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRl
bXBHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZD
ZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXND
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRl
bXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJl
UHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAg
IG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFu
Y2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICszMTUsMzMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwor
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTc0OCwyMCArODQyLDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKQEAgLTEwMjMsOCAr
MTExMywxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAg
Ly8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nhcmls
eSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHBy
ZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAg
Zm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFz
VmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdp
c3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENv
ZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCks
IGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdy
aXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMTEyOSwyMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0LmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNl
CisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA5OSwyMCArMTIw
NywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1CiAKIC8vIFNs
b3cgY2FzZXMKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7
CkBAIC0xMTIwLDMwICsxMjI0LDI0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTg3LDEzICsxMjg1
LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8v
IEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAg
aWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygp
KTsKQEAgLTEyMTAsNyArMTMwNiw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rp
b24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsx
MzI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4o
Jmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTE0ODEsMTAgKzE1NzQsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2Rl
SW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4
dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAg
ICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDks
NyArNTAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJl
Z2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBw
aW5nIG9uIEFSTS4KQEAgLTU0Nyw4ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC01ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjIg
Kzc4LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKIAogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRl
cikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAg
ICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTIwLDE2ICsxMTYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsr
bV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwpAQCAt
MzM0LDcgKzMyNyw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQK
ICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJv
b2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArMzM1LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3Qo
KTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRT
dGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICszNDMsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3Qp
Ci0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0Pigp
KTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGly
ZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTQ0NCwxMCArNDM2LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwpAQCAtNDkzLDEwICs0ODMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC01Mzcs
MTAgKzUyNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwpAQCAtNTc2LDEwICs1NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY0NiwxMCAr
NjMwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpA
QCAtNjYzLDEwICs2NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzEyLDEw
ICs2OTIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIApAQCAtNzQ5LDEwICs3MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDMwLDEwICsxMDA2LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwpAQCAtMTE4NiwxMCArMTE2MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
MTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8g
T09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93
IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShP
UENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+
c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9q
aXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4
LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAg
ICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9i
amVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZv
cmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVu
Y2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410403</attachid>
            <date>2020-10-02 19:14:42 -0700</date>
            <delta_ts>2020-10-05 15:48:09 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>171383</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJy
ZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5
NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkw
LDI3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNjYsNjQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
ID0gMDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIG1fcHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpKTsKKyAgICAgICAgbV9vcGVy
YW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25z
dGFudHMoKS5zaXplKCkpOworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+
c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7
CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYg
KGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBi
bG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3Jz
W3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGZvciAobV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5z
dHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAg
aWYgKCFtX2N1cnJlbnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3Vy
cmVudEJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgp
KSkgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAg
ICAgICAgICBCbG9ja1N0YXRlIHN0YXRlQXRFbmQ7CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
QXRFbmQub3BlcmFuZFRvUmVnID0gbV9vcGVyYW5kVG9SZWc7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlQXRFbmQucmVnaXN0ZXJzID0gbV9yZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlQXRFbmQucHJvdmVuVHlwZXMgPSBtX3Byb3ZlblR5cGVzOworICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgp
XSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV0gPSBzdGF0ZUF0RW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNl
dChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5p
c0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byYgcHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4
KCldOworICAgICAgICAgICAgICAgICAgICAvLyBPT1BTOiBoYXZlIHRoaXMgZm9yIHByZWRlY2Vz
c29ycy5zaXplKCkgPiAxIGFuZCBqdXN0IG1lcmdlIHN0dWZmIHRvZ2V0aGVyLgorICAgICAgICAg
ICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxICYmICEhbV9zdGF0ZUF0RW5k
W3ByZWRlY2Vzc29ycy5maXJzdCgpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYg
c3RhdGVBdEVuZCA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9yZWdpc3RlcnMgPSBzdGF0ZUF0RW5kLnJlZ2lzdGVyczsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fb3BlcmFuZFRvUmVnID0gc3RhdGVBdEVuZC5vcGVyYW5k
VG9SZWc7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzID0gc3RhdGVBdEVu
ZC5wcm92ZW5UeXBlczsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0geyB9OworICAgICAgICAgICAgICAgICAgICAgICAg
bV9vcGVyYW5kVG9SZWcuZmlsbChBbGxvY2VkUmVnKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvdmVuVHlwZXMubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJvdmVuVHlwZXMuYXJn
dW1lbnQoaSkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm92ZW5UeXBlcy5udW1iZXJPZkxvY2FscygpOyArK2kp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm92ZW5UeXBlcy5sb2NhbChpKSA9IFNw
ZWNCeXRlY29kZVRvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3Byb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3Byb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRp
b25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNv
bnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhl
YWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5z
aXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4
ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdl
J3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVu
cmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzNjksOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0
cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAi
LCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQxMCwxNCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVBy
b2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50
SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdT
bG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewot
ICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBz
bG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dD
YXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
YXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAg
ICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xv
d0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RU
byA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTMwLDE2IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0g
bV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lU
SF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAh
PSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2Fz
ZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RU
by5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxp
bmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAg
Ly9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8
fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1w
cyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0
KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAg
ICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9j
b3VudGVyKSk7CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAg
ICB9CkBAIC03NzQsNiArMTY3MiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5n
KEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVs
KCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8v
IE9PUFM6IGltcGxlbWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1w
IDogbV9leGl0SnVtcHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJy
ZWFrcG9pbnQoKTsKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAg
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCkBAIC0xMDU4LDYgKzE5NjMsNTEyIEBAIFNlY29uZHMgSklUOjp0
b3RhbENvbXBpbGVUaW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1l
ICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJ
VDo6c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBw
ZW5kKEp1bXBMaXN0IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitS
ZWdpc3RlclNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJl
dHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBm
b3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0
IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBz
b3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJl
Z2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJl
ZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29u
dGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAg
ICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitz
dGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBi
ZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sg
Zm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24n
dCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMg
c29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VL
ZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0Owor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVj
dChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJl
c3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7Cisg
ICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBk
aWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVy
ZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAg
ICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVn
aXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAg
ICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAg
IH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Ns
b3dQYXRoKCkKK3sKKyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxh
c3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgQ1JBU0goKTsK
K30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYg
cmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxs
b2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChS
ZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IG1fcmVn
aXN0ZXJzW3JlZ107CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAg
ICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcg
SklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8g
T09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9yZWdpc3RlcnNb
cmVnXTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkp
IHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1
ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcp
Cit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRo
YXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgaWYgKG1fcmVnaXN0ZXJzW3Jl
Z10uaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBtX3Jl
Z2lzdGVyc1tyZWddLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgewor
ICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1fb3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX29wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwciA9
IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9yZWdpc3RlcnNbcmVnXSA9
IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7Cisg
ICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBm
b3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRh
aW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFs
bG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQorewor
ICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVz
dWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgICAgICBpZiAocmVnVmFsdWUu
aXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAg
IH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJ
Zk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAg
IGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJ
VDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgeworICAgICAgICBS
ZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBw
YWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAg
ICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJl
IHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tncHJdLmlzQWxsb2NhdGVk
KTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3Rl
cnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZv
ck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJ
bnQzMk9ubHk7CisgICAgbV9yZWdpc3RlcnNbZ3ByXS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwor
dm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVyc1tmcHJdLmlzQWxsb2NhdGVkKTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOwor
CisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9y
T3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZnBy
OworICAgIG1fcmVnaXN0ZXJzW2dwcl0ub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgbV9yZWdpc3Rl
cnNbZnByXS5vcGVyYW5kID0gb3BlcmFuZDsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBT
cGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVnaXN0
ZXJzW2dwcl0uaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJh
bmQpKTsKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIG1fcmVnaXN0ZXJz
W2dwcl0ub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7
CisgICAgYXV0byYgcmVnVmFsdWUgPSBtX3JlZ2lzdGVyc1tyZWddOworICAgIFJFTEVBU0VfQVNT
RVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30K
Kwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gbV9y
ZWdpc3RlcnNbcmVnXTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVl
LmxvY2tDb3VudDsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0KQorICAgIDog
bV9qaXQoaml0KQoreworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoKQoreworICAgIGlm
IChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJ
VDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVt
cDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJ
VDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOwor
CisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxv
Y2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIC8vIE9PUFM6IGRvIHNtYXJ0ZXIgdGhpbmdzIGZvciBhIGNv
bnN0YW50IGhlcmUuCisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1f
Z3ByOworICAgICAgICBtX2ppdC5tX3JlZ2lzdGVyc1ttX2dwcl0ub3BlcmFuZCA9IG1fb3BlcmFu
ZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNw
ZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNw
ZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBt
X2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJ
VDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dw
ciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIp
OworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAg
ICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQor
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1f
aml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRU
eXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKwor
ICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1
cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYg
aml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIo
KTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9
IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9
IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIC8vIE9PUFM6IGFzc2lnbkdQUiBmdW5jdGlv
bgorICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAg
ICAgbV9qaXQubV9yZWdpc3RlcnNbbV9ncHJdLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQor
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZShtX29w
ZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9q
aXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitK
SVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
Z3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlmICht
X2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBjb25zaWRlciB1
c2luZyBGUFIgaWYgdGhlcmUncyBhbiBGUFIgYWxsb2NhdGVkIGZvcgorICAgICAgICAvLyB0aGlz
IG9wZXJhbmQuCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAg
ICAvLyBPT1BTOiBhZGQgYW4gYXNzaWduUmVnIGhlbHBlcgorICAgICAgICBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9n
cHJdLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7
CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAg
ICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5k
OjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1
cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAg
ICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAg
IGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7Cisg
ICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2pp
dCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcg
Z3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIo
KTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1f
ZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykp
OworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3Vi
bGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisK
KyAgICAvLyBPT1BTOiBhc3NpZ25GUFIgZnVuY3Rpb24uCisgICAgbV9qaXQuZnByRm9yT3BlcmFu
ZChtX29wZXJhbmQpID0gbV9mcHI7CisgICAgbV9qaXQubV9yZWdpc3RlcnNbbV9mcHJdLm9wZXJh
bmQgPSBtX29wZXJhbmQ7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJ
VDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1
bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBhdXRv
IGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IG1fcmVnaXN0ZXJzW3JlZ107CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAg
ICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJK
SVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAj
aW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAK
ICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFz
aWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5m
bzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpA
QCAtMTAxLDE1ICsxMDUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xv
d0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAg
ICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxh
biA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVj
dCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7
CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wczsKKyAgICAgICAgU2F2ZVBsYW4gc2F2
ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMg
YmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OwogICAgIH07CiAKICAgICBz
dHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE4Myw2ICsxOTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNs
YXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7Cisg
ICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAK
QEAgLTE5MCwxMiArMTk5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
OwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1
bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVy
IC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJp
dCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRo
ZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBv
ZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayog
PSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0
ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNjYsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1f
dXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQor
ICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIo
UmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAg
ICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVy
SW1wbChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdp
dGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAw
LDkgKzMxNywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChKdW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lk
IGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRT
bG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCkpOworICAgICAgICB2b2lkIGFkZFNsb3dD
YXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpKTsKKyAgICAgICAgU2xvd0Nh
c2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoSnVt
cCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzEwLDcgKzMyOSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9p
ZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
JiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJ
RCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJh
cmdzCkBAIC0zMjcsNyArMzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBj
b21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTMzNyw3ICszNTYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9w
U3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwg
TkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CisgICAg
ICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlwZSwg
aW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUg
eyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0
ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC00NzUsOCArNDk0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRp
dGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNv
bnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNDg0
LDggKzUwMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwog
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNTEyLDkgKzUz
MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1
Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRl
cihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjQzLDY5ICs2NjIsNjkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
IAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5j
dGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wg
aXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5z
aWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKQEAgLTcyOCw4ICs3NDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lk
IGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZv
aWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
KTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIp
OwpAQCAtNzQ2LDM0ICs3NjMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1
bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxp
bmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAg
IGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRl
cikKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwot
ICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdp
c3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAg
ICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRl
Y29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBz
bG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTIyLDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdh
dGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2
ICs5MzUsMTQwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIEdQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAg
ICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgfTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAg
ICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAg
ICAgICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9u
bHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGlu
Zy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVP
cGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6Cisg
ICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAg
ICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7
CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHBy
b3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX3Byb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRU
eXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
Rm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
fQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZFRvUmVnLm9wZXJhbmQo
b3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7
CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vbkNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENl
bGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5T
cGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRL
aW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9y
ZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2Nh
dGVHUFIoKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0
SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFs
UmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lk
IHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAg
ICAgIHZvaWQgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7Cisg
ICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAg
ICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVj
b3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcgKzEwODcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4
IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nh
c2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAg
ICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8
dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzExMjQs
NDMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5s
aW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVj
b2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxv
Y2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPiBtX3Byb3ZlblR5cGVzOworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
IHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJv
eGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4K
KyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBG
UFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworICAgICAgICBPcGVyYW5k
czxBbGxvY2VkUmVnPiBtX29wZXJhbmRUb1JlZzsKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVp
bnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZh
bHNlIH07CisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKyAgICAg
ICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IG1fcmVnaXN0ZXJzOworCisgICAgICAgIHN0cnVjdCBC
bG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1Jl
ZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAg
ICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gcHJvdmVuVHlwZXM7CisgICAgICAgIH07CisK
KyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAg
ICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBi
b29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRK
dW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsODIgKzQ2LDgzIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5P
ckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVh
dGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVx
dWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9y
ZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgLy8gT09QUzog
dmVyaWZ5IE5hTgorICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERv
dWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5n
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBm
YWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2Fz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTYwLDIzICsxNjEsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWdu
ZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0
YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5l
cmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRo
OgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAg
Ly8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGlu
dCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogaGFu
ZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisKKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisK
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMTYgKzI5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9w
ZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRh
cmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAKICAgICAvLyBXZSBn
ZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBw
YXRoOgpAQCAtMjg5LDggKzMxMSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9p
bnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9p
bnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJh
bmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMjk5LDggKzMxOSw2
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAg
ICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAg
ICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjUsOCArMzQzLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAg
ICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAg
YWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiArMzY2LDExIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAg
ICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEp
OworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1
bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFn
UmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1Qx
KTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY4LDkgKzM4
Myw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAg
ZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFp
bDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC00MzUsMTAg
KzQ1MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBPT1BTOiBzbG93IHBhdGggc2xvdyBvcAog
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfbW9kKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQpAQCAtNDUxLDcg
KzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogICAg
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAtNDYzLDcgKzQ3Nyw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVF
NjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25k
aXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAg
IEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChv
cDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzU3NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1
Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBE
b3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBT
bG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTAgKzczNiw4IEBAIHZvaWQg
SklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxP
cE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0g
Yml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwg
dGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJp
Z0ludAogICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRo
TmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOwpAQCAtNzg2LDYg
Kzc5NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0
R1BSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdEdQUi5n
cHIoKSk7CisgICAgICAgICAgICBub3QzMihyZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAg
c2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIC8vIE9PUFMKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAg
LTkwMSwxNiArOTI0LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1
Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElD
KGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3Zl
cmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91
YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0
RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMq
PihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVt
aXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlQWRkT3B0aW1pemUpOwogfQpAQCAtMTIxNSwzMiArMTI3MCw5NCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBt
dWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAg
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZs
b3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0Lmdw
cigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJs
ZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4o
bXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4o
bV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0
TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZU11bE9wdGltaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9j
b2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNo
U3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAg
ICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShv
cDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAg
RlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIo
KSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJ
QygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0
aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93
PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2Zp
bGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3Vi
T3B0aW1pemUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsK
ICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yNjQs
MTMgKzI2MiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzAsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0K
ICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZh
cmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0
VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENv
bnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC00MTEsMTQgKzQwNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9w
ZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2Fz
ZSk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RP
YmplY3Q7CkBAIC01MTUsMTAgKzUxMywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dD
YXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTI1LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BS
ID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgLy8g
T09QUworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChp
dGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMjUgKzE2
Niw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1
cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lz
dGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xv
d0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgp
ICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxT
bG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0g
c2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZh
bmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVj
b2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBA
IC0yMDYsMjcgKzE4NywzNCBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dD
YXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
Ci0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNl
cy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9z
bG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZl
UGxhbigpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExp
c3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyBy
ZXN1bHQpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAg
OiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQp
Lmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAg
IEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFw
cHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5
dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAg
ICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zOTMsMTEg
KzM4MSw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewot
ICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19
Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAg
LTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJ
bnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3
aGljaCBhcmVuJ3QgcmVnaXN0ZXIgYWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisKKyAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXND
b25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEw
MSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJl
Z2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcg
PSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcg
cmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hS
ZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIo
KTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAg
ICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVz
dWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0
b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBz
Y3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3Jh
Z2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcpOwog
ICAgIH0KKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUp
OwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNl
TE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE1Nyw1MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBp
bnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9P
UFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNv
bnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVt
cDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFj
ZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgq
dGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOwor
ICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBp
bnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdU
MCk7CisgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1
Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5v
dCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29u
c3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMTAs
OTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5k
cyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJz
LgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUg
d2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90
byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkg
dGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0
KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBD
ZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1
bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9
OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BS
UmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0
VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNo
MlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxs
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwt
PmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKwor
ICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90
b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdw
cigpKTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BS
LCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9H
UFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Ig
Z2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAg
ICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNj
cmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwor
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9h
ZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBp
bnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNl
IHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQg
Zm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAg
ICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVz
dCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9s
Lmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIs
IHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90
byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICBy
ZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAg
cmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1tt
X2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
Z2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQ
Uik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwor
ICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMTEsMjkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzQxLDcyIEBAIHZvaWQgSklUOjplbWl0
X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5l
ZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxp
bmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVOb25DZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3Ro
ZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRH
UFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3Vs
dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAor
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQxNSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191
bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
IAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs1MjcsNjEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNP
YmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVOb25DZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7
IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsMjAgKzk4NSwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5z
dHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CkBAIC0xMDIzLDggKzEyNTYsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29u
c3QgSW5zdHJ1Y3RpbwogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0g
ICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAg
IGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJp
YWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRW
YWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOwor
ICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkg
KzEyNzIsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2Nv
cGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQt
PmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSksIHNjb3BlKTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTEwOTksMjAgKzEzNTAsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNv
bnN0IEluc3RydQogCiAvLyBTbG93IGNhc2VzCiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVk
SW1tMzIoMHgxKSwgcmVnVDApOwpAQCAtMTEyMCwzMCArMTM2NywyNCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwpAQCAtMTE4NywxMyArMTQyOCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1p
emF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JS
ZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0
ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjEwLDcgKzE0NDksNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYK
IH0KIApAQCAtMTIzMywxMCArMTQ3MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBs
ZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhi
aXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xNDgx
LDEwICsxNzE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwog
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4
ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
ICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJl
ZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2
MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMs
OCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsx
MDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAx
LDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDIyICs3OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBpZiAo
aGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dl
dEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5
VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwg
cmVnVDEpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMCwxNiArMTE2LDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
QVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKICAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKQEAgLTMzNCw3ICszMjcsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJ
VDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
OwpAQCAtMzQyLDcgKzMzNSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUg
PSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29k
ZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1MCwxMyArMzQz
LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9Owog
CiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5
VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CkBAIC00NDQsMTAgKzQzNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTQ5MywxMCArNDgzLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwpAQCAtNTM3LDEwICs1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU3NiwxMCArNTYyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC02NDYsMTAgKzYzMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY28KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTY2MywxMCArNjQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTcxMiwxMCArNjkyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRl
ckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKQEAgLTc0OSwxMCArNzI3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTAzMCwx
MCArMTAwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTExODYsMTAgKzExNjAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwog
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSku
cmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkK
ICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhp
cyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxs
KCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1f
Ynl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJB
c3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJQ01GdXp6ZXIsIDQyNDI0
MiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNNUHJv
YmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VDdXN0
b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBl
bnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410575</attachid>
            <date>2020-10-05 15:48:09 -0700</date>
            <delta_ts>2020-10-05 19:30:23 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>173807</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJy
ZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5
NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkw
LDI3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNjYsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
ID0gMDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1f
Z3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5z
aXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAg
ICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nvcklu
ZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRl
Y2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAg
ICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2su
aW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49
IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxM
ZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9j
ay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRC
bG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2Nr
LT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJs
b2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6
IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3Rh
dGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29y
c1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxv
Y2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRl
ID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNz
b3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVBy
aW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92
ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5j
b25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMu
bnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcg
PSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2Nv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5z
aXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRT
dGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Ns
b3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRl
Y29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAg
ICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhl
cmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzNzgsOSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3Rl
cE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJ
bnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zm
c2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiAr
MTQxOSwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBy
YXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRl
Y29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291
bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVu
ZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNs
b3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRl
eCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5k
ZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTM5LDE2IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAi
LCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5v
ZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGlu
IHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NB
R0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55
IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoK
KyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNl
cy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVu
b3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVM
RUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+
dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4u
Iik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJv
ZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZTsKICAgICB9CkBAIC03NzQsNiArMTY4MSwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhv
dXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQ
YXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsK
IAorICAgIC8vIE9PUFM6IGltcGxlbWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAo
YXV0byBqdW1wIDogbV9leGl0SnVtcHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7Cisg
ICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhp
cyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC0xMDU4LDYgKzE5NzIsNTA1IEBAIFNlY29u
ZHMgSklUOjp0b3RhbENvbXBpbGVUaW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNv
bXBpbGVUaW1lICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9
Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0
SnVtcHMuYXBwZW5kKEp1bXBMaXN0IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJhbms+CitSZWdpc3RlclNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2Vk
OworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAg
ICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVl
U2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkK
KyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2Vk
OworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9i
YWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6
IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4g
cmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0
LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBS
cygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxs
b2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4g
dGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtl
IHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+
KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjph
c3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xv
d0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAg
Q1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3By
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAg
ICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAg
ICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6
OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVu
Y3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisg
ICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSByZWdWYWx1ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5k
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAg
ICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3Bl
cmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZWdWYWx1
ZShyZWcpID0gUmVnVmFsdWUgeyB9OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBs
KCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7Cisg
ICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxh
bigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZl
UGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
IChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVy
YW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2Um
IHNsb3dDYXNlKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7
CisgICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3Vs
dCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3Rl
cigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gp
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7
CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0
b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNB
bGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisg
ICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ID0gU3BlY0ludDMyT25seTsKKyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOwor
fQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcg
ZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOwor
ICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7
CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0
ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBm
cHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICByZWdWYWx1ZShm
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNC
eXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3By
KS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOwor
ICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVn
VmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lk
IEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9j
a0NvdW50OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2pp
dChqaXQpCit7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsK
KyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpH
UFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpG
UFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpG
UFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBt
X2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAg
ICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayht
X2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlm
IChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2Nh
dGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3Rh
bnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQs
IG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAg
IH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRl
KEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZp
bHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9
CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQor
eworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxs
T3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQor
CitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVn
OworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAg
ICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAg
ICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2pp
dC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2pp
dC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0
LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsK
K30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitK
SVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9j
ayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJh
bmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOwor
ICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5
cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShC
YWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKwor
ICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0
dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29u
c2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAg
Ly8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7Cisg
ICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisK
KyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAg
IG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVP
cGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJl
ZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+
RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVn
IEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAg
ICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAg
ICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQg
dmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1f
aml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcg
dGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7
CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNw
ZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0s
IEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBI
YXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwg
dGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQp
OworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQg
PSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1
ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICBy
ZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJz
KCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVu
dXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3Mg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7Cisg
ICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xh
c3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSAr
MTA1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVj
dCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAg
ICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnko
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBm
cm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8
c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2Ug
eworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAg
ICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9
CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBP
T1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xv
dyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRj
aFJlY29yZCB7CkBAIC0xODMsNiArMTkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xB
U1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2lu
ZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQ
YXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIg
KzE5OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
ID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRC
eUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwg
b2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9y
IHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2Vt
ZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2
OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgo
MCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMsNiArMjY2LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9p
ZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9i
YmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsK
KwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4
Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTcsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAK
LSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVt
cCwgUmVnIHJlc3VsdCA9IFJlZygpKTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVT
bG93Q2FzZShSZWcgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAg
ICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMjksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2Fs
bF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3
LDcgKzM0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBp
bGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlw
ZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAg
ICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFy
Z2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRp
b25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5NCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJs
ZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCw4ICs1MDMsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNp
emVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKQEAgLTUxMiw5ICs1MzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKQEAgLTY0Myw2OSArNjYyLDY5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlv
biopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2Fs
bGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVn
YXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAg
dm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAg
ICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAg
IHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQp
OwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAg
ICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBA
IC03MjgsOCArNzQ3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xv
c3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAg
ICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0Niwz
NCArNzYzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24s
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAg
ICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlv
biwgUmVwYXRjaEZ1bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2Uo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9t
LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0g
ICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lz
dGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAg
ICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2Fz
ZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlT
bG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBi
b29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzkyMiw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsg
fQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAg
ICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBi
b29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTM1LDE3NCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwog
CisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBH
UFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRl
bXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZw
cigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAg
ICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAg
ICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfklu
dDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMy
IGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJl
IHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxs
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2Vs
bE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAg
ICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAg
ICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9m
cHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRl
ZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRp
b25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFu
ZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVn
JiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFu
ZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAg
IEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFs
dWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0K
KworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9
CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQp
ID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlTm9uQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2Ug
cHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAg
ICAgIEdQUlJlZyBhbGxvY2F0ZUdQUigpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsK
KyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAg
IHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBz
ZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2NrKFJl
Zyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRo
U2F2ZVBsYW4oKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29u
c3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAg
ICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyArMTEyMSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4g
bV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAK
ICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7
CkBAIC05OTAsNiArMTE1OCw3NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisK
KyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMs
IHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFs
bG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisK
KyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAg
ICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAh
PSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4
X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNl
IH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQK
KyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAg
ICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAg
ICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07CisK
KyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFuZHM8QWxsb2Nl
ZFJlZz4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJl
Z2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBwcm92ZW5UeXBl
czsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9
PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVz
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5U
eXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBt
ZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOwor
CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0
ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdp
c3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJn
ZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAg
ICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9j
dXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+
IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3Rh
dGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3Jz
OworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8SnVt
cExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEs
IHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewog
ICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGlu
IHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBp
bW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0
ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMu
Z3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5m
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRp
b24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiArMjk0LDE2IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3Ax
LCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24s
IGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsK
IAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBA
IC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMy
NSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7
CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEy
ICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMg
bm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwy
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwog
ICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIE9PUFM6IHNsb3cg
cGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyAr
NDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90
SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNDg3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hh
cmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNTc2LDEzIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMCAr
NzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVt
aXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRO
ZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIo
KSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7
CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlm
dChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC0xMjE1LDMyICsxMjcw
LDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJE
b3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJ
Qyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAg
ZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAgYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzMCw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwxNCArNDA3LDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxT
bG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
TmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1MjUs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwog
ICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2NiwyNSArMTY2LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dD
YXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBz
bG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93
Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAg
ICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUg
dm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQiKTsKQEAgLTIwNiwyNyArMTg3LDM0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZ
U19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1
bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgp
IHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkg
eworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4g
PSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVz
dWx0ID0gcmVzdWx0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5s
YXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1
bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1
bXAganVtcCwgUmVnIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29u
c3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNs
b3dDYXNlKHJlc3VsdCkuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQpCiB7CiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1h
a2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShl
bXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHQpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0
Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAogQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNl
dCkKQEAgLTM5MywxMSArMzgxLDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVy
YW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVz
c0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0x
ODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4
ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0aGlzIGJldHRlciBm
b3IgY29uc3RhbnRzIHdoaWNoIGFyZW4ndCByZWdpc3RlciBhbGxvY2F0ZWQgeWV0LgorICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKworICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
CkBAIC05MCwzMiArMTAxLDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxv
Y2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+
KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlz
dHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklE
IGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1Qy
OworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBH
UFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJl
c3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0g
cmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFs
bG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsK
ICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNv
bnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMs
IHJlc3VsdFJlZyk7CiAgICAgfQorCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpT
VmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0
ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyAr
MTU3LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5j
ZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBy
ZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7
CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
aGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGNvbnN0cnVj
dG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNl
VGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9y
VGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVn
VDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAg
Ly8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxk
IGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5j
dGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0
YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29u
c3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVj
ayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRo
ZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVy
bywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7
CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdU
MCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNTEsNDAgKzIxMCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdl
IHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9y
IHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBD
aGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMg
aXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQK
LSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAg
ICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBPcHRpb25h
bDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJh
bmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVU
ZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAg
ICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gx
VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsK
KworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKwor
ICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAg
IHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9U
ZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0g
dmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENl
bGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOwor
CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBw
cm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNl
KHJlc3VsdFRlbXAuZ3ByKCkpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
ICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRl
bXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAor
ICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAg
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMu
YXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSBy
ZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9y
IGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNh
biB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Rv
LCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxs
cy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5
X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQK
KyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3Rv
CisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
KyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBt
X2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJl
Z3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Vt
cHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAK
LSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwg
cmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vbkNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlu
cHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAg
R1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQ
Uik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRv
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwg
dGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJl
Z1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAg
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsK
KworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090
aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTgg
KzUyNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vbkNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZh
bHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFi
b3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5r
KHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCwyMCArOTg1LDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJp
Y3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJp
Y3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKQEAgLTEwMjMsOCArMTI1NiwxMiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFs
ZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2Jq
ZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3Vu
dCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAg
ICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAg
IHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkg
PSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7
CiAKQEAgLTEwMzUsOSArMTI3MiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29u
c3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwor
ICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7
CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNP
YmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3Bl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTA5OSwyMCArMTM1MCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja190ZHooY29uc3QgSW5zdHJ1CiAKIC8vIFNsb3cgY2FzZXMKIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CkBAIC0xMTIwLDMwICsxMzY3LDI0IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTg3LDEzICsxNDI4LDExIEBAIHZvaWQgSklUOjplbWl0X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3Ig
dGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2
ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXpl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMTAsNyArMTQ0OSw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICB9CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShp
dGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsxNDcxLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJz
b2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CiB9CiAKQEAgLTE0ODEsMTAgKzE3MTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21w
aWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwg
YmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4
ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFs
KGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4
OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbElu
Zm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0
aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBp
cyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4ICs1
NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01ODYs
OCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJ
bnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpA
QCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJv
bVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0
aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNv
bHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjIgKzc4LDE4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKIAogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4Owot
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVn
VDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsK
KyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHBy
b2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIwLDE2ICsxMTYsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogCi0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwpAQCAtMzM0LDcgKzMyNyw3IEBAIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArMzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01B
TW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsm
XShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2Rl
KSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpA
QCAtMzUwLDEzICszNDMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAg
ICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAg
Z2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKQEAgLTQ0NCwxMCArNDM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmls
dGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNDkzLDEw
ICs0ODMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC01MzcsMTAgKzUyNSw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTc2LDEw
ICs1NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY0NiwxMCArNjMwLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjYzLDEwICs2NDUsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzEyLDEwICs2OTIsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJl
ZywgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIApAQCAt
NzQ5LDEwICs3MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC0xMDMwLDEwICsxMDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTE4NiwxMCArMTE2
MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJ
bmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1
bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBv
cGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9w
ZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRl
OgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3Rl
cnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1
YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/Cisg
ICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgor
ICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NB
TVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUlu
c3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5
dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgs
NyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNp
Z25lZCwgc2VlZEZvckxJQ01GdXp6ZXIsIDQyNDI0MiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JU
ZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAg
ICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410602</attachid>
            <date>2020-10-05 19:30:23 -0700</date>
            <delta_ts>2020-10-06 18:44:37 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>181789</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIG1lcmdlU3BlY3VsYXRpb25z
KHR5cGUgJiB+U3BlY09iamVjdCwgU3BlY1ByaW1pdGl2ZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZm
ZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3
ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIg
dGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGlu
Zy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4g
Tm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFu
ZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQor
ICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiBy
ZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCks
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRl
eF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jl
c3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVj
U2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xv
bmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlz
ZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxl
PigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
c19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxh
YmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAg
Y2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAg
Y2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJv
dzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Rl
ZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9w
X2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgor
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNl
IG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBv
cF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAg
IGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8
Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0g
cHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHN1Y2Nlc3Nv
ck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNj
ZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0aW9uLgorICAgICAgICBtX2dy
YXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJl
ZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91
c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJy
ZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5
NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYg
KG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkw
LDI3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNjYsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
ID0gMDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51
bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1f
Z3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5z
aXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAg
ICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nvcklu
ZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRl
Y2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAg
ICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2su
aW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49
IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxM
ZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9j
ay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRC
bG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2Nr
LT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJs
b2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6
IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3Rh
dGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29y
c1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxv
Y2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRl
ID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNz
b3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVBy
aW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92
ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5j
b25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMu
bnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcg
PSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2Nv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5z
aXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRT
dGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Ns
b3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRl
Y29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAg
ICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhl
cmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzNzgsOSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3Rl
cE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJ
bnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zm
c2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiAr
MTQxOSwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBy
YXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRl
Y29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291
bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVu
ZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNs
b3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRl
eCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5k
ZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTM5LDE2IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAi
LCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5v
ZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGlu
IHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NB
R0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55
IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoK
KyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNl
cy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVu
b3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVM
RUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+
dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4u
Iik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJv
ZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZTsKICAgICB9CkBAIC03NzQsNiArMTY4MSwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhv
dXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQ
YXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsK
IAorICAgIC8vIE9PUFM6IGltcGxlbWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAo
YXV0byBqdW1wIDogbV9leGl0SnVtcHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7Cisg
ICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhp
cyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC0xMDU4LDYgKzE5NzIsNTA1IEBAIFNlY29u
ZHMgSklUOjp0b3RhbENvbXBpbGVUaW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNv
bXBpbGVUaW1lICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9
Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0
SnVtcHMuYXBwZW5kKEp1bXBMaXN0IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJhbms+CitSZWdpc3RlclNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2Vk
OworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAg
ICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVl
U2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkK
KyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2Vk
OworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9i
YWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6
IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4g
cmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0
LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBS
cygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxs
b2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4g
dGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtl
IHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+
KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjph
c3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xv
d0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAg
Q1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3By
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAg
ICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAg
ICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6
OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVu
Y3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisg
ICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSByZWdWYWx1ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5k
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAg
ICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3Bl
cmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZWdWYWx1
ZShyZWcpID0gUmVnVmFsdWUgeyB9OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBs
KCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7Cisg
ICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxh
bigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZl
UGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
IChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVy
YW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2Um
IHNsb3dDYXNlKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7
CisgICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3Vs
dCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3Rl
cigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gp
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7
CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0
b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNB
bGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisg
ICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ID0gU3BlY0ludDMyT25seTsKKyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOwor
fQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcg
ZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOwor
ICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7
CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0
ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBm
cHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICByZWdWYWx1ZShm
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNC
eXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3By
KS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOwor
ICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVn
VmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lk
IEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9j
a0NvdW50OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2pp
dChqaXQpCit7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsK
KyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpH
UFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpG
UFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpG
UFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBt
X2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAg
ICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayht
X2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlm
IChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2Nh
dGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3Rh
bnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQs
IG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAg
IH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRl
KEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZp
bHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9
CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQor
eworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxs
T3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQor
CitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVn
OworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAg
ICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAg
ICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2pp
dC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2pp
dC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0
LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsK
K30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitK
SVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9j
ayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJh
bmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOwor
ICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5
cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShC
YWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKwor
ICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0
dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29u
c2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAg
Ly8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7Cisg
ICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisK
KyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAg
IG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVP
cGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJl
ZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+
RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVn
IEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAg
ICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAg
ICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQg
dmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1f
aml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcg
dGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7
CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNw
ZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0s
IEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBI
YXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwg
dGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQp
OworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQg
PSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1
ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICBy
ZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJz
KCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVu
dXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3Mg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7Cisg
ICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xh
c3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSAr
MTA1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVj
dCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAg
ICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnko
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBm
cm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8
c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2Ug
eworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAg
ICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9
CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBP
T1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xv
dyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRj
aFJlY29yZCB7CkBAIC0xODMsNiArMTkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xB
U1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2lu
ZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQ
YXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIg
KzE5OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
ID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRC
eUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwg
b2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9y
IHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2Vt
ZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2
OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgo
MCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMsNiArMjY2LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9p
ZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9i
YmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsK
KwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4
Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTcsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAK
LSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVt
cCwgUmVnIHJlc3VsdCA9IFJlZygpKTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVT
bG93Q2FzZShSZWcgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAg
ICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMjksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2Fs
bF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3
LDcgKzM0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBp
bGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlw
ZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAg
ICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFy
Z2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRp
b25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5NCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJs
ZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCw4ICs1MDMsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNp
emVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKQEAgLTUxMiw5ICs1MzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKQEAgLTY0Myw2OSArNjYyLDY5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlv
biopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2Fs
bGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVn
YXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAg
dm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAg
ICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAg
IHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQp
OwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAg
ICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBA
IC03MjgsOCArNzQ3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xv
c3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAg
ICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0Niwz
NCArNzYzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24s
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAg
ICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlv
biwgUmVwYXRjaEZ1bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2Uo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9t
LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0g
ICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lz
dGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAg
ICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2Fz
ZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlT
bG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBi
b29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzkyMiw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsg
fQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAg
ICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBi
b29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTM1LDE3NCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwog
CisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBH
UFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRl
bXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZw
cigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAg
ICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAg
ICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfklu
dDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMy
IGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJl
IHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxs
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2Vs
bE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAg
ICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAg
ICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9m
cHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRl
ZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRp
b25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFu
ZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVn
JiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFu
ZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAg
IEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFs
dWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0K
KworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9
CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQp
ID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlTm9uQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2Ug
cHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAg
ICAgIEdQUlJlZyBhbGxvY2F0ZUdQUigpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsK
KyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAg
IHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBz
ZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2NrKFJl
Zyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRo
U2F2ZVBsYW4oKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29u
c3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAg
ICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyArMTEyMSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4g
bV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAK
ICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7
CkBAIC05OTAsNiArMTE1OCw3NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisK
KyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMs
IHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFs
bG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisK
KyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAg
ICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAh
PSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4
X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNl
IH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQK
KyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAg
ICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAg
ICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07CisK
KyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFuZHM8QWxsb2Nl
ZFJlZz4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJl
Z2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBwcm92ZW5UeXBl
czsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9
PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVz
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5U
eXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBt
ZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOwor
CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0
ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdp
c3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJn
ZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAg
ICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9j
dXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+
IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3Rh
dGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3Jz
OworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8SnVt
cExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEs
IHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewog
ICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGlu
IHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBp
bW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0
ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMu
Z3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5m
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRp
b24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiArMjk0LDE2IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3Ax
LCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24s
IGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsK
IAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBA
IC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMy
NSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7
CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEy
ICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMg
bm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwy
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwog
ICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIE9PUFM6IHNsb3cg
cGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyAr
NDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90
SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNDg3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hh
cmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNTc2LDEzIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMCAr
NzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVt
aXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRO
ZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIo
KSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7
CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlm
dChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC0xMjE1LDMyICsxMjcw
LDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJE
b3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJ
Qyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAg
ZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAgYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzMCw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwxNCArNDA3LDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxT
bG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
TmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1MjUs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwog
ICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2NiwyNSArMTY2LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dD
YXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBz
bG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93
Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAg
ICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUg
dm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQiKTsKQEAgLTIwNiwyNyArMTg3LDM0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZ
U19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1
bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgp
IHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkg
eworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4g
PSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVz
dWx0ID0gcmVzdWx0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5s
YXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1
bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1
bXAganVtcCwgUmVnIHJlc3VsdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29u
c3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNs
b3dDYXNlKHJlc3VsdCkuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQpCiB7CiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1h
a2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShl
bXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHQpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0
Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAogQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNl
dCkKQEAgLTM5MywxMSArMzgxLDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVy
YW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVz
c0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0x
ODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4
ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0aGlzIGJldHRlciBm
b3IgY29uc3RhbnRzIHdoaWNoIGFyZW4ndCByZWdpc3RlciBhbGxvY2F0ZWQgeWV0LgorICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKworICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
CkBAIC05MCwzMiArMTAxLDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxv
Y2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+
KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlz
dHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklE
IGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1Qy
OworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBH
UFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJl
c3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0g
cmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFs
bG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsK
ICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNv
bnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMs
IHJlc3VsdFJlZyk7CiAgICAgfQorCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpT
VmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0
ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyAr
MTU3LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5j
ZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBy
ZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7
CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
aGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGNvbnN0cnVj
dG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNl
VGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9y
VGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVn
VDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAg
Ly8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxk
IGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5j
dGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0
YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29u
c3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVj
ayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRo
ZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVy
bywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7
CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdU
MCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNTEsNDAgKzIxMCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdl
IHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9y
IHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBD
aGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMg
aXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQK
LSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAg
ICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBPcHRpb25h
bDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJh
bmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVU
ZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAg
ICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gx
VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsK
KworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKwor
ICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAg
IHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9U
ZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0g
dmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENl
bGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOwor
CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBw
cm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNl
KHJlc3VsdFRlbXAuZ3ByKCkpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
ICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRl
bXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAor
ICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAg
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMu
YXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSBy
ZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9y
IGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNh
biB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Rv
LCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxs
cy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5
X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQK
KyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3Rv
CisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
KyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBt
X2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJl
Z3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Vt
cHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAK
LSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwg
cmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vbkNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlu
cHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAg
R1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQ
Uik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRv
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwg
dGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJl
Z1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAg
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsK
KworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090
aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIg
KzQ0OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ4MCwyNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5w
dXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTEwLDU2IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMy
VGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBh
bmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7
Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2
NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNF
KEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1NzYsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENl
bGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4
ICs2MjUsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb25DZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2
YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAg
ICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsMjAgKzEwODMsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0
cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtMTAyMyw4ICsxMzU0LDEyIEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0
YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBv
YmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNv
dW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGog
PCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7Cisg
ICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAg
ICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkp
OworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxl
KSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KTsKIApAQCAtMTAzNSw5ICsxMzcwLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShj
b25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7
CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdU
MDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2Nv
cGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDk5LDIwICsxNDQ4LDE2IEBAIHZvaWQgSklUOjplbWl0
X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnUKIAogLy8gU2xvdyBjYXNlcwogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAg
ICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKQEAgLTExMjAsMzAgKzE0NjUsMjQg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKQEAgLTExODcsMTMgKzE1MjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZv
ciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkg
ewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVT
YXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1p
emUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIxMCw3ICsxNTQ3LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgIH0KICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFN
KGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzE1NjksOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBB
YnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKIH0KIApAQCAtMTQ4MSwxMCArMTgxNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENv
bXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgp
LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1
LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93
IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3LDgg
KzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4
Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJl
c29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMTggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7
Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhd
OworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjAsMTYgKzExNiwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7CiAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CiAKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CkBAIC0zMzQsNyArMzI3LDcgQEAgSklUUHV0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICszMzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVD
TUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0g
WyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNv
ZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAg
ICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0LDEwICs0MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRG
aWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC00OTMs
MTAgKzQ4Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUzNywxMCArNTI1LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01NzYs
MTAgKzU2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEwICs2MzAsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NjMsMTAgKzY0NSw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIsMTAgKzY5Miw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VW
UmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBA
IC03NDksMTAgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMTg2LDEwICsx
MTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAK
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQm
IG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYg
b3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZh
dGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lz
dGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAg
cHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8K
KyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGgu
CisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVf
U0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxl
SW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1f
Ynl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUx
OCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVu
c2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZv
clRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9M
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2Ugewog
ICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410723</attachid>
            <date>2020-10-06 18:44:37 -0700</date>
            <delta_ts>2020-10-07 13:06:32 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>186252</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMwIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwK
ICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIs
IFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOwor
CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxp
bmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSw3ICsxMDY5LDczIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICAvLyBPT1BTCisKKyAgICAgICAgbV9z
dGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBtX3ByZWRlY2Vzc29y
cy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBibG9jayA6ICpt
X2dyYXBoKSB7CisgICAgICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJsb2NrKCkgfHwgYmxvY2su
aXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAg
ICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmNvbnRhaW5zKGJsb2Nr
LmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICBtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJ
bmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9j
dXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRl
QXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3Rh
dGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRl
ID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5k
QmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5Qmxv
Y2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vz
c29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
c2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs
UHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCld
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRl
Y2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykgeworICAgICAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4obV9j
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
LCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVn
aXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZz4obV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVC
bG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJl
ZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsK
KworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgdW5zaWduZWQgcHJldmlvdXNT
bG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwogICAgICAgICBpZiAobV9ieXRlY29k
ZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkgPiAwKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3Ry
dWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KQEAgLTQ3Nyw2ICsxMzgxLDkg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX3VzZUxP
TCkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsK
KwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsK
ICAgICB9CkBAIC01MTUsMTIgKzE0MjIsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJl
Q2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1
bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRl
ciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRl
ci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAg
ICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAg
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKQEAgLTYz
MywxNSArMTU0MiwxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIs
IGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwot
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2Vz
LmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5v
dWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8u
b2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdF
KGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50
by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2Vu
LiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNl
dCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGlu
IHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVB
ZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7
CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRl
Y29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAtNzc0LDYgKzE2ODQsMTMgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVm
YXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisg
ICAgeworICAgICAgICBmb3IgKGF1dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAg
anVtcC5saW5rKHRoaXMpOworICAgICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAgICAgc3Rh
Y2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2
ICsxOTc1LDUwNSBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0
dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3Rh
bEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBq
dW1wKQoreworICAgIG1fZXhpdEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdz
KCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxv
Y2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0
aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2Ug
dGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAg
UmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBS
ZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0
ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAg
ICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNh
dmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0K
KyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BS
cygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxs
b2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4g
dGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtl
IHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+
KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdp
c3RlclNldCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9y
eSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMK
KyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8g
ZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tl
eSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpj
YWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVB
bGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgp
OworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgaWYgKG1fc2xvd0Nh
c2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVj
b2RlSW5kZXgpCisgICAgICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BS
KCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1
ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQorewor
ICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3
LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAg
ICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICgh
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2Nr
Q291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAg
ICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5m
cHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6
IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2Yg
dGhlIG1hcCBhZ3JlZS4KKworICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUocmVnKS5vcGVyYW5kOwor
ICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9j
ZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmVnVmFsdWUocmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJ
VDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0g
WyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAg
ICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xv
YmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dl
ZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBK
SVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBs
b3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQg
PSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1
ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3Bl
cmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQ
bGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBz
bG93Q2FzZS5zYXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJl
ZyA9PSBzbG93Q2FzZS5yZXN1bHQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp
ZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMo
KS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2Ny
YXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnNldElu
dDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6
IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VS
VChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVS
ZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNz
Rm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5v
cGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShm
cHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJl
ZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBmcHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJh
bmQ7CisgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKworICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1Zh
bHVlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRy
ZXNzRm9yKG9wZXJhbmQpKTsKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAg
IHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJl
ZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxv
Y2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1
ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsK
KyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJ
VCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpn
cHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4g
bV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1f
aml0LmFsbG9jYXRlR1BSKCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9
CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sK
K30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0
LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5G
UFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsK
KyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJP
cGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGpp
dCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQor
eworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIC8vIE9PUFM6IGRvIHNtYXJ0ZXIg
dGhpbmdzIGZvciBhIGNvbnN0YW50IGhlcmUuCisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dw
ciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlm
ICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAg
ICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3By
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3Bl
cmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBt
X2dwcjsKKyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7
CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1
bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3Rl
cnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsK
KyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVy
YW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICBncHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyht
X2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmIChtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAg
ICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZl
VGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWND
ZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZh
bHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9w
ZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE9PUFM6IGNvbnNpZGVyIHVzaW5nIEZQUiBpZiB0aGVyZSdzIGFuIEZQUiBhbGxv
Y2F0ZWQgZm9yCisgICAgICAgIC8vIHRoaXMgb3BlcmFuZC4KKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1f
b3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVy
YW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJ
VDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYg
KG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1f
aml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlk
RlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0Lmxv
Y2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQor
CisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQu
Z3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBt
X2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkg
eworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihK
U1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNw
ZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0
ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2pp
dC51bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJl
ZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworUmVnaXN0ZXJT
ZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0
IHJlc3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAg
IGF1dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkKQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2lu
Y2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJN
YXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRl
ZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2Fs
bExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1
dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAg
ICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXgg
dCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5n
IFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisg
ICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBzOworICAgICAgICBTYXZl
UGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBm
b3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3Q7CiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQg
ewpAQCAtMTgzLDYgKzE5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdO
TUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9
IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDAsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNl
ZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1
bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBj
YW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2
QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5k
IHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAg
IHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI2NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZv
ckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxG
b3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwo
cmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMDAsOSArMzE4LDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyBy
ZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQg
YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVn
IHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1w
LCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzMwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lk
IGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlE
ICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKQEAgLTMyNyw3ICszNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM1Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BT
dHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBO
RXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAg
ICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRl
clZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTQ3NSw4ICs0OTUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQs
OCArNTA0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5z
aWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxD
b25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5z
dHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0
aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJv
b2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCkBAIC01MTIsOSArNTMy
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRo
X3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVn
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMsNjkgKzY2Myw2OSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1
Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAg
ICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0
aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
IAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBp
c1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNp
Z25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNzI4LDggKzc0OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQg
ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9p
ZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIp
OwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7
CkBAIC03NDYsMzQgKzc2NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVu
Y3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2Zp
bGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2Fz
ZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlu
a1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAg
IHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9t
LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0g
ICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lz
dGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAg
ICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwor
ICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAg
ICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUlu
ZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5MjMsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0
aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlv
biopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAg
ICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTM1LDYg
KzkzNiwxODQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJp
bmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJp
bmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgR1BSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25s
eSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5n
LiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
RlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJv
dmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAg
ICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVy
YW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
OworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3Ry
dWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJh
bmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFu
ZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9w
ZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZU5vbkNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEo
cHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9y
IHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJl
Z2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIs
IEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJl
Zyk7CisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOwor
ICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9y
ZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVy
U2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVy
KiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpA
QCAtOTUzLDcgKzExMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBU
YWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRl
eDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dp
dGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2ln
bmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzExNjksNzYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAg
Ym9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAg
ICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZh
cmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAg
ICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcg
ZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFs
bG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIg
IT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAg
ICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAg
ICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAg
IGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNv
bnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3Vu
dCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQg
IT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9Owor
ICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3Jt
YXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAg
ICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAg
IFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29u
c3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7Cisg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5v
cGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNp
emUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0s
IG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3Rl
cnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOwor
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAg
ICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAg
ICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOwor
ICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisK
KyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9w
dGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8
dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFs
c2UgfTsKKyAgICAgICAgVmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBA
IG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhh
bkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9y
RXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
bk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgLy8gT09QUzogdmVyaWZ5IE5hTgorICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
bk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9y
ZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNz
VGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZh
bHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFs
c2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVl
LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5v
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYw
LDIzICsxNjEsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Ywog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRp
b24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwg
ZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGlt
bWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQg
aW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50
IGltbWVkaWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihj
b25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNv
bmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogaGFuZGxlIGNsb2JiZXJpbmcgdGhl
IHJlZ3MKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKwog
ICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBA
IC0yNzIsMTYgKzI5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZp
cnR1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9u
IGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRp
b24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24t
PnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXpl
KCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUs
IERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0
aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJv
b2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUs
IERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0
aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJv
b2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29k
ZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMjg5LDggKzMx
MSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAvLyAt
IGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8g
LSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlm
IChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3Ay
KSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMjk5LDggKzMxOSw2IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
ICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWls
MSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjUsOCArMzQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0g
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVn
aXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiArMzY2LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAg
ICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZh
aWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJ
ZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsK
ICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0
VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY4LDkgKzM4Myw5IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsK
ICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAg
ICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC00MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KKyAgICAvLyBPT1BTOiBzbG93IHBhdGggc2xvdyBvcAogICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQpAQCAtNDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwogfQpAQCAtNDYzLDcgKzQ3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9t
b2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0
aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMy
T3AyOwpAQCAtNDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7
CkBAIC01NjEsMTUgKzU3NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJl
Z1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CkBAIC03MjMsMTAgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0
aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5l
Z0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAg
ICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFs
dWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRo
SUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOwpAQCAtNzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAg
ICBub3QzMihyZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCBy
ZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IC8vIE9PUFMKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBA
IHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
QWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAg
ICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAg
ICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhz
LmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9N
YXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1p
emUpOwogfQpAQCAtMTIxNSwzMiArMTI3MCw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQ
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwor
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92
ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAg
ICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgewor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5m
cHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2Rz
dCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
TXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0
aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4o
bXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXpl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1
YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxo
cy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09Q
UworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJ
VFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3Vi
SUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDUsMTAgKzE0NSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxs
RXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENh
bGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApA
QCAtMzM0LDQ0ICszMzAsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2Fs
bD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENh
bGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWls
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
Rm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3Rf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CkBAIC00MTEsMTQgKzQwNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZWNrcG9pbnQoanVtcCgpKTsKIAogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAg
ICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAKICAgICBHUFJSZWcg
aXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC01MTUsMTAg
KzUxMywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAg
ZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQo
anVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRv
ck5leHQ+KCk7CkBAIC01MjYsNyArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29k
ZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAg
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAg
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikp
OwpAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0
KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJS
ZXN1bHRHUFIgPSByZWdUMDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMjUgKzE2Niw2IEBAIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Ci17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5
dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xv
d0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYm
IGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4NywzNiBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5r
VG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNs
b3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dD
YXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAg
bV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhT
YXZlUGxhbigpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09
ICEhcmVzdWx0KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1
bHQ7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3Qg
SnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dD
YXNlKHJlc3VsdCwgZHN0KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8g
RG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3Ig
KGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5q
dW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAo
SnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zOTMsMTEgKzM4Myw2IEBAIEFMV0FZ
U19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3Rl
ZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdp
c3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsx
OTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9w
ZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDYgKzUxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IC8vIE9PUFM6IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVn
aXN0ZXIgYWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92
ZShpbnB1dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVh
bENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0
UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBS
ZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAg
IEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0
b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxs
b2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVn
VDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0g
cmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsK
ICAgICB9CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkg
PSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJl
KTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcg
aW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBP
T1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBj
b25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRl
bXA7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxh
Y2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2Uo
KnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsK
KyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAg
aW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBq
dW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJ
bnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVu
Y3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVn
VDApOworICAgIGlmICghbV91c2VMT0wpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3Ry
dWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBu
b3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNv
bnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEw
LDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFu
ZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVy
cy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25l
IHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJv
dG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5
IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdU
MiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdU
NCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9p
bnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1w
Q2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVz
dWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQ
UlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3Vs
dFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2Vs
bC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxh
Y2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxs
LT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisK
KyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIg
PSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRU
ZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAg
ICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAu
Z3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAg
ICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBw
ZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNw
ZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJh
c2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0
aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBy
ZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4g
YmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lk
IGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAg
ICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisg
ICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAg
ICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2lu
c3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3Mu
cHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworCisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDAp
OwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAg
ICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVn
VDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU5vbkNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxs
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BS
VGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7
CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVt
cEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKwor
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVy
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3Bl
Y3VsYXRlIG90aGVyIGhlcmU/CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAg
ICAgdGVzdDY0KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJl
cikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1
bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
TWF5YmUgc3BlY3VsYXRlIG51bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJv
LCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1Qw
LCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BS
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRU
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qmln
SW50MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0
aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAg
IGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlm
ICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChj
b25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBj
b21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0z
MzMsMTggKzYyNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNl
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFk
ZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vbkNlbGwodmFsdWUpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAg
ICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAg
ICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBh
cmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5
cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0
dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1
ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpA
QCAtMzY5LDE1ICs3MTEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0
IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAg
aXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb25DZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1
ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAg
aXNJbW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMzg2LDE1ICs3NTQsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5
KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihT
cGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1
ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkgewor
ICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1
bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0
OCwyMCArMTEzNCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3Ry
CiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0
aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CkBAIC0xMDIzLDggKzE0MDUs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIHJl
Z2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJv
bG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3Vy
ZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8
IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzE0MjEsMjMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0OworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwOTksMjAgKzE0OTksMTYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogCiAvLyBTbG93IGNh
c2VzCiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVH
UFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwpAQCAt
MTEyMCwzMCArMTUxNiwyNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE4NywxMyArMTU3NywxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0
IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChj
YW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBA
IC0xMjEwLDcgKzE1OTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMTYyMCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1
cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xNDgxLDEwICsxODY2LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4
LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQ
YXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAg
ICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUw
Myw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3Rl
ciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBv
biBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMsOCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsxMDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAxLDggKzExODAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0
SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDIyICs3OCwx
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7
Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
LQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICAr
K21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyMCwxNiArMTE2LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0
QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKQEAgLTMzNCw3
ICszMjcsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAg
cmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlz
RGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzMzNSw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAK
LSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUg
PSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1MCwxMyArMzQzLDEyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAg
ICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7Cisg
ICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4o
KSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC00NDQsMTAgKzQzNiw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKQEAgLTQ5MywxMCArNDgzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNTM3LDEwICs1
MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTU3NiwxMCArNTYyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NDYsMTAgKzYzMCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY2
MywxMCArNjQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcxMiwxMCArNjky
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKQEAgLTc0OSwxMCArNzI3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTAzMCwxMCArMTAwNiw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9u
KTsKQEAgLTExODYsMTAgKzExNjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4
KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
c2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07
IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9t
YXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0
b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgewor
ICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFz
dCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAj
aWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2Rl
T2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAg
ICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlT
dHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2JhYmlsaXR5
LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0dGVy
c09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51bSBPcHRp
b25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410769</attachid>
            <date>2020-10-07 13:06:32 -0700</date>
            <delta_ts>2020-10-07 19:35:03 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>197527</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKHNsb3dDYXNlKTsKKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDAp
OwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03NzQs
NiArMTY4NiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxl
bWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVt
cHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC0xMDU4LDYgKzE5NzcsNTMwIEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVU
aW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdD
b21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRl
KEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1bXBMaXN0
IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBj
b21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBo
ZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFs
bG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFu
azo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRv
UmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8
fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQu
YWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJl
c3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5j
b25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sK
KyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29k
ZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworR1BSUmVn
IEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBy
ZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjph
bGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzog
Zml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1
ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcp
Cit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRo
YXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgaWYgKHJlZ1ZhbHVlKHJlZyku
aXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1
ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVy
YW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQ
UlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUgeyB9
OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZO
ZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpyZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGZv
ciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBw
YWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25k
OworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3VsdCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNT
RVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERv
dWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnBy
LCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgcmVnVmFsdWUoZ3By
KS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwor
dm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJl
Z1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOwor
ICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcp
Cit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQ
UlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJl
ZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAg
IDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAg
IGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisK
K0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9
IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6
fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVn
IEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8g
T09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6
OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3Bl
cmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAg
ICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dw
ciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3Bl
cmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+
Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWND
ZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
ZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJh
bmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRo
ZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWdu
UmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6
ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBp
ZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAg
ICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQs
IG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdw
ciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zw
cik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91Ymxl
S25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnBy
OworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7
CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAg
fTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVl
ZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFk
ZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxs
KQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxs
KSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJ
VDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVB
c0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyAr
NDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUg
PHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwor
ICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwog
ICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwot
ICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBC
eXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8o
dCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVn
aXN0ZXI+PjsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wczsK
KyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBi
YXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVz
dWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OwogICAgIH07CiAKICAgICBzdHJ1Y3Qg
U3dpdGNoUmVjb3JkIHsKQEAgLTE4Myw2ICsxOTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJ
VF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAg
IHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklU
U2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5
MCwxMiArMjAwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1
Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5p
dGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1
ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNw
bGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQu
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQg
PSAyNTY7Ci0KICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxs
cHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJ
bmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNjcsMjAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgo
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9M
KQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAg
ICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJl
ZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAg
IGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChS
ZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQg
YW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAwLDkgKzMx
OCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1w
KTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOwor
ICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3Vy
ZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lk
IGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0
JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAt
MzEwLDcgKzMzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAg
IE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2Nv
bnN0cnVjdF92YXJhcmdzCkBAIC0zMjcsNyArMzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTMz
Nyw3ICszNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BF
cVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRh
cmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBp
bGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRl
QmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNl
LCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC00NzUs
OCArNDk1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVs
YXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRp
b24pOwpAQCAtNDg0LDggKzUwNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBE
b3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYp
OwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApA
QCAtNTEyLDkgKzUzMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
aWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjQzLDY5ICs2NjMsNjkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVj
dGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcyOCw4ICs3NDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwog
Ci0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAg
ICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmly
dHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3NjQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5h
bWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1
bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAg
ICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
aXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2Fz
ZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAg
ICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93
Q2FzZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dD
YXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2Fz
ZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAg
IC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAg
ICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUs
NiArOTIzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRp
Y3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGlt
ZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAg
ICAKQEAgLTkzNSw2ICs5MzYsMTkzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFy
aXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+R1BSVGVt
cCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7
CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9
OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNh
biBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3By
IHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFu
ZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdw
cigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAg
ICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQm
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVn
IH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAg
RlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9w
ZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAg
ICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVy
YW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1
Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJl
ZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdp
c3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJS
ZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVn
aXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBS
UmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJl
Z2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVn
IGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdw
ckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9w
ZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBS
UmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIp
Lm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb25DZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUp
OworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5n
IHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgRlBSUmVn
IGFsbG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBH
UFJSZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7
CisgICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBT
YXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcg
KzExNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9q
bXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3Jk
PiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2Nv
cGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzExNzgsNzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAg
IC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisg
ICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQ
UlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52
YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcm
IG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIu
Z3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAg
ICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVj
dCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07Cisg
ICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNB
bGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1Zh
bHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAh
PSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhl
ci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAg
IE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVy
TWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tT
dGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9S
ZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBv
dGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnBy
b3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgp
ID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAg
VmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJs
b2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+
PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAg
ICAgICAgVmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEps
ZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVy
ZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERv
dWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWws
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0
ZXJUaGFuT3JFcXVhbCk7CisgICAgLy8gT09QUzogdmVyaWZ5IE5hTgorICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFs
LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWws
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Smxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxl
c3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2Fz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxv
dyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIzICsxNjEs
NDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91Ymxl
Q29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29u
ZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJs
ZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZv
bGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0
byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRl
IHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0
ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwg
bGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gT09QUzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAgIGJvb2wg
ZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsK
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMTYg
KzI5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwg
Y29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRp
dGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNv
bmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNv
bmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0
LCBTbG93Q2FzZSYpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhl
IGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMjg5LDggKzMxMSw2IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAvLyAtIGNvbnN0YW50
IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGlu
Zy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEpOwpAQCAtMjk5LDggKzMxOSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChz
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7CkBAIC0zMjUsOCArMzQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZO
b3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QxKTsKQEAgLTM1MCwxMiArMzY2LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAg
ICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVt
cCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJh
bmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJl
Z1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAg
YWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUo
cmVnVDAsIGZwUmVnVDApOwpAQCAtMzY4LDkgKzM4Myw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAg
ZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFp
bDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBp
cyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CkBAIC00MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklUOjplbWl0X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAg
ICAvLyBPT1BTOiBzbG93IHBhdGggc2xvdyBvcAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQpAQCAtNDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgp
OwogfQpAQCAtNDYzLDcgKzQ3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewog
ICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAt
NDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEs
MTUgKzU3NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVt
aXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdU
Mik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CkBAIC03MjMsMTAgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJ
bnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9p
bnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhN
RTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUs
IHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNTbG93PE9w
TmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlT3B0aW1pemUpOwpAQCAtNzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBub3QzMihy
ZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIu
Z3ByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIE9PUFMK
KyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBAIHZvaWQgSklU
OjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFk
ZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIGlmIChh
cml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQz
MihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBz
ZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCBy
ZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
T09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAg
IEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRk
SUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyog
YWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9w
ZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOwogfQpA
QCAtMTIxNSwzMiArMTI3MCw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBs
aHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11
bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRo
UHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
dWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJ
bnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwg
cmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2lu
c3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVt
aXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3
aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVl
U3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAg
KzE0NSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigp
OwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8o
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNT
RVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0
ICszMzAsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAg
IGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
Rm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0
cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC00MTEs
MTQgKzQwNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAg
ICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoanVtcCgpKTsKIAogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAvLyBPT1BT
CisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JH
UFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC01MTUsMTAgKzUxMywxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2Uu
bGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5l
eHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9P
UFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7
CkBAIC01MjYsNyArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7
CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKHNsb3dDYXNlKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5v
dE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4
LDcgKzU0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAg
ICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIg
PSByZWdUMDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMjUgKzE2Niw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUlu
ZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAg
d2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5k
ZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRv
ID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4NywzNiBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+
dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShK
dW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJl
ZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJ
bmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0
KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0
KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dCwgZHN0KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0
IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQg
dGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChT
bG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1
bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBl
bmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1w
LCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zOTMsMTEgKzM4Myw2IEBAIEFMV0FZU19JTkxJTkUg
ZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcs
IEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDgg
KzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0x
MjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE3
IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIC8vIE9PUFM6
IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIgYWxs
b2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1dC5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJl
bnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklE
IHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBh
bGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVn
ID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAg
ICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7Cisg
ICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJl
ZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwog
ICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmlu
YWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0lu
c3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VH
UFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZl
bnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3Rv
clRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMs
IGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhh
c0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAg
aW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VH
UFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdl
IGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAg
IGlmICghbV91c2VMT0wpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0lt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQ
SSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9y
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1l
bnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEwLDkzIEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9
IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAv
LyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhp
cyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNl
bGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRf
YnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFs
dWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNj
cmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRl
bXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90
b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3By
KCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdw
cigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNl
KCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMs
IHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1Rl
bXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigp
LCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVH
UFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90
b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisg
ICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAg
c2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7
CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBM
b2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkp
IGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2lu
Y2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBp
dCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBt
dXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1i
b2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHBy
b3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAg
IHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAg
ICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2Zz
W21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VP
Zk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBl
R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwotCi0gICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZp
bmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwu
bGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU5vbkNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNP
dGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVz
dWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVV
bmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRlIG90
aGVyIGhlcmU/CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVzdDY0
KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAg
ICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRl
c3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3Bl
Y3VsYXRlIG51bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQ
UiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0
KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJl
Z1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklH
SU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0
cnVjdGlvbiopCkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxs
X3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAK
LSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlw
ZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzYy
Nyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFs
dWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0
VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vbkNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVl
VGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSBy
ZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0
dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1
ICs3MTEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGlu
ayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1v
dmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb25DZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGlu
ayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3By
b3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2
LDUyICs3NTQsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmlu
ZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxh
dGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVH
UFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZT
dHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3Ry
aW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8
IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlz
U3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYg
KHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlm
IChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAg
ICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJv
LCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6
IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
Ly8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2Fp
bnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4s
IHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBi
aXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0
aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2gg
d2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisg
ICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2Fz
IHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBj
bGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFs
c2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFu
ZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsK
KyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNl
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9u
ID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29s
ZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVH
UFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlz
IH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAg
ICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBz
Y3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gy
LmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIo
KTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFs
dWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJG
UFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQ
UlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihj
b25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2Vz
IGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3Jh
dGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9
OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2Ny
YXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gy
RlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJH
UFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFs
dWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTQxLDE5ICsxMDYwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0KLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CkBAIC03NDgsMjAgKzEyNTQs
MTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBp
bGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtMTAyMyw4ICsxNTI1LDEyIEBAIHZvaWQg
SklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyByZWdpc3RlcnMgdG8g
emFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAg
ICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6
ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytq
KSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsK
KyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJp
YWJsZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZh
cmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsxNTQxLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9z
Y29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsK
KworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUg
PSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDk5LDIwICsxNjE5LDE2IEBAIHZvaWQgSklU
OjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnUKIAogLy8gU2xvdyBjYXNlcwogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKQEAgLTExMjAsMzAgKzE2
MzYsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExODcsMTMgKzE2OTcsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBw
YXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6
ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlD
YWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
T3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIxMCw3ICsx
NzE4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgIH0K
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VE
X1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzE3NDAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJD
b3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKIH0KIApAQCAtMTQ4MSwxMCArMTk4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5
VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhd
LmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9u
IGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAt
NTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4o
KTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNv
ZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMTggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFs
SW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJl
Z1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
KworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFs
SW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjAsMTYg
KzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CiAKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CkBAIC0zMzQsNyArMzI3LDcgQEAg
SklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICszMzUsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwog
ICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBs
b2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8g
Ynl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRT
dGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVs
c2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwog
CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0LDEwICs0MzYsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBT
aG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBA
IC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUzNywxMCArNTI1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBA
IC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEwICs2MzAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NjMsMTAgKzY0NSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIsMTAgKzY5Miw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMTg2
LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
ck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJN
YXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAg
ICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQor
ICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29u
c3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisK
IHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJP
ZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
MTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8g
T09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93
IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShP
UENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+
c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9q
aXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4
LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAg
ICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9i
amVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZv
cmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVu
Y2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410808</attachid>
            <date>2020-10-07 19:35:03 -0700</date>
            <delta_ts>2020-10-19 16:46:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>214075</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKHNsb3dDYXNlKTsKKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDAp
OwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03NzQs
NiArMTY4NiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxl
bWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVt
cHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC0xMDU4LDYgKzE5NzcsNTQ2IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVU
aW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdD
b21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRl
KEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1bXBMaXN0
IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBj
b21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBo
ZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFs
bG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFu
azo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRv
UmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8
fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQu
YWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJl
c3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5j
b25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sK
KyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29k
ZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworR1BSUmVn
IEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBy
ZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjph
bGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzog
Zml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1
ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcp
Cit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRo
YXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgaWYgKHJlZ1ZhbHVlKHJlZyku
aXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1
ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVy
YW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQ
UlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUgeyB9
OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZO
ZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpyZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGZv
ciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBw
YWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25k
OworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3VsdCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNT
RVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERv
dWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnBy
LCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgcmVnVmFsdWUoZ3By
KS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwor
dm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJl
Z1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOwor
ICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcp
Cit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQ
UlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJl
ZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAg
IDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAg
IGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisK
K0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9
IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6
fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVn
IEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8g
T09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6
OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3Bl
cmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAg
ICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dw
ciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3Bl
cmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+
Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWND
ZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
ZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJh
bmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRo
ZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWdu
UmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6
ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBp
ZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAg
ICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQs
IG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdw
ciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zw
cik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91Ymxl
S25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnBy
OworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7
CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAg
fTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVl
ZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFk
ZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxs
KQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxs
KSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJ
VDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVB
c0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0
ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihK
U1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2Jq
ZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY09iamVjdDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVk
ZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29k
ZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlu
a0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQot
ICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2
ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBz
dHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAg
ICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQbGFu
IHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0
aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21l
IG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UK
ICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5j
dGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJ
bnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAg
IC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxl
IGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMs
NiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAK
KyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBs
KCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAg
ICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAg
ICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBh
cHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAg
ICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1w
KTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1w
TGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7Cisg
ICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQg
YWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYs
IENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Jik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAg
IGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBp
bGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVt
cFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVj
dGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCk7CiAKQEAgLTUxMiw5ICs1MzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
QEAgLTY0Myw2OSArNjY0LDY5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2
b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29s
IGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC03MjgsOCArNzQ5
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
SW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBn
ZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0NiwzNCArNzY1LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAgdm9pZCBl
bWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rp
b24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKyst
PmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0
ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlT
bG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICAr
K2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAg
ICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxp
bmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBi
b29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZz
ZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoU2xvd0Nhc2Um
IGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFS
QU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVl
OworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIs
IG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzkyNCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAK
KyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBz
dGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGlj
IGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVD
b21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTM3LDIwNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNs
YXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYp
OworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3Mg
RlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7Cisg
ICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBt
X2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQz
Mk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklU
JiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgp
OworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRo
ZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWln
aHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2Vs
bE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQm
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVn
IG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
b3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAg
R1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3Mg
RG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlk
RlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUu
cHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
ZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVy
KQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsK
KyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUo
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAg
ICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJh
bmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAg
ICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcm
IGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAg
IFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBS
ZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAg
UmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAg
ICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAg
ICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
Tm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
ICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVC
b29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBz
cGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2Vs
bCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0
aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgRlBS
UmVnIGFsbG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJl
Zyk7CisgICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7Cisg
ICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAg
ICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2lu
dGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUz
LDcgKzExNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4g
bV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVj
b3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBt
X2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzExOTEsNzYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBt
X3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50
cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAg
ICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRz
CisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAg
IEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsg
SW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRS
ZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3Ro
ZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIg
PSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0
cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07
CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wg
aXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJl
Z1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFu
ZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBv
dGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3Ro
ZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9y
bWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAg
ICAgIE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lz
dGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxv
Y2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9w
ZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5k
VG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9
PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVy
LnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6
ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAg
ICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0
b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAg
ICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAg
ICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFs
PEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWdu
ZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsK
KyAgICAgICAgVmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBAIG5hbWVz
cGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9y
ZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWws
IERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVh
dGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1
YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgLy8gT09QUzogdmVyaWZ5IE5hTgorICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVx
dWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVy
ZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1
YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBz
bG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdy
ZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3Jl
YXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNs
b3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxl
c3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3Nl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9i
ZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIzICsx
NjEsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91
YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91Ymxl
Q29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRv
dWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhl
IGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0
ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRp
YXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVk
aWF0ZQogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRp
b24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlv
biwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAgIGJv
b2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1Qw
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIs
MTYgKzI5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUo
KSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNv
bmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3Ig
dGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMjg5LDggKzMxMSw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAvLyAtIGNvbnN0
YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9h
dGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEpOwpAQCAtMjk5LDggKzMxOSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlm
IChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lz
dGVyLCByZWdUMCk7CkBAIC0zMjUsOCArMzQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QxKTsKQEAgLTM1MCwxMiArMzY2LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1Bv
aW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAg
SnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0g
YnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMy
KHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAg
ICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3Vi
bGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY4LDkgKzM4Myw5IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAg
ICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAg
ZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJI
UyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC00MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklUOjplbWl0
X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
KyAgICAvLyBPT1BTOiBzbG93IHBhdGggc2xvdyBvcAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogfQpAQCAtNDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOwogfQpAQCAtNDYzLDcgKzQ3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQog
ewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpA
QCAtNDczLDYgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01
NjEsMTUgKzU3NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5z
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC03MjMsMTAgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJp
dGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4o
bV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBG
SVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdh
dGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNTbG93
PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlv
bkFyaXRoTmVnYXRlT3B0aW1pemUpOwpAQCAtNzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBub3Qz
MihyZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRH
UFIuZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIE9P
UFMKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBAIHZvaWQg
SklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFk
ZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMq
IGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5
QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hB
ZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAg
ICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigp
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJ
QyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMu
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOwog
fQpAQCAtMTIxNSwzMiArMTI3MCw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93
LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAg
c2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11
bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMq
IG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFy
aXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2Vy
dmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIo
KSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAg
IGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBi
aXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUs
MTAgKzE0NSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFs
PigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAg
QVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0
LDQ0ICszMzAsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQog
ICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZh
cmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2Fy
ZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENv
bnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC00
MTEsMTQgKzQwNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
CiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAvLyBP
T1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAKICAgICBHUFJSZWcgaXRlcmF0
b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC01MTUsMTAgKzUxMywx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENh
c2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRv
ck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8v
IE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgp
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+
KCk7CkBAIC01MjYsNyArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2Rv
bmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBu
b3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAt
NTQ4LDcgKzU0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMK
ICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMjUgKzE2Niw2IEBAIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1f
Y29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29k
ZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0g
ICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2Rl
SW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2Vz
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXIt
PnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4NywzNiBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRl
ci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNl
KFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0K
LSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5s
YXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93
Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxh
bigpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVz
dWx0KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7Cisg
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYg
anVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdCwgZHN0KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcg
aXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0
IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5h
cHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBq
dW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zOTMsMTEgKzM4Myw2IEBAIEFMV0FZU19JTkxJ
TkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVl
KGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
Zj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIC8vIE9P
UFM6IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIg
YWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1
dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAg
aWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJl
ZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9y
UmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7Cisg
ICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7
CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsK
ICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9
CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2Rz
dCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVj
RmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5t
X29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25z
dHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhh
c0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFu
Y2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBp
bnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1
Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRo
aXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMs
IGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAg
ICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFu
Y2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlm
IHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0
b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5j
ZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwor
ICAgIGlmICghbV91c2VMT0wpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3Ig
J0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBD
LUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVj
dG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEwLDkzIEBA
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJh
c2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJl
IGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBn
ZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8g
dmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8v
IHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5j
ZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1
ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsK
KyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVt
cCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBw
cm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAu
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1w
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRo
aXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90
b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdw
cigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFs
dWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCks
CisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAg
ICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZl
bHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwg
c2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVz
ZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7
CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZh
bCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBT
eW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAg
ICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAg
ICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAg
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNl
T2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90
eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworCisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0Nl
bGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwg
cmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwor
ICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAg
ICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRl
IG90aGVyIGhlcmU/CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAK
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVO
dWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVz
dDY0KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1i
ZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUg
c3BlY3VsYXRlIG51bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1
dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJU
YWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsK
LSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0
KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0Uo
QklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJ
bnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19j
ZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBh
cmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
dHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTgg
KzYyNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZh
bHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFi
b3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5r
KHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRo
ZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5
LDE1ICs3MTEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0u
bGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0u
bGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Mzg2LDUyICs3NTQsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0
cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVj
dWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
eW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNo
SWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlz
U3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmlu
ZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRv
IGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
aWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9Owor
ICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5j
dGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9u
TmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMiha
ZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxp
bmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRj
LgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBh
Z2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xl
YW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxv
dyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNw
ZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hp
Y2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwor
CisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUg
d2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4s
IGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
KTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1Qw
KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZh
bHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlv
bjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0
aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBt
b3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIg
eyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBG
UFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwg
c2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
LSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+
KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZh
bHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNh
c2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRp
dGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBT
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhp
cyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0
Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRj
aDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwg
dmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NTksMTI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAg
ICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5v
dyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduLmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7
CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNr
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAg
ICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwor
CisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzEwOTAsMjYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTUwMCwxMCArMTExOCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNP
dGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTUxNSwyMSArMTE0OSw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0
cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9p
bnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEu
bV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRy
KHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
cT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5U
eXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxoc0dQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJoc0dQUik7CisgICAgICAgICAgICAg
ICAgY29tcGFyZVB0cihFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHNHUFIpOwor
ICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkg
eworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlMzIoRXF1YWwsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisKKyAgICAg
ICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NDEsMTkgKzEyNDgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LQotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKQEAgLTc0OCwyMCArMTQ0MiwxNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3Ry
aWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CkBAIC0xMDIzLDggKzE3MTMsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3Rh
bGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9i
amVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291
bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8
IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAg
ICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAg
ICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7
CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUp
ID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2sp
OwogCkBAIC0xMDM1LDkgKzE3MjksMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNv
bnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsK
KyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1Qw
OworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
T2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29w
ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwOTYsMjMgKzE4MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja190ZHooY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOwogfQogCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1Qw
KTsKQEAgLTExMjAsMzAgKzE4MTMsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1
c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExODcsMTMgKzE4
NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
Ly8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAg
ICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRz
KCkpOwpAQCAtMTIxMCw3ICsxODk1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGlu
dChjb25zdCBJbgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAg
KzE5MTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQq
PigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4MSwxMCArMjE2Myw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNv
ZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBu
ZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsK
ICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUw
OSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAK
ICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUg
cmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dh
cHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwy
MiArNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93
Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAg
KyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CkBA
IC0zMzQsNyArMzI3LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAg
Ym9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICszMzUs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmlj
dCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdl
dFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVj
dCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxE
aXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0LDEwICs0MzYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdy
aXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZp
bHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUz
NywxMCArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEw
ICs2MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC02NjMsMTAgKzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW4KICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIs
MTAgKzY5Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CkBAIC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAg
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nywx
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0
ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1f
bWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0
dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2Vt
Ymxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQog
ICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlz
IG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwo
KTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9i
eXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAg
ICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFz
c2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQy
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9i
YWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3Rv
bVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVu
dW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411814</attachid>
            <date>2020-10-19 16:46:42 -0700</date>
            <delta_ts>2020-10-19 18:20:43 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>217684</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKHNsb3dDYXNlKTsKKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDAp
OwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03NzQs
NiArMTY4NiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxl
bWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVt
cHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC0xMDU4LDYgKzE5NzcsNTQ2IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVU
aW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdD
b21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRl
KEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1bXBMaXN0
IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBj
b21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBo
ZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFs
bG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFu
azo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRv
UmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8
fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQu
YWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJl
c3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5j
b25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sK
KyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29k
ZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworR1BSUmVn
IEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBy
ZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjph
bGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzog
Zml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1
ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcp
Cit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRo
YXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgaWYgKHJlZ1ZhbHVlKHJlZyku
aXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1
ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVy
YW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQ
UlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUgeyB9
OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZO
ZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpyZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGZv
ciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBw
YWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25k
OworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3VsdCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNT
RVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERv
dWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnBy
LCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgcmVnVmFsdWUoZ3By
KS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwor
dm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJl
Z1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOwor
ICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcp
Cit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQ
UlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJl
ZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAg
IDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAg
IGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisK
K0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9
IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6
fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVn
IEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8g
T09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6
OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3Bl
cmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAg
ICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dw
ciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3Bl
cmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+
Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWND
ZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
ZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJh
bmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRo
ZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWdu
UmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6
ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBp
ZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAg
ICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQs
IG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdw
ciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zw
cik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91Ymxl
S25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnBy
OworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7
CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAg
fTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVl
ZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFk
ZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxs
KQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxs
KSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJ
VDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVB
c0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0
ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihK
U1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2Jq
ZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY09iamVjdDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVk
ZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29k
ZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlu
a0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQot
ICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2
ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBz
dHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAg
ICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQbGFu
IHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0
aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21l
IG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UK
ICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5j
dGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJ
bnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAg
IC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxl
IGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMs
NiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAK
KyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBs
KCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAg
ICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAg
ICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBh
cHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAg
ICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1w
KTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1w
TGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7Cisg
ICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQg
YWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYs
IENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Jik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAg
IGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBp
bGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVt
cFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSArNTA1LDE0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBl
bWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0
YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25z
dCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzUzNiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAt
NjQzLDY5ICs2NjcsNjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1
bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0
X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dD
YXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRT
aGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQg
ZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRS
aWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNV
bnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcyOCw4ICs3NTIsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3NjgsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmls
ZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbios
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rp
b24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJv
bTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+
ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAg
ICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dD
YXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQg
bGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAg
ICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0Fs
bFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2Fz
ZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2Vz
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVy
LCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93
Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAg
Ym9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dD
YXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShp
dGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
Ly9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9i
eXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPik7CkBAIC05MjUsNiArOTI3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAg
ICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9v
bCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBp
bGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NDAsMjA1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJp
dGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3Mg
R1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJik7Cisg
ICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJU
ZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAg
ICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnBy
IHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGlu
dDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBu
b3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAg
ICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAg
ICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3Vi
bGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFu
ZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92
ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0
ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAg
ICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25z
dGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBH
UFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChv
cGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAg
IH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2NlZFJlZyYgYWxs
b2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVy
YW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAgICAgUmVn
VmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1Zh
bHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdW
YWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAg
ICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RD
ZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkgJiB+
U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNwZWN1
bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVP
dGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7
CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
KTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcg
cHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUigpOworICAgICAgICBGUFJSZWcg
YWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsK
KyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAg
ICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFNh
dmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQ
YXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJw
cmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyAr
MTE1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2pt
cFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAg
ICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZl
Y3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29w
aWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTE5NCw3NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAg
Ly8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAg
ICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BS
UmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZh
bGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5n
cHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0Fs
bG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFs
dWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9
IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVy
LmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7
CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAg
T3BlcmFuZHM8QWxsb2NlZFJlZz4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJN
YXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0
YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFu
ZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1Jl
Z1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90
aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJv
dmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkg
PT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2Rl
QmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKworICAgICAgICBW
ZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8Qmxv
Y2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+
IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAg
ICAgICBWZWN0b3I8SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWws
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwg
RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25k
aXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91Ymxl
Q29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9s
bG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRv
IGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUg
dG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRl
CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
bGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBs
aHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBk
aXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwog
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiAr
Mjk0LDE2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9u
LCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBj
b25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0
aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJikKIHsKIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUg
Zm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQg
aW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5n
LXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSk7CkBAIC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKQEAgLTMyNSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDEpOwpAQCAtMzUwLDEyICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAg
ICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1w
IGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFu
Y2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShy
ZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBm
YWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWls
NC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlz
IG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAg
IC8vIE9PUFM6IHNsb3cgcGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
CiB9CkBAIC00NjMsNyArNDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00
NzMsNiArNDg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwx
NSArNTc2LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKQEAgLTcyMywxMCArNzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aQogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2lu
c3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1F
OiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwg
c2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BO
ZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X2JpdG5vdChjb25zdCBJbnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AxKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
bW92ZShpbnB1dC5ncHIoKSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJl
c3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5n
cHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUwor
ICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRk
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBtb3ZlKGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMy
KE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNl
dEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBP
T1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
SklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBh
ZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQo
Y3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBA
IC0xMjE1LDMyICsxMjcwLDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11
bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxo
cy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09Q
UworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJ
VE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVs
SUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCBy
aHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1
YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1
Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdp
c2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3Ry
dWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVT
dWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCAr
MTQ1LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NF
UlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQg
KzMzMCw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAg
Y29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJn
cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3Ry
dWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwx
NCArNDA3LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChqdW1wKCkpOwogCiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMK
KyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5s
aW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09Q
UworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsK
QEAgLTUyNiw3ICs1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsK
ICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoc2xvd0Nhc2UpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgs
NyArNTQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAg
IH0KIAogICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NiwyNSArMTY2LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5k
ZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3
aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8g
PT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNiwyNyArMTg3LDM2IEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52
YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1
bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVn
IHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUlu
ZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAg
IG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkp
OworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3Qo
KS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQp
OworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1w
IDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0
LCBkc3QpLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0
aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVt
cCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVu
ZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAs
IGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTM5MywxMSArMzgzLDYgQEAgQUxXQVlTX0lOTElORSBk
b3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNV
bmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCAr
MTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEy
NDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgLy8gT09QUzog
TWFrZSB0aGlzIGJldHRlciBmb3IgY29uc3RhbnRzIHdoaWNoIGFyZW4ndCByZWdpc3RlciBhbGxv
Y2F0ZWQgeWV0LgorICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBtb3ZlKGlucHV0Lmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0Lmdwcigp
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTAxLDUzIEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwog
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdU
MDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQg
c2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFs
bG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcg
PSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAg
ICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAg
ICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAg
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAg
ICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5h
bE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE1Nyw1MCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQ
UjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVu
dCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9y
VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywg
Y29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFz
SW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBp
bnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQ
UiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VW
YWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Ug
a25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAg
aWYgKCFtX3VzZUxPTCkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1w
bGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJ
IHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMTAsOTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0g
Ynl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZh
bCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8v
IFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlz
IGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2Vs
bHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9i
eV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1
ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2Zz
LmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVt
cENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3Rv
R1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3By
KCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2Uo
KnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywg
cHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOwor
ICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVt
cC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCks
IGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQ
UiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
R1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
IGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAg
ICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBz
Y3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
KworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5j
ZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0
IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11
c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJv
bC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qy
LCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJv
dG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAg
cmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAg
IHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNb
bV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVH
UFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzExLDI5IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM0MSw3MiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7Ci0KLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
anVtcCgpOwogCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090
aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1
bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVu
ZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAK
KyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1w
IG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MTUsMzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
dW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSBzcGVjdWxhdGUgb3Ro
ZXIgaGVyZT8KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NTAsMzAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUik7CisgICAgICAgICAgICB0ZXN0NjQo
WmVybywgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAg
ICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0ODEsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
bnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVz
dDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSBzcGVj
dWxhdGUgbnVtYmVyIGhlcmUgaWYgcHJvZmlsaW5nIHNheXMgc28/CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BS
LCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUxMiw1NiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQo
cmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJ
TlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3Ry
dWN0aW9uKikKQEAgLTMxMywxOCArNTc4LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxf
d2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAot
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBl
KSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjI3
LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVU
ZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzY5MiwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJl
c3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUg
KzcxMSw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5r
KHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92
ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAg
ICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
SnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5r
KHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYs
NTIgKzc1NCwyMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChzcmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0
cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
eW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJp
bmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNT
dHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNw
ZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAo
c3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25l
ID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYg
KHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAg
ICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcg
bmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9u
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFu
KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8s
IHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTog
c3RyaW5ncywgYml0aW50LCBvYmplY3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAv
LyBTZWUgY29tbWVudCBiZWxvdy4KKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblpl
cm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWlu
c3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwg
dGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJp
dCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3Rp
dmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3
aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAg
ICAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMg
dGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNs
ZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxz
ZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBh
Z2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5k
IGZsaXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5v
blplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJv
b2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24p
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUg
Y2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29u
ZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBm
cFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0
aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2Ny
YXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3Jh
dGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRp
b24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAg
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNv
bmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwg
dmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMg
aW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0
Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJG
UFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
Uiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1
ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk1OSwxMjkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAg
ICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1
bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCiAKLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24u
bGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAt
IGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAg
YWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRh
cmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8v
IE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBp
c0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24u
bGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qw
KSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAg
ICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGlu
ayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5MCwyNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8g
Tm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNTAwLDEwICsxMTE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZp
bmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVy
KSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1
LDU0ICsxMTQ5LDE3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRl
cikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9o
YXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNw
ZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBBU1NFUlQobV91c2VMT0wpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1
ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1
dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVx
dWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVP
YmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMy
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21w
YXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
VGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQg
ZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9
IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBHUFJSZWcg
dmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcg
c2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
dGFyZ2V0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIEdQ
UlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NDgsMjAgKzE1MDUsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwpAQCAtMTAyMyw4ICsxNzc2LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9p
ZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGlu
Y3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51
bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAg
ICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUo
anNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VM
T0wpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9
CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsxNzky
LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVn
VDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIo
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBz
Y29wZSk7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNj
b3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMDk2LDU0ICsxODY3LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJ
bnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKLQotLy8g
U2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKQEAgLTExODcsMTMgKzE5MjgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGlt
aXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9y
UmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIxMCw3ICsxOTQ5LDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlm
CiB9CiAKQEAgLTEyMzMsMTAgKzE5NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1w
bGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
Yml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4
MSwxMCArMjIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMK
ICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhi
eVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2Rl
LCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhl
ZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEs
OCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkBAIC0yNzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNb
bV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsK
ICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byBy
ZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCAr
NjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC03MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYz
LDggKzc0Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCAr
MTAyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIw
MSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAg
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cgogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYg
KGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9n
ZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRC
eVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0
QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CkBAIC0zMzQsNyArMzI3LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZTsKQEAgLTM0Miw3ICszMzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNv
ZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0
MywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsK
IAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5i
eVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwpAQCAtNDQ0LDEwICs0MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKQEAgLTUzNywxMCArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtNjQ2LDEwICs2MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NjMsMTAgKzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC03MTIsMTAgKzY5Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAs
MTAgKzEwMDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsK
ICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUp
LnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNy
b0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6
ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjph
cnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7
IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwu
aAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0
aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAg
SklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2Ug
anVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1f
aml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAg
ICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1f
aml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRd
LCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhw
ciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9y
TElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxs
b3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24s
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411823</attachid>
            <date>2020-10-19 18:20:43 -0700</date>
            <delta_ts>2020-10-20 18:27:39 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>222751</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKHNsb3dDYXNlKTsKKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDAp
OwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03NzQs
NiArMTY4NiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxl
bWVudCBPU1IgZXhpdC4KKyAgICB7CisgICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVt
cHMpCisgICAgICAgICAgICBqdW1wLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC0xMDU4LDYgKzE5NzcsNTQ2IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVU
aW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdD
b21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRl
KEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1bXBMaXN0
IHsganVtcCB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBj
b21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBo
ZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFs
bG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFu
azo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRv
UmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8
fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQu
YWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJl
c3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5j
b25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sK
KyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29k
ZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworR1BSUmVn
IEpJVDo6YWxsb2NhdGVHUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBy
ZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjph
bGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzog
Zml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1
ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcp
Cit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRo
YXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgaWYgKHJlZ1ZhbHVlKHJlZyku
aXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1
ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVy
YW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQ
UlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUgeyB9
OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZO
ZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpyZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGZv
ciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBw
YWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25k
OworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3VsdCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNT
RVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERv
dWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnBy
LCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgcmVnVmFsdWUoZ3By
KS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwor
dm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJl
Z1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOwor
ICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcp
Cit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQ
UlRlbXA6OkdQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0dQUlJl
ZyBKSVQ6OkdQUlRlbXA6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAg
IDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAg
IGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisK
K0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9
IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6
fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVn
IEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8g
T09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6
OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3Bl
cmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAg
ICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dw
ciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3Bl
cmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+
Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWND
ZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
ZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJh
bmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRo
ZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWdu
UmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6
ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBp
ZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAg
ICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQs
IG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdw
ciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zw
cik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91Ymxl
S25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnBy
OworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7
CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAg
fTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVl
ZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFk
ZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxs
KQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxs
KSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJ
VDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVB
c0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0
ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihK
U1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2Jq
ZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY09iamVjdDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVk
ZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29k
ZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlu
a0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQot
ICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2
ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBz
dHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAg
ICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQbGFu
IHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0
aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21l
IG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UK
ICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5j
dGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJ
bnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAg
IC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxl
IGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMs
NiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAK
KyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBs
KCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAg
ICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAg
ICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBh
cHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAg
ICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1w
KTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1w
TGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7Cisg
ICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQg
YWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYs
IENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Jik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAg
IGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBp
bGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVt
cFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB9OwpAQCAtNDc1LDggKzQ5Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSArNTA1LDE3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIG9wPgorICAgICAgICB2b2lkIGplcWltcGwoY29uc3QgaW5zdHJ1Y3Rpb24q
KTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01MTIsOSArNTM5LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2Zp
bGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9l
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVyKGNvbnN0
IEluc3RydWN0aW9uKik7CkBAIC02NDMsNjkgKzY3MCw2OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdh
dGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lk
IGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsK
IAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiop
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAg
ICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2ln
bmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7
CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiop
OwpAQCAtNzI4LDggKzc1NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0
SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50
VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAg
ICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03
NDYsMzQgKzc3MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+
CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPios
IGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dD
YXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+
ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2
b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5k
ZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNl
cywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFz
QW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAg
ICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAg
ICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1f
c2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5MzAsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7
CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOwor
CiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0
aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTM1LDYgKzk0Mywy
MDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9w
PgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9w
KTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgR1BSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBH
UFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBG
UFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
SW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAg
IH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dl
ciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdo
dCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
fkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsg
SW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFs
dWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJ
VCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVn
IH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVn
IG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
b3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlw
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1
bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9w
ZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQ
UlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9w
ZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAg
ICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJh
bmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJl
Z1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAg
ICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5k
KSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7
CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Io
b3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhl
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5m
byBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BS
KCk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMy
KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVh
bFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lz
dGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxv
Y2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICB2
b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAg
ICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJ
bnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4g
bV9jYWxsczsKQEAgLTk1Myw3ICsxMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5
dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsK
KyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAg
VmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2ln
bmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsxMTk3LDc2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUlu
ZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2Nl
ZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4g
dW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJn
ZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAg
ICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07Cisg
ICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9p
ZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8
fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlz
QWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhp
cyA9IHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9n
RW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tT
dGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnPiBvcGVyYW5kVG9SZWc7Cisg
ICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lk
IG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5z
aXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRv
UmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVy
Z2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92
ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3Zl
blR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJl
bnRTdGF0ZTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFw
aDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIg
fTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9u
c0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRp
Y3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisgICAgICAg
IFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0
b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3Vz
ZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0SnVtcHM7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgy
ICs0Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5B
bmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6IHZlcmlmeSBO
YU4KKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNz
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNs
b3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
SmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxB
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0
IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29u
ZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5s
aW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29u
c3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBjbG9i
YmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJs
ZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGlu
c3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVj
dGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1
Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1
Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2UgZ2VuZXJhdGUg
aW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKQEAg
LTI4OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJl
cgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJl
ci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTksNiBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAg
IEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2
NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVt
cCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAg
ICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0
ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAg
ICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICszODMsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxp
bmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmso
dGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDog
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEwICs0NTAsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AKICAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19w
YXRoX21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3ICs0NjUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
KQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRv
dWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlz
dCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdU
MSwgcmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVu
c2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBE
b3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExv
YWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+
KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmls
ZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
Z2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9w
ZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAg
ICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVBy
b2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2ICs3OTcsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdEdQUiB7ICp0
aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIuZ3ByKCkpOwor
ICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHNldEludDMy
KHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC05MDEsMTYg
KzkyNCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZv
aWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFBy
b2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRk
PigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOwor
CisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkp
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpP
dmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7
CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMu
ZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
QWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0
cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElD
U2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZUFkZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2Zp
bGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgICAg
IGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwor
ICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZw
cigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11
bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Ns
b3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQ
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwor
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92
ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAg
ICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgewor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5m
cHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2Rz
dCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
U3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0
aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4o
c3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXpl
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNv
bnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9j
ay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5m
by0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0LDEzICsyNjIs
MTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BD
YWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFp
bENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhz
bG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0
cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogCiAg
ICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpA
QCAtNTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVn
ID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1Qy
OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9i
amVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3Vs
dEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJS
ZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQ
UlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsxNjYsNiBAQCBB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcp
Ci17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xv
d0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVy
LT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNl
cy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4
LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3
ICsxODcsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAg
IGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklU
OjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVt
cCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkg
fHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7
CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9
IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0Lmlz
VmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVz
dWx0ID0gcmVzdWx0OworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExp
c3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyBy
ZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBm
b3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dD
YXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBl
bnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0
eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRl
eCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7
CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAg
c2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzkzLDExICszODMs
NiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBz
dG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBA
IC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3Qg
SQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpz
dHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYs
OCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJ
bmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMgd2hpY2gg
YXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisg
ICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMDEsNTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
ck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3Rl
cklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVn
VDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3Vs
dFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
YWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3Jh
dGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3Vs
dFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2Ny
YXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJl
Zyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0
byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwg
YWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRj
aFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJl
c3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29k
ZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFs
dWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNv
ZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSks
IHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTU3
LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZp
cnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZh
bHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdU
MCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7Cisg
ICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxs
T3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFz
SW5zdGFuY2VUZW1wOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGNvbnN0cnVjdG9y
VGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVt
cC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVt
cC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7
CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8g
V2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRv
LgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJ
bnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5j
ZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0
aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBv
YmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywg
QWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7Cisg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0
aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7
CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
IAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NTEsNDAgKzIxMCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQg
dGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50
byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdp
bGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRo
ZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVj
ayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMg
Y2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAg
ICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICBy
ZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1w
OworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBH
UFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVt
cCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKwor
ICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAg
ICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAg
ICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZh
bHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1w
Q2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFs
dWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwt
PmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBk
c3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRo
aXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7
CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAg
IHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nh
c2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAor
ICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBy
ZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90
b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigp
KTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3Rh
bmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1w
LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQg
dmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJl
Z1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFu
ZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBh
cmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhl
IGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8g
cmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAv
LyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5k
KGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYg
Z2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5m
bygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMTEs
MjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzQx
LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZD
ZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAg
ICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
dXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIo
RXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQxNSwzNCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IE1heWJlIHNwZWN1bGF0ZSBvdGhlciBoZXJlPworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIg
KzQ1MCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ4MSwyOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBudW1iZXIgaGVyZSBpZiBwcm9maWxpbmcgc2F5cyBz
bz8KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0
NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25a
ZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSAr
NTEyLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2sp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayks
IHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29t
cGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXND
ZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEp
OworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAj
ZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lz
X2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1NzgsNDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlw
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAg
ICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMzMzLDE4ICs2MjcsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVH
UFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlw
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAK
LSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUs
NyArNjkyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAog
ICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1
ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKQEAgLTM2OSwxNSArNzExLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1p
dGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdU
MCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQ
cmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7
CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzU0LDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19w
cm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3By
KCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNy
YykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAg
ICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBp
c1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUo
dmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5j
dGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNv
ZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRl
Y29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3By
KCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BS
LCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25v
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
dmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFs
dWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAg
ICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxl
IG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3Qg
bWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92
ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAK
LSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0
YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBv
dGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3Ig
dHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpT
VmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhl
IGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29w
ZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNl
KTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdp
bGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2ls
bCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAg
ICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQg
dGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3Rl
eHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0
aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1
ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5l
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQ
UiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBm
cFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgp
LCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2Ny
YXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAg
IGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
fQorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1f
Y29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24p
KSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJ
bW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAg
ICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBm
cFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2Ny
YXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiAr
OTU5LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBp
bnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIu
Z3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAt
IGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAg
ICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gy
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVt
cCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKyAgICAgICAgICAg
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
KyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIE5vdyBoYW5kbGUgdGhl
IGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0ds
b2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDAp
LCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0
Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmpl
Y3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAogCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0ds
b2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVk
aWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2Fz
ZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAg
IHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGlu
ayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMDkw
LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIp
KSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMTgsMjYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNDksMzAyIEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRH
UFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhp
cyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgp
KSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBl
ZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklU
OjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVChtX3VzZUxPTCk7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBi
eXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVl
OworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0
byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1
YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1
YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9i
amVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBh
cmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
cmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBS
UmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNU
ZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNG
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBk
byBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQobV91c2VMT0wpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdp
c3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0
ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlz
RXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJs
ZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAo
IXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsK
KyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxo
c0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
VGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNG
UFIsIHJoc0ZQUiksIHRhcmd0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3Vs
ZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UoKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BS
KTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAg
ICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAg
ICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVzdGVkSW1t
MzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKG1f
dXNlTE9MKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGplcUltcGw8
T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxo
c0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9v
cF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC03NDgs
MjAgKzE2MTksMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgog
ICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwpAQCAtMTAyMyw4ICsxODkwLDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyByZWdp
c3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xv
bmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUu
CiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNp
emVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFs
UmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBj
b3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVz
c0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJy
aWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsxOTA2LDIzIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
RnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDk2LDU0ICsxOTgxLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIAotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAg
LTExODcsMTMgKzIwMjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlv
biBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0
ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2Rl
SW5kZXguYXNCaXRzKCkpOwpAQCAtMTIxMCw3ICsyMDQ3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAK
QEAgLTEyMzMsMTAgKzIwNjksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2Vu
ZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lz
ZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4MSwxMCAr
MjMxNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbElu
Zm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9m
aWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3Bl
cnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBA
IC0yNzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAK
ICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2Ug
cmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
cnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03
MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0
Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsx
MTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYg
KHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCwyMiArNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cgogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbElu
ZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VS
VChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CkBAIC0zMzQsNyArMzI3LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVt
aXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAg
LTM0Miw3ICszMzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNN
QU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsK
KyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAg
IGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbElu
Zm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0g
bGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAt
NDQ0LDEwICs0MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKQEAgLTUzNywxMCArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5
R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjQ2LDEwICs2MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CkBAIC02NjMsMTAgKzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWQoY29uc3QgSW4KICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC03MTIsMTAgKzY5Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEw
MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZy
b21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29s
dmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2Vt
Ymxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkp
IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkg
IGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxU
LCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpD
YWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3
YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5z
cGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlm
IChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5t
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29s
IGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1
enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lz
dGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2ws
IGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411946</attachid>
            <date>2020-10-20 18:27:39 -0700</date>
            <delta_ts>2020-10-26 12:27:32 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>247876</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cg
cGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAg
ICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNjg4LDEzIEBAIHZvaWQg
SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1
bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAg
IHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1
bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNr
T3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiAr
MTk3OSw2MDAgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVy
biB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxG
VExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVt
cCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhl
IGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRo
aXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJl
Z2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVn
aXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAg
ICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZl
cy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMo
KQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9j
YXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRo
ZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0
aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIGlmIChtX3Nsb3dDYXNl
cy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29k
ZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUigp
Cit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYg
KCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUg
eyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAg
ICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8g
YWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnBy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBh
ZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRo
ZSBtYXAgYWdyZWUuCisKKyAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlKHJlZykub3BlcmFuZDsKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BS
KCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0g
SW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2Vk
UmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9Cisg
ICAgfQorICAgIHJlZ1ZhbHVlKHJlZykgPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6
OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsm
XSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAg
ICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2Ji
ZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRH
UFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklU
OjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90
IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0g
WyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJh
bmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihy
ZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2xv
d0Nhc2Uuc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcg
PT0gc2xvd0Nhc2UucmVzdWx0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
LCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCku
Y29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0
Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBB
ZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVn
cyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zv
cihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3Bl
cmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnBy
KS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcg
Z3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3By
IH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJh
bmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgZnByRm9yT3Bl
cmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVz
c0ZvcihvcGVyYW5kKSk7CisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBy
ZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2Nr
Q291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7Cisg
ICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQm
IGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQor
CitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9
CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBS
VGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9n
cHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICAvLyBPT1BTOiBkbyBzbWFydGVyIHRo
aW5ncyBmb3IgYSBjb25zdGFudCBoZXJlLgorICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIs
IG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAo
IWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAg
ICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikp
OworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJh
bmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9n
cHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOwor
ICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxh
dGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJz
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFu
ZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9n
cHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBp
ZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2Vs
bENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1
ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQo
aml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgp
Cit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBPT1BTOiBjb25zaWRlciB1c2luZyBGUFIgaWYgdGhlcmUncyBhbiBGUFIgYWxsb2Nh
dGVkIGZvcgorICAgICAgICAvLyB0aGlzIG9wZXJhbmQuCisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFu
ZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6
OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9m
cHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmICht
X2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2pp
dC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQ
UlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2Nr
KG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAg
R1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdw
cigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9q
aXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNC
eXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFs
dWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQu
dW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5hc3NpZ25SZWco
bV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lzdGVyU2V0
IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCBy
ZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBh
dXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N0
cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1ib2wo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAo
IWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJv
b2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAo
IWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVh
bih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUg
fSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNP
dGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0Owor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNDZWxs
Q2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
Qnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNF
KEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNl
CisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAg
ICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsK
KyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIo
b3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJp
Z0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hH
UFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUp
KTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2lu
Y2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJN
YXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRl
ZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2Fs
bExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1
dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAg
ICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXgg
dCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5n
IFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisg
ICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBzOworICAgICAgICBTYXZl
UGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBm
b3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8g
U29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmll
bmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5Miw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRl
IEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOwor
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRy
X3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAg
ICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50
YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAg
IC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJs
ZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAg
SklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAt
MjYzLDYgKzI2OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
OwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxs
SW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisg
ICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQor
ICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQogICAgICAgICB7CkBAIC0zMDAsOSArMzE5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
SnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAg
ICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0p
OworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJl
Z2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2
b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNDgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM1OCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJp
Y3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAg
ICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9p
ZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBD
b21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BF
cUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAg
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTQ3NSw4ICs0OTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNl
bmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRp
b24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZElt
cGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUwNSwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBp
bnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJs
ZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90
IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
PgorICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0
aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzUzOSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9w
cm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihj
b25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjQzLDY5ICs2NzAsNjkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IElu
c3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29u
c3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Rh
aWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAog
ICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlv
bik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiop
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAK
ICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNV
bnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWdu
ZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKQEAgLTcyOCw4ICs3NTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVt
aXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQg
ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsK
IAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpA
QCAtNzQ2LDM0ICs3NzEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0
aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRv
cj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2Uo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtT
bG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0
ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1Nl
dCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0
dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUlu
ZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQp
OwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0Fs
bFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTMwLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlv
bigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAg
c3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5
NDMsMjI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5h
cnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5h
cnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIEdQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBG
UFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkg
bG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4g
TWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQ
UlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3Zl
blR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBT
cGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAg
ICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFu
ZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsK
KyAgICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5v
cGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVj
dCBSZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAg
ICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQo
b3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVy
YW5kOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50
MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5v
dENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihv
cGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNT
eW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICB2b2lkIHNw
ZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
QW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9P
UFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVz
LgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRl
RlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOwor
ICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAg
IHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQg
bG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBz
bG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQ
bGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwog
CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcgKzExODAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsK
IAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9y
PFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xv
d0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRj
aGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1
dEluZm9zOwpAQCAtOTkwLDYgKzEyMTcsNzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBk
b3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAg
ICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJl
ZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAg
ICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlm
IChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBS
UmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1
ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAg
ICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQg
eyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5v
cGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291
bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0
ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRz
PEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1Zh
bHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gcHJv
dmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3Ro
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5z
aXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOwor
CisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92
ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVz
W2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVz
W2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVy
LnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNb
aV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxv
Y2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAgVmVjdG9yPExv
Z0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+
PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRl
Y2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVj
dG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Smxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NU
aGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgLy8gT09QUzogdmVyaWZ5IE5hTgorICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1Ro
YW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVh
bEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFu
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpn
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5k
T3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUs
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIzICsxNjEsNDQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlv
bikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBj
YXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFu
dCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBp
bW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMs
IG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIo
KSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigp
LCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gT09QUzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAgIGJvb2wgZGlzYWxsb3dB
bGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkp
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMTYgKzI5NCwxNiBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9u
LCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3Bl
cmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2Fz
ZSYpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2lu
ZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMjg5LDggKzMxMSw2IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1l
ZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBu
dW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJn
dW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEpOwpAQCAtMjk5LDggKzMxOSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7
CkBAIC0zMjUsOCArMzQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAg
LTM1MCwxMiArMzY2LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
TEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVt
cCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9
IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQz
MihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAg
ICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZw
UmVnVDApOwpAQCAtMzY4LDkgKzM4Myw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGlu
ayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0
aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50
LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CkBAIC00MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBPT1BT
OiBzbG93IHBhdGggc2xvdyBvcAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwogfQpAQCAtNDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAt
NDYzLDcgKzQ3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QK
ICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBM
aXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzQ4
Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAg
IC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkg
ewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzU3Niwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1
Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9w
MSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03
MjMsMTAgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkK
ICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlv
blRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291
bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRo
ZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihu
ZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
T3B0aW1pemUpOwpAQCAtNzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3Qo
Y29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBub3QzMihyZXN1bHRHUFIu
Z3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIuZ3ByKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIE9PUFMKKyAgICB9CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBAIHZvaWQgSklUOjplbWl0X29w
X3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92
ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxv
dywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAg
IGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBi
aXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOwogfQpAQCAtMTIxNSwz
MiArMTI3MCw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAK
IHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0
aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCks
IHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0
d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7Cisg
ICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
T09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRL
aW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigp
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMs
IG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAg
ICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwogICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSw4IEBA
IGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpD
YWxsLCByZWdUMCk7CkBAIC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7
CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29k
ZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzAsNDQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVP
cENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWls
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWls
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
ICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC00MTEsMTQgKzQwNywx
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgZmFzdENh
c2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRv
ck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8v
IE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgp
KTsKIAogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAvLyBPT1BTCisgICAgbGlu
a0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdU
MDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC01MTUsMTAgKzUxMywxMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlz
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBs
aW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYs
NyArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAg
IEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dD
YXNlKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU0OCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAg
ICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjYsMjUgKzE2Niw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0
ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFz
QW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Ci17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVj
b2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
aW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4NywzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRo
aXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAp
CitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQs
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dD
YXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAK
KyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNv
ZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAg
bV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBM
aXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1
bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5q
dW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0
JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkg
dG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAg
OiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoanVtcCk7
CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVs
YXRpdmVPZmZzZXQpCkBAIC0zOTMsMTEgKzM4Myw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJ
VDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNE
b3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVk
KCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEy
MzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE3IEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fc3JjOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2UgdGhp
cyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIgYWxsb2NhdGVkIHll
dC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0Zp
bmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAg
UmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JS
ZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1
bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2Nh
dG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9j
YXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAg
ICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIo
bnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxs
b2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVn
KTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3Zl
cnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25D
ZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVj
dG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNl
VmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNv
bnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VH
UFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAg
ICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdU
MjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGlu
c3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hh
dCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90
RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghbV91
c2VMT0wpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0
cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5v
ciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEwLDkzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2Rl
Lm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3Rv
LCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2Ug
cmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwg
YW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90
bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNl
VmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9y
IFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3Rv
KTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAg
ICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQo
Z2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOwor
ICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAg
ICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsK
KworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAg
ICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJv
dG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigp
OworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOwor
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVl
KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJv
dG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAg
ICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFU
ZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBv
cGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVn
aXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2ls
bCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhl
IHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAor
ICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEg
Y2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5z
dGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKwor
ICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAv
LyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywg
cmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAK
ICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFu
Y2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1
YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYg
KG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19l
bXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBy
ZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdU
MCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlw
ZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwotCi0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVn
VDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlz
KTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
IAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsK
KyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0
byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVz
dWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCBy
ZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAot
ICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQp
LCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAg
IGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBjb21w
YXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRlIG90aGVyIGhlcmU/
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0
ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVzdDY0KFplcm8sIGlu
cHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVz
dDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihj
b25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25a
ZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRlIG51
bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVy
VGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3Rl
ciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAj
aWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJ
bnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNC
aWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFs
dWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
MCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBO
T19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiop
CkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlw
ZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
Mih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05v
dENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzYyNyw2MSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIo
KTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAg
ICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4g
JWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVH
UFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MTEsNDEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsK
LQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUu
Z3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJ
bW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBp
c0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAg
ICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsK
IAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NTQs
MjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1
bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNT
eW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmco
c3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkK
KyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNy
YywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1i
b2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
dmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0g
YnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0
cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBk
c3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmco
cmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0g
ZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJS
ZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIg
PSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJh
bmQsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQ
UiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3Ms
IGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNv
bW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFs
dWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxs
IGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNo
IHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgot
ICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQg
dGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8v
IEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBh
cyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhl
ciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1
ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBK
U1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRo
ZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNv
ZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRp
dGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0
ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBP
T1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAg
ICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVt
cCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAg
ICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwg
c2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24s
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIg
PSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBT
Y3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0
Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NTksMTI5IEBAIHZvaWQgSklUOjplbWl0X29w
X2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
YXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
bi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhl
IGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAogCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5s
aW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhp
cyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKwor
ICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAg
ICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAg
ICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBOb3cgaGFu
ZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhp
cyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8v
IE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAg
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzEwOTAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVu
ZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3Ro
ZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTUwMCwxMCArMTExOCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAg
ICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9w
dHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE0
OSwzMDUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFT
U0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihz
cGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZt
ZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAg
ZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgewor
ICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVk
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9p
bnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1l
dGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgQVNTRVJUKG1fdXNlTE9MKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0g
c3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0Vx
ID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVF
cXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5
cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1
ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7Cisg
ICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAg
Y29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAg
ICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0
cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUo
ZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKwor
ICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsK
KyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29t
cGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisK
KyAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIEFTU0VS
VChtX3VzZUxPTCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBp
c0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVh
bDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwo
cHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgIGlmICghaXNFcSkK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAg
ICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9i
amVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNH
UFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1Rl
bXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxk
IGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgZXFJbXBsPE9wRXE+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAg
ICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
biwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVn
VDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBlcUltcGw8T3BOZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAg
ICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9
IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQ
Uik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBs
YW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhz
R1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
ICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTQ2MywxNTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29k
ZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMy
LCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBh
cmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBp
c0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsK
KworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwo
cHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIp
OworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
Y29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBz
cGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQ
UikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwog
Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1p
bmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0
ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYg
KGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwot
ICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFn
bWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRo
IGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSBy
ZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBU
aGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8
PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0
IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwg
YmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVn
VDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hC
aXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0
KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCBy
ZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
NSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlz
IGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEs
IHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAg
IHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpT
VmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
Z1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0
byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVm
dCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7
CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAg
IGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlz
IERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFk
IG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5j
aElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYg
YSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2Ug
aXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0
IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdo
IGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwg
MTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwg
cmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hC
aXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2
NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1
KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3Ry
aW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhl
cmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90
aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0
KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVn
VDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxz
ZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxs
cyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQo
cmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQot
ICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQn
cyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQn
cyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhp
cyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Cisg
ICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncyku
CisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAv
LyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4g
aW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdz
IGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0
T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAg
IHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjgg
KzE2MjQsMTM1IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBp
bnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAs
IHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYm9vbCBpc0VxID0g
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1
YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJl
ZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3Vs
ZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAg
ICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywg
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7Cisg
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAg
ICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNw
ZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1w
TGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBV
U0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlw
ZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAg
ICAgICBnb3RvIHRha2VuOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkK
LSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAg
IC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxk
IGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVt
YmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25s
eSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdU
NSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNo
NjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQot
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25l
IGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVn
VDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJl
Y2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUg
c2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlm
ICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAg
IH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlm
IChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0
aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlz
IGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSks
IHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2
ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAg
ICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4g
YWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGln
aCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5n
IG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0
KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxz
aGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdU
Myk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJl
Z1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUg
aXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQo
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBt
b3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8g
ZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNl
IC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxz
ICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChy
ZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0g
ICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdz
IGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdz
IGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlz
KTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJp
bmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCBy
ZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAg
ICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQn
cyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlm
IGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAg
IGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAg
ICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsNTggKzE3NjUsMTMwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8
T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAg
ICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKG1fdXNlTE9M
KQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBHUFJSZWcgbGhzR1BS
ID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAg
IHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAg
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5w
dXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJl
cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRl
Y29kZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBk
c3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVn
VDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBp
c0JpZ0ludC5saW5rKHRoaXMpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJl
cikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAg
ICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBz
Y3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0
aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50
KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNO
b3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAyMyw4ICsyMTEyLDEyIEBAIHZvaWQgSklU
OjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyByZWdpc3RlcnMgdG8gemFw
IHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAv
LyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90
IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29k
ZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7
CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAg
ICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJs
ZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlh
YmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrKTsKIApAQCAtMTAzNSw5ICsyMTI4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSBy
ZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwg
c2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDk2LDU0ICsyMjAzLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKIH0KIAotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4o
KTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1
c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExODcsMTMgKzIy
NDgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
Ly8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAg
ICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRz
KCkpOwpAQCAtMTIxMCw3ICsyMjY5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGlu
dChjb25zdCBJbgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAg
KzIyOTEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQq
PigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4MSwxMCArMjUzNyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNv
ZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBu
ZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsK
ICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUw
OSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAK
ICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUg
cmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dh
cHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwy
MiArNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93
Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAg
KyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CkBA
IC0zMzQsNyArMzI3LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAg
Ym9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICszMzUs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmlj
dCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdl
dFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVj
dCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxE
aXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0LDEwICs0MzYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdy
aXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZp
bHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUz
NywxMCArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEw
ICs2MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC02NjMsMTAgKzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW4KICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIs
MTAgKzY5Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CkBAIC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAg
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nywx
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0
ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1f
bWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0
dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2Vt
Ymxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQog
ICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlz
IG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwo
KTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9i
eXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAg
ICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFz
c2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQy
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9i
YWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3Rv
bVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVu
dW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412345</attachid>
            <date>2020-10-26 12:27:32 -0700</date>
            <delta_ts>2020-10-26 19:29:27 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>251305</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cg
cGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAg
ICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNjg4LDEzIEBAIHZvaWQg
SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1
bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAg
IHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1
bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNr
T3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiAr
MTk3OSw2MDAgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVy
biB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxG
VExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVt
cCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhl
IGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRo
aXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJl
Z2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVn
aXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAg
ICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZl
cy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMo
KQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9j
YXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRo
ZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0
aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIGlmIChtX3Nsb3dDYXNl
cy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29k
ZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUigp
Cit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYg
KCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUg
eyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAg
ICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8g
YWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnBy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBh
ZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRo
ZSBtYXAgYWdyZWUuCisKKyAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlKHJlZykub3BlcmFuZDsKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BS
KCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0g
SW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2Vk
UmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9Cisg
ICAgfQorICAgIHJlZ1ZhbHVlKHJlZykgPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6
OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsm
XSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAg
ICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2Ji
ZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRH
UFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklU
OjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90
IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0g
WyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJh
bmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihy
ZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2xv
d0Nhc2Uuc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcg
PT0gc2xvd0Nhc2UucmVzdWx0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
LCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCku
Y29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0
Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBB
ZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVn
cyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zv
cihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3Bl
cmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnBy
KS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcg
Z3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3By
IH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJh
bmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgZnByRm9yT3Bl
cmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVz
c0ZvcihvcGVyYW5kKSk7CisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBy
ZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2Nr
Q291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7Cisg
ICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQm
IGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQor
CitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9
CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBS
VGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9n
cHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICAvLyBPT1BTOiBkbyBzbWFydGVyIHRo
aW5ncyBmb3IgYSBjb25zdGFudCBoZXJlLgorICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIs
IG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAo
IWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAg
ICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikp
OworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJh
bmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9n
cHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOwor
ICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxh
dGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJz
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFu
ZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9n
cHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBp
ZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2Vs
bENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1
ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQo
aml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgp
Cit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBPT1BTOiBjb25zaWRlciB1c2luZyBGUFIgaWYgdGhlcmUncyBhbiBGUFIgYWxsb2Nh
dGVkIGZvcgorICAgICAgICAvLyB0aGlzIG9wZXJhbmQuCisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFu
ZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6
OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9m
cHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmICht
X2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2pp
dC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQ
UlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2Nr
KG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAg
R1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdw
cigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9q
aXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNC
eXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFs
dWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQu
dW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5hc3NpZ25SZWco
bV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lzdGVyU2V0
IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCBy
ZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBh
dXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N0
cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1ib2wo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAo
IWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJv
b2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAo
IWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVh
bih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUg
fSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNP
dGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0Owor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNDZWxs
Q2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
Qnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNF
KEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNl
CisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAg
ICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsK
KyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIo
b3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJp
Z0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hH
UFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUp
KTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2lu
Y2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJN
YXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRl
ZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2Fs
bExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1
dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAg
ICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXgg
dCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5n
IFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisg
ICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBzOworICAgICAgICBTYXZl
UGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBm
b3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8g
U29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmll
bmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5Miw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRl
IEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOwor
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRy
X3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAg
ICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50
YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAg
IC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJs
ZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAg
SklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAt
MjYzLDYgKzI2OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
OwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxs
SW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisg
ICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQor
ICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQogICAgICAgICB7CkBAIC0zMDAsOSArMzE5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
SnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAg
ICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0p
OworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJl
Z2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2
b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNDgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM1OCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJp
Y3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAg
ICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9p
ZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBD
b21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BF
cUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAg
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTQ3NSw4ICs0OTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNl
bmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRp
b24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZElt
cGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUwNSwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBp
bnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJs
ZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90
IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
PgorICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0
aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzUzOSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9w
cm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihj
b25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjQzLDY5ICs2NzAsNjkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IElu
c3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29u
c3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Rh
aWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAog
ICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlv
bik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiop
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAK
ICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNV
bnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWdu
ZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKQEAgLTcyOCw4ICs3NTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVt
aXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQg
ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsK
IAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpA
QCAtNzQ2LDM0ICs3NzEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0
aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRv
cj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2Uo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtT
bG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0
ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1Nl
dCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0
dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUlu
ZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQp
OwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0Fs
bFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTMwLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlv
bigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAg
c3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5
NDMsMjI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5h
cnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5h
cnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIEdQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBG
UFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkg
bG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4g
TWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQ
UlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3Zl
blR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBT
cGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAg
ICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFu
ZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsK
KyAgICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5v
cGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVj
dCBSZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAg
ICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQo
b3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVy
YW5kOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50
MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5v
dENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihv
cGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNT
eW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICB2b2lkIHNw
ZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
QW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9P
UFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVz
LgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRl
RlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOwor
ICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAg
IHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQg
bG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBz
bG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQ
bGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwog
CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcgKzExODAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsK
IAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9y
PFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xv
d0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRj
aGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1
dEluZm9zOwpAQCAtOTkwLDYgKzEyMTcsNzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBk
b3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAg
ICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJl
ZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAg
ICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlm
IChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBS
UmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1
ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAg
ICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQg
eyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5v
cGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291
bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0
ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRz
PEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1Zh
bHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gcHJv
dmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3Ro
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5z
aXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOwor
CisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92
ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVz
W2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVz
W2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVy
LnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNb
aV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxv
Y2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAgVmVjdG9yPExv
Z0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+
PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRl
Y2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVj
dG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Smxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NU
aGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgLy8gT09QUzogdmVyaWZ5IE5hTgorICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1Ro
YW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVh
bEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFu
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpn
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5k
T3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUs
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIzICsxNjEsNDQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlv
bikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBj
YXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFu
dCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBp
bW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMs
IG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIo
KSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigp
LCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gT09QUzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAgIGJvb2wgZGlzYWxsb3dB
bGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkp
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMTYgKzI5NCwxNiBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9u
LCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3Bl
cmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2Fz
ZSYpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2lu
ZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMjg5LDggKzMxMSw2IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1l
ZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBu
dW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJn
dW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEpOwpAQCAtMjk5LDggKzMxOSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7
CkBAIC0zMjUsOCArMzQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAg
LTM1MCwxMiArMzY2LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
TEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVt
cCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9
IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQz
MihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAg
ICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZw
UmVnVDApOwpAQCAtMzY4LDkgKzM4Myw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGlu
ayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0
aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50
LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CkBAIC00MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBPT1BT
OiBzbG93IHBhdGggc2xvdyBvcAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwogfQpAQCAtNDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAt
NDYzLDcgKzQ3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QK
ICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBM
aXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzQ4
Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAg
IC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkg
ewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzU3Niwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1
Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9w
MSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03
MjMsMTAgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkK
ICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlv
blRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291
bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRo
ZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihu
ZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
T3B0aW1pemUpOwpAQCAtNzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3Qo
Y29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBub3QzMihyZXN1bHRHUFIu
Z3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIuZ3ByKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIE9PUFMKKyAgICB9CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBAIHZvaWQgSklUOjplbWl0X29w
X3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92
ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxv
dywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAg
IGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBi
aXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOwogfQpAQCAtMTIxNSwz
MiArMTI3MCw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAK
IHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0
aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCks
IHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0
d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7Cisg
ICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
T09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRL
aW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigp
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMs
IG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAg
ICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwogICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSw4IEBA
IGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpD
YWxsLCByZWdUMCk7CkBAIC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7
CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29k
ZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzAsNDQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVP
cENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWls
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWls
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
ICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC00MTEsMTQgKzQwNywx
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgZmFzdENh
c2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRv
ck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8v
IE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgp
KTsKIAogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAvLyBPT1BTCisgICAgbGlu
a0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdU
MDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC01MTUsMTAgKzUxMywxMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlz
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBs
aW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYs
NyArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAg
IEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dD
YXNlKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU0OCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAg
ICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjYsMjUgKzE2Niw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0
ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFz
QW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Ci17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVj
b2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
aW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4NywzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRo
aXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAp
CitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQs
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dD
YXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAK
KyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNv
ZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAg
bV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBM
aXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1
bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5q
dW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0
JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkg
dG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAg
OiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoanVtcCk7
CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVs
YXRpdmVPZmZzZXQpCkBAIC0zOTMsMTEgKzM4Myw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJ
VDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNE
b3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVk
KCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEy
MzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE3IEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fc3JjOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2UgdGhp
cyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIgYWxsb2NhdGVkIHll
dC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0Zp
bmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAg
UmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JS
ZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1
bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2Nh
dG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9j
YXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAg
ICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIo
bnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxs
b2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVn
KTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3Zl
cnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25D
ZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVj
dG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNl
VmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNv
bnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VH
UFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAg
ICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdU
MjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGlu
c3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hh
dCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90
RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghbV91
c2VMT0wpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0
cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5v
ciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEwLDkzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2Rl
Lm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3Rv
LCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2Ug
cmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwg
YW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90
bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNl
VmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9y
IFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3Rv
KTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAg
ICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQo
Z2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOwor
ICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAg
ICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsK
KworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAg
ICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJv
dG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigp
OworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOwor
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVl
KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJv
dG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAg
ICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFU
ZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBv
cGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVn
aXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2ls
bCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhl
IHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAor
ICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEg
Y2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5z
dGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKwor
ICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAv
LyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywg
cmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAK
ICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFu
Y2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1
YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYg
KG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19l
bXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBy
ZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdU
MCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlw
ZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwotCi0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVn
VDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlz
KTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
IAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsK
KyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0
byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVz
dWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCBy
ZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAot
ICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQp
LCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAg
IGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBjb21w
YXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRlIG90aGVyIGhlcmU/
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0
ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVzdDY0KFplcm8sIGlu
cHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVz
dDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihj
b25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25a
ZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRlIG51
bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVy
VGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3Rl
ciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAj
aWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJ
bnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNC
aWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFs
dWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
MCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBO
T19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiop
CkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlw
ZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
Mih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05v
dENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzYyNyw2MSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIo
KTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAg
ICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4g
JWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVH
UFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MTEsNDEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsK
LQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUu
Z3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJ
bW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBp
c0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAg
ICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsK
IAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NTQs
MjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1
bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNT
eW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmco
c3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkK
KyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNy
YywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1i
b2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
dmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0g
YnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0
cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBk
c3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmco
cmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0g
ZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJS
ZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIg
PSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJh
bmQsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQ
UiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3Ms
IGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNv
bW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFs
dWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxs
IGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNo
IHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgot
ICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQg
dGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8v
IEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBh
cyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhl
ciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1
ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBK
U1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRo
ZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNv
ZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRp
dGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0
ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBP
T1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAg
ICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVt
cCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAg
ICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwg
c2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24s
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIg
PSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBT
Y3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0
Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NTksMTI5IEBAIHZvaWQgSklUOjplbWl0X29w
X2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
YXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
bi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhl
IGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAogCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5s
aW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhp
cyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BS
LCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8g
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAg
ICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFu
ZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhp
cyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8v
IE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAg
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzEwOTAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVu
ZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3Ro
ZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTUwMCwxMCArMTExOCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAg
ICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9w
dHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE0
OSwzMDUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFT
U0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihz
cGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZt
ZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAg
ZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgewor
ICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVk
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9p
bnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1l
dGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgQVNTRVJUKG1fdXNlTE9MKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0g
c3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0Vx
ID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVF
cXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5
cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1
ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7Cisg
ICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAg
Y29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAg
ICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0
cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUo
ZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKwor
ICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsK
KyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29t
cGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisK
KyAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIEFTU0VS
VChtX3VzZUxPTCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBp
c0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVh
bDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwo
cHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgIGlmICghaXNFcSkK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAg
ICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9i
amVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNH
UFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1Rl
bXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxk
IGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgZXFJbXBsPE9wRXE+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAg
ICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
biwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVn
VDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBlcUltcGw8T3BOZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAg
ICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9
IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQ
Uik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBs
YW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhz
R1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
ICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTQ2MywxNTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29k
ZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMy
LCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBh
cmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBp
c0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsK
KworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwo
cHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIp
OworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
Y29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBz
cGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQ
UikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwog
Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1p
bmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0
ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYg
KGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwot
ICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFn
bWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRo
IGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSBy
ZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBU
aGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8
PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0
IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwg
YmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVn
VDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hC
aXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0
KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCBy
ZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
NSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlz
IGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEs
IHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAg
IHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpT
VmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
Z1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0
byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVm
dCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7
CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAg
IGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlz
IERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFk
IG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5j
aElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYg
YSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2Ug
aXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0
IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdo
IGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwg
MTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwg
cmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hC
aXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2
NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1
KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3Ry
aW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhl
cmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90
aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0
KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVn
VDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxz
ZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxs
cyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQo
cmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQot
ICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQn
cyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQn
cyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhp
cyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Cisg
ICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncyku
CisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAv
LyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4g
aW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdz
IGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0
T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAg
IHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjgg
KzE2MjQsMTM1IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBp
bnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAs
IHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYm9vbCBpc0VxID0g
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1
YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJl
ZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3Vs
ZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAg
ICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywg
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7Cisg
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAg
ICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNw
ZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1w
TGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBV
U0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlw
ZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAg
ICAgICBnb3RvIHRha2VuOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkK
LSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAg
IC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxk
IGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVt
YmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25s
eSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdU
NSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNo
NjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQot
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25l
IGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVn
VDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJl
Y2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUg
c2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlm
ICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAg
IH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlm
IChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0
aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlz
IGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSks
IHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2
ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAg
ICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4g
YWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGln
aCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5n
IG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0
KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxz
aGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdU
Myk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJl
Z1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUg
aXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQo
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBt
b3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8g
ZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNl
IC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxz
ICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChy
ZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0g
ICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdz
IGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdz
IGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlz
KTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJp
bmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCBy
ZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAg
ICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQn
cyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlm
IGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAg
IGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAg
ICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODUgKzE3NjUsMjA5IEBAIHZvaWQgSklUOjpl
bWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8
T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAg
ICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKG1fdXNlTE9M
KQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBHUFJSZWcgbGhzR1BS
ID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAg
IHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAg
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5w
dXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJl
cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRl
Y29kZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBk
c3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgp
OwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50
IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQo
c3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAg
ICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5r
KHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJ
bnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBp
c05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjT2JqZWN0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAyMyw4ICsyMTY0LDEyIEBA
IHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyByZWdpc3Rl
cnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdp
bmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAg
ICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVf
dCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3Vu
dDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zv
cih2YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMTgwLDIzIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVu
Y3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
c2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDk2LDU0ICsyMjU1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKIH0KIAotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTEx
ODcsMTMgKzIzMDAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBj
aGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOwpAQCAtMTIxMCw3ICsyMzIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2xvb3BfaGludChjb25zdCBJbgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJl
bnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAg
LTEyMzMsMTAgKzIzNDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChj
b25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9j
YXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTQ4MSwxMCArMjU4
OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8s
IG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxl
LCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0y
NzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQog
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
ICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBw
cm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAg
ICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVn
aXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIs
OCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJl
c29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCwyMiArNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cgogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNs
b3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
ICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbElu
ZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4
OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VSVCho
YXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRl
eF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CkBAIC0zMzQsNyArMzI3LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQ
dXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0
Miw3ICszMzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1v
ZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAg
ICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlm
IChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlW
YWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFi
ZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0
LDEwICs0MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTUzNywxMCArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpA
QCAtNjQ2LDEwICs2MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC02NjMsMTAgKzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW4KICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC03MTIsMTAgKzY5Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1
cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVU
eXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxl
cjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsg
cmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNv
bnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBN
YWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9Owog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxs
IGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5u
YSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGls
bEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICht
X2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVu
YWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enpl
ciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGlu
Z0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4
cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412378</attachid>
            <date>2020-10-26 19:29:27 -0700</date>
            <delta_ts>2020-10-27 17:20:13 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>266509</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cg
cGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAg
ICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNjg4LDEzIEBAIHZvaWQg
SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1
bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAg
IHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1
bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNr
T3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiAr
MTk3OSw2MDAgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVy
biB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxG
VExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVt
cCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhl
IGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRo
aXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJl
Z2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVn
aXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAg
ICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZl
cy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMo
KQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9j
YXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRo
ZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0
aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIGlmIChtX3Nsb3dDYXNl
cy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29k
ZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUigp
Cit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYg
KCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUg
eyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAg
ICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8g
YWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnBy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBh
ZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRo
ZSBtYXAgYWdyZWUuCisKKyAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlKHJlZykub3BlcmFuZDsKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BS
KCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0g
SW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2Vk
UmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9Cisg
ICAgfQorICAgIHJlZ1ZhbHVlKHJlZykgPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6
OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsm
XSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAg
ICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2Ji
ZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRH
UFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklU
OjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90
IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0g
WyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJh
bmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihy
ZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2xv
d0Nhc2Uuc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcg
PT0gc2xvd0Nhc2UucmVzdWx0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
LCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCku
Y29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0
Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBB
ZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVn
cyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zv
cihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3Bl
cmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnBy
KS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcg
Z3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3By
IH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJh
bmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgZnByRm9yT3Bl
cmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVz
c0ZvcihvcGVyYW5kKSk7CisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBy
ZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2Nr
Q291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7Cisg
ICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQm
IGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQor
CitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9
CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBS
VGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9n
cHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICAvLyBPT1BTOiBkbyBzbWFydGVyIHRo
aW5ncyBmb3IgYSBjb25zdGFudCBoZXJlLgorICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIs
IG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAo
IWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAg
ICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikp
OworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJh
bmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9n
cHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOwor
ICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxh
dGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJz
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFu
ZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9n
cHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBp
ZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2Vs
bENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1
ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQo
aml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgp
Cit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBPT1BTOiBjb25zaWRlciB1c2luZyBGUFIgaWYgdGhlcmUncyBhbiBGUFIgYWxsb2Nh
dGVkIGZvcgorICAgICAgICAvLyB0aGlzIG9wZXJhbmQuCisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFu
ZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6
OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9m
cHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmICht
X2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2pp
dC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQ
UlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2Nr
KG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAg
R1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdw
cigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9q
aXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNC
eXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFs
dWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQu
dW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5hc3NpZ25SZWco
bV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lzdGVyU2V0
IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCBy
ZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBh
dXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N0
cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1ib2wo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAo
IWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJv
b2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAo
IWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVh
bih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUg
fSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNP
dGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0Owor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNDZWxs
Q2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
Qnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNF
KEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNl
CisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAg
ICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsK
KyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIo
b3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJp
Z0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hH
UFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUp
KTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2lu
Y2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJN
YXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRl
ZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2Fs
bExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1
dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAg
ICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXgg
dCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5n
IFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisg
ICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBzOworICAgICAgICBTYXZl
UGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBm
b3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8g
U29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmll
bmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5Miw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRl
IEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOwor
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRy
X3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAg
ICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50
YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAg
IC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJs
ZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAg
SklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAt
MjYzLDYgKzI2OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
OwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxs
SW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisg
ICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQor
ICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQogICAgICAgICB7CkBAIC0zMDAsOSArMzE5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
SnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAg
ICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0p
OworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJl
Z2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2
b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNDgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM1OCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJp
Y3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAg
ICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9p
ZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBD
b21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BF
cUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAg
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTM1MCw4ICszNzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiBy
ZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2gu
Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShNZXRhZGF0YSYpOworICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BS
UmVnIHZhbHVlID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKC4uLik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6
Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDggKzQ5Niw4
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAg
LTQ4NCwxMSArNTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRp
b24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVD
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAg
ICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lk
IGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTUxMiw5ICs1NDIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKQEAgLTY0Myw2OSArNjczLDY5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiop
OwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRk
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29u
c3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9p
ZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2
b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZv
aWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwot
ICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAg
ICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC03
MjgsOCArNzU4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAg
SlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0NiwzNCAr
Nzc0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3As
IHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5
cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAg
ICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwg
UmVwYXRjaEZ1bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBs
aW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAg
ICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVy
KTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAg
ICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Ns
b3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93
Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBV
TlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29s
IGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2Fz
ZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzkzMyw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQog
I2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAg
ICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAg
ICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29s
IGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTQ2LDIyNSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAg
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisg
ICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJU
ZW1wKEpJVCYpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBn
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAo
SklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMy
T3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJp
dHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRh
Z2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
Y2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
OworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3By
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJh
bmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAg
ICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
fkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIg
eyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5k
OworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5
cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25G
b3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChv
cGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25G
cm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9
CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBm
cHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCku
ZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFs
bG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVn
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7
CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKwor
ICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisK
KyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3By
OworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
ZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RD
ZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkgJiB+
U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxs
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2
b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
QXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVh
bihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBz
cGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNw
ZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9i
YWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAg
R1BSUmVnIGFsbG9jYXRlR1BSKCk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAg
ICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpT
VmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsK
KyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZl
UGxhbigpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBT
bG93Q2FzZSYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBW
ZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAgLTk1Myw3ICsxMTgzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Ns
b3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAg
LTk5MCw2ICsxMjIwLDc2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwog
ICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAg
ICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2Ug
bWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2Nh
dGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAg
ICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAg
ICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90
aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBs
b2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsK
KworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAg
ICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAg
ICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAg
ICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwor
ICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAg
ICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVn
PiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0
ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IHByb3ZlblR5cGVzOwor
CisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90
aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBv
cGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAg
ICAgICAgIEFTU0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6
ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdl
U3BlY3VsYXRpb25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAg
ICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMu
c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVy
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90
aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
QmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0
ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJl
bnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9l
eGl0TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0
RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisK
KyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlz
dD4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDgyICs0Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxB
bmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
SmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwg
RG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0
ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAg
IC8vIE9PUFM6IHZlcmlmeSBOYU4KKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0
ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2ps
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxl
c3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBm
YWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNs
b3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0
X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3Ax
LCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAg
Ly8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhl
IGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVk
aWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAg
ICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIo
KSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigp
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE9PUFM6IGhhbmRsZSBjbG9iYmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9
IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BF
UkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9u
LCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52
ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAg
ICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4g
dGhlIHNsb3cgcGF0aDoKQEAgLTI4OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZs
b2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZs
b2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkg
fHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRH
UFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7
CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5
OSw4ICszMTksNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7
CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDgg
KzM0Myw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9
CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkg
ewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAg
ICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2
NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3Qg
SW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAg
ZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZklu
dDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOwor
ICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0
KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lz
dGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAg
LTM2OCw5ICszODMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAg
ICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAg
fQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpA
QCAtNDM1LDEwICs0NTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRo
IHNsb3cgb3AKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
QEAgLTQ1MSw3ICs0NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
JikKIHsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0Nzcs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQz
Mk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
aW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0
ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAg
ZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0
cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lD
KiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5n
ZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRl
ciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBj
YW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsK
QEAgLTc4Niw2ICs3OTcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3Ry
dWN0aQogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHJlc3VsdEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCBy
ZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAg
ICAgICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
ICNlbHNlCkBAIC05MDEsMTYgKzkyNCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2Vy
dmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIo
KSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0
PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24p
KTsKICAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAg
ICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZs
b3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBP
T1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtp
bmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCks
IHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBtdWxEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxK
SVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7
CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1
Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAg
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZs
b3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0Lmdw
cigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJs
ZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4o
c3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4o
bV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0
TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZVN1Yk9wdGltaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6
Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDAp
OwpAQCAtMjY0LDEzICsyNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BD
YWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3Zv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9j
YWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklU
OjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29u
c3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2Fs
bD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWls
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
cik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93
Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAg
bGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
SXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoc2xvd0Nhc2UpOwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVt
cExpc3Qgbm90T2JqZWN0OwpAQCAtNTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dD
YXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0
PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRl
clJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgICAgIC8vIE9PUFMKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAg
ICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5j
aElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNs
b3dDYXNlKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTY2LDI1ICsxNjYsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZp
cnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
cmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dD
YXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNl
cyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlm
IChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lk
IEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1
cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlz
IHNldCIpOwpAQCAtMjA2LDI3ICsxODcsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lO
TElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFt
X3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0g
bV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2Rl
SW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgICAgICBtX3Ns
b3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAgbV9zbG93Q2FzZXMu
bGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2Fz
ZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25z
dCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNT
RVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygp
KQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHMuYXBwZW5k
KGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3Qs
IFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0g
ICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2lu
ZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1
bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3Qu
anVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0
KQpAQCAtMzA5LDExICsyOTksMTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbgogICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJl
ZyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAgIGNv
bnN0IFJlZ2lzdGVySUQgdmFsdWUgPSByZWdUMDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
IGNvbnN0IFJlZ2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKICNlbmRpZgpAQCAtMzM4LDExICsz
MjcsMTEgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsg
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVnKQogewog
ICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHJlZyk7CiB9
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lz
dGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmlsZSogYXJyYXlQ
cm9maWxlKQpAQCAtMzkzLDExICszODIsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6Omdl
dE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91Ymxl
KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBh
ZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
QEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShj
b25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAt
NzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Ny
YzsKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0
dGVyIGZvciBjb25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSkKQEAgLTkwLDMyICsxMDEsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9i
amVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lz
dGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0g
cmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOwor
ICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVn
ID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRl
bXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JS
ZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlm
ICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7Cisg
ICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVj
dCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEyNSwyMyArMTU3LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29k
ZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0g
Ynl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBH
UFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9w
ZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7
CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVl
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1
Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0g
aGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAg
IGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5j
ZUdQUik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3lt
Ym9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigp
KSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9M
KQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3Rv
ckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBi
b3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJ
bnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3Rv
bWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIxMCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3By
b3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5k
IHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1Qw
IGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3
ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJl
Z1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBt
dXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1i
b2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2
YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0K
LSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJl
Z1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7
Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAg
ICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHByb3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBz
Y3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChw
cm90bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAg
ICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBw
cm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93
Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVt
cC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKwor
ICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsK
KyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFs
dWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5n
cHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFu
ZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVy
cy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUg
ZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1
bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwg
LSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNl
LgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAg
ICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFs
dWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0
KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAg
ICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAg
SklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJ
bmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZv
KCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qKQpAQCAtMTk5LDExICszMTEsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHko
Y29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDAp
OworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwor
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTIxMSwyOCArMzQxLDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9p
c191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKLQotICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsK
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
Z1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKLSAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBj
b21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisg
ICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAg
ICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0
byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQ
UiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0
R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVn
VDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0Nl
bGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yNDEsMTMgKzQxNSwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3Jf
bnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBvdGhlciBoZXJlPworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ1MCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0
KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jv
b2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQ
UiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NCha
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yNjgsMTEgKzQ4MSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3Qg
SW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051
bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywg
cmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBudW1iZXIg
aGVyZSBpZiBwcm9maWxpbmcgc2F5cyBzbz8KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1Jl
Z2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVT
RShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTEyLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jp
Z19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwg
PSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJ
bnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUp
LCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qmln
SW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0Nl
bGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVU
VVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAt
MzEzLDE4ICs1NzgsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29u
cwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBp
bnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlw
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2MjcsNjEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmpl
Y3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8v
IHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92
ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNjkyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXgu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzExLDQxIEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAg
ICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0g
YnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0u
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
SnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAg
ICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzU0LDIwMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRv
bmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
dHJpbmcocmVnVDApKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BS
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVl
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5j
aElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5
bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qw
KSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1
bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFt
ZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Tm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCBy
ZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRp
bnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50
IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZh
bHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRz
IHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxs
IGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAv
LyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0
YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDAp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBi
b29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhh
biB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5w
dXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1
ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93
IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRp
b24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVl
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBS
ID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZw
U2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCks
IEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RF
cXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9
OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBT
Y3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRj
aDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQ
Uiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTU5LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFf
bnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90
aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1l
ZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8g
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAg
ICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxp
bmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAg
IEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlz
KTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAg
ICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5k
bGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlz
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAg
YWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRh
cmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5MCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5k
ZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0
byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhl
cikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNTAwLDEwICsxMTE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251
bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAg
ICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
IAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTQ5
LDMwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNT
RVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNw
ZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1l
dGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7Cisg
ICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQp
OworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1
YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICBBU1NFUlQobV91c2VMT0wpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBz
dGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlw
ZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVl
RmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVP
YmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBj
b21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisg
ICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOwor
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21w
YXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKwor
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpq
ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJU
KG1fdXNlTE9MKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlz
RXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1Qx
KSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFs
OworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERv
dWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAg
ICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5n
KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJo
cykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVt
cC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIs
IHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQg
ZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBlcUltcGw8T3BFcT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgamVxSW1wbDxPcEplcT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKG1fdXNl
TE9MKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BS
KTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5l
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAg
ICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDYzLDE1MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
U3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIs
IHJlZ1QxKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFy
ZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlz
RXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOwor
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBj
b21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNw
ZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BS
KSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAK
LSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWlu
ZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQg
PT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAo
bGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0g
ICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdt
ZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGgg
YSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJl
cXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRo
ZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8
NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQg
MAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBi
ZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92
ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdU
MSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJp
dHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwg
cmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQo
cmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJl
Z1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1
KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAg
bW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMg
YSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwg
cmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChy
ZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNW
YWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRv
IGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0
ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsK
KyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAg
Z290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQg
b2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNo
SWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBh
IEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBp
dCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQg
aXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2gg
Yml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAx
PDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCBy
ZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJp
dHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0
KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUp
OworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJp
bmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
Ly8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVy
ZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3Ro
IGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwor
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQo
MSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdU
NSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNl
IC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxz
ICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChy
ZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0g
ICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdz
IGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdz
IGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlz
KTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAg
ICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4K
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8v
IEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBp
bnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3Mg
YSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRP
Sy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAg
cmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCAr
MTYyNCwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGlu
dCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0
ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwg
c3JjMiwgcmVnVDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBib29sIGlzRXEgPSB0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVh
bDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVk
IDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAg
IGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAg
ICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3Bl
Y3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBM
aXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVT
RShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAg
ICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQot
ICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRo
ZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwg
aGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5
IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAg
YWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1
KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJv
dmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUg
aXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdU
MSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVj
aXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBz
bG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAg
fQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAg
ICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYg
KGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRo
OworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMg
ZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwg
d2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZl
bHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAg
ICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBh
ZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdo
IGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcg
b25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQo
cmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1Qz
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVn
VDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0
RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBp
cyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1v
cmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBk
byB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2Ug
Ly8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMg
KHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJl
Z1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAg
ICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3Mg
YW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3Mg
YSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMp
OwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAg
IGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQp
OworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmlu
Z3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdz
IGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYg
aXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAg
bGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAg
ICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc2NSwyMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxP
cEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpO
U3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQ
UiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAg
ICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAobV91c2VMT0wp
CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIg
PSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAg
cmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKG1fdXNlTE9MKQor
ICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1
dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVj
b2RlTnVtYmVyOworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRz
dCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7
Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQg
fCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChz
cmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShC
SUdJTlQzMikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAg
ICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwg
c2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmso
dGhpcyk7CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIo
aW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0lu
dChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAg
ICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3RWUmVnKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2
ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBA
IC04ODgsOSArMjAzMywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNv
bnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
YXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBr
bm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlIHsg
KnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5n
cHIoKTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMDY0LDE3
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1
cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtOTIyLDkgKzIwODksMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsK
ICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4
KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdU
MCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjExMywxNDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1
bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJs
ZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFi
bGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwo
KTsKICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJl
Z1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19j
YXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVl
c3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3Zv
aWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+
KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZh
bHVlOworICAgIGF1dG8gY29tcGFyZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2Ny
YXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZXN1bHRHUFIs
IHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAg
ICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAo
KTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9w
RXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMp
OwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiop
CiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBz
aW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRo
b3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAg
ICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2Fy
aWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0Mg
cHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAg
ICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0
V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMjY0LDIzIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsy
Mjg4LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1
Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJ
RDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1
dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1Qx
KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkp
OworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA5
Niw1NCArMjM1NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnUK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKLQotLy8gU2xvdyBj
YXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC0xMTg3LDEzICsyNDAwLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xv
b3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29w
X2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhl
IEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNG
cm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BF
bnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMTAsNyArMjQyMSw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICB9CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVy
KTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsyNDQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1
dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFu
ZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9
CiAKQEAgLTE0ODEsMTAgKzI2ODksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFk
VHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsx
ODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4Owog
Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9
IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBj
aG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4ICs1NDAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01ODYsOCAr
NTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpA
QCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0
cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAt
NjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBA
IC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9u
KTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZl
VHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjIgKzc4LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHIKIAogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEp
OwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwot
ICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAg
ICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIHJlZ1QwLCByZWdUMSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIwLDE2ICsxMTYsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwpAQCAtMzM0LDcgKzMyNyw3IEBAIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArMzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7
CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAt
MzUwLDEzICszNDMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAg
IGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0
U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBM
YWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKQEAgLTQ0NCwxMCArNDM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVy
QmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNDkzLDEwICs0
ODMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC01MzcsMTAgKzUyNSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTc2LDEwICs1
NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0Pigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTY0NiwxMCArNjMwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjYzLDEwICs2NDUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzEyLDEwICs2OTIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywg
U2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIApAQCAtNzQ5
LDEwICs3MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC0xMDMwLDEwICsxMDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTE4NiwxMCArMTE2MCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpIHsKQEAgLTEzNzksNiArMTM1MSw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
UHV0QnlWYWxXaXQKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVy
IG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogYXVkaXQgYWxs
IGNhbGxzIHRvIGVtaXRXcml0ZUJhcnJpZXIgZm9yIExPTCBzaW5jZSB0aGlzIG1heSBtYWtlIGNh
bGxzIHRvIEMKICAgICBBU1NFUlQobW9kZSA9PSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSk7CiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lciwg
VmlydHVhbFJlZ2lzdGVyKCksIG1vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRl
eChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ld
OyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1f
bWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6
dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsK
KyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZh
c3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwog
I2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29k
ZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAg
ICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5
U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0
eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRl
cnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAg
ICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0
aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412481</attachid>
            <date>2020-10-27 17:20:13 -0700</date>
            <delta_ts>2020-10-27 17:30:02 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>277801</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cg
cGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAg
ICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNjg4LDEzIEBAIHZvaWQg
SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1
bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAg
IHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1
bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNr
T3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiAr
MTk3OSw2MTEgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVy
biB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxG
VExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVt
cCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhl
IGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRo
aXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJl
Z2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVn
aXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAg
ICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZl
cy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMo
KQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9j
YXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRo
ZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0
aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIGlmIChtX3Nsb3dDYXNl
cy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29k
ZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihH
UFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFs
dWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2Nh
dGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBk
dXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQ
UnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQorewor
ICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJv
dGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxs
b2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUocmVn
KS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
IGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChv
cGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUocmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKwor
fQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2Fs
bGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8g
ZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0
KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQor
CitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMg
Y291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBw
ZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYg
cmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgIH07CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVk
KHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5m
aXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAg
ICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
YWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5ib3hEb3VibGUo
c2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQorewor
ICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihn
cHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVn
VmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9
OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFk
ZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAg
YXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3Bl
Y0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShn
cHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyBy
ZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tD
b3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAg
ICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYg
aml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRl
bXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9q
aXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQor
ICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQorewor
ICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9j
YXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9
CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnBy
ICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6
SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFu
ZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BS
UmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
Ly8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlw
ZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJy
YW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5k
LCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJh
bmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6
IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVy
YW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxs
T3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwciku
b3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKwor
ICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbCht
X2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxs
T3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5k
Ojp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNw
ZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5
cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitK
SVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorewor
ICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9w
ZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlm
IHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNz
aWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIp
OworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVy
YW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFu
ZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAg
ICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAg
ICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOwor
ICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9q
aXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVn
IGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayht
X2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91
YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUp
OworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOwor
CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1f
ZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
Cit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7Cisg
ICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElm
TmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAg
IGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXND
ZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lk
IEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFs
dWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1
bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAg
aWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhl
cihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmpl
Y3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlz
T2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAg
ICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VC
aWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0g
ZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8
ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsK
KyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBT
cGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJp
Z0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsK
KyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNl
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5o
IgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgor
I2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Q
cm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29k
ZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUlu
ZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAg
ICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBW
aXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dD
YXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBqdW1wczsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUg
YSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAg
ICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0
b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBz
dGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVj
b3JkIHsKQEAgLTE4Myw2ICsxOTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19B
TElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJh
c2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhD
YWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMjAx
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1
bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWRE
ZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZz
ZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhl
IFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQs
IGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0K
ICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNjgsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3Bp
bGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNw
aWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJ
bXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAg
ICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0
aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAwLDkgKzMxOSwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAg
ICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9p
ZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBS
ZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNl
KFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAo
SnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzEwLDcgKzMz
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC0zMjcsNyArMzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9v
bCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTMzNyw3ICszNTgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBF
cSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlw
ZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1v
ZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRG
aWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC0zNTAsOCArMzcxLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZh
bHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZv
cgogICAgICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsKKyAgICAgICAgdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwg
dm9pZD4KQEAgLTQ3NSw4ICs0OTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVs
YXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUwNSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9w
ZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNp
emUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2
b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01
MTIsOSArNTQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMsNjkgKzY3Myw2OSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9h
cmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190
cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24p
OworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9u
KiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJv
b2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwpAQCAtNzI4LDggKzc1OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNz
T2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAg
ICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAg
dm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3Rlcik7CkBAIC03NDYsMzQgKzc3NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBS
ZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKLSAgICAgICAgSnVtcCBn
ZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAg
ICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVy
LT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0Zv
ckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAg
ICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
cyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2Rl
SW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8g
T09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAg
ICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5
MzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
KCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJ
bnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygp
OwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApA
QCAtOTM1LDYgKzk0NiwyMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQ
cm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJS
ZWcpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BS
UmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAg
ICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAg
ICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
OworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUg
YW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7
CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
flZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9
CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFs
bG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAg
ICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVn
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJz
W3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJl
ZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVy
c1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyBy
ZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3Rl
cnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5k
ID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBm
cHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVy
YW5kID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc090aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1i
b2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGlu
ZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52
YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lk
IHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmly
dHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAg
dm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOwor
ICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYp
OworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwog
ICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2Fs
bFJlY29yZD4gbV9jYWxsczsKQEAgLTk1Myw3ICsxMTgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Ns
b3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsK
ICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsx
MjIwLDc2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBC
eXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1
Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUg
Ym94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRo
ZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAg
dm9pZCBtZXJnZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3By
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikK
KyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQg
eyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAg
ICAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAg
ICAgICAgICB8fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAg
ICAgIHx8IGlzQWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAg
ICAgICAqdGhpcyA9IHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBz
dHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7Cisg
ICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1
Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnPiBvcGVyYW5k
VG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAg
ICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IHByb3ZlblR5cGVzOworCisgICAgICAg
ICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJh
bmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9S
ZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFT
U0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRp
b25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lz
dGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0
ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFw
aD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7
IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9w
cmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3Vy
cmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOwor
CisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAg
ICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAg
Ym9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0
SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDgyICs0Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6
IHZlcmlmeSBOYU4KKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2Us
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2ln
bmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRh
cmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwg
dGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0
aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAg
IC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBp
bnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdl
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhh
bmRsZSBjbG9iYmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOwor
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0
YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cg
cGF0aDoKQEAgLTI4OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTks
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBK
dW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICsz
ODMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZh
aWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEw
ICs0NTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AK
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3
ICs0NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAg
ICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4K
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQo
b3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9
IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxs
IHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBC
aWdJbnQKICAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2
ICs3OTcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIu
Z3ByKCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBA
IC05MDEsMTYgKzkyNCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3Ry
dWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBl
bWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3Vi
bGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+
KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1p
dE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnBy
KCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3Vi
SUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xv
dzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yk9wdGltaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0
LDEzICsyNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93
Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
OwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29w
X2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0Pihj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9
CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
b25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNs
b3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JP
cGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nh
c2UpOwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwpAQCAtNTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93
Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsx
NjYsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdp
c3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9
IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRl
Y29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpA
QCAtMjA2LDI3ICsxODcsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93
Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNl
cy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29k
ZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5z
YXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5s
YXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRz
dCA9IGRzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlz
dCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1
bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHMuYXBwZW5kKGp1bXApOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAg
SnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBw
eS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0
ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5
LDExICsyOTksMTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rhbgog
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
U3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5s
ZW5ndGgoKSA9PSAxOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkK
IHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lz
dGVySUQgdmFsdWUgPSByZWdUMDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJl
Z2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKICNlbmRpZgpAQCAtMzM4LDExICszMjcsMTEgQEAg
aW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVnKQogewogICAgIGlmICgh
c2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvciht
ZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpA
QCAtMzkzLDExICszODIsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRD
b25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9y
KGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4
ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
Q3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9t
b3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBj
b25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBp
ZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAg
LTkwLDMyICsxMDEsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1f
dm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxs
b2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7Cisg
ICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJl
ZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVGVtcDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0
VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdU
MTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2Nh
dG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3Rh
bnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVz
dWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHBy
b3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyNSwyMyArMTU3LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0
cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUu
bV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0
YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29u
c3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAg
ICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAg
IGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9
IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFu
Y2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVj
dG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7Cisg
ICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0lu
c3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAg
SnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5j
ZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9u
UHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAK
ICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5j
dGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3Rh
bmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIxMCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAg
ICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEg
Y2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5z
dGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJ
bnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1Qw
LCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBw
cm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9u
YWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVt
cDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1w
IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRl
bXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsK
KyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9
IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVU
ZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNl
KCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAg
fQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisg
ICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2Ny
YXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwor
ICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAg
ICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRo
IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlz
IGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAg
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
ICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAg
ICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5z
dGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VH
UFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpA
QCAtMTk5LDExICszMTEsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5z
dHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTIxMSwyOCArMzQxLDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVv
ZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAg
ICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVl
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAg
ICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwg
PSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEs
MTMgKzQxNSwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBvdGhlciBoZXJlPworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0yNTUsMTIgKzQ1MCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNv
bnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
c0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFu
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgs
MTEgKzQ4MSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBudW1iZXIgaGVyZSBpZiBw
cm9maWxpbmcgc2F5cyBzbz8KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQz
MikKQEAgLTI4MiwyMSArNTEyLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJ
ZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRH
UFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1
NzgsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9
IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2MjcsNjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0
ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWws
IEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0zNTUsNyArNjkyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
Ynl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1
cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzExLDQxIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0
ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
T2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYg
KGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzU0LDIwMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFu
Y2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5n
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24g
eyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFt
ZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BS
ID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
d2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVj
dHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93Lgor
ICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYg
dGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUK
LSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3Ig
MSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGlu
dmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBp
biwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0
aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93
IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3Bl
Y3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwg
d2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9u
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRp
b24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1v
cmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
Y29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVt
cCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7
ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBz
Y3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
IGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlv
biA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ0MCw0NiArOTU5LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAg
ICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7
CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0g
ICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihz
cmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRl
c0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNl
cyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0g
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSks
IHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Cisg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ4OCwxMCArMTA5MCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAg
ICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEw
ICsxMTE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTQ5LDMwNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNp
YWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNy
YykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2Vs
bCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9o
YXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
ICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVj
aWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQo
bV91c2VMT0wpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3Nh
bWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2Vs
bE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qocmhz
KSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7Cisg
ICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUs
IGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
T09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZh
bHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKG1fdXNlTE9M
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6
OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1
dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBl
KGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAg
ICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiks
IHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBz
cGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBH
UFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
aHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJl
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VM
T0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQg
SklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgamVxSW1wbDxPcEplcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwor
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0K
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKKwogdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93
PigpOwpAQCAtNTg5LDc0ICsxNDYzLDE1MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEo
Y29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3Vi
bGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBl
KGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihp
c0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91
YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0Uo
QklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScg
dG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQp
OwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBD
ZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToK
LSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxl
bWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUg
YnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlm
IHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBp
cyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQg
d2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8v
IElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25s
eSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwot
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdU
NSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBK
dW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdU
MCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0
byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwot
ICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3Mg
dGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYg
Ym90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwor
ICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3Mg
eyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmlj
dEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAg
ICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0
KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAg
aWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93
UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8K
KworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8
IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQg
dGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9i
cmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEg
bnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAor
ICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAg
ICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3Zl
T3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBC
aWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6
IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJp
Z0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJp
bmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3Zl
ciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8g
SnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAg
bW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3
aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUu
CisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRo
aXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5s
aW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTYyNCwxMzUg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVn
VDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAg
ICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNF
cSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChy
aHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVP
YmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgLy8g
T09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUg
Y2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BS
KSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQz
MikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAg
ICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8g
dGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBm
cmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3
aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVs
eSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAv
LyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5n
IDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRz
IGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMg
YWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUo
cmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVn
VDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBv
cjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFs
LCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIp
OwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxl
c3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGgg
aWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVT
RShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAn
dHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVm
dCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMg
Q2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAg
ICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQg
aW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNp
bmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWly
ZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRo
ZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8
NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQg
MAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3Vi
bGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Cisg
ICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJl
Z1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKwor
ICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Cisg
ICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAg
ICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVT
RShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVy
IHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUu
Ci0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAg
ICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRv
dWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxp
bmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdo
dE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwg
cmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc2NSwyMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1Qw
OworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJl
cihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVt
ZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBp
c05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0
ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAgYXV0
byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7Cisj
ZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkp
OworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNy
YyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmlu
ZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmco
cmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBp
bnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3Qo
cmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAv
LyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSAr
MjAzMywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29w
ZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3Mg
YSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29w
ZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdU
MCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0
KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjA2NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZt
KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZt
KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJl
Z1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsyMDg5LDE3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVz
LmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVD
VElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIxMTMsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVm
YXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgbG9hZDMyKGNvZGVCbG9j
aygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVn
Z2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVi
dWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9vbCBp
c0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29tcGFy
ZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMp
KSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2
NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
CisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2Ny
YXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIEp1
bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
aXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFy
ZU9wLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAK
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFy
ZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9v
cF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
ZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4o
Y3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVy
IHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAg
ICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3Vy
IGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAg
ICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxl
ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVl
KGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKG1fdXNl
TE9MKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAg
fQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI2
NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJl
Z1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3By
KCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwg
c2NvcGUpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBz
Y29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA0NSwxMyArMjI4OCw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1Ro
aXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2Fj
aGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ny
Y0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3Ny
Y0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVk
U3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0
R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAg
ICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVw
ZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNl
IGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYg
KHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJl
SUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBz
aW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAg
ICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRH
UFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAg
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlz
IHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpT
VmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5
cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyMzY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0
YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzIzNzksMzEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVy
SUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcg
PSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJU
ZW1wNDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNl
KCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVS
ZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVt
cDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAg
IGlmIChtX3VzZUxPTCkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOwor
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVP
clJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSkpOwpAQCAtMTA4Niw2NCArMjQyMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6Pigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19
Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlm
ICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5w
dXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBm
b3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVt
cCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTEx
NjQsNiArMjQ2OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUK
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5F
YXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BT
CiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRl
cihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0
byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChP
cHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4Nywx
MyArMjQ5MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAg
ICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNs
b3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0
aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYs
MTEgKzI1MDksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgog
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAg
ICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtz
IGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3Ry
dWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywx
MCArMjUzNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NDUsMTggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhw
ID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJl
Z0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZh
bHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjU2Niw0MiBA
QCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUp
OworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsK
KyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09
IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAg
IGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2MzAs
NDUgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2Rl
Lm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwg
ZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNl
IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVu
Y19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAg
ICB9CiB9CiAKQEAgLTE0ODEsMTAgKzI4MzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAo
KSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbElu
ZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZh
bEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93
UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxv
dyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4
ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01
ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5y
ZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjIgKzc4LDE4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKIAogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4
OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwg
cmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIwLDE2ICsxMTYs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwpAQCAtMzM0LDcgKzMyNyw3IEBAIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArMzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBF
Q01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9
IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVj
b2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwpAQCAtMzUwLDEzICszNDMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0g
ICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAg
ICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
ICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTQ0NCwxMCArNDM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNDkz
LDEwICs0ODMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC01MzcsMTAgKzUyNSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTc2
LDEwICs1NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGly
ZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY0NiwxMCArNjMwLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjYzLDEwICs2NDUsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzEyLDEwICs2OTIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
VlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIApA
QCAtNzQ5LDEwICs3MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC0xMDMwLDEwICsxMDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTE4NiwxMCAr
MTE2MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIHsKQEAgLTEzNzksNiArMTM1MSw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklU
OjplbWl0UHV0QnlWYWxXaXQKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJl
Z2lzdGVyIG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogYXVk
aXQgYWxsIGNhbGxzIHRvIGVtaXRXcml0ZUJhcnJpZXIgZm9yIExPTCBzaW5jZSB0aGlzIG1heSBt
YWtlIGNhbGxzIHRvIEMKICAgICBBU1NFUlQobW9kZSA9PSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJy
aWVyIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSk7CiAgICAgZW1pdFdyaXRlQmFycmllcihv
d25lciwgVmlydHVhbFJlZ2lzdGVyKCksIG1vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nywx
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0
ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1f
bWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0
dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2Vt
Ymxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQog
ICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlz
IG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwo
KTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9i
eXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAg
ICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFz
c2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQy
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9i
YWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3Rv
bVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVu
dW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412484</attachid>
            <date>2020-10-27 17:30:02 -0700</date>
            <delta_ts>2020-11-02 17:07:34 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>277801</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cg
cGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAg
ICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNjg4LDEzIEBAIHZvaWQg
SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1
bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAg
IHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1
bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNr
T3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiAr
MTk3OSw2MTEgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVy
biB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxG
VExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVt
cCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhl
IGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRo
aXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJl
Z2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVn
aXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAg
ICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZl
cy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMo
KQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9j
YXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRo
ZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0
aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIGlmIChtX3Nsb3dDYXNl
cy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29k
ZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihH
UFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFs
dWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2Nh
dGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBk
dXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQ
UnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQorewor
ICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJv
dGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxs
b2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUocmVn
KS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
IGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChv
cGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUocmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKwor
fQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2Fs
bGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8g
ZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0
KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQor
CitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMg
Y291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBw
ZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYg
cmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgIH07CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVk
KHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5m
aXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAg
ICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
YWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5ib3hEb3VibGUo
c2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQorewor
ICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihn
cHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVn
VmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9
OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFk
ZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAg
YXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3Bl
Y0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShn
cHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyBy
ZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tD
b3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAg
ICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYg
aml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRl
bXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9q
aXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQor
ICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQorewor
ICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9j
YXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9
CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnBy
ICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6
SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFu
ZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BS
UmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
Ly8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlw
ZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJy
YW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5k
LCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJh
bmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6
IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVy
YW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxs
T3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwciku
b3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKwor
ICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbCht
X2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxs
T3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5k
Ojp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNw
ZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5
cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitK
SVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorewor
ICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9w
ZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlm
IHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNz
aWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIp
OworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVy
YW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFu
ZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAg
ICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAg
ICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOwor
ICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9q
aXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVn
IGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayht
X2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91
YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUp
OworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOwor
CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1f
ZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
Cit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7Cisg
ICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElm
TmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAg
IGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXND
ZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lk
IEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFs
dWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1
bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAg
aWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhl
cihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmpl
Y3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlz
T2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAg
ICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VC
aWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0g
ZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8
ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsK
KyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBT
cGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJp
Z0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsK
KyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNl
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5o
IgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgor
I2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Q
cm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29k
ZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUlu
ZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAg
ICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBW
aXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dD
YXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBqdW1wczsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUg
YSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAg
ICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0
b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBz
dGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVj
b3JkIHsKQEAgLTE4Myw2ICsxOTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19B
TElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJh
c2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhD
YWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMjAx
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1
bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWRE
ZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZz
ZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhl
IFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQs
IGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0K
ICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNjgsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3Bp
bGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNw
aWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJ
bXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAg
ICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0
aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAwLDkgKzMxOSwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAg
ICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9p
ZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBS
ZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNl
KFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAo
SnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzEwLDcgKzMz
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC0zMjcsNyArMzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9v
bCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTMzNyw3ICszNTgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBF
cSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlw
ZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1v
ZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRG
aWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC0zNTAsOCArMzcxLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZh
bHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZv
cgogICAgICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsKKyAgICAgICAgdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwg
dm9pZD4KQEAgLTQ3NSw4ICs0OTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVs
YXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUwNSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9w
ZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNp
emUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2
b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01
MTIsOSArNTQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMsNjkgKzY3Myw2OSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9h
cmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190
cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24p
OworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9u
KiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJv
b2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwpAQCAtNzI4LDggKzc1OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNz
T2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAg
ICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAg
dm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3Rlcik7CkBAIC03NDYsMzQgKzc3NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBS
ZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKLSAgICAgICAgSnVtcCBn
ZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAg
ICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVy
LT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0Zv
ckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAg
ICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
cyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2Rl
SW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8g
T09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAg
ICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5
MzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
KCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJ
bnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygp
OwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApA
QCAtOTM1LDYgKzk0NiwyMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQ
cm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJS
ZWcpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BS
UmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAg
ICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAg
ICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
OworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUg
YW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7
CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
flZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9
CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFs
bG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAg
ICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVn
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJz
W3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJl
ZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVy
c1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyBy
ZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3Rl
cnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5k
ID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBm
cHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVy
YW5kID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc090aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1i
b2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGlu
ZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52
YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lk
IHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmly
dHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAg
dm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOwor
ICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYp
OworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwog
ICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2Fs
bFJlY29yZD4gbV9jYWxsczsKQEAgLTk1Myw3ICsxMTgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Ns
b3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsK
ICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsx
MjIwLDc2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBC
eXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1
Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUg
Ym94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRo
ZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAg
dm9pZCBtZXJnZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3By
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikK
KyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQg
eyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAg
ICAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAg
ICAgICAgICB8fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAg
ICAgIHx8IGlzQWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAg
ICAgICAqdGhpcyA9IHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBz
dHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7Cisg
ICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1
Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnPiBvcGVyYW5k
VG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAg
ICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IHByb3ZlblR5cGVzOworCisgICAgICAg
ICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJh
bmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9S
ZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFT
U0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRp
b25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lz
dGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0
ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFw
aD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7
IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9w
cmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3Vy
cmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOwor
CisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAg
ICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAg
Ym9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0
SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDgyICs0Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6
IHZlcmlmeSBOYU4KKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2Us
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2ln
bmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRh
cmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwg
dGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0
aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAg
IC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBp
bnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdl
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhh
bmRsZSBjbG9iYmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOwor
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0
YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cg
cGF0aDoKQEAgLTI4OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTks
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBK
dW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICsz
ODMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZh
aWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEw
ICs0NTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AK
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3
ICs0NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAg
ICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4K
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQo
b3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9
IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxs
IHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBC
aWdJbnQKICAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2
ICs3OTcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIu
Z3ByKCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBA
IC05MDEsMTYgKzkyNCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3Ry
dWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBl
bWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3Vi
bGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+
KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1p
dE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnBy
KCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3Vi
SUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xv
dzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yk9wdGltaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0
LDEzICsyNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93
Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
OwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29w
X2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0Pihj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9
CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
b25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNs
b3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JP
cGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nh
c2UpOwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwpAQCAtNTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93
Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsx
NjYsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdp
c3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9
IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRl
Y29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpA
QCAtMjA2LDI3ICsxODcsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93
Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNl
cy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29k
ZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5z
YXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5s
YXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRz
dCA9IGRzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlz
dCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1
bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHMuYXBwZW5kKGp1bXApOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAg
SnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBw
eS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0
ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5
LDExICsyOTksMTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rhbgog
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
U3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5s
ZW5ndGgoKSA9PSAxOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkK
IHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lz
dGVySUQgdmFsdWUgPSByZWdUMDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJl
Z2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKICNlbmRpZgpAQCAtMzM4LDExICszMjcsMTEgQEAg
aW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVnKQogewogICAgIGlmICgh
c2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvciht
ZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpA
QCAtMzkzLDExICszODIsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRD
b25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9y
KGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4
ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
Q3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9t
b3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBj
b25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBp
ZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAg
LTkwLDMyICsxMDEsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1f
dm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxs
b2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7Cisg
ICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJl
ZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVGVtcDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0
VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdU
MTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2Nh
dG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3Rh
bnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVz
dWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHBy
b3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyNSwyMyArMTU3LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0
cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUu
bV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0
YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29u
c3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAg
ICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAg
IGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9
IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFu
Y2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVj
dG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7Cisg
ICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0lu
c3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAg
SnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5j
ZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9u
UHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAK
ICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5j
dGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3Rh
bmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIxMCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAg
ICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEg
Y2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5z
dGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJ
bnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1Qw
LCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBw
cm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9u
YWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVt
cDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1w
IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRl
bXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsK
KyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9
IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVU
ZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNl
KCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAg
fQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisg
ICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2Ny
YXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwor
ICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAg
ICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRo
IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlz
IGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAg
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
ICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAg
ICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5z
dGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VH
UFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpA
QCAtMTk5LDExICszMTEsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5z
dHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTIxMSwyOCArMzQxLDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVv
ZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAg
ICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVl
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAg
ICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwg
PSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEs
MTMgKzQxNSwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBvdGhlciBoZXJlPworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0yNTUsMTIgKzQ1MCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNv
bnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
c0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFu
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgs
MTEgKzQ4MSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBudW1iZXIgaGVyZSBpZiBw
cm9maWxpbmcgc2F5cyBzbz8KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQz
MikKQEAgLTI4MiwyMSArNTEyLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJ
ZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRH
UFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1
NzgsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9
IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2MjcsNjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0
ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWws
IEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0zNTUsNyArNjkyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
Ynl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1
cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzExLDQxIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0
ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
T2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYg
KGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzU0LDIwMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFu
Y2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5n
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24g
eyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFt
ZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BS
ID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
d2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVj
dHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93Lgor
ICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYg
dGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUK
LSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3Ig
MSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGlu
dmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBp
biwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0
aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93
IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3Bl
Y3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwg
d2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9u
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRp
b24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1v
cmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
Y29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVt
cCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7
ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBz
Y3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
IGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlv
biA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ0MCw0NiArOTU5LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAg
ICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7
CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0g
ICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihz
cmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRl
c0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNl
cyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0g
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSks
IHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Cisg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ4OCwxMCArMTA5MCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAg
ICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEw
ICsxMTE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTQ5LDMwNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNp
YWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNy
YykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2Vs
bCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9o
YXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
ICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVj
aWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQo
bV91c2VMT0wpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3Nh
bWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2Vs
bE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qocmhz
KSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7Cisg
ICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUs
IGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
T09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZh
bHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKG1fdXNlTE9M
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6
OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1
dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBl
KGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAg
ICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiks
IHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBz
cGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBH
UFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
aHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJl
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VM
T0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQg
SklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgamVxSW1wbDxPcEplcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwor
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0K
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKKwogdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93
PigpOwpAQCAtNTg5LDc0ICsxNDYzLDE1MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEo
Y29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3Vi
bGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBl
KGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihp
c0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91
YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0Uo
QklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScg
dG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQp
OwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBD
ZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToK
LSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxl
bWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUg
YnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlm
IHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBp
cyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQg
d2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8v
IElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25s
eSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwot
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdU
NSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBK
dW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdU
MCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0
byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwot
ICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3Mg
dGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYg
Ym90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwor
ICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3Mg
eyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmlj
dEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAg
ICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0
KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAg
aWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93
UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8K
KworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8
IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQg
dGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9i
cmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEg
bnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAor
ICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAg
ICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3Zl
T3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBC
aWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6
IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJp
Z0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJp
bmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3Zl
ciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8g
SnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAg
bW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3
aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUu
CisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRo
aXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5s
aW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTYyNCwxMzUg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVn
VDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAg
ICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNF
cSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChy
aHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVP
YmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgLy8g
T09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUg
Y2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BS
KSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQz
MikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAg
ICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8g
dGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBm
cmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3
aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVs
eSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAv
LyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5n
IDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRz
IGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMg
YWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUo
cmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVn
VDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBv
cjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFs
LCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIp
OwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxl
c3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGgg
aWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVT
RShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAn
dHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVm
dCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMg
Q2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAg
ICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQg
aW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNp
bmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWly
ZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRo
ZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8
NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQg
MAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3Vi
bGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Cisg
ICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJl
Z1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKwor
ICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Cisg
ICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAg
ICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVT
RShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVy
IHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUu
Ci0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAg
ICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRv
dWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxp
bmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdo
dE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwg
cmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc2NSwyMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1Qw
OworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJl
cihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVt
ZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBp
c05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0
ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAgYXV0
byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7Cisj
ZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkp
OworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNy
YyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmlu
ZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmco
cmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBp
bnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3Qo
cmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAv
LyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSAr
MjAzMywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29w
ZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3Mg
YSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29w
ZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdU
MCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0
KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjA2NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZt
KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZt
KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJl
Z1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsyMDg5LDE3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVz
LmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVD
VElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIxMTMsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVm
YXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgbG9hZDMyKGNvZGVCbG9j
aygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVn
Z2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVi
dWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9vbCBp
c0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29tcGFy
ZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMp
KSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2
NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
CisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2Ny
YXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIEp1
bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
aXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFy
ZU9wLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAK
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFy
ZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9v
cF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
ZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4o
Y3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVy
IHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAg
ICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3Vy
IGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAg
ICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxl
ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVl
KGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKG1fdXNl
TE9MKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAg
fQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI2
NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJl
Z1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAg
ICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3By
KCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwg
c2NvcGUpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBz
Y29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA0NSwxMyArMjI4OCw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1Ro
aXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2Fj
aGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ny
Y0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3Ny
Y0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVk
U3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0
R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAg
ICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVw
ZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNl
IGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYg
KHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJl
SUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBz
aW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAg
ICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRH
UFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAg
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlz
IHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpT
VmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5
cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyMzY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0
YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzIzNzksMzEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVy
SUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcg
PSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJU
ZW1wNDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNl
KCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVS
ZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVt
cDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAg
IGlmIChtX3VzZUxPTCkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOwor
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVP
clJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSkpOwpAQCAtMTA4Niw2NCArMjQyMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6Pigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19
Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlm
ICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5w
dXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBm
b3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVt
cCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTEx
NjQsNiArMjQ2OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUK
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5F
YXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BT
CiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRl
cihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0
byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChP
cHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4Nywx
MyArMjQ5MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAg
ICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNs
b3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0
aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYs
MTEgKzI1MDksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgog
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAg
ICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtz
IGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3Ry
dWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywx
MCArMjUzNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NDUsMTggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhw
ID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJl
Z0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZh
bHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjU2Niw0MiBA
QCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUp
OworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsK
KyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09
IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAg
IGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2MzAs
NDUgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2Rl
Lm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwg
ZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNl
IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVu
Y19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAg
ICB9CiB9CiAKQEAgLTE0ODEsMTAgKzI4MzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAo
KSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbElu
ZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZh
bEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93
UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxv
dyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4
ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01
ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5y
ZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjIgKzc4LDE4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKIAogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4
OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwg
cmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIwLDE2ICsxMTYs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwpAQCAtMzM0LDcgKzMyNyw3IEBAIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArMzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBF
Q01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9
IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVj
b2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwpAQCAtMzUwLDEzICszNDMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0g
ICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAg
ICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
ICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTQ0NCwxMCArNDM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNDkz
LDEwICs0ODMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC01MzcsMTAgKzUyNSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTc2
LDEwICs1NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGly
ZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY0NiwxMCArNjMwLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjYzLDEwICs2NDUsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzEyLDEwICs2OTIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
VlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIApA
QCAtNzQ5LDEwICs3MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC0xMDMwLDEwICsxMDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTE4NiwxMCAr
MTE2MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIHsKQEAgLTEzNzksNiArMTM1MSw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklU
OjplbWl0UHV0QnlWYWxXaXQKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJl
Z2lzdGVyIG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogYXVk
aXQgYWxsIGNhbGxzIHRvIGVtaXRXcml0ZUJhcnJpZXIgZm9yIExPTCBzaW5jZSB0aGlzIG1heSBt
YWtlIGNhbGxzIHRvIEMKICAgICBBU1NFUlQobW9kZSA9PSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJy
aWVyIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSk7CiAgICAgZW1pdFdyaXRlQmFycmllcihv
d25lciwgVmlydHVhbFJlZ2lzdGVyKCksIG1vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nywx
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0
ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1f
bWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0
dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2Vt
Ymxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQog
ICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlz
IG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwo
KTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9i
eXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAg
ICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFz
c2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQy
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9i
YWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3Rv
bVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVu
dW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412990</attachid>
            <date>2020-11-02 17:07:34 -0800</date>
            <delta_ts>2020-11-09 13:39:32 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>283898</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9l
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVk
QXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0
dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Vt
cHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZp
bmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNV
bmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
ZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
biA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8
IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmls
ZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3Ry
aW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50
ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVy
X2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6
CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAg
ICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAg
IGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9q
bXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9w
X2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5l
ZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9w
X2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2Fz
ZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2Vx
OgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBj
YXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGgg
PSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhl
YWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9m
aWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRj
aFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRy
eUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0g
MCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzog
QXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGht
J3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5
dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8K
KyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3Mg
cmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5k
ZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2Nr
LmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIC8vIE9PUFM6IGFkZCBuZXcgb3B0
aW9uLgorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNzYsNiArOTA4LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpIHx8IFN0cmluZyht
X2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgpKSA9PSAiZm9vIjsKIH0KIAogSklUOjp+
SklUKCkKQEAgLTE0MCw2ICs5NzMsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1l
OiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgp
IHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9
IFwKQEAgLTE1NiwyNiArOTkwLDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1l
OiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKG1fdXNlTE9MICYmIHNsb3dDYXNlLnJl
c3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNH
UFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlk
KCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1Bh
dGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1
Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMx
LDcgKzEwNzEsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9P
UFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRl
eF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RG
TW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50
QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vz
c29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVk
ZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1
bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBh
bGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpA
QCAtNDc3LDYgKzEzODMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNl
cy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQyNCwxNCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVm
Q291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dD
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5
dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1f
c2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2Rl
SW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ0LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMu
YmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAK
KyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cg
cGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAg
ICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNjg4LDEzIEBAIHZvaWQg
SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1
bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAg
IHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1
bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNr
T3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiAr
MTk3OSw2MTEgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVy
biB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxG
VExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVt
cCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhl
IGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRo
aXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJl
Z2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVn
aXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAg
ICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZl
cy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMo
KQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9j
YXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRo
ZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0
aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0
ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxs
b3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
K30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIGlmIChtX3Nsb3dDYXNl
cy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29k
ZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihH
UFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFs
dWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2Nh
dGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBk
dXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQ
UnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQorewor
ICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJv
dGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxs
b2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUocmVn
KS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
IGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChv
cGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUocmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKwor
fQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2Fs
bGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8g
ZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0
KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQor
CitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMg
Y291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBw
ZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYg
cmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgIH07CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVk
KHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5m
aXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAg
ICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
YWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5ib3hEb3VibGUo
c2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQorewor
ICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihn
cHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVn
VmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9
OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFk
ZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAg
YXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3Bl
Y0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShn
cHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyBy
ZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tD
b3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAg
ICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYg
aml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRl
bXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9q
aXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQor
ICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQorewor
ICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9j
YXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9
CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnBy
ICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6
SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFu
ZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BS
UmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
Ly8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlw
ZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJy
YW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5k
LCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJh
bmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6
IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVy
YW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxs
T3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwciku
b3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKwor
ICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbCht
X2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxs
T3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5k
Ojp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNw
ZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5
cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitK
SVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorewor
ICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9w
ZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcgRlBSIGlm
IHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVyYW5kLgor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNz
aWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIp
OworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVy
YW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFu
ZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAg
ICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAg
ICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOwor
ICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9q
aXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVn
IGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayht
X2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91
YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUp
OworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOwor
CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1f
ZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
Cit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7Cisg
ICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElm
TmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAg
IGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXND
ZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lk
IEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFs
dWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1
bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAg
aWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhl
cihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmpl
Y3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlz
T2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAg
ICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VC
aWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0g
ZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8
ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsK
KyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBT
cGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJp
Z0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsK
KyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNl
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5o
IgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgor
I2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Q
cm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29k
ZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUlu
ZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAg
ICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBW
aXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dD
YXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBqdW1wczsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUg
YSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAg
ICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0
b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBz
dGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVj
b3JkIHsKQEAgLTE4Myw2ICsxOTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19B
TElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJh
c2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhD
YWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMjAx
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1
bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWRE
ZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZz
ZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhl
IFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQs
IGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0K
ICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNjgsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3Bp
bGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNw
aWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJ
bXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAg
ICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0
aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAwLDkgKzMxOSwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAg
ICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9p
ZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBS
ZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNl
KFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAo
SnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzEwLDcgKzMz
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC0zMjcsNyArMzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9v
bCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTMzNyw3ICszNTgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBF
cSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlw
ZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1v
ZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRG
aWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC0zNTAsOCArMzcxLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZh
bHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZv
cgogICAgICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsKKyAgICAgICAgdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwg
dm9pZD4KQEAgLTQ3NSw4ICs0OTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVs
YXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUwNSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9w
ZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNp
emUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2
b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01
MTIsOSArNTQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMsNjkgKzY3Myw2OSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9h
cmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190
cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24p
OworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9u
KiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJv
b2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwpAQCAtNzI4LDggKzc1OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNz
T2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAg
ICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAg
dm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3Rlcik7CkBAIC03NDYsMzQgKzc3NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBS
ZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKLSAgICAgICAgSnVtcCBn
ZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAg
ICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVy
LT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0Zv
ckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAg
ICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
cyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2Rl
SW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8g
T09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAg
ICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5
MzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
KCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJ
bnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygp
OwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApA
QCAtOTM1LDYgKzk0NiwyMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQ
cm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJS
ZWcpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BS
UmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAg
ICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAg
ICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
OworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUg
YW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7
CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
flZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9
CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFs
bG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAg
ICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVn
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJz
W3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJl
ZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVy
c1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyBy
ZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3Rl
cnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5k
ID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBm
cHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVy
YW5kID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc090aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1i
b2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGlu
ZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52
YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lk
IHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmly
dHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAg
dm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOwor
ICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYp
OworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwog
ICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2Fs
bFJlY29yZD4gbV9jYWxsczsKQEAgLTk1Myw3ICsxMTgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Ns
b3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsK
ICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsx
MjIwLDc2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBC
eXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1
Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUg
Ym94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRo
ZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAg
dm9pZCBtZXJnZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3By
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikK
KyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQg
eyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAg
ICAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAg
ICAgICAgICB8fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAg
ICAgIHx8IGlzQWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAg
ICAgICAqdGhpcyA9IHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBz
dHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7Cisg
ICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1
Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnPiBvcGVyYW5k
VG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAg
ICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IHByb3ZlblR5cGVzOworCisgICAgICAg
ICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJh
bmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9S
ZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFT
U0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRp
b25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lz
dGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0
ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFw
aD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7
IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9w
cmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3Vy
cmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOwor
CisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAg
ICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAg
Ym9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0
SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDgyICs0Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6
IHZlcmlmeSBOYU4KKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2Us
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2ln
bmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRh
cmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwg
dGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0
aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAg
IC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBp
bnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdl
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhh
bmRsZSBjbG9iYmVyaW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOwor
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0
YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cg
cGF0aDoKQEAgLTI4OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTks
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBK
dW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICsz
ODMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZh
aWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEw
ICs0NTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AK
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3
ICs0NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAg
ICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4K
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQo
b3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9
IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxs
IHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBC
aWdJbnQKICAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2
ICs3OTcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIu
Z3ByKCkpOworICAgICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBA
IC05MDEsMTYgKzkyNCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3Ry
dWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBl
bWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3Vi
bGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+
KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1p
dE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnBy
KCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3Vi
SUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xv
dzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yk9wdGltaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0
LDEzICsyNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93
Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
OwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29w
X2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0Pihj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9
CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
b25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNs
b3dDYXNlcyhzbG93Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JP
cGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nh
c2UpOwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwpAQCAtNTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93
Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0
Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAvLyBPT1BTOiByZWdpc3RlciBhbGxv
Y2F0ZSB0aGlzIGZvciBMT0wuCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKICNlbHNlCiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCBy
ZXR1cm5WYWx1ZUdQUik7CkBAIC0xNjYsMjUgKzE2Nyw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUlu
ZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAg
d2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5k
ZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRv
ID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4OCwzNiBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+
dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShK
dW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJl
ZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJ
bmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0
KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0
KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dCwgZHN0KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0
IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQg
dGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChT
bG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1
bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBl
bmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1w
LCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMCwxMCBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmls
ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
IHZhbHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwog
I2VuZGlmCkBAIC0zMzgsMTEgKzMyOCwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRh
dGEsIEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvciht
ZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwg
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4Myw2IEBAIEFMV0FZU19J
TkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZh
bHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYs
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0
eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYg
KzUxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIC8v
IE9PUFM6IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0
ZXIgYWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShp
bnB1dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENv
bmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVn
ID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdp
c3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQ
UlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2Nh
dG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3Jh
dGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7
CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVn
VDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNl
IHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9
IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2Fz
ZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAg
ICB9CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5t
X2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBT
cGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsK
ICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxP
TCkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBj
b25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5z
dGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BT
OiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25z
dHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7
CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2Uo
KnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRo
aXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAg
ICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRH
UFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5z
dGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0lu
c3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1w
IGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBj
dXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0
YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rp
b24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDAp
OworICAgIGlmICghbV91c2VMT0wpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29u
c3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0
b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3Qg
YSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKElt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0
cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEwLDkz
IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMg
KGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4K
LSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdp
dGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8g
YXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRo
ZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwg
Ly8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7
IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2
YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2Vs
bDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0
VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJl
ZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRl
bXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJU
ZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBz
aG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5l
bXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2Uo
KnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5n
cHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOwor
ICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAg
ICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBw
cm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1w
LmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
dmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdl
bmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3By
KCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAg
ICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5k
KGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0
aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VW
YWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVu
IHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdU
MSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFz
ZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZv
ciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAg
ICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAg
ICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAg
ICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3Rh
bmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJv
dG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworCisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwog
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBp
c0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDAp
OworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAm
IFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisK
KyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUg
PSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChO
b25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQ
UiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsK
KworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEp
OworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAg
ICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3Vs
YXRlIG90aGVyIGhlcmU/CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBAIHZv
aWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAg
dGVzdDY0KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKKyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxO
dW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5
YmUgc3BlY3VsYXRlIG51bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBp
bnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAg
ICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50
MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAg
IGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAg
ICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlz
KTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25z
dCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAg
ICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90
Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMs
MTggKzYyNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKwor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAg
ICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAg
ICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJu
IHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAt
MzY5LDE1ICs3MTEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElu
cwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJ
bW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5
cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJ
bW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzg2LDUyICs3NTQsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShj
b25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3Bl
Y1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRT
cGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywg
dmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJh
bmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0
cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBh
dXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9u
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9
OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9m
dW5jdGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
Qm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Qz
MihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBp
bmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwg
ZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVy
dCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJv
b2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhl
IGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyBy
ZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwg
d2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDAp
OworCisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFs
dWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAg
ICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBm
b3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBp
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sg
aW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
Z1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgR1BSUmVnIHZhbHVl
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSB0cnVlOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29u
ZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwg
dmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7
ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAg
ICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFH
UFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNj
cmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNo
MS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnBy
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2Ny
YXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4o
KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkg
eworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3Jl
IGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNv
bmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
ZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
SWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2Ny
YXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
biwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NTksMTI5IEBAIHZv
aWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAg
ICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisK
KyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8g
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQp
OworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0g
dW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAg
ICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
CisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gy
LmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7
CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVt
cCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAg
IC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMDkwLDI2IEBAIHZv
aWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAg
ICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMTgsMjYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC01MTUsNjUgKzExNDksMzA1IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNv
bnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNw
ZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZt
ZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0
ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAg
ICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVChtX3VzZUxPTCk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxo
cyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5t
X3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29u
c3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1
dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBh
cmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3Jk
ZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVu
VHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihp
c0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAg
Y29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAg
ICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxo
c1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAg
ICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0
aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElm
Tm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBk
c3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVu
YW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEplcT4oKTsKKyAgICBBU1NFUlQobV91c2VMT0wpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNF
cSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91Ymxl
RXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICgh
dmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgewor
ICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsK
KyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIElu
dDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRh
cmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQ
UlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxo
c0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAg
ICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2Rl
Lm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQor
fQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAg
R1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAg
fQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29s
ZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAg
ZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
fQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BS
ID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAg
IHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcmVzdG9y
ZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdl
dCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdU
MTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBpZiAobV91c2VMT0wpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0NjMsMTUwIEBA
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICgh
dmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDog
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQ
UiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5m
cHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAg
ICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgs
IHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxl
ZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsK
LSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAg
Z290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAg
ICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8K
LQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0
IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5j
aElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIElu
dDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZp
bmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFs
bCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZp
bmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIp
OwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEp
LCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25a
ZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93
IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMp
LgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNv
bWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5
IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBi
b3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1Qx
KTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRv
IChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAg
ICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAg
ICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlz
IENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQg
aW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNp
bmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWly
ZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRo
ZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8
NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQg
MAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3Vi
bGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Cisg
ICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJl
Z1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBK
dW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBh
IGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdU
MSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUg
cHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0
aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1
LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNs
b3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91Ymxl
LiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4g
dGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJ
ZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwot
ICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmln
aHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMg
KHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJl
Z1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmly
c3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QK
KyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFu
Y2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9
IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5v
dEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNjc0LDY4ICsxNjI0LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0
RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlz
RXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBE
b3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAg
ICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShy
aHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAo
anVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAg
ICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhl
cmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsK
KyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQ
UiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5m
cHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09Q
UzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsK
KworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3
ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYg
KGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxs
IHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRh
a2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQg
b2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNo
SWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNW
YWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92
ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBh
IG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQK
LSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQo
cmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVt
cCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJl
RXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBz
bG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0lu
dHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRv
IHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBv
bmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhz
LCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1
YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBh
IGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAg
ICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdv
dG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3Rv
IHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAg
ICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICov
CisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0
IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIv
YnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVl
IGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZs
b3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBh
IG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQK
KyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisg
ICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVn
VDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwg
cmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAg
ICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92
ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFu
Y2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRh
cmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNs
b3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50
cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBj
b3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQz
Miwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMp
OworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xv
dyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwg
cmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUu
IEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0
ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElm
SW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0g
ICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihy
ZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdo
dE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpT
dHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwg
dGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBj
ZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAg
ICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91Ymxl
LiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4g
dGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9
IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCks
IHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzY1
LDIxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29t
cGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1Qx
OworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihz
bG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykg
JiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAo
c3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZS
ZWcpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Cisg
ICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVn
LCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVt
cCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0
aGlzKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0lu
dChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRo
aXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFu
Y2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgor
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBq
dW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhp
cyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3JjKSkgeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5
cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmpl
Y3Q7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAg
aWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAog
ICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDMzLDIzIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBj
dXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2Rl
Lm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkg
Jj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJh
bmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQ
UiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsy
MDY0LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxl
LT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsK
KyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtOTIyLDkgKzIwODksMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFi
bGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJs
ZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJp
bmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjEx
MywxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0
cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1
bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQ
UiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Rl
YnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZv
ckNhbGwoKTsKICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNz
KCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0
YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dl
clJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
cU51bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFO
dWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVh
bDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBh
cmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
CisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2Ny
YXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwor
CisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0
KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwot
ICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1t
ZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAg
IEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qy
KTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwor
ICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChj
b21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0
aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0g
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFy
ZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1l
ZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29t
cGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09Q
UzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVC
YXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24n
dCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMg
dG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcK
ICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAg
c2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBq
ID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsg
KytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChq
KTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2
YXJpYWJsZSkpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBwcm92ZW5UeXBl
KHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMjY0LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rp
b246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2Nv
cGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMjg4LDgwIEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVk
U3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBi
eXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwg
c3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7
IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYg
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3Jl
IGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlw
ZShzcmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0Nl
bGwpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAg
ICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5v
IG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7Cisg
ICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3Qp
OworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBz
cmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAg
aWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBp
ZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hl
YXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNE
c3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsK
LSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1Qx
KTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7
CisgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5
LDYgKzIzNjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxK
U0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBS
ZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcg
PSByZWdUNDsKQEAgLTEwNjgsNyArMjM3OSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVf
dGhpcyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0
OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBjYWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAz
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdw
clRlbXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOwor
ICAgICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVy
ZVJlZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5n
cHIoKTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNh
Y2hlZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBn
cHJUZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEZ1bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpT
RnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVk
SW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDIxLDMzIEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRy
ZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2Ny
YXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2Ny
YXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0g
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNF
bXB0eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBk
b2Vzbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2NCw2ICsyNDY4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6
aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFMKICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZt
KCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9h
ZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0
KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEzICsyNDkyLDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXph
dGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwog
CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVj
b2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwxMSArMjUwOSwxMCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRy
eS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNh
biBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShp
dGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsyNTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJz
b2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CiB9CiAKQEAgLTEyNDUsOCArMjU0NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhw
KGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganND
YXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0
OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdF
eHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CkBAIC0xMjU2LDIzICsyNTY2LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1v
bihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAg
ICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgc2NvcGUuZW1w
bGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUt
PmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2Uo
KnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIo
KTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghbV91c2VMT0wpCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vs
c2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZt
KCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29w
ZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAg
ICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0
b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwog
ICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjYzMCw0NSBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNF
eHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
c2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BS
ID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghbV91c2VMT0wp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVH
UFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5k
aWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHAp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNjk5LDE2
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
c1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdj
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVt
cDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUp
OworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNp
emUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzE3LDIyIEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5
dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9h
ZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdU
MSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgx
LDE1ICsyNzQ2LDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07
CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJh
c2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNl
bGwuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwt
PmdwcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIH0KIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOworICAgICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiAr
MjgwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUpCiB7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQz
Niw2ICsyODI5LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Blcgog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6CisgICAgc3BpbGxGb3JDYWxs
KCk7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0lu
ZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CkBAIC0xNDYxLDE1ICsyODU3LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGMKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdU
Mik7CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsK
LSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVt
cDsKIAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBl
ZEFycmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9y
QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBt
b2RlLCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRU
eXBlKTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2VzKTsKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4
NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAg
TGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUlu
ZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRI
b3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFk
VHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUs
OCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRl
eDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJ
bmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cg
aXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCAr
NTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2
LDggKzU3Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTYzMiw4ICs2MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTY3Myw4ICs2NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKQEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC03NjMsOCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29u
c3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtMTA0NCw4ICsxMDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZy
b21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVj
dGlvbik7CkBAIC0xMjAxLDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDIyICs3OCwxOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsK
LSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBw
cm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMCwxNiArMTE2LDEz
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKQEAgLTMzNCw3ICszMjcsNyBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzMzNSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29k
ZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
QEAgLTM1MCwxMyArMzQzLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAg
ICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAg
IGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CkBAIC00NDQsMTAgKzQzNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZp
bHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTQ5Mywx
MCArNDgzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNTM3LDEwICs1MjUsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU3Niwx
MCArNTYyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NDYsMTAgKzYzMCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY2MywxMCArNjQ1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcxMiwxMCArNjkyLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZS
ZWcsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKQEAg
LTc0OSwxMCArNzI3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
YwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwpAQCAtMTAzMCwxMCArMTAwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTExODYsMTAgKzEx
NjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0
SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKSB7CkBAIC0xMzc5LDYgKzEzNTEsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdFB1dEJ5VmFsV2l0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdp
c3RlciBvd25lciwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IGF1ZGl0
IGFsbCBjYWxscyB0byBlbWl0V3JpdGVCYXJyaWVyIGZvciBMT0wgc2luY2UgdGhpcyBtYXkgbWFr
ZSBjYWxscyB0byBDCiAgICAgQVNTRVJUKG1vZGUgPT0gVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpOwogICAgIGVtaXRXcml0ZUJhcnJpZXIob3du
ZXIsIFZpcnR1YWxSZWdpc3RlcigpLCBtb2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVy
SW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21h
cFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVy
biBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJs
ZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAg
ICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBv
biBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7
CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0
ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAg
ICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3Nl
bWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJQ01GdXp6ZXIsIDQyNDI0Miwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNNUHJvYmFi
aWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VDdXN0b21T
ZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVt
IE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413624</attachid>
            <date>2020-11-09 13:39:32 -0800</date>
            <delta_ts>2020-11-10 15:15:15 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>303690</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC03Niw2ICs5MDYsNyBAQCBKSVQ6OkpJVChW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxp
bmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX3VzZUxPTCA9IE9wdGlvbnM6OmZvcmNlTE9MKCkgfHwg
U3RyaW5nKG1fY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCkpID09ICJmb28iOwogfQog
CiBKSVQ6On5KSVQoKQpAQCAtMTQwLDYgKzk3MSw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQogI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBv
cF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNv
ZGVJbmRleCkgeyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCiAg
ICAgICAgIH0gXApAQCAtMTU2LDI2ICs5ODgsMzIgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBj
YXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9u
LCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZp
bmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7
IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNs
b3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBpZiAobV91c2VMT0wgJiYgc2xv
d0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJl
c3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0
LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nh
c2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBO
RVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAg
CkBAIC0yMzEsNyArMTA2OSw3MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOworCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAg
ICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgp
KTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
ICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2Nr
LmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5z
dWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nl
c3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
bV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGZvciAobV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rp
b25Db3VudDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFt
X2N1cnJlbnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJs
b2NrLT5sZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7
CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgo
KV0gPSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4aXRC
bG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYg
cHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOwor
ICAgICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNzb3Jz
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3ByZWRl
Y2Vzc29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNlc3Nv
cnNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVlOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0ZUF0
RW5kW3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRlY2Vz
c29yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUu
bWVyZ2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNp
emUoKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0
YW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUu
cHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFs
bG9jZWRSZWc+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2Nl
ZFJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVy
cyA9IHsgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtt
X2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAg
ICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUo
KTsKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYg
c3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUg
cHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFj
aGFibGUuCkBAIC00NzcsNiArMTM4MSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE1LDEyICsxNDIyLDE0IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmls
ZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZp
bmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9
IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAg
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dD
YXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2Uu
Ynl0ZWNvZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2Fz
ZS5qdW1wcy5saW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0g
bV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4
KS5wdHIoKTsKICAgICAgICAgCkBAIC02MzMsMTUgKzE1NDIsMTggQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Ns
b3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0
ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNv
ZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9m
ZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JF
TEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZp
cnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxp
bmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9X
SVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwg
IlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50
ZXIpKTsKIAorICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNv
bWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQu
CisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAg
ICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAg
KytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAtNzc0LDYgKzE2ODYsMTMg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4
aXQuCisgICAgeworICAgICAgICBmb3IgKGF1dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAg
ICAgICAganVtcC5saW5rKHRoaXMpOworICAgICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAg
ICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAt
MTA1OCw2ICsxOTc3LDYxMSBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAg
ICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUg
KyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwg
SnVtcCBqdW1wKQoreworICAgIG1fZXhpdEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93
ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3
ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGls
ZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5z
IGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgor
CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVl
U2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
KyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkp
OworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENh
bGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOwor
ICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxv
d2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4g
d2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBp
bGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2Fu
cyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4K
KworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2
ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
S2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQ
UkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRp
YyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRl
ciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3Ig
IHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5l
ZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0
YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsK
KyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAg
c3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNv
bXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0
LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgaWYgKG1f
c2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBt
X2J5dGVjb2RlSW5kZXgpCisgICAgICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9j
YXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlm
IChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVn
IDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAg
ICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklU
OjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09Q
UzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkp
IHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdW
YWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyBy
ZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJl
IHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgaWYgKHJlZ1ZhbHVlKHJl
ZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdW
YWx1ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAg
ICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JP
cGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxp
ZEZQUlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUg
eyB9OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3Rl
clNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Cisg
ICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byBy
ZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkK
KyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMo
KSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09Q
UzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAg
YXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9j
YXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVk
KHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5k
SWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpyZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAg
IGZvciAoYXV0byYgcGFpciA6IHNsb3dDYXNlLnNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcg
PSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vj
b25kOworICAgICAgICBpZiAocmVnID09IHNsb3dDYXNlLnJlc3VsdCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAg
QVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJv
eERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBn
cHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QK
KworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJv
eEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsK
KyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUo
ZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0
KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5k
KTsKKyAgICBhc3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6Omxv
Y2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFs
dWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291
bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRl
bXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAgIGlmICho
aW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJ
VDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5H
UFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklU
JiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZw
cigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnByID0gbV9q
aXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBt
X2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30K
KworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOwor
fQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9
IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICAvLyBPT1BTOiBkbyBzbWFydGVyIHRoaW5ncyBmb3IgYSBjb25zdGFudCBoZXJlLgor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
ICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAg
bV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZSht
X29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpD
ZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+
Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVl
KG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3Bl
cmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZO
b3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBl
KG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sK
KyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlm
IChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2Vs
bE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsK
K30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dw
ciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIp
OworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisg
ICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJh
bmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5h
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBt
X2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBjb25zaWRlciB1c2lu
ZyBGUFIgaWYgdGhlcmUncyBhbiBGUFIgYWxsb2NhdGVkIGZvcgorICAgICAgICAvLyB0aGlzIG9w
ZXJhbmQuCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBt
X2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9j
ayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRv
dWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9q
aXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1f
aml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJS
ZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVy
YW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3Vi
bGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAg
ICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIg
PSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVy
biBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJh
bmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAg
ICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2pp
dC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1f
aml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJh
ZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1Jl
Z2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNo
SWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdp
c3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29k
ZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBt
X2Zwcik7CisKKyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICBy
ZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVn
IHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQo
cmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAg
ICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkK
KyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmco
dmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5
bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJv
bDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAg
IH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJ
VDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgewor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJ
Zk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAg
ICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1
bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAg
IGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVj
dWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7Cisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQg
SklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
KSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBi
b29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmln
SW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3Bl
cmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwg
dmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShC
SUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJy
YW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5r
KHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAg
fQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3Jp
Z2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2lu
dGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNz
IEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVC
bG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nh
c2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5
dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQot
ICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFp
cjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAg
ICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBi
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGp1bXBzOworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5
YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMu
CisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAg
ICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxv
Y2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBT
d2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZv
aWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklU
X0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAg
dXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRT
bG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkw
LDEyICsyMDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVj
dHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNo
R2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0
aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVl
LCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3Bs
YWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4K
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9
IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxw
dHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI2OCwyMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wp
CisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAg
IHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVn
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAg
Y2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJl
Zyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBh
biBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMDAsOSArMzE5
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAp
OwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xv
d0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAg
ICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNl
KEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7Cisg
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVn
KCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJl
U2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQg
YWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3Qm
LCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0z
MTAsNyArMzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAg
T3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3
LDcgKzM1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVx
VHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFy
Z2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGls
ZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVC
YXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2Us
IFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTM1MCw4
ICszNzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhh
dCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFp
bGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYpOworICAgICAgICB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnIHZhbHVlID0g
cmVnVDApOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOwogICAgICAg
ICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46
OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDggKzQ5Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSArNTA1LDIwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxs
SW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKQEAgLTUxMiw5ICs1NDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0Myw2OSArNjczLDY5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3By
b3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhG
dW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC03MjgsOCArNzU4LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
KTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQog
ICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0NiwzNCArNzc0LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5
cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAotICAgICAg
ICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkK
LSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0
ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xv
d0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywK
LSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxs
U2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxT
bG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xv
d0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1f
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAg
ICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYg
KGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dD
YXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7
CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAt
OTI1LDYgKzkzMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9u
KGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGls
ZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAg
ICAgICAgCkBAIC05MzUsNiArOTQ2LDIyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3Bp
ZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0gSW52
YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVn
IGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1w
KCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJl
ZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRz
IGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVn
IGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2Vs
bE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJh
bmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAg
ICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVn
IG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
b3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAg
ICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25z
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7Cisg
ICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5v
cGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBz
dHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVl
KFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5y
ZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShH
UFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUu
cmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUo
RlBSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
LnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BS
UmVnIGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIp
Lm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWco
RlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShm
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmpl
Y3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNF
KEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQz
MlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYK
KworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9y
IHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoR1BSUmVnIGhp
bnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7CisgICAg
ICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lk
IHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0SlNW
YWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2UgdGhpcyB0YWtlIHRo
ZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNldCBpdC4KKyAgICAg
ICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFNh
dmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQ
YXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJw
cmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyAr
MTE4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2pt
cFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAg
ICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZl
Y3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29w
aWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTIyMCw3NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAg
Ly8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAg
ICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BS
UmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZh
bGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5n
cHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0Fs
bG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFs
dWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9
IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVy
LmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7
CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAg
T3BlcmFuZHM8QWxsb2NlZFJlZz4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJN
YXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0
YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFu
ZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1Jl
Z1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90
aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJv
dmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkg
PT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2Rl
QmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKworICAgICAgICBW
ZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8Qmxv
Y2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+
IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAg
ICAgICBWZWN0b3I8SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWws
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwg
RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25k
aXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91Ymxl
Q29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9s
bG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRv
IGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUg
dG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRl
CiAKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
bGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBs
aHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBk
aXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwog
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiAr
Mjk0LDE2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9u
LCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBj
b25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0
aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJikKIHsKIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUg
Zm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQg
aW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5n
LXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSk7CkBAIC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKQEAgLTMyNSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDEpOwpAQCAtMzUwLDEyICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAg
ICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1w
IGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFu
Y2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShy
ZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBm
YWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWls
NC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlz
IG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAg
IC8vIE9PUFM6IHNsb3cgcGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
CiB9CkBAIC00NjMsNyArNDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00
NzMsNiArNDg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwx
NSArNTc2LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKQEAgLTcyMywxMCArNzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aQogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2lu
c3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1F
OiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwg
c2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BO
ZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X2JpdG5vdChjb25zdCBJbnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKIAorICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AxKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
bW92ZShpbnB1dC5ncHIoKSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJl
c3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5n
cHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUwor
ICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRk
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBtb3ZlKGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMy
KE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNl
dEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBP
T1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
SklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBh
ZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQo
Y3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBA
IC0xMjE1LDMyICsxMjcwLDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11
bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxo
cy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09Q
UworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJ
VE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVs
SUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCBy
aHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1
YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1
Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdp
c2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3Ry
dWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVT
dWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCAr
MTQ1LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NF
UlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQg
KzMzMCw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAg
Y29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJn
cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3Ry
dWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwx
NCArNDA3LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChqdW1wKCkpOwogCiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMK
KyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5s
aW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09Q
UworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsK
QEAgLTUyNiw3ICs1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsK
ICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoc2xvd0Nhc2UpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgs
NyArNTQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAg
IH0KIAogICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgLy8gT09QUzogcmVnaXN0ZXIgYWxsb2NhdGUgdGhpcyBmb3IgTE9MLgogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQogICAgIGVtaXRT
dG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY2LDI1ICsx
NjcsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdp
c3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9
IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRl
Y29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpA
QCAtMjA2LDI3ICsxODgsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93
Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNl
cy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29k
ZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5z
YXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5s
YXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRz
dCA9IGRzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlz
dCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1
bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHMuYXBwZW5kKGp1bXApOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAg
SnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBw
eS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0
ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5
LDExICszMDAsMTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rhbgog
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
U3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5s
ZW5ndGgoKSA9PSAxOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkK
IHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lz
dGVySUQgdmFsdWUgPSByZWdUMDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJl
Z2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKICNlbmRpZgpAQCAtMzM4LDExICszMjgsMTEgQEAg
aW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVnKQogewogICAgIGlmICgh
c2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvciht
ZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpA
QCAtMzkzLDExICszODMsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRD
b25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9y
KGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4
ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
Q3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9t
b3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBj
b25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBp
ZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAg
LTkwLDMyICsxMDEsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1f
dm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxs
b2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7Cisg
ICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJl
ZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVGVtcDsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0
VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdU
MTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2Nh
dG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3Rh
bnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVz
dWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHBy
b3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyNSwyMyArMTU3LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0
cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUu
bV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0
YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29u
c3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAg
ICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAg
IGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9
IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFu
Y2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVj
dG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7Cisg
ICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0lu
c3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAg
SnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5j
ZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9u
UHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIW1fdXNlTE9MKQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAK
ICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5j
dGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3Rh
bmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIxMCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAg
ICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEg
Y2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5z
dGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJ
bnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1Qw
LCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBw
cm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9u
YWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVt
cDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1w
IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRl
bXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsK
KyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9
IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVU
ZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNl
KCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAg
fQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisg
ICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2Ny
YXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwor
ICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAg
ICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRo
IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlz
IGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAg
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
ICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAg
ICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5z
dGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VH
UFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpA
QCAtMTk5LDExICszMTEsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5z
dHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTIxMSwyOCArMzQxLDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVv
ZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAg
ICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVl
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAg
ICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwg
PSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEs
MTMgKzQxNSwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBvdGhlciBoZXJlPworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0yNTUsMTIgKzQ1MCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNv
bnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
c0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFu
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgs
MTEgKzQ4MSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBudW1iZXIgaGVyZSBpZiBw
cm9maWxpbmcgc2F5cyBzbz8KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQz
MikKQEAgLTI4MiwyMSArNTEyLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJ
ZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRH
UFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1
NzgsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9
IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2MjcsNjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0
ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWws
IEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0zNTUsNyArNjkyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
Ynl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1
cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzExLDQxIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0
ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
T2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYg
KGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzU0LDIwMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFu
Y2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5n
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24g
eyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFt
ZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BS
ID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
d2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVj
dHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93Lgor
ICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYg
dGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUK
LSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3Ig
MSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGlu
dmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBp
biwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0
aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93
IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3Bl
Y3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwg
d2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9u
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRp
b24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1v
cmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
Y29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVt
cCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7
ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBz
Y3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHJlZ1QyOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
biwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
biwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
IGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlv
biA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ0MCw0NiArOTU5LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAg
ICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7
CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0g
ICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihz
cmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRl
c0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNl
cyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0g
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSks
IHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Cisg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ4OCwxMCArMTA5MCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAg
ICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEw
ICsxMTE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTQ5LDMwNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNp
YWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNy
YykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2Vs
bCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9o
YXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
ICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVj
aWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQo
bV91c2VMT0wpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3Nh
bWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2Vs
bE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qocmhz
KSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7Cisg
ICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUs
IGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
T09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZh
bHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKG1fdXNlTE9M
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6
OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1
dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBl
KGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAg
ICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiks
IHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBz
cGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBH
UFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
aHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJl
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAobV91c2VM
T0wpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQg
SklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgamVxSW1wbDxPcEplcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwor
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0K
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKKwogdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93
PigpOwpAQCAtNTg5LDc0ICsxNDYzLDE1MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEo
Y29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsK
KyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3Vi
bGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBl
KGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihp
c0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91
YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0Uo
QklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScg
dG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQp
OwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBD
ZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToK
LSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxl
bWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUg
YnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlm
IHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBp
cyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQg
d2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8v
IElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25s
eSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwot
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdU
NSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBK
dW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdU
MCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0
byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwot
ICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3Mg
dGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYg
Ym90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwor
ICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3Mg
eyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmlj
dEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAg
ICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0
KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAg
aWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93
UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8K
KworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8
IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQg
dGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9i
cmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEg
bnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAor
ICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAg
ICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3Zl
T3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBC
aWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6
IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJp
Z0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJp
bmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3Zl
ciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8g
SnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAg
bW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3
aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUu
CisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRo
aXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5s
aW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTYyNCwxMzUg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVn
VDEpOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAg
ICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNF
cSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChy
aHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVP
YmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgLy8g
T09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUg
Y2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BS
KSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQz
MikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAg
ICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8g
dGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBm
cmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3
aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVs
eSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAv
LyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5n
IDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRz
IGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMg
YWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUo
cmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVn
VDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBv
cjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFs
LCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIp
OwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxl
c3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGgg
aWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVT
RShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAn
dHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVm
dCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMg
Q2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAg
ICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQg
aW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNp
bmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWly
ZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRo
ZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8
NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQg
MAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3Vi
bGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Cisg
ICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJl
Z1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKwor
ICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Cisg
ICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAg
ICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVT
RShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVy
IHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUu
Ci0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAg
ICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRv
dWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxp
bmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdo
dE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwg
cmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc2NSwyMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1Qw
OworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAobV91c2VMT0wpCisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJl
cihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVt
ZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBp
c05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNC
eXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMy
KQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBh
dXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNo
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsK
KyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2Rl
TnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1Qw
KSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAo
c3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmlu
ZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNP
YmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAg
ICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2Jq
ZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJv
bUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4
LDkgKzIwMzMsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50
U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBp
dCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50
U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwg
cmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIwNjQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJl
Y29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjA4OSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5z
dXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTEzLDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUg
PSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgIGxvYWQzMihjb2Rl
QmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9E
ZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5t
X2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29s
IGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21w
YXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFy
ZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21w
YXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1
bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
fQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAg
ICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNv
bXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUu
bGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVt
aXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFO
dWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVn
VDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNv
bnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdp
c3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4K
KwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXpl
IG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0g
ICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAg
IGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJp
YWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRW
YWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOwor
ICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkg
KzIyNjQsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2Nv
cGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQt
PmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSksIHNjb3BlKTsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTEwNDUsMTMgKzIyODgsODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5t
X2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJp
Y3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYg
KG1fdXNlTE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNh
Y2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJl
c3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShz
cmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8K
KyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNy
Y0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0
byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0g
ZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3Ro
ZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVj
dHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlw
ZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkK
KyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBsb2FkMzIoY2Fj
aGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVz
dWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAg
ICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAg
ICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BT
OiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1
cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBz
ZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjM2OSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxl
ZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0g
Jm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyMzc5
LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdp
c3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNo
UmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVl
UmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
Z3ByVGVtcDQ7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1w
bGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2Fs
bGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdw
clRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOwor
ICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJl
ZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1w
NC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisK
KyAgICBpZiAobV91c2VMT0wpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0
KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRh
YmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0
YVRhZykpKTsKQEAgLTEwODYsNjQgKzI0MjEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1
cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRS
ZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rk
ej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkp
OwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAg
IHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29y
a3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0
IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBA
IC0xMTY0LDYgKzI0NjgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0
dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8g
T09QUwogICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNv
dW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAg
IGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTEx
ODcsMTMgKzI0OTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRo
ZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5C
ZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAg
ICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0x
MjA2LDExICsyNTA5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7Cisg
ICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3
b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEy
MzMsMTAgKzI1MzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25z
CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0
PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNTQ1LDE4
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
Z2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2Fz
dDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1
cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI1NjYs
NDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Qw
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Nj
b3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4
ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsK
IAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsK
ICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAg
fQorCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsy
NjMwLDQ1IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRl
Y29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFs
dWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2Fk
UGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5
dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVH
UFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwg
ZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9y
X2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247
CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI2OTksMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7
CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
Mih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOworICAgIHNwaWxsRm9yQ2FsbCgpOworICAgIEdQUlJlZyBhcmdHUFIgPSBy
ZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIo
KTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEzNjAsMTQgKzI3MTcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBH
UFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJn
R1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIGFyZ0dQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3NDYsNDIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVy
YXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0
b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQogCi0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRH
UFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICsyODAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICAvLyBPT1BTOgogICAg
IGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzI4MjksOSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgLy8gT09QUzoKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4NTcsMTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0
aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZv
ckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAK
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJh
ZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMjg3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVs
KCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFk
VHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwg
ZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTA0LDkyIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNl
IGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKG1fdXNl
TE9MKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1
ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVl
IHsgKnRoaXMsIGluZGV4IH07CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2Vs
bDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFI7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAgICAgICAgIGJhc2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VDZWxsLT5ncHIoKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwot
Ci0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRv
cidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAg
ICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCBy
ZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAvLyBDaGVjayB0
aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDIpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAg
IEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwg
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXgg
aXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVu
IGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAg
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vz
cy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7
CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiAKLSAgICAvLyBPdGhlcndp
c2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7
Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxv
YWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTU1MCwyMSArMjk5OSw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91
bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQ
UlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAg
ICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVz
dWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVt
ZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVt
ZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBl
bnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMy
KEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsK
IAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBU
aW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQo
KSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hH
UFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0Vp
Z2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5n
IHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0
LDIxICszMDUzLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihC
ZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5k
R2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBp
bmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBp
bmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5l
bXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5k
ZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVy
YXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAg
ICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1By
b3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAg
IGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAK
ICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszMTA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0
aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
VG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGls
bEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUs
IHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE2OSw5IEBA
IHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0
X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigp
KTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAg
ICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVn
VDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlPigpOwpAQCAtMTY3Miw2ICszMTg2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAg
IHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSBy
ZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRo
aXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTcwMiwxMSArMzIxOSwyMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBz
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBK
U1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJ
bnQzMihyZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0KTsKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWls
YWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjQwLDQ4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVj
b2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihM
ZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIz
MihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xl
bmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJh
bXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgu
bGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAg
ICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJv
eEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25l
ID0ganVtcCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3Ro
LmxpbmsodGhpcyk7CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigw
KSkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigwKSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAot
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlm
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzMyODksOTkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwor
ICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwg
cmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAj
ZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9
IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwot
ICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVl
KGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihM
ZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9h
ZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3Zl
VmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRS
ZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2
YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2
YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxz
ZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQ
Uik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoLCB2YWx1ZVJlZ3Mp
OwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RP
YmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykp
OworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKytt
X2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAg
IExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2Vs
ZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJN
LgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9T
Y29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8o
Ynl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMTggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogCiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAg
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dl
dEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MjAsMTYgKzExNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0
ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CiAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFs
SW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CkBAIC0zMzQsNyArMzI3
LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVy
biBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVj
dCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICszMzUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAg
YXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZd
KGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAg
ICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzM0MywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAg
bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAg
ICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwog
ICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+
KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+
KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtNDQ0LDEwICs0MzYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihi
YXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkBAIC00OTMsMTAgKzQ4Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5
VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUzNywxMCArNTI1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC01NzYsMTAgKzU2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEwICs2MzAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NjMsMTAg
KzY0NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIsMTAgKzY5Miw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCkBAIC03NDksMTAgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEwMDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBA
IC0xMTg2LDEwICsxMTYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTM3OSw2ICsxMzUxLDcgQEAgSklUUHV0QnlJZEdl
bmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICAv
LyBPT1BTOiBhdWRpdCBhbGwgY2FsbHMgdG8gZW1pdFdyaXRlQmFycmllciBmb3IgTE9MIHNpbmNl
IHRoaXMgbWF5IG1ha2UgY2FsbHMgdG8gQwogICAgIEFTU0VSVChtb2RlID09IFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKTsKICAgICBlbWl0V3Jp
dGVCYXJyaWVyKG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgbW9kZSk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1i
bGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkg
eyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAg
Y29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQs
IE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNh
bGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdh
bm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNw
aWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYg
KG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wg
ZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6
emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0
aW5nTElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwg
ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413747</attachid>
            <date>2020-11-10 15:15:15 -0800</date>
            <delta_ts>2020-11-10 17:05:14 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>310535</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgp
KSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzcsNyBAQCB2b2lkIEpJ
VDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTk0LDMyIEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9P
UChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBc
CiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBj
YXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYg
KHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAg
ICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlv
biBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzUsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBo
LT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90
YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRC
bG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Qcmlv
ckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3Nv
ciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1f
c3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vz
c29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVj
ZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJv
bVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODcsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2Rl
T2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwx
MiArMTQyOCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2Vz
LmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3Ig
KFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ4LDE4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93
OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RU
by5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBt
YW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09Q
UzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8v
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAx
KS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVn
ZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNl
UHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91
bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAg
LTc3NCw2ICsxNjkyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzog
aW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4
aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2lu
dCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk4Myw2MTggQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVt
cExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJT
ZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFu
azo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhy
ZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxs
b3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBS
ZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1
dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNl
dD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgo
KQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitH
UFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0g
aGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpj
bG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5
IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAg
IGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcmVnVmFsdWUocmVnKS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJh
bmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUo
cmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgewor
ICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9w
IGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxs
b2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30K
Kwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZw
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOwor
CisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9
CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklU
OjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGpp
dCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7
Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUiho
aW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJU
ZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcg
SklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7
CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVu
bG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQorewor
ICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEg
Y29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklU
OjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIp
OworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3By
ID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7
CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7
CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAg
ICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAg
ICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQu
cHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOwor
fQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJh
bmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1f
aml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09Q
UzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAg
ICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dw
cik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVy
YW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKwor
RlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAg
ICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVt
cCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91Ymxl
KGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29w
ZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5j
bHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklU
LmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1h
cC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVk
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxs
TGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0
YWJsZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAg
ICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0
KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcg
U2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAg
ICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZv
ciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBT
b21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVu
Y2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZv
aWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAg
ICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
LSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJS
ZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNDk2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAt
NDg0LDExICs1MDUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQg
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjQzLDY5ICs2NzMsNjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7
CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lk
IGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZv
aWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2
b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9p
ZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0g
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcy
OCw4ICs3NTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBK
U1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3
NzQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAg
ICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJ
bnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGlu
ayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxp
bmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisg
ICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytp
dGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAg
IHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50
cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5r
QWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xv
d0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9v
bCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0
KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dD
YXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wg
YiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAg
ICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAg
ICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Y29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NDYsMjI4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAg
ICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRl
bXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJU
ZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJ
VCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRz
IGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdn
ZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYg
bV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5E
b3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBl
IGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBm
aWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9y
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1Jl
Zy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnBy
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZw
cjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxv
Y2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOwor
ICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAg
ICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZw
cjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNw
ZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVT
dHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFu
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZv
ciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBo
aW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAg
ICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpT
VmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0
aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAg
ICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBT
YXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcg
KzExODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9q
bXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3Jk
PiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2Nv
cGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzEyMjMsNzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAg
IC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisg
ICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQ
UlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52
YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcm
IG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIu
Z3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAg
ICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVj
dCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07Cisg
ICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNB
bGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1Zh
bHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAh
PSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhl
ci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAg
IE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVy
TWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tT
dGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9S
ZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBv
dGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnBy
b3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgp
ID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAg
VmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJs
b2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+
PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAg
ICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8SnVt
cExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEs
IHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewog
ICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGlu
IHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBp
bW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0
ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMu
Z3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5m
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRp
b24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiArMjk0LDE2IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3Ax
LCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24s
IGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsK
IAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBA
IC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMy
NSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7
CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEy
ICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMg
bm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwy
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwog
ICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIE9PUFM6IHNsb3cg
cGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyAr
NDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90
SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNDg3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hh
cmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNTc2LDEzIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMCAr
NzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVt
aXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRO
ZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIo
KSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7
CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlm
dChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC0xMjE1LDMyICsxMjcw
LDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJE
b3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJ
Qyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAg
ZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAgYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzMCw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwxNCArNDA3LDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxT
bG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
TmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1MjUs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwog
ICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0NSwxMSArMTQ1LDEzIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0
aW9uKTsKKyAgICBpZiAoIW1fdXNlTE9MKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0U3Rv
cmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFN0
b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKKyAgICB9
CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKQEAgLTE1OCwzMyArMTYwLDE2IEBAIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgaWYgKCFtX3VzZUxPTCkgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCi0gICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmCisgICAgfQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsK
LSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNv
ZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2Fz
ZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRl
ci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkK
IHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNiwyNyArMTkxLDM2IEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhp
dGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nh
c2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRl
Y29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBo
b3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4K
LQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJ
bmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQ
bGFuKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFy
ZXN1bHQpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsK
KyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1w
JiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0LCBkc3QpLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2Uo
Y29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2lu
ZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29u
c3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBz
LmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1w
IGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTMwOSwxMSArMzAzLDEwIEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW4KICAgICByZXR1cm4gc3JjLmlzQ29uc3Rh
bnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNob3VsZEVt
aXRQcm9maWxpbmcoKSk7CiAKLSAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlID0gcmVnVDA7CiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlVGFnID0gcmVn
VDE7CiAjZW5kaWYKQEAgLTMzOCwxMSArMzMxLDExIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZTxkZWMKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFk
YXRhKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgR1BSUmVnIHJlZykKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxl
Rm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpLCByZWcpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdU
eXBlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKQEAgLTM5MywxMSArMzg2LDYgQEAgQUxX
QVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDgg
KzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgLy8gT09QUzogTWFrZSB0aGlzIGJldHRlciBmb3IgY29uc3RhbnRzIHdoaWNoIGFyZW4ndCBy
ZWdpc3RlciBhbGxvY2F0ZWQgeWV0LgorICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBt
b3ZlKGlucHV0LmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsK
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwog
ICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTAxLDUzIEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0
dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1
bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAg
IFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7Cisg
ICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRv
clRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9j
YXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBh
bGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9
IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSBy
ZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcg
PSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAg
IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVy
Zmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRv
clJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNs
b3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcs
IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
ICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3Qp
OwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0
KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1l
dGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1
cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE1Nyw1MCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJl
ZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8v
IE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNl
VGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1w
bGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFj
ZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigp
OworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAg
ICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0
IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBK
dW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hh
c0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VW
YWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xG
dW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBy
ZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25z
dHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlz
IG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3Mo
Y29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsy
MTAsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVy
YW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0
ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRv
bmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBw
cm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQg
YnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJl
Z1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJl
Z1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBt
X2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJh
bmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1Rl
bXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhp
cyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAg
R1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVz
dWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3Jh
dGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUp
ICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBD
ZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1w
bGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENl
bGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsK
KworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAg
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQ
UiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAg
ICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVt
cC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisg
ICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5h
cHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3Ig
YmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2Fu
IHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8s
IHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxz
LiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlf
aWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAor
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAor
ICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8K
KyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwor
ICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1f
aW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVn
cy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzExLDI5IEBAIHZv
aWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1w
dHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM0MSw3MiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdU
MCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAot
ICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5w
dXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBH
UFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BS
KTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8g
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0
ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwor
ICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAg
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwor
CisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MTUsMzQgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3Ro
ZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSBz
cGVjdWxhdGUgb3RoZXIgaGVyZT8KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NTAsMzAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICB0ZXN0NjQoWmVybywgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0ODEsMjggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVt
YmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
RnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBNYXliZSBzcGVjdWxhdGUgbnVtYmVyIGhlcmUgaWYgcHJvZmlsaW5nIHNheXMgc28/CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblpl
cm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVn
VDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUxMiw1NiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0lu
dFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
aWdJbnQzMlRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7
Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5r
KHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAg
ICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8g
aWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50
KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMxMywxOCArNTc4LDQ3IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAg
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTMzMywxOCArNjI3LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0
cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAg
ICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKwor
ICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29t
cGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RD
ZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0
VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzY5Miwx
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBS
ZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CkBAIC0zNjksMTUgKzcxMSw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29u
c3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAg
ICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZl
KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
c3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAg
ICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0zODYsNTIgKzc1NCwyMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlf
a2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYg
fihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
c3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcg
PSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChT
cGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3Bl
Y1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVu
Y3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9u
YW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAg
ICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0
RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVj
dWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
dGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0
dWZmIGlubGluZTogc3RyaW5ncywgYml0aW50LCBvYmplY3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJh
ZGVyLCBldGMuCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICAvLyBTZWUgY29tbWVudCBiZWxvdy4KKyAgICAgICAgICAgIG1vdmUodmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKE5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogCi0gICAgLy8g
SW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFz
IGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhh
biB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5w
dXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRy
dWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0
LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCBy
ZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRo
ZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisg
ICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBv
ciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBU
aGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcg
YmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSkpOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBHUFJSZWcg
dmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcg
c2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFs
dWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BS
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNj
cmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNo
Mi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBS
LCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0
cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlv
bjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRp
b24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxl
IG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBS
VGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNo
MiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BS
LCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk1OSwxMjkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAg
ICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwor
CisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAg
YXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRh
cmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
ID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2Fz
ZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKwor
ICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1wIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFs
LCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDAp
LCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
ID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAt
IHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRl
c0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1l
ZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQotICAgIGlzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0
R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2Ny
YXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAog
Ci0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAt
IHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2Fz
Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzEwOTAsMjYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsK
KyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUwMCwxMCArMTExOCwyNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTUxNSw2NSArMTE0OSwzMDUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9w
dHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFs
dWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigx
KSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBhdXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwg
VHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsK
KyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsK
KyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhp
cyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVx
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVj
b2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7Cisg
ICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZw
Q29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9y
VW5vcmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91
YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3Bl
Y3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOwor
CisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElm
Tm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRH
UFIsIGRzdCk7CisKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICB9CisKKyAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmVxPigpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3Jo
czsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZh
bHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
eXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgYXV0byBncENvbXBhcmUg
PSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBE
b3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAg
aWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykp
KSB7CisgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywg
cmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9s
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhz
KSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAg
ICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4K
KworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJo
c0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnRydWU+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgZXFJbXBsPE9wRXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBlcUltcGw8T3BOZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBs
aHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCBy
ZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwor
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVn
VDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9
IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTQ2Mywx
NTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAg
ICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91
YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFs
c2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhz
KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOwor
ICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNU
ZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNH
UFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisg
ICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEg
aGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQ
YXRoOwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAg
ICAgICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQot
ICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0
IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIv
YnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMg
YW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywg
bGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIg
YXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8g
TGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdU
MCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0
KE5vblplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1w
IHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmln
SW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQg
ZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdl
IG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwot
ICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywg
cmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwg
d2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRo
OworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmln
aHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFn
bWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRo
IGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSBy
ZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAg
Ly8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGlu
ZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0
cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8
NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5
IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdU
NSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkp
OworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAg
bW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25l
IGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0
KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcg
bW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRv
IGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1
bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBk
b3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQg
dGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qw
KSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAg
ICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBj
ZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAg
ICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91Ymxl
LiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4g
dGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9
IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJl
NjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90
RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE2MjQsMTM1IEBAIHZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29k
ZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21wYXJl
ID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNF
cSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisK
KyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5U
eXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhz
LCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0
ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNH
UFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIp
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BS
KSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQ
UikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNU
ZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBs
aHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWco
KSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxl
dmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAg
ICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwotICAgIGlmIChsZWZ0IGlz
IENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGdvdG8g
bm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVm
dCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5z
dGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBi
cmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYg
YSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2Ug
aXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMg
bm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0
IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgot
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBh
ZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAg
ICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Ci0gICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVt
cChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBK
dW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQg
QmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291
bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIs
IHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1Qw
LCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAgICBh
cmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8q
IEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToK
KyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAg
ICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAg
IGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkK
KyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAgICAg
ICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2Yg
dGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJ
bnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpT
VmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBv
dmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMg
bm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0
IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1
MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdU
Myk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMp
LCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJl
Z1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwor
ICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0
KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVhbCA9
IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVFcXVh
bCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBC
aWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6
IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJp
Z0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJp
bmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAg
IGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAgICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxpbmso
dGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVt
cCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRv
dWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0
aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJh
bmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDAp
KTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAg
IHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVn
VDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGgg
YXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIp
OworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBk
b3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQg
dGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVm
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1w
IHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJl
Z1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkg
KzE3NjUsMjE3IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAg
ICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJo
c0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2
ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJl
Z1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQ
bGFuKHNsb3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1i
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAg
c3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAg
IGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0VlJlZyk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAg
IAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
KTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAg
ICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5s
aW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1
dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVB
bnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVh
cEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBhdXRvIGlzTnVtYmVy
ID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisj
ZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7Cisg
ICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmln
SW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5s
aW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlu
cHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworCisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsK
KyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwgd2l0aCB0
aGlzLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRj
aD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDMzLDIzIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJl
bnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAg
Q2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJl
ZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRH
UFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTkwNSw5ICsyMDY0LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5z
dHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAg
anVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaElt
bVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1
dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaElt
bVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJs
ZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwor
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIwODksMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0
R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkz
OCw5MyArMjExMywxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJ
bgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAg
ICBzcGlsbEZvckNhbGwoKTsKICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1Zywg
JnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAg
bm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2Vx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wg
aXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBh
cmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3Jj
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNj
cmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBh
cmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7
CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKwor
ICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNv
bXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxs
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQot
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwot
Ci0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0g
ICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7Cisg
ICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBl
bWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBD
VEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyBy
ZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHBy
b2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1
cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVy
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGog
PCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRk
cmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBw
cm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVC
YXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMjY0LDIzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMjg4LDgw
IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJ
RCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNT
dHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJl
c3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3Ry
aWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNw
ZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNT
dHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNp
bmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEo
cHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3Qp
ICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOwor
ICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRH
UFIsIHNyY0RzdCk7CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50
aXR5LgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5v
dENlbGw7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVz
dWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAg
ICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAg
ICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVj
dFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3Vs
dEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEp
OworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmpl
Y3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMDU5LDYgKzIzNjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyArMjM3OSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJl
ZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAx
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7Cisg
ICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRl
bXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQt
PmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAg
IHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdw
clRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7Cisg
ICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1
bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxs
ZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVE
YXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVn
LCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsy
NDIxLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBs
b2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2Vz
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdp
c3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3Jj
KSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNs
b3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2NCw2ICsyNDY4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogewogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9v
cHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6
emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFMKICAgICAgICAgdWludDY0X3Qq
IHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAg
ICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9
IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJu
RnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEzICsyNDkyLDExIEBAIHZvaWQg
SklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklU
IG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgp
LCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwxMSArMjUwOSwxMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRp
bWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGlu
ayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNF
RF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsyNTM1LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVy
Q291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU0NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4
cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVn
RXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpz
Q2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTY2LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3
RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BS
ID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVH
UFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5k
aWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0
aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNF
eGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1
bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjYzMCw0NSBAQCB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAg
IHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICgh
dXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQ
Uik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5
ICsyNjk5LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNv
ZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJl
Z1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BS
LCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFy
Z0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3MjAsMjYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9s
ZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdH
UFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2Fk
KHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1Qx
LCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFu
ZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEs
MTUgKzI3NTMsNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsK
KyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFz
ZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2Vs
bC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+
Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgfQogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICsy
ODA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKIHsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2
LDYgKzI4MzYsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAK
IHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogaW1wbGVtZW50IHRoaXMKKwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0
NjEsMTUgKzI4NjMsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
YwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAog
ICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlz
IGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1v
ZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93
Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJh
ZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwor
ICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMjg4MCwxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBu
ZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBh
dGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgp
KTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5m
byhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVt
cCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0x
NTEwLDM3ICsyOTEwLDkyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29u
c3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAg
Ly8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMy
T3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07CisgICAgICAgIE9wdGlvbmFsPENl
bGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFI7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAgICAgICAgIGJhc2VDZWxs
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VDZWxsLT5n
cHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKIAotICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVn
VDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAg
ICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBp
bnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNl
dEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNl
bGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8g
Q2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUg
b2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAg
ICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlu
bGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91
dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAg
ICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3Vi
MzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9
CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vz
cy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsK
LSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzAwNSw1MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qx
KTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhP
ZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtu
b3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhp
cywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJh
dG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdw
cigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJl
Z1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBp
bkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZz
ZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5k
cy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIo
aW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDU5LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQ
UlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAg
ICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVz
dWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVt
ZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVt
ZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBl
bnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVs
b3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0Vp
Z2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwg
cmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8
IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszMTEzLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlv
biogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAg
LTE2NTgsNiArMzE3NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZt
KCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRl
VG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszMTkyLDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGls
bEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3Nl
cnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBo
YXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTcwMiwx
MSArMzIyNSwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENv
dW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAs
IHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVl
UmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50
MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjQ2LDQ4
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBh
cmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJl
Z1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9M
ZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNU
b1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisg
ICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0
R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFy
YW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisg
ICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRJ
bnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7
CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKdW1wIHpl
cm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJh
bXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDAp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2Vu
ZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIHplcm9MZW5ndGgubGluayh0
aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsK
ICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1Qx
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkg
KzMyOTUsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVu
dE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3Vu
ZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVV
bmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJn
dW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhp
cyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZC
b3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5k
ZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRo
aXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlw
ZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVH
UFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFs
dWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMp
OworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNl
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0g
c2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFn
R1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBl
KHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNs
b3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQ
cm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRj
aEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7
CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZh
bD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzks
OCArMjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAg
ICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbElu
ZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAg
ICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
QEAgLTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAv
LyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0
ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRC
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCAr
NzA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw0OSArNTEsMTExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7Cisg
ICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRh
dGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1i
ZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAg
IGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSks
IFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIs
IHJlc3VsdEdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAg
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwg
cHJvcGVydHlHUFIpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3Bl
cnR5R1BSKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3Bl
cnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VM
T0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxD
aGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBy
ZXN1bHRHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
cHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAg
ICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwg
U3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
eW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAg
bV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9M
KCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsK
ICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55
U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRC
eVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxl
LCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAyLDggKzE2NCwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CisKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
QEAgLTEyMCwxNiArMTg0LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0
QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKQEAgLTMzNCw3
ICszOTUsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAg
cmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlz
RGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzQwMyw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAK
LSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUg
PSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1MCwxMyArNDExLDEyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAg
ICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7Cisg
ICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4o
KSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC00NDQsMTAgKzUwNCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKQEAgLTQ5MywxMCArNTUxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNTM3LDEwICs1
OTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTU3NiwxMCArNjMwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NDYsMTAgKzY5OCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY2
MywxMCArNzEzLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcxMiwxMCArNzYw
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKQEAgLTc0OSwxMCArNzk1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTAzMCwxMCArMTA3NCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9u
KTsKQEAgLTExODYsMTAgKzEyMjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMzc5LDYgKzE0MTksNyBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewor
ICAgIC8vIE9PUFM6IGF1ZGl0IGFsbCBjYWxscyB0byBlbWl0V3JpdGVCYXJyaWVyIGZvciBMT0wg
c2luY2UgdGhpcyBtYXkgbWFrZSBjYWxscyB0byBDCiAgICAgQVNTRVJUKG1vZGUgPT0gVW5jb25k
aXRpb25hbFdyaXRlQmFycmllciB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpOwogICAgIGVt
aXRXcml0ZUJhcnJpZXIob3duZXIsIFZpcnR1YWxSZWdpc3RlcigpLCBtb2RlKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9B
c3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJy
YXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7
IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhD
YWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJ
VDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1
c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2pp
dC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAg
ICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2pp
dC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwg
dHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIg
Ym9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJ
Q01GdXp6ZXIsIDQyNDI0MiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93
SG9pc3RpbmdMSUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihC
b29sLCBleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413758</attachid>
            <date>2020-11-10 17:05:14 -0800</date>
            <delta_ts>2020-11-12 15:54:55 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>324193</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgp
KSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzcsNyBAQCB2b2lkIEpJ
VDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTk0LDMyIEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9P
UChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBc
CiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBj
YXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYg
KHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAg
ICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlv
biBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzUsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBo
LT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90
YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRC
bG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Qcmlv
ckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3Nv
ciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1f
c3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vz
c29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVj
ZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJv
bVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODcsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2Rl
T2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwx
MiArMTQyOCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2Vz
LmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3Ig
KFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ4LDE4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93
OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RU
by5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBt
YW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09Q
UzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8v
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAx
KS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVn
ZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNl
UHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91
bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAg
LTc3NCw2ICsxNjkyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzog
aW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4
aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2lu
dCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk4Myw2MTggQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVt
cExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJT
ZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFu
azo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhy
ZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxs
b3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBS
ZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1
dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNl
dD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgo
KQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitH
UFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0g
aGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpj
bG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5
IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAg
IGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcmVnVmFsdWUocmVnKS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJh
bmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUo
cmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgewor
ICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9w
IGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxs
b2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30K
Kwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZw
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOwor
CisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9
CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklU
OjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGpp
dCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7
Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUiho
aW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJU
ZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcg
SklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7
CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVu
bG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQorewor
ICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEg
Y29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklU
OjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIp
OworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3By
ID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7
CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7
CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAg
ICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAg
ICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQu
cHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOwor
fQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJh
bmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1f
aml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09Q
UzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAg
ICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dw
cik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVy
YW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKwor
RlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAg
ICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVt
cCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91Ymxl
KGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29w
ZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5j
bHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklU
LmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1h
cC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVk
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxs
TGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0
YWJsZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAg
ICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0
KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcg
U2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAg
ICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZv
ciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBT
b21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVu
Y2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZv
aWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAg
ICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
LSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJS
ZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNDk2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAt
NDg0LDExICs1MDUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQg
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjQzLDY5ICs2NzMsNjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7
CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lk
IGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZv
aWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2
b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9p
ZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0g
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcy
OCw4ICs3NTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBK
U1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3
NzQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAg
ICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJ
bnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGlu
ayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxp
bmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisg
ICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytp
dGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAg
IHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50
cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5r
QWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xv
d0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9v
bCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0
KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dD
YXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wg
YiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAg
ICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAg
ICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Y29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NDYsMjI4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAg
ICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRl
bXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJU
ZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJ
VCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRz
IGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdn
ZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYg
bV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5E
b3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBl
IGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBm
aWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9y
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1Jl
Zy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnBy
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZw
cjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxv
Y2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOwor
ICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAg
ICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZw
cjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNw
ZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVT
dHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFu
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZv
ciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBo
aW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAg
ICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpT
VmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0
aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAg
ICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBT
YXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcg
KzExODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9q
bXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3Jk
PiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2Nv
cGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzEyMjMsNzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAg
IC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisg
ICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQ
UlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52
YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcm
IG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIu
Z3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAg
ICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVj
dCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07Cisg
ICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNB
bGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1Zh
bHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAh
PSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhl
ci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAg
IE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVy
TWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tT
dGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9S
ZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBv
dGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnBy
b3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgp
ID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAg
VmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJs
b2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+
PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAg
ICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8SnVt
cExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEs
IHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewog
ICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGlu
IHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBp
bW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0
ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMu
Z3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5m
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRp
b24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiArMjk0LDE2IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3Ax
LCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24s
IGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsK
IAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBA
IC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMy
NSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7
CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEy
ICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMg
bm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwy
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwog
ICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIE9PUFM6IHNsb3cg
cGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyAr
NDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90
SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNDg3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hh
cmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNTc2LDEzIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMCAr
NzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVt
aXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRO
ZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIo
KSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7
CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlm
dChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC0xMjE1LDMyICsxMjcw
LDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJE
b3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJ
Qyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAg
ZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAgYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzMCw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwxNCArNDA3LDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxT
bG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
TmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1MjUs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwog
ICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhl
IGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2Vsc2UKQEAgLTE1OCw2ICsxNTksNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEpOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlz
IG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCkBAIC0xNjYsMjUgKzE2OCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4
KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hp
bGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09
IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4OSwzNiBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFs
dWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1w
IGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyBy
ZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsK
KyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCku
Ynl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsK
KyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAg
ICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6
IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwg
ZHN0KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFk
ZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1
bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhp
cyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAm
IGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQo
anVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBp
bnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZh
bHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmls
aW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwogI2Vu
ZGlmCkBAIC0zMzgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSkKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRh
ZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NCw2IEBAIEFMV0FZU19JTkxJ
TkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVl
KGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
Zj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9P
UFM6IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIg
YWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1
dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAg
aWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJl
ZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9y
UmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7Cisg
ICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7
CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsK
ICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2Rz
dCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVj
RmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5t
X29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25z
dHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhh
c0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFu
Y2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBp
bnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1
Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRo
aXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMs
IGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAg
ICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFu
Y2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlm
IHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0
b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5j
ZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwor
ICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3Ig
J0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBD
LUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVj
dG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEwLDkzIEBA
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJh
c2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJl
IGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBn
ZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8g
dmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8v
IHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5j
ZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1
ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsK
KyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVt
cCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBw
cm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAu
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1w
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRo
aXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90
b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdw
cigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFs
dWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCks
CisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAg
ICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZl
bHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwg
c2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVz
ZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7
CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZh
bCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBT
eW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAg
ICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAg
ICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAg
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNl
T2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90
eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0Nl
bGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwg
cmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwor
ICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAg
ICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRl
IG90aGVyIGhlcmU/CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAK
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVO
dWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVz
dDY0KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1i
ZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUg
c3BlY3VsYXRlIG51bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1
dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJU
YWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsK
LSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0
KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0Uo
QklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJ
bnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19j
ZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBh
cmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
dHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTgg
KzYyNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZh
bHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFi
b3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5r
KHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRo
ZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5
LDE1ICs3MTEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0u
bGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0u
bGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Mzg2LDUyICs3NTQsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0
cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVj
dWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
eW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNo
SWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlz
U3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmlu
ZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRv
IGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
aWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9Owor
ICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5j
dGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9u
TmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMiha
ZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxp
bmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRj
LgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBh
Z2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xl
YW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxv
dyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNw
ZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hp
Y2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwor
CisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUg
d2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4s
IGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
KTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1Qw
KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZh
bHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgR1BSUmVnIHZhbHVlID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0
aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNh
c2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRp
dGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBT
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhp
cyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0
Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRj
aDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwg
dmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NTksMTI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAg
ICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAg
ICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwot
Ci0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMDkwLDI2IEBAIHZvaWQg
SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMTgsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC01MTUsNjUgKzExNDksMzA1IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0
IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNp
YWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRh
ZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29t
cGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3Jo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3Rl
eHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8g
Z3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUg
PSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlw
ZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0Vx
ID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBE
b3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAg
ICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMy
KHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAg
Y29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/
IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1
YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAg
ICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMy
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qg
c2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQ
UikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0
cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQog
Ci0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BS
UmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJ
bXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0g
cmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwor
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBq
ZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4o
KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0NjMsMTUwIEBAIHZv
aWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29k
ZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhz
cmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
b29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAg
ICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1
dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFy
ZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJl
c3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2
ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAg
ICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290
byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAg
Z290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQot
ICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQg
aXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdv
dWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElm
TnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMy
LCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcg
YWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwg
dGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcg
b25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwot
ICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0
KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hC
b29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsK
KworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENl
bGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1w
bGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmds
ZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQg
aWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0
cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkg
dG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAor
ICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwg
YmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVz
IGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNl
bGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwg
cmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJl
Y2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUg
c2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBK
U1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAg
IGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRP
Sy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRv
IGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9y
NjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qy
KSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3Qg
dGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAg
ICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJ
ZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDAp
KTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNjc0LDY4ICsxNjI0LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFK
dW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsK
KyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3Vi
bGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAg
IGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMp
KSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9i
amVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BS
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9s
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQ
Uik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUu
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIo
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCBy
aHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
Q291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKwor
ICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBk
byAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxl
ZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8
IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2Vu
OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2Yg
dGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJ
bnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1
ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJm
bG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51
bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAg
ICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVn
VDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0
ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBh
cmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1
YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93
IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMp
LgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNv
bWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5
IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCBy
ZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RF
cSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwu
bGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhp
Z2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAg
IElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8g
c2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRh
a2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAg
ICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisK
KyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCBy
aWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRo
YXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJh
bmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlz
IGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3cs
IGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51
bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAg
ICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAg
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUp
OworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVn
VDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAg
b3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9y
RXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdl
dCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cyku
CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwg
d2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVn
VDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZp
cnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0
Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAg
bGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9L
LmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFy
Z2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxs
cyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAg
ICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRh
cmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzY1LDIx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGls
ZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxl
T3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNs
b3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVn
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJl
ZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBp
c0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlz
KTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1i
ZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50
KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQo
aW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhp
cyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5j
aElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1
bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlz
KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAK
ICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjAzMywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29k
ZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUp
ICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVy
YW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVH
UFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSAr
MjA2NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJs
ZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRp
bmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0g
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTkyMiw5ICsyMDg5LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFj
dGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFi
bGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIx
MTMsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBT
dHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChq
dW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRH
UFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxG
b3JDYWxsKCk7CiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVz
cygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIo
WmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBz
dGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdn
ZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBz
dGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBp
c0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBh
cmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
MCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
LSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOworICAgICAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQo
Y29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVu
dEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwot
ICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBh
cmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9P
UFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRl
QmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNu
J3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJz
IHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5n
CiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAg
IHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7
ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3Io
dmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI2NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNj
b3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVu
Y3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA0NSwxMyArMjI4OCw4MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hl
ZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0g
Ynl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIs
IHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0
OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYm
IHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdy
ZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5
cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWND
ZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAg
ICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNE
c3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBO
byBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOwor
ICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0
KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwg
c3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAg
IGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAg
aWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3Jj
RHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7
Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkp
OworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1
OSw2ICsyMzY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8
SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAg
UmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVn
ID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzIzNzksMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdU
NDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1w
MzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUpOworICAgICAgICBn
cHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wNC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsK
KyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1
cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+
Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICBj
YWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5z
dXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3Rl
ZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2NCArMjQyMSwzMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRk
cmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNj
cmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNj
cmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVj
RW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGgg
ZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjQsNiArMjQ2OCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6
emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2
bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxv
YWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2
NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZp
bml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjQ5MiwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6
YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJl
Z2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
IAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1MDksMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50
cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBj
YW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
aXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjUzNSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFi
c29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OwogfQogCkBAIC0xMjQ1LDggKzI1NDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpz
Q2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVj
dDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVn
RXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgpAQCAtMTI1NiwyMyArMjU2Niw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisg
ICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVt
cGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3Bl
LT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNl
KCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3By
KCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNl
bHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2wo
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6
b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4
ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsK
ICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2MzAsNDUgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQ
UiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3Vs
dC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgp
KQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3Bl
R1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vu
ZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1
bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9w
Y29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjY5OSwx
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJn
YzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzIwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwor
CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0
ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVt
cC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFy
Z0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5k
ZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BS
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzUz
LDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIH0KIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgwOCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7Cisg
ICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODM2
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGltcGxlbWVudCB0aGlzCisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsy
ODYzLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVt
cCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAK
ICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4ODAsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyAr
MjkxMCw5MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVt
ZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQg
aW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFu
ZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAKLSAgICAvLyBDaGVjayB0aGUg
c3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhl
IGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUg
YWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1l
c0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QyKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVt
ZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vz
cworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
aW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNl
R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9m
TGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShp
bmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRl
cmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQs
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIC8vIENoZWNrIHRo
ZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVB
Y2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOworICAgICAgICBzaWduRXh0
ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogCi0gICAg
Ly8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0
aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVn
MzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMwMDUsNTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
ICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMy
T3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4
KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAg
ICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAg
ICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdU
MCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJl
c3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qx
LCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVj
dG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQ
UiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTU3NCwyMSArMzA1OSw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5k
ZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMy
T3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVy
YXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQ
UiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVt
cC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQ
UiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRv
ckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRl
eEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJl
Z1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQ
Uik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3Ro
ZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzExMyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hl
ZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwog
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
VG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYg
KzMxNzUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRv
d0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxG
cmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzE5Miw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxs
KCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFy
Z0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9i
bGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAgLTE3MDIsMTEgKzMyMjUs
MjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7
Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6Ondp
dGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1Qw
LCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzI0Niw0OCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1Nr
aXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0g
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7
Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7
CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBK
dW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1t
MzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tp
cCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6
ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3Ro
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAg
emVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwog
I2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszMjk1LDk5
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJv
dW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
aW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVk
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwg
cmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0
T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
aW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAg
IG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Cisg
ICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90
eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7
CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hH
UFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09
IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKCwg
dmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2
YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMp
OwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBl
KHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNs
b3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0K
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAg
ICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDks
NyArNTAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJl
Z2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBw
aW5nIG9uIEFSTS4KQEAgLTU0Nyw4ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC01ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDkg
KzUxLDExMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFs
dWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJv
cGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2Vl
bklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVu
dGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIs
IHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVz
ZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2Vs
bENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRH
UFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5
R1BSKTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0K
KworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eUdQUikp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwg
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgcmVzdWx0R1BS
LCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5
KSwgU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1i
b2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQog
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNl
cyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRl
eDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAs
IHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKLSAgICB9CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY0LDc0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworCisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDUsNiArMjQyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29ucwogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMuLi4uCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0zMzQsNyArNDMyLDcgQEAgSklUUHV0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICs0NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVD
TUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0g
WyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNv
ZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC0zNTAsMTMgKzQ0OCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAg
ICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcyLDQ5ICs0NjksMTA1IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vz
c29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nl
c3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRl
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9
IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsK
KyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBi
YXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9w
ZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUu
bV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
YWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmli
dXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3Nv
ciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JH
UFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNj
ZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00MjQsMTggKzU3Nyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJh
c2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhl
IGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4K
QEAgLTQ0NCwxMCArNjMxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNDU3LDEyICs2NDIs
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00OTMsMTAgKzY4NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTUzNywxMCArNzI2LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBA
IC01NzYsMTAgKzc2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjQ2LDEwICs4MzEsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NjMsMTAgKzg0Niw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MTIsMTAgKzg5Myw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCkBAIC03NDksMTAgKzkyOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEyMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMTg2
LDEwICsxMzYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgewpAQCAtMTIyOCw2ICsxNDAxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyhjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0
dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBP
T1BTCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9k
ZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCiAgICAg
SnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTEyNTIsNiArMTQyOCw5IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBicmVha3Bv
aW50KCk7IC8vIE9PUFMKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSkKQEAgLTEzNzksNiArMTU1OCw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
UHV0QnlWYWxXaXQKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVy
IG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogYXVkaXQgYWxs
IGNhbGxzIHRvIGVtaXRXcml0ZUJhcnJpZXIgZm9yIExPTCBzaW5jZSB0aGlzIG1heSBtYWtlIGNh
bGxzIHRvIEMKICAgICBBU1NFUlQobW9kZSA9PSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSk7CiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lciwg
VmlydHVhbFJlZ2lzdGVyKCksIG1vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRl
eChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ld
OyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1f
bWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6
dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsK
KyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZh
c3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwog
I2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29k
ZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAg
ICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5
U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0
eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRl
cnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAg
ICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0
aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413979</attachid>
            <date>2020-11-12 15:54:55 -0800</date>
            <delta_ts>2020-11-12 16:01:02 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>331165</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgp
KSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzcsNyBAQCB2b2lkIEpJ
VDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTk0LDMyIEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9P
UChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBc
CiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBj
YXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYg
KHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAg
ICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlv
biBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzUsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBo
LT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90
YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRC
bG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Qcmlv
ckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3Nv
ciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1f
c3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vz
c29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVj
ZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJv
bVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODcsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2Rl
T2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwx
MiArMTQyOCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2Vz
LmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3Ig
KFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ4LDE4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93
OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RU
by5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBt
YW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09Q
UzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8v
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAx
KS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVn
ZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNl
UHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91
bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAg
LTc3NCw2ICsxNjkyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzog
aW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4
aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2lu
dCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk4Myw2MTggQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVt
cExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJT
ZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFu
azo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhy
ZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxs
b3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBS
ZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1
dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNl
dD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgo
KQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitH
UFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0g
aGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpj
bG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5
IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAg
IGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcmVnVmFsdWUocmVnKS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJh
bmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUo
cmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgewor
ICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9w
IGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxs
b2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30K
Kwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZw
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOwor
CisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9
CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklU
OjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGpp
dCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7
Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUiho
aW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJU
ZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcg
SklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7
CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVu
bG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQorewor
ICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEg
Y29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklU
OjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIp
OworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3By
ID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7
CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7
CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAg
ICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAg
ICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQu
cHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOwor
fQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJh
bmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1f
aml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09Q
UzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAg
ICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dw
cik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVy
YW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKwor
RlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAg
ICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVt
cCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91Ymxl
KGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29w
ZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5j
bHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklU
LmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1h
cC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVk
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxs
TGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0
YWJsZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAg
ICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0
KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcg
U2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAg
ICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZv
ciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBT
b21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVu
Y2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZv
aWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAg
ICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
LSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJS
ZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNDk2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAt
NDg0LDExICs1MDUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQg
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjQzLDY5ICs2NzMsNjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7
CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lk
IGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZv
aWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2
b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9p
ZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0g
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcy
OCw4ICs3NTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBK
U1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3
NzQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAg
ICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJ
bnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGlu
ayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxp
bmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisg
ICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytp
dGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAg
IHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50
cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5r
QWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xv
d0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9v
bCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0
KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dD
YXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wg
YiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAg
ICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAg
ICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Y29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NDYsMjI4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAg
ICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRl
bXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJU
ZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJ
VCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRz
IGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdn
ZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYg
bV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5E
b3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBl
IGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBm
aWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9y
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1Jl
Zy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnBy
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZw
cjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxv
Y2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOwor
ICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAg
ICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZw
cjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNw
ZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVT
dHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFu
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZv
ciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBo
aW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAg
ICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpT
VmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0
aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAg
ICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBT
YXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcg
KzExODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9q
bXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3Jk
PiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2Nv
cGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzEyMjMsNzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAg
IC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisg
ICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQ
UlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52
YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcm
IG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIu
Z3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAg
ICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVj
dCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07Cisg
ICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNB
bGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1Zh
bHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAh
PSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhl
ci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAg
IE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVy
TWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tT
dGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9S
ZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBv
dGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnBy
b3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgp
ID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAg
VmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJs
b2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+
PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAg
ICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8SnVt
cExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEs
IHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewog
ICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGlu
IHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBp
bW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0
ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMu
Z3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5m
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRp
b24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiArMjk0LDE2IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3Ax
LCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24s
IGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsK
IAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBA
IC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMy
NSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7
CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEy
ICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMg
bm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwy
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwog
ICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIE9PUFM6IHNsb3cg
cGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyAr
NDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90
SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNDg3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hh
cmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNTc2LDEzIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMCAr
NzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVt
aXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRO
ZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIo
KSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7
CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlm
dChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC0xMjE1LDMyICsxMjcw
LDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJE
b3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJ
Qyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAg
ZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAgYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzMCw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwxNCArNDA3LDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxT
bG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
TmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1MjUs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwog
ICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhl
IGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2Vsc2UKQEAgLTE1OCw2ICsxNTksNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEpOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlz
IG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCkBAIC0xNjYsMjUgKzE2OCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4
KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hp
bGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09
IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4OSwzNiBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFs
dWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1w
IGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyBy
ZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsK
KyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCku
Ynl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsK
KyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAg
ICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6
IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwg
ZHN0KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFk
ZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1
bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhp
cyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAm
IGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQo
anVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBp
bnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZh
bHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmls
aW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwogI2Vu
ZGlmCkBAIC0zMzgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSkKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRh
ZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NCw2IEBAIEFMV0FZU19JTkxJ
TkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVl
KGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
Zj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9P
UFM6IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIg
YWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1
dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAg
aWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJl
ZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9y
UmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7Cisg
ICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7
CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsK
ICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2Rz
dCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVj
RmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5t
X29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25z
dHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhh
c0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFu
Y2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBp
bnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1
Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRo
aXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMs
IGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAg
ICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFu
Y2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlm
IHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0
b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5j
ZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwor
ICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3Ig
J0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBD
LUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVj
dG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEwLDkzIEBA
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJh
c2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJl
IGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBn
ZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8g
dmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8v
IHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5j
ZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1
ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsK
KyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVt
cCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBw
cm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAu
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1w
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRo
aXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90
b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdw
cigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFs
dWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCks
CisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAg
ICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZl
bHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwg
c2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVz
ZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7
CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZh
bCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBT
eW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAg
ICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAg
ICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAg
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNl
T2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90
eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0Nl
bGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwg
cmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwor
ICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAg
ICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRl
IG90aGVyIGhlcmU/CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAK
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVO
dWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVz
dDY0KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1i
ZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUg
c3BlY3VsYXRlIG51bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1
dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJU
YWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsK
LSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0
KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0Uo
QklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJ
bnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19j
ZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBh
cmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
dHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTgg
KzYyNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZh
bHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFi
b3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5r
KHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRo
ZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5
LDE1ICs3MTEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0u
bGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0u
bGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Mzg2LDUyICs3NTQsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0
cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVj
dWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
eW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNo
SWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlz
U3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmlu
ZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRv
IGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
aWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9Owor
ICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5j
dGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9u
TmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMiha
ZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxp
bmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRj
LgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBh
Z2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xl
YW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxv
dyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNw
ZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hp
Y2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwor
CisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUg
d2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4s
IGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
KTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1Qw
KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZh
bHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgR1BSUmVnIHZhbHVlID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0
aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNh
c2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRp
dGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBT
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhp
cyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0
Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRj
aDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwg
dmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NTksMTI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAg
ICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAg
ICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwot
Ci0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMDkwLDI2IEBAIHZvaWQg
SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMTgsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC01MTUsNjUgKzExNDksMzA1IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0
IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNp
YWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRh
ZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29t
cGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3Jo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3Rl
eHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8g
Z3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUg
PSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlw
ZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0Vx
ID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBE
b3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAg
ICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMy
KHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAg
Y29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/
IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1
YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAg
ICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMy
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qg
c2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQ
UikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0
cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQog
Ci0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BS
UmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJ
bXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0g
cmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwor
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBq
ZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4o
KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0NjMsMTUwIEBAIHZv
aWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29k
ZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhz
cmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
b29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAg
ICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1
dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFy
ZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJl
c3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2
ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAg
ICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290
byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAg
Z290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQot
ICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQg
aXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdv
dWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElm
TnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMy
LCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcg
YWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwg
dGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcg
b25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwot
ICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0
KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hC
b29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsK
KworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENl
bGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1w
bGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmds
ZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQg
aWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0
cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkg
dG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAor
ICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwg
YmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVz
IGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNl
bGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwg
cmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJl
Y2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUg
c2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBK
U1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAg
IGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRP
Sy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRv
IGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9y
NjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qy
KSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3Qg
dGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAg
ICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJ
ZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDAp
KTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNjc0LDY4ICsxNjI0LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFK
dW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsK
KyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3Vi
bGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAg
IGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMp
KSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9i
amVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BS
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9s
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQ
Uik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUu
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIo
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCBy
aHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
Q291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKwor
ICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBk
byAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxl
ZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8
IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2Vu
OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2Yg
dGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJ
bnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1
ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJm
bG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51
bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAg
ICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVn
VDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0
ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBh
cmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1
YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93
IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMp
LgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNv
bWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5
IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCBy
ZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RF
cSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwu
bGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhp
Z2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAg
IElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8g
c2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRh
a2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAg
ICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisK
KyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCBy
aWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRo
YXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJh
bmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlz
IGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3cs
IGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51
bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAg
ICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAg
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUp
OworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVn
VDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAg
b3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9y
RXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdl
dCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cyku
CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwg
d2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVn
VDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZp
cnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0
Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAg
bGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9L
LmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFy
Z2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxs
cyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAg
ICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRh
cmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzY1LDIx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGls
ZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxl
T3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNs
b3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVn
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJl
ZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBp
c0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlz
KTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1i
ZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50
KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQo
aW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhp
cyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5j
aElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1
bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlz
KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAK
ICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjAzMywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29k
ZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUp
ICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVy
YW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVH
UFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSAr
MjA2NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJs
ZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRp
bmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0g
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTkyMiw5ICsyMDg5LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFj
dGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFi
bGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIx
MTMsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBT
dHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChq
dW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRH
UFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxG
b3JDYWxsKCk7CiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVz
cygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIo
WmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBz
dGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdn
ZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBz
dGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBp
c0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBh
cmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
MCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
LSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOworICAgICAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQo
Y29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVu
dEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwot
ICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBh
cmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9P
UFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRl
QmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNu
J3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJz
IHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5n
CiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAg
IHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7
ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3Io
dmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI2NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNj
b3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVu
Y3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA0NSwxMyArMjI4OCw4MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hl
ZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0g
Ynl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIs
IHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0
OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYm
IHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdy
ZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5
cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWND
ZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAg
ICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNE
c3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBO
byBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOwor
ICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0
KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwg
c3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAg
IGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAg
aWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3Jj
RHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7
Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkp
OworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1
OSw2ICsyMzY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8
SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAg
UmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVn
ID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzIzNzksMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdU
NDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1w
MzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUpOworICAgICAgICBn
cHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wNC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsK
KyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1
cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+
Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICBj
YWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5z
dXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3Rl
ZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2NCArMjQyMSwzMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRk
cmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNj
cmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNj
cmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVj
RW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGgg
ZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjQsNiArMjQ2OCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6
emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2
bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxv
YWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2
NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZp
bml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjQ5MiwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6
YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJl
Z2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
IAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1MDksMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50
cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBj
YW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
aXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjUzNSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFi
c29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OwogfQogCkBAIC0xMjQ1LDggKzI1NDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpz
Q2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVj
dDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVn
RXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgpAQCAtMTI1NiwyMyArMjU2Niw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisg
ICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVt
cGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3Bl
LT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNl
KCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3By
KCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNl
bHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2wo
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6
b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4
ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsK
ICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2MzAsNDUgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQ
UiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3Vs
dC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgp
KQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3Bl
R1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vu
ZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1
bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9w
Y29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjY5OSwx
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJn
YzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzIwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwor
CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0
ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVt
cC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFy
Z0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5k
ZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BS
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzUz
LDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIH0KIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgwOCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7Cisg
ICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODM2
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGltcGxlbWVudCB0aGlzCisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsy
ODYzLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVt
cCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAK
ICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4ODAsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyAr
MjkxMCw5MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVt
ZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQg
aW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFu
ZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAKLSAgICAvLyBDaGVjayB0aGUg
c3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhl
IGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUg
YWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1l
c0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QyKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVt
ZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vz
cworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
aW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNl
R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9m
TGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShp
bmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRl
cmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQs
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIC8vIENoZWNrIHRo
ZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVB
Y2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOworICAgICAgICBzaWduRXh0
ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogCi0gICAg
Ly8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0
aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVn
MzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMwMDUsNTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
ICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMy
T3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4
KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAg
ICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAg
ICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdU
MCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJl
c3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qx
LCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVj
dG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQ
UiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTU3NCwyMSArMzA1OSw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5k
ZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMy
T3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVy
YXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQ
UiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVt
cC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQ
UiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRv
ckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRl
eEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJl
Z1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQ
Uik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3Ro
ZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzExMyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hl
ZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwog
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
VG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYg
KzMxNzUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRv
d0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxG
cmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzE5Miw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxs
KCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFy
Z0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9i
bGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAgLTE3MDIsMTEgKzMyMjUs
MjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7
Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6Ondp
dGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1Qw
LCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzI0Niw0OCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1Nr
aXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0g
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7
Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7
CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBK
dW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1t
MzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tp
cCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6
ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3Ro
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAg
emVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwog
I2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszMjk1LDk5
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJv
dW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
aW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVk
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwg
cmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0
T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
aW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAg
IG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Cisg
ICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90
eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7
CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hH
UFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09
IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKCwg
dmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2
YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMp
OwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBl
KHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNs
b3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0K
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAg
ICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDks
NyArNTAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJl
Z2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBw
aW5nIG9uIEFSTS4KQEAgLTU0Nyw4ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC01ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDkg
KzUxLDExMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFs
dWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJv
cGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2Vl
bklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVu
dGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIs
IHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVz
ZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2Vs
bENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRH
UFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5
R1BSKTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0K
KworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eUdQUikp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwg
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgcmVzdWx0R1BS
LCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5
KSwgU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1i
b2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQog
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNl
cyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRl
eDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAs
IHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKLSAgICB9CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY0LDc0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworCisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDUsNiArMjQyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29ucwogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMuLi4uCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0zMzQsNyArNDMyLDcgQEAgSklUUHV0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICs0NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVD
TUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0g
WyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNv
ZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC0zNTAsMTMgKzQ0OCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAg
ICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcyLDQ5ICs0NjksMTA1IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vz
c29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nl
c3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRl
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9
IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsK
KyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBi
YXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9w
ZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUu
bV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
YWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmli
dXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3Nv
ciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JH
UFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNj
ZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00MjQsMTggKzU3Nyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJh
c2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhl
IGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4K
QEAgLTQ0NCwxMCArNjMxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNDU3LDEyICs2NDIs
MTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BS
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOSArNjYyLDY5IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNl
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9w
ZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9w
ZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwoYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHBy
b3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAog
ICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5j
ZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCkBAIC00OTMsNjUgKzczMyw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERl
bEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgU2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7
CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsK
KyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIH0KIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTU3NiwxMCArODQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NDYsMTAg
KzkxMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTY2MywxMCArOTI4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25z
dCBJbgogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcxMiwx
MCArOTc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKQEAgLTc0OSwxMCArMTAxMCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwMzAsMTAgKzEyODksOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CkBAIC0xMTg2LDEwICsxNDQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAg
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTIyOCw2ICsxNDgzLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdAogCiB2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
YnJlYWtwb2ludCgpOyAvLyBPT1BTCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0
dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3Vs
ZEZpbHRlckJhc2UuCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAg
LTEyNTIsNiArMTUxMCw5IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdp
c3QKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFMKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKQEAgLTEzNzksNiArMTY0MCw3IEBAIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAg
Ly8gT09QUzogYXVkaXQgYWxsIGNhbGxzIHRvIGVtaXRXcml0ZUJhcnJpZXIgZm9yIExPTCBzaW5j
ZSB0aGlzIG1heSBtYWtlIGNhbGxzIHRvIEMKICAgICBBU1NFUlQobW9kZSA9PSBVbmNvbmRpdGlv
bmFsV3JpdGVCYXJyaWVyIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSk7CiAgICAgZW1pdFdy
aXRlQmFycmllcihvd25lciwgVmlydHVhbFJlZ2lzdGVyKCksIG1vZGUpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2Vt
Ymxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkp
IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkg
IGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxU
LCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpD
YWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3
YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5z
cGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlm
IChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5t
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29s
IGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1
enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lz
dGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2ws
IGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413980</attachid>
            <date>2020-11-12 16:01:02 -0800</date>
            <delta_ts>2020-11-12 20:44:57 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>331281</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgp
KSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzcsNyBAQCB2b2lkIEpJ
VDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTk0LDMyIEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9P
UChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBc
CiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBj
YXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYg
KHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAg
ICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlv
biBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzUsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBo
LT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90
YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRC
bG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Qcmlv
ckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3Nv
ciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1f
c3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vz
c29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVj
ZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJv
bVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODcsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2Rl
T2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwx
MiArMTQyOCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2Vz
LmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3Ig
KFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ4LDE4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93
OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RU
by5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBt
YW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09Q
UzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8v
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAx
KS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVn
ZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNl
UHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91
bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAg
LTc3NCw2ICsxNjkyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzog
aW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4
aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2lu
dCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk4Myw2MTggQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVt
cExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJT
ZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFu
azo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhy
ZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxs
b3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBS
ZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1
dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNl
dD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgo
KQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitH
UFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0g
aGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpj
bG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5
IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAg
IGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcmVnVmFsdWUocmVnKS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJh
bmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUo
cmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgewor
ICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9w
IGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxs
b2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30K
Kwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZw
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOwor
CisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9
CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklU
OjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGpp
dCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7
Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUiho
aW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJU
ZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcg
SklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7
CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVu
bG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQorewor
ICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEg
Y29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklU
OjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIp
OworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3By
ID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7
CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7
CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAg
ICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAg
ICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQu
cHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOwor
fQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJh
bmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1f
aml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09Q
UzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAg
ICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dw
cik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVy
YW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKwor
RlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAg
ICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVt
cCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91Ymxl
KGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29w
ZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5j
bHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklU
LmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1h
cC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVk
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxs
TGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0
YWJsZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAg
ICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0
KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcg
U2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAg
ICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZv
ciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBT
b21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVu
Y2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZv
aWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAg
ICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
LSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJS
ZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNDk2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAt
NDg0LDExICs1MDUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQg
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjQzLDY5ICs2NzMsNjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7
CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lk
IGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZv
aWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2
b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9p
ZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0g
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTcy
OCw4ICs3NTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBK
U1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3
NzQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAg
ICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJ
bnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGlu
ayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxp
bmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisg
ICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytp
dGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAg
IHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50
cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5r
QWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xv
d0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9v
bCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0
KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dD
YXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wg
YiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAg
ICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAg
ICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Y29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NDYsMjI4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAg
ICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRl
bXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJU
ZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJ
VCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRz
IGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdn
ZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYg
bV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5E
b3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBl
IGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBm
aWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9y
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1Jl
Zy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnBy
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZw
cjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxv
Y2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOwor
ICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAg
ICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZw
cjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNw
ZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVT
dHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFu
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZv
ciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBo
aW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAg
ICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpT
VmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0
aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAg
ICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBT
YXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcg
KzExODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9q
bXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3Jk
PiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2Nv
cGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzEyMjMsNzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAg
IC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisg
ICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQ
UlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52
YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcm
IG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIu
Z3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAg
ICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVj
dCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07Cisg
ICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNB
bGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1Zh
bHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAh
PSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhl
ci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAg
IE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVy
TWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tT
dGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9S
ZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBv
dGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnBy
b3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgp
ID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAg
VmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJs
b2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+
PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAg
ICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8SnVt
cExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICAvLyBPT1BTOiB2ZXJpZnkgTmFOCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEs
IHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MSw0NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewog
ICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGlu
IHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBp
bW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0
ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMu
Z3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5m
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgY2xvYmJlcmluZyB0aGUgcmVncworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRp
b24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwxNiArMjk0LDE2IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3Ax
LCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24s
IGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsK
IAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBzbG93IHBhdGg6CkBAIC0yODksOCArMzExLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBA
IC0yOTksOCArMzE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMy
NSw4ICszNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7
CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEy
ICszNjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMg
bm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwy
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CkBAIC0zNjgsOSArMzgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwog
ICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KQEAgLTQzNSwxMCArNDUwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIE9PUFM6IHNsb3cg
cGF0aCBzbG93IG9wCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiB9CkBAIC00NTEsNyArNDY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyAr
NDc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90
SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNDg3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hh
cmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNTc2LDEzIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMCAr
NzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVt
aXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRO
ZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZSk7CkBAIC03ODYsNiArNzk3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHRHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShpbnB1dC5ncHIo
KSwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIG5vdDMyKHJlc3VsdEdQUi5ncHIoKSk7
CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gT09QUworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtOTAxLDE2ICs5MjQsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlm
dChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtb3ZlKGxocy5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC0xMjE1LDMyICsxMjcw
LDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJE
b3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJ
Qyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAg
ZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAgYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzMCw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTQxMSwxNCArNDA3LDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTEzLDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxT
bG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
TmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1MjUs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwog
ICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhzbG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhl
IGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2Vsc2UKQEAgLTE1OCw2ICsxNTksNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEpOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlz
IG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCkBAIC0xNjYsMjUgKzE2OCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4
KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hp
bGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09
IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4OSwzNiBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFs
dWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1w
IGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyBy
ZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsK
KyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCku
Ynl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAg
ICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsK
KyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAg
ICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6
IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwg
ZHN0KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFk
ZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1
bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhp
cyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAm
IGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQo
anVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBp
bnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZh
bHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmls
aW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwogI2Vu
ZGlmCkBAIC0zMzgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSkKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRh
ZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NCw2IEBAIEFMV0FZU19JTkxJ
TkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVl
KGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
Zj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9P
UFM6IE1ha2UgdGhpcyBiZXR0ZXIgZm9yIGNvbnN0YW50cyB3aGljaCBhcmVuJ3QgcmVnaXN0ZXIg
YWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1
dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAg
aWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEwMSw1MyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJl
ZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9y
UmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7Cisg
ICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7
CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsK
ICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2Rz
dCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVj
RmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5t
X29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNTcsNTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25z
dHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhh
c0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFu
Y2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBp
bnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1
Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRo
aXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMs
IGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAg
ICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFu
Y2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlm
IHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0
b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5j
ZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwor
ICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3Ig
J0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBD
LUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVj
dG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjEwLDkzIEBA
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJh
c2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJl
IGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBn
ZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8g
dmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8v
IHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5j
ZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1
ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsK
KyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVt
cCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBw
cm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAu
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1w
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRo
aXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90
b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdw
cigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFs
dWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCks
CisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAg
ICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZl
bHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwg
c2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVz
ZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7
CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZh
bCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBT
eW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAg
ICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAg
ICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAg
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNl
T2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90
eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxMSwyOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDEsNzIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0Nl
bGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwg
cmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwor
ICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAg
ICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDE1LDM0IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgc3BlY3VsYXRl
IG90aGVyIGhlcmU/CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAK
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVO
dWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDUwLDMwIEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVz
dDY0KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDgxLDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1i
ZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUg
c3BlY3VsYXRlIG51bWJlciBoZXJlIGlmIHByb2ZpbGluZyBzYXlzIHNvPworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1
dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MTIsNTYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJU
YWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsK
LSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0
KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0Uo
QklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJ
bnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU3OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19j
ZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBh
cmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
dHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTgg
KzYyNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZh
bHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFi
b3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5r
KHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs2OTIsMTIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRo
ZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5
LDE1ICs3MTEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0u
bGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0u
bGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Mzg2LDUyICs3NTQsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0
cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVj
dWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
eW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNo
SWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlz
U3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmlu
ZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRv
IGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
aWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9Owor
ICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5j
dGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9u
TmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMiha
ZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxp
bmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRj
LgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBh
Z2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xl
YW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxv
dyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNw
ZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hp
Y2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwor
CisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUg
d2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4s
IGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
KTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1Qw
KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZh
bHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgR1BSUmVnIHZhbHVlID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0
aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNh
c2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRp
dGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBT
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhp
cyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0
Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRj
aDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwg
dmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NTksMTI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAg
ICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAg
ICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwot
Ci0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMDkwLDI2IEBAIHZvaWQg
SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMTgsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC01MTUsNjUgKzExNDksMzA1IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0
IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNp
YWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRh
ZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29t
cGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3Jo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3Rl
eHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8g
Z3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUg
PSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlw
ZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0Vx
ID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBE
b3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAg
ICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMy
KHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAg
Y29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/
IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1
YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAg
ICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMy
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qg
c2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQ
UikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0
cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQog
Ci0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BS
UmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJ
bXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0g
cmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwor
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBq
ZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4o
KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0NjMsMTUwIEBAIHZv
aWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29k
ZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhz
cmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
b29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAg
ICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1
dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFy
ZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJl
c3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2
ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAg
ICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290
byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAg
Z290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQot
ICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQg
aXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdv
dWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElm
TnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMy
LCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcg
YWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwg
dGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcg
b25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwot
ICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0
KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hC
b29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsK
KworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENl
bGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1w
bGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmds
ZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQg
aWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0
cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkg
dG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAor
ICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwg
YmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVz
IGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNl
bGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwg
cmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJl
Y2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUg
c2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBK
U1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAg
IGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRP
Sy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRv
IGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9y
NjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qy
KSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3Qg
dGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAg
ICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJ
ZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDAp
KTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNjc0LDY4ICsxNjI0LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFK
dW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsK
KyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3Vi
bGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAg
IGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMp
KSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9i
amVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BS
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9s
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQ
Uik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUu
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIo
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCBy
aHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
Q291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKwor
ICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBk
byAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxl
ZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8
IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2Vu
OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2Yg
dGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJ
bnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1
ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJm
bG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51
bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAg
ICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVn
VDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0
ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBh
cmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1
YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93
IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMp
LgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNv
bWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5
IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCBy
ZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RF
cSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwu
bGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhp
Z2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAg
IElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8g
c2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRh
a2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAg
ICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisK
KyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCBy
aWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRo
YXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJh
bmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlz
IGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3cs
IGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51
bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAg
ICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAg
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUp
OworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVn
VDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAg
b3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9y
RXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdl
dCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cyku
CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwg
d2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVn
VDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZp
cnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0
Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAg
bGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9L
LmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFy
Z2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxs
cyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAg
ICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRh
cmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzY1LDIx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGls
ZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxl
T3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNs
b3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVn
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJl
ZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBp
c0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlz
KTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1i
ZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50
KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQo
aW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhp
cyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5j
aElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1
bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlz
KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAK
ICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjAzMywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29k
ZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUp
ICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVy
YW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVH
UFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSAr
MjA2NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJs
ZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRp
bmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0g
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTkyMiw5ICsyMDg5LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFj
dGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFi
bGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIx
MTMsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBT
dHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChq
dW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRH
UFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxG
b3JDYWxsKCk7CiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVz
cygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIo
WmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBz
dGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdn
ZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBz
dGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBp
c0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBh
cmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
MCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
LSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOworICAgICAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQo
Y29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVu
dEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwot
ICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBh
cmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9P
UFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRl
QmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNu
J3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJz
IHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5n
CiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAg
IHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7
ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3Io
dmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI2NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNj
b3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVu
Y3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA0NSwxMyArMjI4OCw4MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hl
ZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0g
Ynl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIs
IHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0
OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYm
IHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdy
ZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5
cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWND
ZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAg
ICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNE
c3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBO
byBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOwor
ICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0
KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwg
c3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAg
IGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAg
aWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3Jj
RHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7
Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkp
OworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1
OSw2ICsyMzY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8
SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAg
UmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVn
ID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzIzNzksMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdU
NDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1w
MzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUpOworICAgICAgICBn
cHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wNC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsK
KyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1
cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+
Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICBj
YWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5z
dXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3Rl
ZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2NCArMjQyMSwzMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRk
cmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNj
cmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNj
cmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVj
RW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGgg
ZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjQsNiArMjQ2OCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6
emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2
bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxv
YWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2
NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZp
bml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjQ5MiwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6
YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJl
Z2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
IAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1MDksMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50
cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBj
YW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
aXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjUzNSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFi
c29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OwogfQogCkBAIC0xMjQ1LDggKzI1NDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpz
Q2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVj
dDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVn
RXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgpAQCAtMTI1NiwyMyArMjU2Niw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisg
ICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVt
cGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3Bl
LT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNl
KCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3By
KCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNl
bHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2wo
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6
b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4
ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsK
ICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2MzAsNDUgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQ
UiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3Vs
dC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgp
KQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3Bl
R1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vu
ZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1
bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9w
Y29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjY5OSwx
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJn
YzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzIwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwor
CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0
ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVt
cC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFy
Z0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5k
ZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BS
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzUz
LDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIH0KIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgwOCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7Cisg
ICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODM2
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGltcGxlbWVudCB0aGlzCisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsy
ODYzLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVt
cCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAK
ICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4ODAsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyAr
MjkxMCw5MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVt
ZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQg
aW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFu
ZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAKLSAgICAvLyBDaGVjayB0aGUg
c3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhl
IGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUg
YWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1l
c0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QyKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVt
ZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vz
cworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
aW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNl
R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9m
TGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShp
bmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRl
cmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQs
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIC8vIENoZWNrIHRo
ZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVB
Y2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOworICAgICAgICBzaWduRXh0
ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogCi0gICAg
Ly8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0
aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVn
MzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMwMDUsNTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
ICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMy
T3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4
KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAg
ICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAg
ICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdU
MCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJl
c3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qx
LCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVj
dG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQ
UiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTU3NCwyMSArMzA1OSw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5k
ZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMy
T3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVy
YXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQ
UiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVt
cC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQ
UiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRv
ckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRl
eEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJl
Z1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQ
Uik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3Ro
ZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzExMyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hl
ZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwog
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
VG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYg
KzMxNzUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRv
d0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxG
cmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzE5Miw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxs
KCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFy
Z0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9i
bGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAgLTE3MDIsMTEgKzMyMjUs
MjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7
Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6Ondp
dGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1Qw
LCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzI0Niw0OCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1Nr
aXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0g
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7
Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7
CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBK
dW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1t
MzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tp
cCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6
ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3Ro
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAg
emVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwog
I2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszMjk1LDk5
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJv
dW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
aW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRP
dXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2Ug
ewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAg
SnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdU
MiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJl
Z3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMu
bGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0K
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1l
bnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJ
bW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRz
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdz
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNs
b3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAg
ICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdH
UFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVl
UmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BS
KCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0
TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAg
ICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3Vs
dFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjEx
LDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7
CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8g
cmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4ICs1NDAsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01ODYsOCArNTc3LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjMyLDgg
KzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjczLDggKzY2
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc2
Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDQ0LDgg
KzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3Qs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEy
MDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwog
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNDkgKzUxLDExMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
dmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9w
ZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7
CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIg
PSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAg
ICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRC
eVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RD
ZWxsOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChiYXNlR1BSLCByZXN1bHRHUFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5p
c1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVs
c2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9m
aWxlKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGJhc2VHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9w
ZXJ0eUdQUik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSks
IFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
YmFzZUdQUiwgcmVzdWx0R1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykp
CisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVl
OworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShw
cm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBp
ZiAoIXVzZUxPTCgpKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiAgICAgfQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRv
cDsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
aWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAg
ICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY0
LDc0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhp
cywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBw
cm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdw
cigpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAog
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwogICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9n
ZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NDUsNiArMjQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29ucwog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogSW1wbGVt
ZW50IHRoaXMuLi4uCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0zMzQs
NyArNDMyLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAg
IHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICs0NDAsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwog
Ci0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRl
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzQ0OCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcyLDQ5ICs0NjksMTA1IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUu
bV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29k
ZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vz
c29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3Ig
fTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcg
YWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
MSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jh
c2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dl
dHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1f
c2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQ
UiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVy
LCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0
ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFs
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7
Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhp
cywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3Ig
eyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRl
cywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNv
ZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywg
Ynl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAg
ICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjQsMTggKzU3Nyw1MiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAog
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ0NCwyNSArNjMxLDI3IEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3Vs
ZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTkgKzY2MSw2OSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
YmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBz
Y3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlH
UFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAg
cHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
CiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVl
bmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KQEAgLTQ5Myw2NSArNzMyLDk0IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklU
RGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRC
eUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFz
ZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTc2LDEwICs4NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY0Niwx
MCArOTEyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjYzLDEwICs5MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzEy
LDEwICs5NzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIApAQCAtNzQ5LDEwICsxMDA5LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTAzMCwxMCArMTI4OCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudElu
c3RydWN0aW9uKTsKQEAgLTExODYsMTAgKzE0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjI4LDYgKzE0ODIsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0CiAKIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBicmVha3BvaW50KCk7IC8vIE9PUFMKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZp
cnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hv
dWxkRmlsdGVyQmFzZS4KICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpA
QCAtMTI1Miw2ICsxNTA5LDkgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJl
Z2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUworCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlKQpAQCAtMTM3OSw2ICsxNjM5LDcgQEAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAg
ICAvLyBPT1BTOiBhdWRpdCBhbGwgY2FsbHMgdG8gZW1pdFdyaXRlQmFycmllciBmb3IgTE9MIHNp
bmNlIHRoaXMgbWF5IG1ha2UgY2FsbHMgdG8gQwogICAgIEFTU0VSVChtb2RlID09IFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKTsKICAgICBlbWl0
V3JpdGVCYXJyaWVyKG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgbW9kZSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNz
ZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3Qg
aSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBp
KSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5
PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9
IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6
OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0
IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQt
PnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAg
aWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQt
Pm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRy
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJv
b2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNN
RnV6emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hv
aXN0aW5nTElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414002</attachid>
            <date>2020-11-12 20:44:57 -0800</date>
            <delta_ts>2020-11-13 13:35:20 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>356412</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgp
KSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzcsNyBAQCB2b2lkIEpJ
VDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTk0LDMyIEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9P
UChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBc
CiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBj
YXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYg
KHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAg
ICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlv
biBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzUsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBo
LT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90
YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRC
bG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Qcmlv
ckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3Nv
ciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1f
c3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vz
c29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVj
ZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJv
bVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODcsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2Rl
T2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwx
MiArMTQyOCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2Vz
LmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3Ig
KFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ4LDE4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93
OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RU
by5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBt
YW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09Q
UzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8v
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAx
KS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVn
ZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNl
UHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91
bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAg
LTc3NCw2ICsxNjkyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzog
aW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4
aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2lu
dCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk4Myw2MTggQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVt
cExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJT
ZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFu
azo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhy
ZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxs
b3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBS
ZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1
dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNl
dD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgo
KQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitH
UFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0g
aGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpj
bG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5
IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAg
IGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcmVnVmFsdWUocmVnKS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJh
bmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUo
cmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgewor
ICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9w
IGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxs
b2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30K
Kwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZw
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOwor
CisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9
CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklU
OjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGpp
dCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7
Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUiho
aW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJU
ZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcg
SklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7
CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVu
bG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQorewor
ICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEg
Y29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklU
OjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIp
OworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3By
ID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7
CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7
CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAg
ICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAg
ICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQu
cHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOwor
fQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJh
bmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1f
aml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09Q
UzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAg
ICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dw
cik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVy
YW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKwor
RlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAg
ICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVt
cCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91Ymxl
KGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29w
ZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5j
bHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklU
LmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1h
cC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVk
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxs
TGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0
YWJsZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAg
ICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0
KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcg
U2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAg
ICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZv
ciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBT
b21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVu
Y2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZv
aWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAg
ICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
LSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJS
ZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNDk2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAt
NDg0LDExICs1MDUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQg
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjQzLDc1ICs2NzMsNzkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7
CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lk
IGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZv
aWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2
b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9p
ZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0g
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0g
SW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAg
ICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03Mjgs
OCArNzYyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0NiwzNCArNzc4
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVu
YW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAg
dm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBp
dGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmso
dGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
RHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2
b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5k
ZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNl
cywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoU2xv
d0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2Fz
ZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVT
RURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIg
PSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMs
IGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzkzNyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2Vu
ZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAg
dm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAg
c3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNv
bXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTUwLDIyOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAg
ICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1w
KEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVt
cCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQm
KTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBS
UmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBh
cmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2Vk
LCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFu
ZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91
YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IElu
dmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRT
dGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBm
aWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmls
dGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJh
bmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21W
YWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKwor
ICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcu
b3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZv
ck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7
CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2Nl
ZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAg
ICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAg
ICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7Cisg
ICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7
CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Io
b3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1i
ZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVj
Q2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlv
bihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
Qm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3Ig
dXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGlu
dCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAg
ICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQg
c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1Zh
bHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhl
IHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAg
ICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2
ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnBy
ZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAgLTk1Myw3ICsx
MTkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1w
VGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4g
bV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3Bp
ZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsxMjI3LDc3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91
bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAv
LyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAg
ICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJS
ZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFs
aWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxvY2VkUmVnJiBv
dGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IG90aGVyLmdw
cikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAg
ICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52
YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3Qg
UmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAg
ICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxs
b2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdWYWx1
ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgIT0g
b3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQgIT0gb3RoZXIu
bG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9IG90aGVyLmlz
QWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsK
KyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAgICBP
cGVyYW5kczxBbGxvY2VkUmVnPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1h
cDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3Rh
dGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5k
VG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVn
W2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3Ro
ZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92
ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9
PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVC
YXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZl
Y3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9j
a1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4g
bV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAg
ICAgIGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPEp1bXBM
aXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVh
bEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
LCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7Cisg
ICAgLy8gT09QUzogdmVyaWZ5IE5hTgorICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0
ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2Fz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEs
IGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRl
clRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0
cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwg
c2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIzICsxNjEsNDQgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAg
ICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0
aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUK
ICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdw
cigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnBy
KCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gT09QUzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9u
ID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMTYgKzI5NCwxNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BF
UkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
b3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRp
b24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBp
bnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAK
ICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBp
biB0aGUgc2xvdyBwYXRoOgpAQCAtMjg5LDggKzMxMSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8g
ZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8g
ZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVu
dEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIx
KTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAt
Mjk5LDggKzMxOSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjUs
OCArMzQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
IH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
KSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwog
ICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiAr
MzY2LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5v
dCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVt
cCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9
IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElm
SW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7
CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRk
NjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVn
aXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpA
QCAtMzY4LDkgKzM4Myw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsK
ICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAg
ICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CkBAIC00MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBPT1BTOiBzbG93IHBh
dGggc2xvdyBvcAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
fQpAQCAtNDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAtNDYzLDcgKzQ3
Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8v
IFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
LCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdElu
dDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzQ4Nyw3IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJh
Y3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAg
ICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzU3NiwxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmlu
c3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0
aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJv
b2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTAgKzcz
Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0
TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVn
SUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0
dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5k
IGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUp
OwpAQCAtNzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5z
dHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCks
IHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBub3QzMihyZXN1bHRHUFIuZ3ByKCkpOwor
ICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIE9PUFMKKyAgICB9CisKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwogI2Vsc2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQo
Y29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFBy
b2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbW92ZShsaHMuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2Jz
ZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFk
ZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOwogfQpAQCAtMTIxNSwzMiArMTI3MCw5
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklU
OjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAg
IEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOwor
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVy
ZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8v
IE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0
S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIo
KSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0
PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24p
KTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMq
IHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5
QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisg
ICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVy
ZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgc3ViRG91
YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0
RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3Vi
PihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMq
PihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVt
aXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSw4IEBAIGJvb2wgSklU
Ojpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5m
byogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdU
MCk7CkBAIC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQor
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9w
X2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzAsNDQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVPcENhbGw8T3BD
b25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93
Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Rh
aWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxf
ZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBp
dGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4o
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC00MTEsMTQgKzQwNywxNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0
aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAg
ICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dD
YXNlcyhzbG93Q2FzZSk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7CkBAIC01MTUsMTAgKzUxMywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5l
eHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTI1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBp
dGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
KyAgICAgICAgLy8gT09QUworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAg
ICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
c2xvd0Nhc2UpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24p
OworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBm
YXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bHNlCkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBv
biB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxl
IChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQot
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBi
eXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODksMzYgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVl
LCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBq
dW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVz
dWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7Cisg
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICAg
ICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBq
dW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRz
dCkuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1w
TGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
QVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMg
d2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBq
dW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1
bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50
IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5LDExICszMDEsMTAgQEAgQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1
ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKTsKIAotICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWUgPSByZWdUMDsKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKICNlbmRp
ZgpAQCAtMzM4LDExICszMjksMTEgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPGRlYwogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxl
ZE9wY29kZSguLi4pIHsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBH
UFJSZWcgcmVnKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRh
dGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSksIHJlZyk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5
UHJvZmlsZSogYXJyYXlQcm9maWxlKQpAQCAtMzkzLDExICszODQsNiBAQCBBTFdBWVNfSU5MSU5F
IGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4
ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0
ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAt
MTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BT
OiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMgd2hpY2ggYXJlbid0IHJlZ2lzdGVyIGFs
bG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3By
KCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMDEsNTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJy
ZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJl
Z1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcg
YWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJl
ZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAg
ICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOwor
ICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRS
ZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
ICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0Zp
bmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTU3LDUwIEBAIHZvaWQgSklUOjpl
bWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNl
R1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52
ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0
b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlz
LCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBo
YXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAg
IGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNl
R1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5j
ZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3
ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9t
aGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJh
bmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAg
ICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVj
dG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1B
UEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1l
bnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3Rv
ckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIxMCw5MyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8g
PSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNl
VmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAg
Ly8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRo
aXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBj
ZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0
X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZh
bHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBz
Y3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VP
ZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVU
ZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7Cisg
ICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAg
eyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJv
dG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdw
cigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFj
ZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlz
LCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7
CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAg
ICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9U
ZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIo
KSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVl
R1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJv
dG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAor
ICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAg
IHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4p
OworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
TG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5
KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNp
bmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2Ug
aXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwg
bXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3lt
Ym9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBw
cm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAg
ICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAg
ICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0
YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9m
c1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlw
ZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMTEsMjkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzQxLDcyIEBAIHZvaWQgSklUOjpl
bWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxs
LmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVt
cCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVt
cCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJl
c3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAg
IAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1
bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQxNSwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0ZSBv
dGhlciBoZXJlPworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ1MCwzMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2
NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ4MSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0
ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVy
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHNw
ZWN1bGF0ZSBudW1iZXIgaGVyZSBpZiBwcm9maWxpbmcgc2F5cyBzbz8KKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRH
UFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVy
VGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTEyLDU2IEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAg
ICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFn
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2
NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
ICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChy
ZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJ
R0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1NzgsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2Vs
bF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwog
Ci0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5
cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2
MjcsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZh
bHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVj
dFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1
ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAg
ICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92
ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0
aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNjkyLDEyIEBAIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUg
cmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwx
NSArNzExLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxp
bmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBt
b3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7Cisg
ICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxp
bmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19w
cm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4
Niw1MiArNzU0LDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElm
U3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0
cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBp
c1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlm
IChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBp
ZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAg
ICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25h
bWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVy
bywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5l
OiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4K
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdh
aW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFu
LCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cg
Yml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVj
dGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNo
IHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKwor
ICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdh
cyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8g
Y2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZh
bHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0
IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBh
bmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7
CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxz
ZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJl
Z1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlv
biA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVl
R1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0g
c2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNo
Mi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnBy
KCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZh
bHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gy
RlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBH
UFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZG
YWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Cisg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
Y29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFs
LCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNl
cyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2Ny
YXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMg
fTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNo
MkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gy
R1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZh
bHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTU5LDEyOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlu
cHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVm
aW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAg
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFu
Y2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIo
KTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQot
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5MCwyNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAg
ICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNTE1LDY1ICsxMTQ5LDMwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFs
UG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
UHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhw
ciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdw
Q29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0g
aXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7
CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUo
bGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBh
cmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1w
LmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAg
Y29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAg
SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihy
aHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNv
bnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFs
QW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVl
c0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAg
ICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBD
b21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAg
IFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNs
b3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIp
KTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1
ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBl
cUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAot
ICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwot
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJl
ZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
KyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1w
bDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30K
Kwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
Y29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVx
SW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBH
UFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2Up
OworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDYzLDE1MCBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3Jj
MSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9v
bCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRv
IGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVl
c0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0
cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAg
ICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBD
b3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAg
IEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElm
Tm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1
bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVs
IHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlz
IERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAg
cmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8g
ZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAg
ICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlz
IERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3Vs
ZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51
bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwg
dGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFs
bCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRo
ZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9u
bHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAg
ICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVn
VDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBh
dCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhp
bmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVk
IHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNz
dW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAg
IHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxs
KQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxl
bWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUg
YnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlm
IHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJp
Y2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRv
IGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAg
ICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJl
IGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBh
Ym92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAg
ICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7
CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBk
b25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2
NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNW
YWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlm
IGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmly
c3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QK
LSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQz
MihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBs
ZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0su
bGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBj
b3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0
KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRl
c3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAg
ICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7
CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFu
Y2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTY3NCw2OCArMTYyNCwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVt
cChjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8g
RXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91Ymxl
RXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBp
ZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkp
IHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIp
OworCisgICAgICAgICAgICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENv
dWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRoKTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8g
KGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0
ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCBy
aWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsK
LSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJs
ZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRo
ZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50
MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJl
RXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFs
LCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBp
ZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4K
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVn
VDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEp
IHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxp
bmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNs
b3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtl
bjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAg
ICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisg
ICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0
IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5j
aElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBh
biBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBs
ZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAg
ICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qz
KTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9y
NjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVx
dWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQp
OworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgor
ICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQg
ZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdl
IG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAg
ICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYg
Ym90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAot
ICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxl
ZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5s
aW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0
RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwg
cmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMg
KHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJl
Z1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmly
c3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QK
KyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFu
Y2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9
IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJn
ZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc2NSwyMTcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVP
cFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAg
IH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nh
c2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcs
IHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVO
dW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNC
aWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7
Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
c3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0g
ZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMp
OworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJ
Zk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJp
Z0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
dHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChz
cmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBp
ZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAg
ICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwMzMsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1
cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUu
bV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAm
PSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFu
ZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BS
ID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIw
NjQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUt
PmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOwor
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC05MjIsOSArMjA4OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJs
ZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTEz
LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3Ry
aW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BS
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVi
dWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9y
Q2FsbCgpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3Mo
KSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3Rh
dGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2Vy
UmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
TnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3Rk
Ojppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29tcGFyZU9wID0gaXNF
cSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJl
T3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAg
OiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
Uiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZXN1
bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdElt
bWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
KworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0g
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIp
OworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNv
bXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJl
UHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVk
aWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21w
YXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BT
OiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJh
cnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0
IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0
byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwog
ICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBz
aXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGog
PSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyAr
K2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGop
OworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZh
cmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
dmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyNjQsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29w
ZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIyODgsODAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5
dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBz
cmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsg
Ly8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBz
aG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUg
YW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBl
KHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2Vs
bCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAg
ICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAg
ICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0
KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8g
bmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAg
ICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7
CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNy
Y0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAgICBp
ZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlm
IChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwot
ICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEp
OworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsK
KyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTks
NiArMjM2OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
Q2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJl
Z2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9
IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyMzc5LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7
CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3By
VGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7Cisg
ICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJl
UmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdw
cigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2Fj
aGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdw
clRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI0MjEsMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJl
c3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3Jh
dGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3Jh
dGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1
ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0Vt
cHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRv
ZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTY0LDYgKzI0NjgsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enpp
bmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICB1aW50NjRfdCogcHRyID0gdm0o
KS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2Fk
NjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQo
QmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5p
dGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI0OTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0
aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdp
c3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAK
ICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNv
ZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNTA5LDEwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5
LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2Fu
IGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0
ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1MzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNv
bHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25I
YW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIApAQCAtMTI0NSw4ICsyNTQ1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAo
Y29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nh
c3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4
cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KQEAgLTEyNTYsMjMgKzI1NjYsNDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9u
KGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAg
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBs
YWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+
Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgq
dGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigp
OworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxz
ZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5
dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9w
Y29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
Z2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1
bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAg
IGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAg
ICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNjMwLDQ1IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4
cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
Y29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIg
PSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQu
ZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRp
ZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5j
dGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI2OTksMTkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVz
U3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlv
blByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjcyMCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKwor
ICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVt
cC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAt
PmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdH
UFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4
LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMjc1Myw0
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBH
UFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFI7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAgICAgICAgIGJhc2VDZWxsLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VDZWxsLT5ncHIoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNl
KTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICB9CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAg
ICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI4MDgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAg
IC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0
cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjgzNiw4
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcworCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMjg2
MywxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJy
YXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3Vt
ZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAz
NC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVt
aXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXAp
OwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xv
d0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAg
ICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4LDEzICsyODgwLDExIEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogICAgIExhYmVsIG5leHRIb3RQYXRo
ID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZh
bENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVt
cCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5m
bywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBw
cm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcgKzI5
MTAsOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVjayB0
aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVy
YXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIGlu
ZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKwor
ICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0
cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBl
bnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFj
Y2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIC8v
IENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCByZWdUMik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0
R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVy
YXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MK
KyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGlu
ZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0
cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQ
Uiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxp
bmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5k
ZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJm
bHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUg
c3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3Ry
dWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJ
ZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3Jh
Z2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNj
ZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZM
aW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSks
IHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAotICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhp
cyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMy
KHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDA1LDUxIEBAIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1
bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7
CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9w
ZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7
CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAg
ICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAg
ICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDAp
OworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1
bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhp
cyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwg
cmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rv
ck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwg
c2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIs
IFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE1NzQsMjEgKzMwNTksNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJy
YW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4
R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9w
ZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0
b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIg
PSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAt
PmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JH
UFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhH
UFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRH
ZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1Zl
Y3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdU
MCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdU
MCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0
KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIp
OwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVy
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMTMsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRU
eXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAor
ICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRv
UHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICsz
MTc1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dD
aGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJh
bWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlj
a2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMxOTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdH
UFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxl
bXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICszMjI1LDIw
IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDAp
OwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwot
ICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRo
VHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwg
cmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNDYsNDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lw
ID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwot
ICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOwor
ICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVt
cCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMy
KG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXAp
LCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVy
b0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9
IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkp
OworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHpl
cm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNl
bmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzI5NSw5OSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3Vu
ZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGlu
ZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0
T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwor
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1
bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdz
KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxp
bmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50
T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7
CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBy
b3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwo
dmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAg
fSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BS
KCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJl
Z3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExv
YWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAg
ICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRS
ZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4
ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
ICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJl
ZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2
MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMs
OCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsx
MDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAx
LDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDQ5ICs1MSwxMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVy
dHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAg
ICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAogICAg
IGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlW
YWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2Vs
bDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYmFzZUdQUiwgcmVzdWx0R1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwuaXNT
ZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAg
ICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmls
ZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVy
dHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJp
bmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBT
cGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJh
c2VHUFIsIHJlc3VsdEdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQor
ICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJv
cGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYg
KCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJ
bmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHBy
b3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAyLDM5ICsx
NjQsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9
IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAog
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJ
bmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQ1LDYgKzI0
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnMKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IEltcGxlbWVudCB0aGlz
Li4uLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMzM0LDcgKzQzMSw3
IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4g
Z2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArNDM5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1
dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICs0NDcsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxv
YWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAg
Z2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAg
ICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
KTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
KTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM3Miw0OSArNDY4LDEwNSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlk
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nl
c3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29y
R1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBn
ZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0
ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29k
ZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVj
b2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2Ug
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJv
cGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJp
YnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDI0LDE4ICs1NzYsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9k
ZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJy
aWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyBy
ZWdpc3RlcnMuCkBAIC00NDQsMjUgKzYzMCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVs
QnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0Lmdw
cigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNDcyLDE5ICs2NjAsNjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDI7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9w
ZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8v
IFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5j
ZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBA
IC00OTMsMjEzICs3MzEsMzQ5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAg
ICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDE7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKwogICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRh
ZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIHJlc3VsdEdQUiwgJm1l
dGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAg
ICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAg
IHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNl
R1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDI7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BS
KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZS
ZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BS
LCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJl
ZywgdGhpc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRo
aXNWUmVnKTsKKyAgICB9CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAog
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0
QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0
aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlz
RGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJl
IGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQs
IHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50
cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2Ug
Z2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFy
ZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
dmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BS
UmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAg
fQogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShi
eXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCwgcHJpdmF0ZUZp
ZWxkQWNjZXNzS2luZChieXRlY29kZSkpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKQEAgLTcwOSw3NyArMTA4Myw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5j
b25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2Ug
Y29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNl
KTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
KHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNb
bV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5j
dGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5C
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52
YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTc5MSwxNyArMTE4MywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
OwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFk
ZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUikpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtODExLDIxICsxMjExLDM0IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50
U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNv
bHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRlcHRoKTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogeworICAgICAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAg
ICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZGVwdGggPiAwKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQu
Z2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJv
bm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6CkBAIC04MzgsOSArMTI1MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Cisg
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKIApAQCAtODUzLDI5ICsxMjY2LDI5IEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCBy
ZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtODg0
LDYgKzEyOTcsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgog
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1
Y3R1cmVTbG90KQpAQCAtOTUyLDcgKzEzNzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkKICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKICAgICAgICAg
ICAgIGVsc2UKQEAgLTk2Miw3ICsxMzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
ZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMTAzMCwxMCArMTQ0OSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0
aW9uKTsKQEAgLTExODYsMTAgKzE2MDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjI4LDYgKzE2NDMsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBicmVh
a3BvaW50KCk7IC8vIE9PUFMKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxS
ZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmls
dGVyQmFzZS4KICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTI1
Miw2ICsxNjcwLDkgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdAog
CiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlKQpAQCAtMTM3OSw2ICsxODAwLDcgQEAgSklUUHV0QnlJZEdlbmVy
YXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihW
aXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICAvLyBP
T1BTOiBhdWRpdCBhbGwgY2FsbHMgdG8gZW1pdFdyaXRlQmFycmllciBmb3IgTE9MIHNpbmNlIHRo
aXMgbWF5IG1ha2UgY2FsbHMgdG8gQwogICAgIEFTU0VSVChtb2RlID09IFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKTsKICAgICBlbWl0V3JpdGVC
YXJyaWVyKG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgbW9kZSk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVy
OjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyBy
ZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29u
c3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1h
Y3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwg
Y2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5h
IGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxs
Rm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1f
aml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5h
YmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVy
LCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5n
TElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhw
b3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414089</attachid>
            <date>2020-11-13 13:35:20 -0800</date>
            <delta_ts>2020-11-13 18:55:03 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>378975</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgp
KSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzcsNyBAQCB2b2lkIEpJ
VDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTk0LDMyIEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9P
UChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBc
CiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBj
YXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYg
KHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAg
ICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlv
biBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzUsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBo
LT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90
YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRC
bG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Qcmlv
ckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3Nv
ciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1f
c3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vz
c29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVj
ZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJv
bVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODcsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2Rl
T2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwx
MiArMTQyOCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2Vz
LmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3Ig
KFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ4LDE4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93
OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RU
by5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBt
YW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09Q
UzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8v
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAx
KS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVn
ZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNl
UHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91
bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAg
LTc3NCw2ICsxNjkyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzog
aW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4
aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2lu
dCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk4Myw2MTggQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVt
cExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJT
ZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFu
azo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhy
ZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxs
b3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBS
ZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1
dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNl
dD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgo
KQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitH
UFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0g
aGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpj
bG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5
IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAg
IGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcmVnVmFsdWUocmVnKS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJh
bmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUo
cmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzbG93Q2FzZS5zYXZlUGxhbikgewor
ICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSBzbG93Q2FzZS5yZXN1bHQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9w
IGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxs
b2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30K
Kwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZw
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOwor
CisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9
CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKworSklU
OjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGpp
dCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7
Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUiho
aW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJU
ZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcg
SklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7
CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVu
bG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQorewor
ICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEg
Y29uc3RhbnQgaGVyZS4KKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklU
OjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIp
OworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3By
ID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7
CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7
CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAg
ICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAg
ICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQu
cHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOwor
fQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJh
bmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1f
aml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09Q
UzogY29uc2lkZXIgdXNpbmcgRlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAg
ICAgICAgLy8gdGhpcyBvcGVyYW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dw
cik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVy
YW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKwor
RlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAg
ICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVt
cCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91Ymxl
KGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29w
ZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5j
bHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklU
LmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1h
cC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVk
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxs
TGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0
YWJsZTsKQEAgLTEwMSwxNSArMTA1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAg
ICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0
KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcg
U2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAg
ICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZv
ciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBT
b21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVu
Y2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTkyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwMSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0y
NjMsNiArMjY4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTMwMCw5ICszMTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZv
aWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM0OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAg
ICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
LSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJS
ZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNDk2LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAt
NDg0LDExICs1MDUsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQg
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjQzLDc3ICs2NzMsODEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7
CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lk
IGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZv
aWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2
b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9p
ZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0g
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0g
SW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1p
dEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZv
aWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJl
Zyk7CkBAIC03MjgsOCArNzYyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0
UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVt
aXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJ
bnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAK
ICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAg
LTc0NiwzNCArNzc4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlv
bj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xv
d0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVy
LT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAg
ICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQo
KSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVh
bFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsK
LQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0Zv
ckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxT
bG93Q2FzZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBo
YXNBbnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAg
ICAgICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgo
bV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzkzNyw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBm
YWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24o
KTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7
CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0
YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTUw
LDIyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5
T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5
T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBHUFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAg
ICAgICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IElu
dmFsaWRHUFJSZWcpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
RlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJS
ZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAg
ICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93
ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWln
aHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAg
IH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZh
bHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5k
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAg
ICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJl
ZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBt
X29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5
cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVj
dWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVj
dWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5v
cGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBG
UFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChv
cGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAg
ICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVy
YW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBS
ZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAg
ICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFu
ZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENl
bGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVy
YW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1i
b2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxP
TCgpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJp
bmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAg
ICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGlu
Zm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQ
UihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVG
UFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7Cisg
ICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAg
dm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0
aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0
IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsK
KyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICB2b2lkIHJlc3Rv
cmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICBSZWdpc3Rl
clNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRl
ciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsK
QEAgLTk1Myw3ICsxMTkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1w
VGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5k
ZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3
aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNp
Z25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsxMjI3LDc3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAg
IGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7Cisg
ICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2
YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAg
ICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVn
IGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBB
bGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3By
ICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAg
ICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAg
ICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAg
ICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShj
b25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291
bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVk
ICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9y
bWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7Cisg
ICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAg
ICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNv
bnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFT
U0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkpOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIu
b3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBlcy5z
aXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVzW2ld
LCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0
ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsK
KworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAg
ICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsK
KyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOwor
CisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisgICAgICAgIFZlY3RvcjxP
cHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZh
bHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAg
VmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxl
c3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
SmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
T3JFcXVhbCk7CisgICAgLy8gT09QUzogdmVyaWZ5IE5hTgorICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0
ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3Nl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JF
cXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRy
dWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIzICsxNjEsNDQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9u
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRp
dGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2lu
ZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25z
dGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGlu
dCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5n
cHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZw
cigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy8gT09QUzogaGFuZGxlIGNsb2JiZXJpbmcgdGhlIHJlZ3MKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKwogICAgIGJvb2wgZGlzYWxs
b3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9w
MSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMTYgKzI5NCwx
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0
aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwg
b3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlv
biBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlv
biBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93
Q2FzZSYpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxv
d2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMjg5LDggKzMxMSw2IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAvLyAtIGNvbnN0YW50IGludCBp
bW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2lu
dCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
YXJndW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEpOwpAQCAtMjk5LDggKzMxOSw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkg
ewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MCk7CkBAIC0zMjUsOCArMzQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsK
QEAgLTM1MCwxMiArMzY2LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsK
ICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAg
SnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWls
MyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJ
bnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
ICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQo
bnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAs
IGZwUmVnVDApOwpAQCAtMzY4LDkgKzM4Myw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIu
bGluayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGlu
ayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3Qg
SW50LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CkBAIC00MzUsMTAgKzQ1MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBP
T1BTOiBzbG93IHBhdGggc2xvdyBvcAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwogfQpAQCAtNDUxLDcgKzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpA
QCAtNDYzLDcgKzQ3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1
bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYg
KzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwog
ICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzU3
NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChK
SVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5z
dHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC03MjMsMTAgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQg
d291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNl
IHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRl
PihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlT3B0aW1pemUpOwpAQCAtNzg2LDYgKzc5NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRu
b3QoY29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBub3QzMihyZXN1bHRH
UFIuZ3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIuZ3ByKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIE9PUFMKKyAgICB9
CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNiArOTI0LDQ4IEBAIHZvaWQgSklUOjplbWl0
X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0g
bV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
bW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVy
ZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQz
MihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVEFk
ZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOwogfQpAQCAtMTIx
NSwzMiArMTI3MCw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhh
cml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNl
cnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3By
KCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZw
cigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKSVRNdWxJ
QyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0g
Yml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUworICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSw4
IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAg
IENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpDYWxsLCByZWdUMCk7CkBAIC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
CiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9w
Y29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzAs
NDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBp
bGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFp
bENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90
YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BU
YWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2Fy
ZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50
cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93
Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4o
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93
Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC00MTEsMTQgKzQw
NywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgZmFz
dENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVt
cCgpKTsKIAogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAvLyBPT1BTCisgICAg
bGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBy
ZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC01MTUsMTAgKzUxMywxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0
aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIC8vIE9PUFMKKyAg
ICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01
MjYsNyArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNs
b3dDYXNlKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3Qu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVj
dC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU0
OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAK
ICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVn
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdU
MDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9u
IDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0
aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKICNlbHNlCkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0
IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2lj
ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQot
ewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRl
Y29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dD
YXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBp
dGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODksMzYgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1Rv
KGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93
Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29k
ZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2Fz
ZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2
ZVBsYW4oKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAh
IXJlc3VsdCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0
OworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1
bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHQsIGRzdCkuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERv
aW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChj
b25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1
bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5LDExICszMDEsMTAgQEAgQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmco
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1
ZVByb2ZpbGUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxk
RW1pdFByb2ZpbGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWUgPSByZWdUMDsK
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWVUYWcgPSBy
ZWdUMTsKICNlbmRpZgpAQCAtMzM4LDExICszMjksMTEgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0
YWRhdGEpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBHUFJSZWcgcmVnKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygp
KQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2Zp
bGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGlu
Z1R5cGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpAQCAtMzkzLDExICszODQsNiBAQCBB
TFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRy
dXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAs
OCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw2ICs1MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAvLyBPT1BTOiBNYWtlIHRoaXMgYmV0dGVyIGZvciBjb25zdGFudHMgd2hpY2ggYXJlbid0
IHJlZ2lzdGVyIGFsbG9jYXRlZCB5ZXQuCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAg
IG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkg
ewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMDEsNTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5l
Q2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZp
cnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJl
c3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0g
ICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsK
KyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2Nh
dG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxs
b2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAg
IGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVn
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9
IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJl
ZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0
ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2Nh
dG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywg
c2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJl
Zywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2Rz
dCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9k
c3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
bWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVj
dHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTU3LDUwIEBA
IHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BS
UmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAg
Ly8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFu
ZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFu
Y2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5l
bXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBs
YWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3By
KCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAg
ICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2UgZG9u
J3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3Is
IHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNv
bnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3Qg
aXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVz
cyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAg
KzIxMCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9w
ZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdp
c3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUg
ZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1
bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAg
cmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywg
cmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxsT3Bl
cmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3Rv
VGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJUZW1w
IHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAg
ICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAgICBy
ZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNj
cmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1
ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVt
cENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5l
bXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1w
Q2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigp
OworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZh
bHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAg
ICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3Rv
R1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAg
ICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRU
ZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwK
KyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAg
ICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2Zz
LmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigp
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUg
cmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZv
ciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBj
YW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90
bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2Vs
bHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9i
eV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4o
CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0
CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90
bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7
CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0g
bV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5y
ZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMTEsMjkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNF
bXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzQxLDcyIEBA
IHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJl
Z1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAg
Ci0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBp
bnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAg
IEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0
byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWws
IHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAg
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQxNSwzNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVy
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNP
dGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJl
IHNwZWN1bGF0ZSBvdGhlciBoZXJlPworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFu
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ1MCwz
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ4MSwyOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxO
dW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IE1heWJlIHNwZWN1bGF0ZSBudW1iZXIgaGVyZSBpZiBwcm9maWxpbmcgc2F5cyBzbz8KKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9u
WmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCBy
ZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTEyLDU2
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmln
SW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1Qx
KTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxp
bmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAg
ICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAv
LyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19p
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1NzgsNDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2Vs
bCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkp
IHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAg
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUp
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzMzLDE4ICs2MjcsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IElu
c3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFs
LCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAg
ICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOwor
CisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBj
b21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05v
dENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmpl
Y3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNjky
LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8v
IFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9Owor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUo
dmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKQEAgLTM2OSwxNSArNzExLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShj
b25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwot
ICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRp
dmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUo
dmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAg
ICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTM4Niw1MiArNzU0LDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0
eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykg
JiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwg
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3Zl
KHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmlu
ZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYg
KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUo
dmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChT
cGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAg
ICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9m
dW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5t
X25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1l
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAg
ICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUg
c3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVl
cmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1
ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAv
LyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQg
YXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0
aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBp
bnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUo
dHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBi
aXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQs
IHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYg
dGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUK
KyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAw
IG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8v
IFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRh
ZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJH
UFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZw
U2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0
Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFG
UFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1
bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0
aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRp
dGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigw
KSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5k
bGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBG
UFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0
Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFH
UFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9j
b25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTU5LDEy
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1t
ZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAg
ICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7
CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNr
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAg
ICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2Ny
YXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBj
YXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAor
CisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJh
ZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8g
Rmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
YWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0ds
b2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5w
dXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBz
Y3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
biA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9
IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVm
aW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3
YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5MCwy
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkg
eworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTE4LDI2IEBAIHZvaWQgSklU
OjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTQ5LDMwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAg
c3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21W
YWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BS
LCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkp
OworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQp
OworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0
aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdp
c3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0
ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsK
KyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8g
ZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFs
KHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmpl
Y3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVT
eW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAg
ICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsK
KyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBE
b3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNG
UFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIo
KTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1
bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBz
cGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3Vs
dEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRl
IDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhz
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1f
cmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFy
ZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/
IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAg
ICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhz
KSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAg
ICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJl
LgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
IEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJ
bnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIo
cmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJl
Z1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
ICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJ
ZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVn
IGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSks
IHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgamVxSW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4o
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSBy
ZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBs
YW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3co
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDYz
LDE1MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMx
ID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5t
X3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOwor
ICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhz
KSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVG
YWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChy
aHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7
CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQg
YSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAg
IElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xv
d1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0g
ICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwp
Ci0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0Owot
ICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhl
IDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQz
Mi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAv
LyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0
NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1
bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBC
aWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwg
d2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
IAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhz
LCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZl
bCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxl
ZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1Bh
dGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCBy
aWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZy
YWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdp
dGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5
IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAg
ICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRk
aW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBi
aXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAx
PDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9u
bHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVn
VDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJl
Z1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlm
dDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1
KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAg
ICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBv
bmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5k
NjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQg
dG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAg
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8g
SnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJ
ZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwot
ICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJl
IGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3Vi
bGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhl
biB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJp
Z2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBh
cmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTYyNCwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBh
cmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBp
c0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsK
KworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3Zl
blR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVn
KCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJl
dHRlciBoZXJlLgorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxo
c0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNH
UFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhz
R1BSKSk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUs
IGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxl
ZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwot
ICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQg
aXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290
byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBp
bnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2Vk
IGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBp
cyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBi
aXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQot
ICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRK
dW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8v
IEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFu
ZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBj
b3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQz
Miwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVn
VDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAg
IGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAg
LyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEp
OgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAg
ICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAg
ICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxs
KQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3RvIG5vdFRha2VuOworICAg
ICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBv
ZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJ
ZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEg
SlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0
IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBp
cyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBi
aXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8
PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJl
Z1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0
cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQo
cmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7
CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
NjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFs
ID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVx
dWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8g
SnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5k
IEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhN
RTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEg
QmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0
cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAg
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAg
ICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGlu
ayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBK
dW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEg
ZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5k
IHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElm
SW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0g
ICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVx
dWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90
aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBs
ZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAg
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwg
cmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4
OSArMTc2NSwyMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgog
ICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwg
cmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhT
YXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJo
c0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2
ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251
bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51
bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwot
ICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50
LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1i
ZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsK
KyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAg
ICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNC
aWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50
LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3Jj
LCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmlu
ZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0K
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRo
IHRoaXMuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENh
dGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwMzMsMjMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNl
bGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3Vy
cmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAg
ICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BS
UmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAg
ICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtOTA1LDkgKzIwNjQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJ
bnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAg
ICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxl
SW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNj
cnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjA4OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNv
cmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5w
dXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
OTM4LDkzICsyMTEzLDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0
IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0
Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwot
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwor
ICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1
ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVn
LCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAg
ICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUg
PHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9v
bCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29t
cGFyZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChz
cmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChz
cmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29t
cGFyZU9wLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAg
ICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
CisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAg
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
Y29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51
bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwg
cmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwot
Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7
Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsK
LSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0g
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsK
KyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNl
IGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdo
IENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8v
IHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkg
cHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVz
c3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZv
ciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0
ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsg
aiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBh
ZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyNjQsMjMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQor
ICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNj
b3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIyODgs
ODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVy
ZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBp
c1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwg
cmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNT
dHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0g
U3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChp
c1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwg
c2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYg
IShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0Rz
dCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3Vs
dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRl
bnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAg
bm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIHNyY0RzdCk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCBy
ZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChO
b25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisg
ICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAg
ICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2Jq
ZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVz
dWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9i
amVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTEwNTksNiArMjM2OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNv
bnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVl
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJh
cnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2Fs
bGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBy
YXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyMzc5LDMxIEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9u
UmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsK
KyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3By
VGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFu
ZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAg
ICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0g
Z3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsK
KyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNh
bGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFy
ZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFS
ZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQg
KzI0MjEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAg
IGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVz
dWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2Fz
ZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigw
eDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJl
Z2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShz
cmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUg
c2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTY0LDYgKzI0NjgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVM
b29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICB1aW50NjRf
dCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwog
ICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJu
ID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFybHlSZXR1
cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI0OTIsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBK
SVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJv
bUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZt
KCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNTA5LDEwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09w
dGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BTOiBJIHRo
aW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9vLgogICAg
IH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5V
U0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1MzUsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBs
ZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNTQ1LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVn
ZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNS
ZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
anNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAg
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI1NjYsNDIgQEAgdm9pZCBKSVQ6OmVtaXRO
ZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVH
UFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1
bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0wo
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29w
ZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNl
bmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVu
Y0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
RnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNjMwLDQ1IEBAIHZvaWQgSklUOjpl
bWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOwor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAg
ICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYg
KCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3Bl
R1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25l
d19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBl
bHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VS
VChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7
CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5
LDkgKzI2OTksMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRl
Y29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0g
cmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdH
UFIsIHNpemUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
YXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjcyMCwyNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5t
X2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFy
Z0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6
ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExv
YWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVn
VDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4
MSwxNSArMjc1Myw0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9
OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBi
YXNlQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAgICAgICAgIGJhc2VD
ZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VDZWxs
LT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICB9CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYg
KzI4MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQogeworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0
MzYsNiArMjgzNiw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcwor
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAt
MTQ2MSwxNSArMjg2MywxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwog
CiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAg
UGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAK
ICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJh
eXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5
TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNs
b3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwg
YmFkVHlwZUp1bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7
CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiAgICAgCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4LDEzICsyODgwLDEx
IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogICAgIExhYmVs
IG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwg
UGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0
aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25J
bmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVK
dW1wLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAg
LTE1MTAsMzcgKzI5MTAsOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAg
ICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50
MzJPcGVyYW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8
Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJh
c2VWYWx1ZTsKKworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNl
bGwuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwt
PmdwcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxs
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8g
Q2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhh
biB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlu
bGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAg
ICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
IGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEg
Y2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAv
LyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRo
ZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwor
ICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQg
aW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAg
ICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBz
dWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAg
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZs
eShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAg
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmly
c3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAg
IH0KIAotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEp
OwotICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEp
OwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWln
aHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDA1LDUxIEBAIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9y
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzog
S25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JU
ZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0
aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1l
cmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+
Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0g
cmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1w
IGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9m
ZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91
bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEp
OwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIs
IHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE1NzQsMjEgKzMwNTksNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBp
bkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAg
R1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAg
ICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihC
ZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAg
ICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJv
cGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVz
RWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQp
LCByZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5n
IHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMTMsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0
aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlcjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpA
QCAtMTY1OCw2ICszMTc1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0
IElucwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRh
dGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAg
JiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlz
IHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BM
b2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMxOTIsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fz
c2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxs
IGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAy
LDExICszMjI1LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50
Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdU
MCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFs
dWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJ
bnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNDYs
NDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVt
UGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVy
b0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFt
c1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1
bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1Q
YXJhbXNUb1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNl
dEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1Qw
KTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAg
emVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBh
cmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdU
MCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAj
ZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5r
KHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCks
IHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1Qx
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVn
VDEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9h
cmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0
OSArMzI5NSw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVn
VDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkp
LCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91
dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3Vs
dFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBK
dW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3Vs
dFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRP
dXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwg
cmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZh
bHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQ
UikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2Fk
UHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3Jh
dGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3Vs
dEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVj
T3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMs
IHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1
ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qz
LCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFT
U0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVS
ZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwog
Ci0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCAr
MTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsK
IAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZv
OwogICAgIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGgg
PSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMg
Y2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDgg
KzU3Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTYzMiw4ICs2MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAg
LTY3Myw4ICs2NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC03NjMsOCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpA
QCAtMTA0NCw4ICsxMDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlv
bik7CkBAIC0xMjAxLDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2
ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDQ5ICs1MSwxMTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsK
KyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywg
cHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9
IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0
aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRv
IG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgcmVzdWx0R1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYg
KG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmIChtX3VzZUxP
TCkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0
eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJhc2VHUFIsIHJlc3VsdEdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAg
ICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNw
ZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3Ry
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4Owot
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVn
VDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICAr
K21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTAyLDM5ICsxNjQsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZh
dGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAr
K21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTQ1LDYgKzI0MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNv
bnMKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IElt
cGxlbWVudCB0aGlzLi4uLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAt
MzM0LDcgKzQzMSw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQK
ICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJv
b2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArNDM5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3Qo
KTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRT
dGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICs0NDcsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3Qp
Ci0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0Pigp
KTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGly
ZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM3Miw0OSArNDY4LDEw
NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0
ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBp
bnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBh
Y2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
LSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vz
c29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9u
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
LSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUu
bV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUu
bV9nZXR0ZXIgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29k
ZS5tX3NldHRlciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0
ZXJHUFIgPSBzZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dl
dHRlciwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2V0dGVyLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJC
eVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVn
VDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVn
VDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0
aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsg
KnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vz
c29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAg
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1Qx
KTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qy
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRl
Y29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5
dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDI0LDE4ICs1NzYsNTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHNjcmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBi
YXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1p
dCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmll
ciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC00NDQsMjUgKzYzMCwyNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBT
aG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nh
c2UucmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE5ICs2NjAsNjkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAg
ICAgIHByb3BlcnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklU
RGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2Rl
bEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBz
ZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCkBAIC00OTMsMjEzICs3MzEsMzQ5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRl
ckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAg
ICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRl
eCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
cnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJl
Y3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1
YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJh
c2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFz
ZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKwog
ICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5j
aDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9k
ZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlM
ZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9m
aWxlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIHJl
c3VsdEdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVBy
b2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCisgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5t
X3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhp
c1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVn
KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJl
Zyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJh
c2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhp
c0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRo
aXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhp
c0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0K
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29k
ZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8vIElu
IG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9i
amVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIg
dGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVn
aW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJl
ICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJl
Z1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFs
dWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdw
cigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7
CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7CisgICAgfQogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAog
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BS
LCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVj
dCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29kZSkpOwogICAgIAogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTcwOSw3NyArMTA4Myw5NSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJ
WE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVs
eSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91
bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BS
LCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
YmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4
KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwog
CisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsr
XTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQor
dm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsg
KytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTc5MSwxNyArMTE4MywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5t
X3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3Bl
RGVwdGg7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkp
OwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQ
UikpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtODExLDIxICsxMjEx
LDM0IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAg
ICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZGVwdGggPiAwKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1
bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2Fs
RW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9s
ZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04MzgsOSArMTI1MSw5IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
LCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0
R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtODUzLDI5ICsxMjY2LDI5IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BS
LCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtODg0LDE1ICsxMjk3LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBicmVh
azsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHNjcmF0Y2hHUFIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUikpOworICAgIGxvYWQz
MihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNj
b3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVn
IHJlZykKQEAgLTkwNiwxMiArMTMyNCw2IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRH
ZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKQEAgLTkyMiw1MSArMTMzNCw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBz
d2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
ICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8v
IFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNo
ZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25h
bGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9u
LgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZz
ZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJl
ZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAg
ICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZz
ZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2Nv
cGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUt
PmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QyOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAg
ICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQ
UiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8
SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAg
ICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKICAgICAgICAgICAgIGlmIChB
U1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMy
KEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNO
b3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQp
OwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBuZWczMihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0R1BSLCBvZmZzZXRHUFIpOworICAg
ICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsK
KyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRT
bG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBk
c3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTk4MCwxMCArMTQyNSwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05OTYs
MjcgKzE0NDEsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAK
ICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTAyNiw0
MCArMTQ3MSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0
aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQp
Ci17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJl
Z1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0
cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMDczLDIyICsxNTAwLDQ5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1
cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHZhbHVl
R1BSID0gcmVnVDI7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25h
bDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1
dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAg
R1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAg
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
ICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0
ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0
R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1
Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3Nl
cnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBs
b2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwot
ICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAg
ICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwg
QmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAg
IGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEwOTgsMjggKzE1NTIsNTcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50
U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qw
OworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFs
aXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ug
d2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2Fs
bHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBv
aW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoq
PihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFs
dWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAg
ICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3Bl
LCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAg
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAg
ICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3Rl
cikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwpAQCAtMTEzNCwxMiArMTYxNywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgp
OyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBh
bGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkg
ZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQog
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4g
aGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXpl
ZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwpAQCAtMTE1MywyMyArMTY0NSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxv
Y2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lz
dGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1
c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNj
cmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTE4NiwxMCArMTY4Nyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7
CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2Rl
KS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAg
LTEyMDUsMjkgKzE3MDQsNjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJn
dW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BS
UmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1lbnRzR1BS
ID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZXN1bHRHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAg
IGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAg
R1BSUmVnIHZhbHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUt
PmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJl
Z1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRz
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwor
ICAgIH0KKyAgICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQUiwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJp
ZXJNb2RlIG1vZGUpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBicmVha3BvaW50KCk7
IC8vIE9PUFMKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBp
ZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4K
ICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAtMTI1Miw2ICsxNzg2
LDkgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGJy
ZWFrcG9pbnQoKTsgLy8gT09QUworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlKQpAQCAtMTM3OSw2ICsxOTE2LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6
OmVtaXRQdXRCeVZhbFdpdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BTOiBhdWRp
dCBhbGwgY2FsbHMgdG8gZW1pdFdyaXRlQmFycmllciBmb3IgTE9MIHNpbmNlIHRoaXMgbWF5IG1h
a2UgY2FsbHMgdG8gQwogICAgIEFTU0VSVChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKTsKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgbW9kZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3Rl
ckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9t
YXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1
cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1i
bGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAg
ICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMg
b24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgp
OworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5
dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAg
ICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNz
ZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIs
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2Jh
YmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9t
U2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51
bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414115</attachid>
            <date>2020-11-13 18:55:03 -0800</date>
            <delta_ts>2020-12-01 14:18:35 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>384276</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgp
KSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzcsNyBAQCB2b2lkIEpJ
VDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTk0LDMyIEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9P
UChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBc
CiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBj
YXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYg
KHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAg
ICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlv
biBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzUsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBo
LT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90
YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRC
bG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Qcmlv
ckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3Nv
ciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1f
c3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vz
c29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVj
ZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJv
bVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODcsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2Rl
T2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwx
MiArMTQyOCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2Vz
LmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3Ig
KFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNjMzLDE1ICsxNTQ4LDE4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93
OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RU
by5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBt
YW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09Q
UzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8v
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAx
KS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVn
ZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNl
UHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91
bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFu
KHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAg
LTc3NCw2ICsxNjkyLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgLy8gT09QUzog
aW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1bXAgOiBtX2V4
aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWtwb2lu
dCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk4Myw2NTUgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5hcHBlbmQoSnVt
cExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJT
ZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFu
azo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhy
ZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxs
b3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBS
ZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1
dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNl
dD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgo
KQoreworICAgIGlmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBDUkFTSCgpOworfQorCitH
UFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0g
aGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpj
bG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5
IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAg
IGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcmVnVmFsdWUocmVnKS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJh
bmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVnVmFsdWUo
cmVnKSA9IFJlZ1ZhbHVlIHsgfTsKKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpCit7CisgICAg
Ly8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29y
ZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBhcHBlbmRJZk5lZWRl
ZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAg
ICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3Rl
cnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAg
cmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVz
ZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVy
cywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRl
ckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCBy
ZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDAp
OworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisK
K3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBs
YW4mIHNhdmVQbGFuKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFuKSB7CisgICAg
ICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHRvSWdub3JlKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAg
ICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAg
IHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xv
d0Nhc2UmIHNsb3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVz
dWx0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcg
YXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUo
Z3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9
LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5k
KSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9w
ZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9j
YXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVt
cC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKwor
ICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQp
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGFzc2lnblJlZyhncHIsIG9w
ZXJhbmQpOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1
bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7
CisgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxp
ZCgpKQorICAgICAgICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1w
KEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGlu
dCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6
OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5s
b2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BS
VGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYg
aml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIo
KQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9m
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0
LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9m
cHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisK
K0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7
CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBp
ZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMy
T3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgLy8gT09QUzogZG8gc21hcnRlciB0aGluZ3MgZm9yIGEgY29uc3RhbnQgaGVyZS4KKyAg
ICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAg
ICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1f
aml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJv
dmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2Vs
bE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNl
bGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklU
OjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBp
ZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2Ug
eworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZSht
X2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJh
bmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90
Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZSht
X29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpO
b3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxP
cGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9
CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIg
PSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsK
KyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsK
KyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZp
bHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpW
YWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7
Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9n
cHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogY29uc2lkZXIgdXNpbmcg
RlBSIGlmIHRoZXJlJ3MgYW4gRlBSIGFsbG9jYXRlZCBmb3IKKyAgICAgICAgLy8gdGhpcyBvcGVy
YW5kLgorICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0
LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3Vi
bGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2pp
dC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVn
KQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFu
ZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91Ymxl
T3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
eworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0g
cmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4g
bV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5k
IHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAg
R1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQu
bG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2pp
dC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRU
eXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdp
c3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
Tm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0
ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVE
b3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9m
cHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0
dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyBy
ZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAg
ICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJl
Zyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAg
IGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisg
ICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZh
bHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1i
b2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7
Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9
CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9u
bHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkp
OworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFs
dWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30K
Kwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29u
c3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9v
bCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChv
cGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICByZXR1cm47CisgICAgfQorCisj
aWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihvcGVyYW5kKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0
Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0lu
dDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0lu
dDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0lu
dDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVu
dXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3Mg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7Cisg
ICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xh
c3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSAr
MTA1LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVj
dCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAg
ICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnko
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBm
cm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8
c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3Bp
bGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJT
ZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7
CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wczsK
KyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBi
YXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVz
dWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBh
cmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJl
IGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAg
LTE4Myw2ICsxOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQg
SklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0lu
dGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMjA3LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAg
ICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2lu
dGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zm
c2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90
IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2Vt
YmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBt
YXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJs
aWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAg
IH5KSVQoKTsKQEAgLTI2Myw2ICsyNzQsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxs
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAg
IHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2Fs
bEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7
CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAgICAgICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAwLDkgKzMyNSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2
b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAgICAgICB2b2lk
IGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBM
aXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0
ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2b2lkIGFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50
KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzEwLDcgKzMzNyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9p
ZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICB2b2lk
IGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBv
cF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBA
IC0zMjcsNyArMzU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxl
Q2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTMzNyw3ICszNjQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0
RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07
Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CisgICAgICAgIHZv
aWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1
bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1
ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC0zNTAsOCArMzc3LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHBy
b2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAg
ICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsKKyAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsKKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShN
ZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
T3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4KQEAg
LTQ3NSw4ICs1MDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
LSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENv
bmRpdGlvbik7CkBAIC00ODQsMTEgKzUxMSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxh
dGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChK
SVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xv
d0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0
KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1w
bChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01MTIsOSArNTQ4
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRo
X3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVn
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMsNzcgKzY3OSw4MSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1
Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAg
ICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0
aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
IAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBp
c1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNp
Z25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJl
ZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAg
ICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQg
ZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BS
UmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVn
KTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiog
b3BlcmFuZCwgR1BSUmVnKTsKQEAgLTcyOCw4ICs3NjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVz
c09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAg
ICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0g
ICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAg
IHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIpOwpAQCAtNzQ2LDM0ICs3ODQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUg
UmVwYXRjaEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCi0gICAgICAgIEp1bXAg
Z2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAg
ICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlu
a1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAg
aXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0g
ICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlz
U2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZp
cnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2Rl
SW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNl
RW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAg
ICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiAr
OTQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rp
b25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMo
KTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAK
QEAgLTkzNSw2ICs5NTYsMjMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRo
UHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQ
UlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIo
KTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJl
IGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJ
bnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwor
ICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
OworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
R1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFu
ZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
VmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAg
IH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5k
OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJS
ZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVk
VHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChv
cGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAg
fQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRU
b1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBB
bGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAg
ICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJl
ZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVy
c1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyBy
ZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3Rl
cnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcg
cmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0
ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3By
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9y
T3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFu
ZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcg
ZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnBy
Rm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3Bl
cmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVD
ZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1
bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJs
eSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BS
UmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQ
UlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3Rl
ciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJS
ZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAv
LyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0
IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lk
IHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAg
ICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2
b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAg
ICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBs
YW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7
CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9y
PENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyArMTE5OSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVj
b2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4g
bV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2Fz
ZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAs
NiArMTIzNiw3NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAg
c3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBo
YXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBh
dCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAg
ICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAg
IGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5m
cHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0Nv
dW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAg
ICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAg
ICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAg
ICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAg
ICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
OworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07CisKKyAgICAgICAg
c3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZz4gb3Bl
cmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsK
KyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBwcm92ZW5UeXBlczsKKworICAg
ICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5v
cGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFu
ZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAg
ICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1
bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5y
ZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2Nr
U3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2Rl
R3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50Qmxv
Y2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+
IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBt
X2N1cnJlbnRQcmVkaWN0aW9uczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExv
ZzsKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsK
KyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAg
ICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxP
TCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0SnVtcHM7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgyICs0
Niw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91Ymxl
TGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRP
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIC8vIE9PUFM6IHZlcmlmeSBOYU4K
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVy
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
c0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE2MCwyMyArMTYxLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IElu
c3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91Ymxl
Q29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0
aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25k
aXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJs
ZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5l
IGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAt
IGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3Rh
bnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRl
IHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShk
b3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBjbG9iYmVy
aW5nIHRoZSByZWdzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwpAQCAtMjcyLDE2ICsyOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
SW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNv
bmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3Ry
dWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlv
bi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rp
b25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rp
b25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5s
aW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKQEAgLTI4
OSw4ICszMTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgog
ICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4K
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszMTksNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1
bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM0Myw2IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBm
YWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJl
clRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzM2NiwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdU
MSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAg
SnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAg
IG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICszODMsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmso
dGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhp
cyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNDM1LDEwICs0NTAsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCisgICAgLy8gT09QUzogc2xvdyBwYXRoIHNsb3cgb3AKICAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X21vZCk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KQEAgLTQ1MSw3ICs0NjUsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAgICBVTlJFQUNIQUJM
RV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJs
ZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBu
b3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwg
cmVnVDApOwpAQCAtNTYxLDE1ICs1NzYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3Vi
bGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQo
b3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5l
Z2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQs
IG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2Fz
dDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9u
KSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJh
dGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBl
bWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2Zp
bGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Niw2ICs3OTcsMTggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdEdQUiB7ICp0aGlz
IH07CisgICAgICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHRHUFIuZ3ByKCkpOworICAg
ICAgICAgICAgbm90MzIocmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHNldEludDMyKHJl
c3VsdCwgcmVzdWx0R1BSLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAvLyBPT1BTCisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC05MDEsMTYgKzky
NCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQg
SklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
OworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworCisg
ICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVy
ZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnBy
KCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRk
SUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xv
dzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFk
ZE9wdGltaXplKTsKIH0KQEAgLTEyMTUsMzIgKzEyNzAsOTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUm
IGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hN
dWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAg
ICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBG
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigp
LCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBPT1BTCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElD
KCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudElu
c3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
TXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8
T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmls
ZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxP
cHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJm
bG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3Vi
SUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3Vi
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjY0LDEzICsyNjIsMTEg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9w
Y29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAKQEAgLTMzNCw0NCArMzMwLDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChj
b25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BU
YWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29u
c3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAg
ICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKQpAQCAtNDExLDE0ICs0MDcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93
Q2FzZSk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogCiAgICAg
R1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpAQCAt
NTE1LDEwICs1MTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICAvLyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
SXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzUyNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0g
Ynl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwog
Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIC8vIE9PUFMKKyAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVj
dDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQ
UikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1
bHRHUFIpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJl
ZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0
IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRv
IHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU4LDYgKzE1OSw3IEBA
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgLy8gT09QUzog
TWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBz
cGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE2NiwyNSAr
MTY4LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJl
dHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0g
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBz
bG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5k
KCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9y
PFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAh
PSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFk
dmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0
ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsK
QEAgLTIwNiwyNyArMTg5LDM2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xv
d0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2Fz
ZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNv
ZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCku
c2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMu
bGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5k
c3QgPSBkc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3Qo
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBq
dW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAg
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4
KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBzLmFwcGVuZChqdW1wKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVz
dWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAg
IEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFw
cHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5
dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkp
CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTMw
OSwxMSArMzAxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW4K
ICAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CiAKLSAgICBjb25zdCBSZWdp
c3RlcklEIHZhbHVlID0gcmVnVDA7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBjb25zdCBS
ZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7CiAjZW5kaWYKQEAgLTMzOCwxMSArMzI5LDExIEBA
IGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlZykKIHsKICAgICBpZiAo
IXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3Io
bWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCByZWcpOwogfQogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNl
bGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkK
QEAgLTM5MywxMSArMzg0LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5k
Q29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zv
cihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIs
OCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
ZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3
NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0aGlzIGJldHRlciBmb3Ig
Y29uc3RhbnRzIHdoaWNoIGFyZW4ndCByZWdpc3RlciBhbGxvY2F0ZWQgeWV0LgorICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKworICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBA
IC05MCwzMiArMTAxLDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9u
U2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCpt
X3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFs
bG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOwor
ICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJS
ZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3Vs
dFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVn
VDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9j
YXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBi
dXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJl
c3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBw
cm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0
ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMjUsMjMgKzE1Nyw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25z
dHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2Rl
Lm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNv
bnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisg
ICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAg
ICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIg
PSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3Rh
bmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1
Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOwor
ICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJ
bnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFu
Y2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwog
CiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVu
Y3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2Up
LCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMTAsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7
CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSBy
ZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBh
IGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0lu
c3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdU
MCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8g
cHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlv
bmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1Rl
bXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVt
cCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcg
dmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFU
ZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7
CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIg
PSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVl
VGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3By
KCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAg
IH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAor
ICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNj
cmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNl
VmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAg
ICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0
aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBp
cyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAg
ICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNj
cmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107
CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNl
R1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikK
QEAgLTE5OSwxMSArMzExLDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IElu
c3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yMTEsMjggKzM0MSw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0g
ICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1
ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
CisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBH
UFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQ
UiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisK
KyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBp
c0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVn
VDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQx
LDEzICs0MTUsMzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBNYXliZSBzcGVjdWxhdGUgb3RoZXIgaGVyZT8KKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMjU1LDEyICs0NTAsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihj
b25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVh
bikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCBpbnB1dEdQUik7CisgICAgICAgICAgICB0ZXN0NjQoWmVybywgaW5wdXRHUFIsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywgcmVn
VDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY4
LDExICs0ODEsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSBzcGVjdWxhdGUgbnVtYmVyIGhlcmUgaWYg
cHJvZmlsaW5nIHNheXMgc28/CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdpc3Rlciwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0UoQklHSU5U
MzIpCkBAIC0yODIsMjEgKzUxMiw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNv
bnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5j
aElmQ2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0
R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJ
ZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0lu
dDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFn
KSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVSTiB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMxMywxOCAr
NTc4LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUg
PSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BS
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBj
b21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjI3LDYxIEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAg
ICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBzcGVjdWxh
dGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFs
LCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUp
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJl
OChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIAot
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMzU1LDcgKzY5MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1w
LmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0
dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcxMSw0MSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Ny
YzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgCi0gICAg
SnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYgKGRz
dCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5
cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVj
dCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgaXNJ
bW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAgICAgIGlm
IChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIgKzc1NCwyMDMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJh
bmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJl
Z1QwKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmlu
Zyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2
YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1bmN0aW9u
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIG5h
bWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQ
UiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUuZ3ByKCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTogc3RyaW5ncywgYml0aW50LCBvYmpl
Y3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBiZWxvdy4K
KyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlm
IHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJl
Ci0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9y
IDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBp
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sg
aW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0g
ICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IGFnYWlu
c3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwg
dGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxv
dyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNw
ZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSks
IHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCisg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlv
bjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0
aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBt
b3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIg
eyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBG
UFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwg
c2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRp
b24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRp
b24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRp
b24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHZh
bHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BS
ID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3Jh
dGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEu
ZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyB7
IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0
Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC00NDAsNDYgKzk1OSwxMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMp
KSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90
Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAg
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJh
ZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cg
aGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1ZXJh
ZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5k
bGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMp
OworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1wIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwot
ICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAg
ICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Owog
dm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIo
c3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBz
cGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8g
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVx
dWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2Fz
ZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgot
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
LCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwor
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAg
ICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5k
bGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
IHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC00ODgsMTAgKzEwOTAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9v
cl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisg
ICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAg
ICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVk
X29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUwMCwx
MCArMTExOCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBl
bHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAgICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE0OSwzMDUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VSVChzcGVj
aWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9p
bnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5t
X2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwubGlu
ayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShz
cmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAgICAgICAg
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVxdWFsID0gYnJh
bmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0Nl
bGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3Bl
Y2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwg
Jm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgQVNTRVJU
KHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19z
YW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwg
OiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9y
ZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBp
ZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkp
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDog
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENl
bGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJo
cykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIp
OworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgewor
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVn
IHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJl
LCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBW
YWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29tcGFyZTMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisKKyAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6amVxSW1wbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIEFTU0VSVCh1c2VMT0wo
KSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3Rk
Ojppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdl
dCk7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBh
dXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlw
ZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxs
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91
YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIp
LCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUg
c3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wRXE+KGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21w
YXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAg
R1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BOZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFy
ZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIHhv
cjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lk
IEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVn
VDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsK
KyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nh
c2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVn
VDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZv
aWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJv
dz4oKTsKQEAgLTU4OSw3NCArMTQ2MywxNTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0Vx
ID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91
YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlw
ZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
aXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkg
eworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBj
b21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywg
cmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7Cisg
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBh
cmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2
ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwogCi0jaWYgVVNF
KEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUn
IHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91
YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0
KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMg
Q2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBs
ZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xl
IGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBp
ZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sg
aXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0
IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAv
LyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9u
bHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1
YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1Qz
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVn
VDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsK
LSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCBy
ZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVn
VDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAg
SnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAo
dG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsK
LSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNz
IHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlm
IGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdz
IHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJp
Y3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisg
ICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdo
dCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAg
IGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xv
d1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICov
CisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0
IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIv
YnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVl
IGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZs
b3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBh
IG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQK
KyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisg
ICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVn
VDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwg
cmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAg
ICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92
ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25a
ZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBK
dW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQg
QmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1F
OiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBC
aWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3Ry
aW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdU
NSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAh
VVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292
ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJl
Z1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1
bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRl
Z2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJs
ZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAg
SnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8v
IEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNs
b3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwg
d2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0su
bGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3Ry
aWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0g
ICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE2MjQsMTM1
IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhz
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1f
cmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJl
Z1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAg
ICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJs
ZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwo
cHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlz
RXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwo
cmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8v
IE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQ
UikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBVU0UoQklHSU5U
MzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUg
U3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0g
ICAgICAgZ290byBzbG93UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3Rv
IHRha2VuOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBn
b3RvIHNsb3dQYXRoOwotICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMg
ZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwg
d2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZl
bHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAg
Ly8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGlu
ZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0
cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3
aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVz
IGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3Zl
KHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZI
aWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJl
Z1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAg
b3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVh
bCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCByZWdUMSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpT
dHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2Vs
bCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1Qy
KTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5s
ZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRo
IGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcg
J3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxl
ZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlz
IENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50
IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBz
aW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVp
cmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBU
aGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8
PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0
IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3
aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91
YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisK
KyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAg
ICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3Zl
ciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRl
Z2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBk
b3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmln
aHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEs
IHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzE3NjUsMjE3IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmlj
dGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7
CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1i
ZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJl
cjsKKyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051
bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRj
aEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7
CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdU
MCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYg
KHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJp
bmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsK
LSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
T2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7Cisg
ICAgICAgIH0KKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9i
amVjdChyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4
OCw5ICsyMDMzLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVu
dFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cg
aXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVu
dFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUs
IHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMDY0LDE3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJl
Y29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgp
KSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIwODks
MTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVm
YXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVu
c3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Cisg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjExMywxNDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxl
ID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJ
bmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsKICAgICBsb2FkMzIoY29k
ZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5v
RGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUu
bV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+
Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9w
LCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAg
ICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNo
R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAg
ICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29t
cGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1
bHRHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAg
IEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQ
dHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAg
IH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihj
b21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVk
aWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjpl
bWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVx
TnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJl
Z1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBp
c0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFO
dWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihj
b25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVn
aXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMu
CisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6
ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0
byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUg
YW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxv
Y2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQot
ICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAg
ICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFy
aWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVk
VmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsK
KyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5
ICsyMjY0LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigp
KSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNj
b3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0
LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWlu
KCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMDQ1LDEzICsyMjg4LDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29u
c3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEu
bV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2Rl
Lm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3Ry
aWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxvYWQzMihj
YWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCBy
ZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
c3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/
CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChz
cmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQg
dG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9
IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVjdE90
aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICAgICAgbm90
Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5
cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3Qp
CisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbG9hZDMyKGNh
Y2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJl
c3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAg
ICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09Q
UzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzNjksNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxs
ZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9
ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJl
Z1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyArMjM3
OSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgUmVn
aXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRj
aFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxl
ZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAy
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5kLmVt
cGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNh
bGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBn
cHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIoKTsK
KyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURhdGFS
ZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3ByVGVt
cDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOwor
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcsIGRz
dCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0
YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURh
dGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDIxLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0
dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRp
YWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tU
ZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1
YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDAp
KTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlzIHdv
cmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4Y2Vw
dCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpA
QCAtMTE2NCw2ICsyNDY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydQogewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJl
dHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxv
b3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8v
IE9PUFMKICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAg
ICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZElt
bTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0x
MTg3LDEzICsyNDkyLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0
aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAt
MTIwNiwxMSArMjUwOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwor
ICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQg
d29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0x
MjMzLDEwICsyNTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29u
cwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU0NSwx
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nh
c3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0
dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTY2
LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9z
Y29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNF
eGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7
CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7
CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
KG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCAr
MjYzMCw0NSBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0
ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVu
Y3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRv
cl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIs
IGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19l
eHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAg
IGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9u
OwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNjk5LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2
OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAot
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7
CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0
ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVt
cC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQg
KzI3MjAsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVn
VDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAg
ICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBl
bWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikp
OwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3NTMsNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVl
IHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBl
bnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworICAgICAgICBP
cHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
ICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQogCi0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAK
LSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGxvYWQz
MihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTQwOSw2ICsyODA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3Ry
dWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFi
bGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzI4MzYsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUzogaW1wbGVtZW50IHRoaXMKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4NjMsMTUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGlu
Z1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJy
YXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFi
bGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhl
ciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nh
c2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRU
eXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAg
IGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgp
OwpAQCAtMTQ3OCwxMyArMjg4MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJv
ZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0
Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBh
dGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTEwLDkyIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVt
ZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4
IH07CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAgICAgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0
b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFI7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
IHsKKyAgICAgICAgICAgIGJhc2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAg
ICAgYmFzZUdQUiA9IGJhc2VDZWxsLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIg
PSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwot
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworCisgICAg
ICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAv
LyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0
b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5l
QWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWln
aHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNl
IGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
bmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisK
KyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRo
ZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5l
IGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGlt
ZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAg
ICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwor
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAg
ICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7
CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2Yg
bGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMy
KEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7
Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1
MCwyMSArMzAwNSw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9w
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsK
KyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5k
PiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVt
cC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
aW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51
bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVn
VDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsK
KyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQ
UiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0
cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNW
ZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVn
VDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVn
VDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7
CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BS
KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDU5LDUxIEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5
SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVy
YXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9P
UFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJh
dG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFj
ZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBl
bnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRl
bXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQ
UiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1w
IGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZz
ZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5k
cy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIo
aW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTU5OCw2ICszMTEzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEu
bV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0
ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAg
IEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE3NSw5IEBAIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxs
Rm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2Vy
dChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhh
dmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3
Miw2ICszMTkyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwog
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRv
d0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxG
cmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5UYWlsPigpOwpAQCAtMTcwMiwxMSArMzIyNSwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9h
cmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0
aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVz
dWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAs
IHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xNzE0LDI5ICszMjQ2LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xl
bmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1l
dGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJh
bXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMy
KExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAg
ICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1
YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIo
bnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50
MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7Cisg
ICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBy
ZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzMyOTUsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5P
ckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFs
dWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEs
IHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwog
I2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMg
PSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsK
LSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1
ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxv
YWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
dmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAg
IH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwogI2Vs
c2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOworICAg
ICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hH
UFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVl
UmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7Ci0g
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0o
KSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nh
c2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAg
ICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1
MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0
ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcg
b24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw0OSArNTEs
MTExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHBy
b3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0
eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRl
bnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZp
ZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJv
ZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hl
Y2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIHJlc3VsdEdQUiwg
cHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAg
ICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRT
cGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRHUFIsIHByb2Zp
bGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVj
SW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisg
ICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwor
ICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAg
ICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY0LDczIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAg
ICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHBy
b3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
IAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0NSw2ICsyNDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsX2RpcmVjdChjb25zCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICAvLyBPT1BTOiBJbXBsZW1lbnQgdGhpcy4uLi4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTMzNCw3ICs0MzEsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9y
IEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlOwpAQCAtMzQyLDcgKzQzOSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1v
ZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRl
Y29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAg
ICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1MCwxMyAr
NDQ3LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9
OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhd
LmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xv
d1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CkBAIC0zNzIsNDkgKzQ2OCwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nl
c3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
MSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAq
dGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOwor
ICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQ
UiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRl
ciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIs
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBi
YXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0
dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBz
ZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigp
OworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBpbnQz
Ml90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRl
LCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07
CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9
IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3Nv
ckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29y
LmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQy
NCwxOCArNTc2LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNj
cmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVl
bmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDQ0LDI1ICs2
MzAsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
KTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3Miwx
OSArNjYwLDY5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9
IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVy
dHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDkzLDIxMyArNzMxLDM0OSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2Rl
bEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAg
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5
R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0K
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICB9CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJy
YXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5h
cnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2Rl
LmxpbmsodGhpcyk7CiAgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
KworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUu
ZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNH
UFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0
aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgIH0KKworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCiAgICAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSk7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRo
aXNHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAg
ICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0
aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0g
Ynl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhl
IFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwK
LSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRv
IHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBz
dWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRp
c3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVn
LCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFs
dWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAg
ICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAg
fQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIH0KIAogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFN
b2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJl
Y3QgPyBEaXJlY3QgOiBOb3REaXJlY3QsIHByaXZhdGVGaWVsZEFjY2Vzc0tpbmQoYnl0ZWNvZGUp
KTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03MDksNzcgKzEw
ODMsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIC8v
IElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJh
c2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIg
aW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRl
QmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFycmll
cihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBKSVRQ
dXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOworICAg
IEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2Vu
ZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJl
c3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICBy
ZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRy
ZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkK
LXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgp
LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0
R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03OTEsMTcgKzExODMsMjUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9
IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7
CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewog
ICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKQEAgLTgxMSwyMSArMTIxMSwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3Rh
bnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlv
bmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BS
OworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29w
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlcHRoID4gMCk7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsg
KytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCBy
ZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODM4LDkgKzEy
NTEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTg1
MywyOSArMTI2NiwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwxNSArMTI5NywyMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BS
UmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVy
ZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVT
bG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNj
cmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpT
VmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYsMTIgKzEzMjQsNiBAQCB2b2lkIEpJ
VDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdU
MCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05MjIsNTEgKzEzMzQsODQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0
cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRh
Lm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7
Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcg
b2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAg
ICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9m
ZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIg
PSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFu
ZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQ
Uik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBK
dW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRy
dXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAg
aXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1
c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAg
ICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9m
ZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zm
c2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNl
dEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BS
LCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIo
c2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVW
YWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUp
OworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC05ODAsMTAg
KzE0MjUsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BS
KTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVz
dWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDQxLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAg
ICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwog
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAg
ICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE0NzEsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworCisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5k
KTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiog
aW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwot
ICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5k
LCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQ
dHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUwMCw0OSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRT
bG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsK
IAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVl
VmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAg
IH0gZWxzZQorICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworCiAgICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3Ry
dWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5j
ZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9i
amVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRo
ZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAg
ICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBHUFJS
ZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAg
b2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOwor
ICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7IC8v
IFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNo
ZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25h
bGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9u
LgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkg
LT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAg
ICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xv
dCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOworICAgICAgICAg
ICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9mZnNldEdQUiwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0xMDk4
LDI4ICsxNTUyLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
ICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAg
ICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0
aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBU
RFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVt
aXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
c2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJl
Y3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
dmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAg
ICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQ
dHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBM
b2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93
YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29w
ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29w
ZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNo
cG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVH
UFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5k
U2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWlj
OgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAgLTExMzQsMTIgKzE2MTcsMjEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5u
ZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNl
IHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNo
R1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisg
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7
IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAg
ICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVl
IHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTExNTMsMjMgKzE2NDUsMzIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAv
LyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxv
Y2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1p
dENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0g
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHks
IGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTEx
ODYsMTAgKzE2ODcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29w
aWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1LDYxICsxNzA0LDE1MSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBh
cmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0K
ICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVu
dHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29k
ZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERp
cmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVu
dHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgR1BS
UmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBhcmd1bWVu
dHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7
CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0b3JlNjQodmFsdWVHUFIs
IEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVzZUxP
TCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICAvLyB2YWx1ZSBtYXkg
YmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVC
YXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWND
ZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2YWx1
ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZh
bHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVH
UFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IG93bmVyVmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQUjsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgb3du
ZXJWYWx1ZS5lbXBsYWNlKCp0aGlzLCBvd25lcik7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgfQogICAgIEp1bXAg
b3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVzZUxPTCgp
IHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG93bmVy
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAgSnVtcCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2
bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
b3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBz
aWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0
byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3Bp
bGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQp
OwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhp
cyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5vdENlbGwu
bGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgp
KSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywg
dmFsdWUpOworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkK
KyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7Cisg
ICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAg
ICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzODUsOCArMTk3NCwyNSBAQCB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7
CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVj
b3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxl
bnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
c2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3Rl
ckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9t
YXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1
cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1i
bGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAg
ICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMg
b24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgp
OworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5
dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAg
ICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNz
ZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIs
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2Jh
YmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9t
U2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51
bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415161</attachid>
            <date>2020-12-01 14:18:35 -0800</date>
            <delta_ts>2020-12-02 19:33:33 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>388721</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCeXRlY29kZURvdWJsZTsK
KyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJvcF9hZGQgaXMgZ2VuZXJhdGluZyBpbnQzMiBzcGVj
dWxhdGlvbiEiKTsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRv
IGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVj
RGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
c2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
YmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rp
b246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0
cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0
b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJv
ZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0
b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRp
b24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCks
IFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93
aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0
aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9w
X3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVy
X3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJl
YWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9y
ZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAg
IGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9q
dW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAg
IGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToK
KyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93
OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlf
dmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFt
ZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoK
KyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9f
dGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRf
Z2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6
CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAg
bV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0
aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9y
RWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgw
KS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5k
ZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7
CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAv
LyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAg
ICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBh
bGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZv
ciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5k
IHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2Nr
IHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFti
bG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAm
JiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAg
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVk
aWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgLy8gT09QUzogYWRk
IG5ldyBvcHRpb24uCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpIHx8IFN0cmluZyhtX2NvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkuZGF0YSgp
KSA9PSAiZm9vIjsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzcsNyBAQCB2b2lkIEpJ
VDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTk0LDMyIEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9P
UChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBc
CiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBj
YXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYg
KHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAg
ICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlv
biBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzUsNzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBo
LT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90
YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRC
bG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0
ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJl
bnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Qcmlv
ckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3Nv
ciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1f
c3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vz
c29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVj
ZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJv
bVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODcsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2Rl
T2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwx
MiArMTQyOCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2Vz
LmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3Ig
KFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2Rl
SW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNTc5LDcgKzE0OTQsNiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3Bf
aGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3RyYXBzKQotICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVnYXRlKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk3LDYgKzE1MTEsMTIgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2l0ZXJhdG9yX29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9u
ZXh0KQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
bW9kKQorI2Vsc2UKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKKyNlbmRpZgor
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGRlYykKQEAgLTYzMywxNSArMTU1MywxOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2lu
KCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09
IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0
KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0
ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNl
IGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRf
V0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQo
KSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cg
Y2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShm
aXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYg
KHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhz
IGFscmVhZHkgZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291
bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03NzQsNiArMTY5NywxMyBAQCB2b2lkIEpJVDo6
Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29k
ZU9yaWdpbigpKTsKIAorICAgIC8vIE9PUFM6IGltcGxlbWVudCBPU1IgZXhpdC4KKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byBqdW1wIDogbV9leGl0SnVtcHMpCisgICAgICAgICAgICBqdW1wLmxp
bmsodGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICB9CisKICAgICBzdGFja092ZXJm
bG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC0xMDU4LDYgKzE5ODgs
NjU1IEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVUaW1lKCkKIHsKICAgICByZXR1cm4gdG90
YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29t
cGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7
CisgICAgbV9leGl0SnVtcHMuYXBwZW5kKEp1bXBMaXN0IHsganVtcCB9KTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQorewor
ICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEg
ZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1
cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisg
ICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3Rl
clNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lz
dGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVy
U2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlm
ICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29u
dGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJl
dHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sK
KyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBh
IGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0
dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcwor
ICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxS
ZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAg
ICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7Cisg
ICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0
JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUu
IFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8v
IGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVu
YW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBh
cm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRS
ZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisK
K3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICBpZiAobV9zbG93Q2FzZXMuc2l6
ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRl
eCkKKyAgICAgICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVn
IGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52
YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVn
IDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcu
Z3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BS
cygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAg
ICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0g
UmVnVmFsdWUgeyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBS
KCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGlj
YXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkp
IHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0Fs
bG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBh
dXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFs
dWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAv
LyBPT1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNp
ZGVzIG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlKHJlZykub3Bl
cmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAo
cmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFu
ZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAg
ICAgICB9CisgICAgfQorICAgIHJlZ1ZhbHVlKHJlZykgPSBSZWdWYWx1ZSB7IH07CisKK30KKwor
dm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xv
YmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgewor
ICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVy
KGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2
ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxk
IGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElm
TmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1Zh
bHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxl
bnRTcGlsbEJlZm9yZUNhbGwoKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3Qg
ZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQ
bGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFs
dWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAg
fTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElm
TmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAg
YXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgq
dGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3Jk
JiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0
ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwg
cmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJl
ZygpLCByZWNvcmQuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxh
bihSZWcgdG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBzYXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYg
KHJlZyA9PSB0b0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChy
ZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwg
cmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9
IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNv
bnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNo
LCByZWcuZnByKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0
b3JlRnJvbVNhdmVQbGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnBy
LCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsK
KyAgICBhc3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
PSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1Zh
bHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJh
bmQpKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2so
UmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUu
bG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYg
cmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQp
OworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50
ICYmICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07
Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAg
OiBtX2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
Z3ByKGhpbnQpOworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoaGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30K
KworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0Lmxv
Y2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJU
ZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAg
ICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVy
YW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQorewor
ICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6
Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dw
ciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIC8vIE9PUFM6IGRvIHNtYXJ0ZXIgdGhp
bmdzIGZvciBhIGNvbnN0YW50IGhlcmUuCisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwg
bV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICgh
aXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAg
IG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7
CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAg
cmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAg
aWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAg
IG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxv
Y2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFu
ZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dw
cjsKKyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7Cisg
ICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAg
ICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBncHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dw
ciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlm
IChtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBt
X2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFn
UmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxs
Q2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVl
T3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChq
aXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE9PUFM6IGNvbnNpZGVyIHVzaW5nIEZQUiBpZiB0aGVyZSdzIGFuIEZQUiBhbGxvY2F0
ZWQgZm9yCisgICAgICAgIC8vIHRoaXMgb3BlcmFuZC4KKyAgICAgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3Bl
cmFuZCwgbV9ncHIpOworCisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5k
KTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9
CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6
RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zw
cik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1f
ZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0
LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBS
UmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2so
bV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBH
UFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3By
KCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2pp
dC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5
dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgewor
ICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1Zh
bHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1
ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJU
eXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51
bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJlZyht
X2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworUmVnaXN0ZXJTZXQg
SklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJl
c3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1
dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3Ry
aW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICgh
aXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9v
bGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICgh
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFu
KHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9
LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090
aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RP
YmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxD
aGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJ
bnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNC
aWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1
ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRp
ZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMy
KSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAo
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQo
dmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRv
bmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
QmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUs
IHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJ
bnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0Niwx
NyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0lu
dGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAi
UmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3Rm
L1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2Rl
SUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAg
Y2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAg
Y2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5j
dGlvbkV4ZWN1dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAg
ICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVj
b2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQor
ICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rl
cj4+OworCisgICAgc3RydWN0IFNpbGVudFNwaWxsUmVjb3JkIHsKKyAgICAgICAgU2F2ZVBsYW4g
c2F2ZVBsYW47CisgICAgICAgIFJlZ2lzdGVyU2V0IHNwaWxsZWRSZWdpc3RlcnM7CisgICAgICAg
IHVuc2lnbmVkIHN0YWNrU2l6ZUZvclNwaWxsOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvd0Nh
c2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAg
ICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAg
ICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHM7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAv
LyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4g
c2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21lIG9wcyBzYXZlIHJl
Z2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UKICAgICB9OwogCiAg
ICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTk4LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0
ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAg
ICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQg
eworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxs
OwogCkBAIC0xOTAsMTIgKzIwNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWRE
ZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51
bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVk
IDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVz
cyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNo
ZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZh
dWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxv
Y2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9
IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMsNiArMjc0LDIwIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFy
cmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAg
IH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9i
YmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAg
ICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xv
YmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2Rl
LCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAg
LTMwMCw5ICszMjUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAg
dm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dD
YXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAgIHZvaWQg
YWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyBy
ZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIFNsb3dD
YXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KTsKICAg
ICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25z
dCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwg
aW50KTsKQEAgLTMxMCw3ICszMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM1NCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5m
byosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAg
IHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYp
OwogCkBAIC0zMzcsNyArMzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3Mg
Q29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVt
cFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwg
aW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nh
c2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAg
ZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxk
RmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9
OwpAQCAtMzUwLDggKzM3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFRoaXMg
YXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJl
Z1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KLSAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJik7
CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJS
ZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcgdmFsdWUgPSByZWdU
MCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
Li4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFs
dWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNTAyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91Ymxl
Q29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0
aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNDg0LDExICs1MTEsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24p
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24q
LCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BF
UkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2
b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJ
bnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAg
dm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5k
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJ
bnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjQz
LDc3ICs2NzksODEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
Y2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVu
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9w
dXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlm
dChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1p
dFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdo
dFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNp
Z25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3Ry
dWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7
CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3Vy
ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hH
UFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2lu
dGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03MjgsOCAr
NzY4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1
ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0NiwzNCArNzg0LDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1
Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93
Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJv
bS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAg
ICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lk
IGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYg
c2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNs
b3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFz
QW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0g
ICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMo
bV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURf
UEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0
cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAg
ICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0
ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzk0Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlm
CiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9p
ZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3Rh
dGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1
dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTU2LDIzMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAg
IGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJ
VCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgp
OworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQ
UlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsK
KyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVn
IG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIElu
dDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5k
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUg
dGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBt
aWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBD
ZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJ
VCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgp
OworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAg
ICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcg
fTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisK
KyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAg
ICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91Ymxl
T3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFs
aWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVy
OworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1
ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAg
ICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3Bl
cmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7Cisg
ICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2NlZFJl
ZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAg
ICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAg
ICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAg
ICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7Cisg
ICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2Vs
bENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAg
IHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
U3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBk
YXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9
IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAg
dm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0
RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVl
KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJl
c3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2
b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBs
YW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRT
cGlsbEJlZm9yZUNhbGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0
IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TYXZlUGxh
bihSZWcgdG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2lu
dGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUz
LDcgKzExOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4g
bV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVj
b3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBt
X2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzEyMzYsNzcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBt
X3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50
cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAg
ICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRz
CisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAg
IEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsg
SW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRS
ZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3Ro
ZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIg
PSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0
cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07
CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wg
aXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJl
Z1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFu
ZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBv
dGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3Ro
ZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9y
bWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAg
ICAgIE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lz
dGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxv
Y2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9w
ZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5k
VG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9
PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVy
LnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6
ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAg
ICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0
b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAg
ICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAg
ICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFs
PEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWdu
ZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsK
KyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8
SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZv
aWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFs
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNz
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNs
b3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
SmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxB
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE2MCwyMyArMTYwLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0
IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29u
ZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5s
aW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29u
c3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZSgpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChs
aHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOwor
ICAgICAgICB9CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKQEAgLTI3MiwyNSArMzA1LDMzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwg
aW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90
IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90
IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBh
dXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAg
IC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRo
ZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQg
aW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGlu
Zy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGlu
Zy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0yOTksOCAr
MzQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0K
IAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7
CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAg
ICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNSw4ICszNjQs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEyICszODcsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4K
LQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwx
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihy
ZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3Rlciwg
cmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgs
OSArNDA0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAg
ICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAot
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52
ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTQw
NiwyNSArNDQyLDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioK
IHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9k
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJl
IHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFT
U0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgYXV0byBlYXggPSBYODZSZWdp
c3RlcnM6OmVkeDsKICAgICBhdXRvIGVkeCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8g
ZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAgQVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAg
QVNTRVJUKHJlZ1Q0ICE9IGVkeCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
ZWN4KTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlYXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IGVkeFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNU
ZW1wOworICAgIEdQUlJlZyBsaHNHUFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
Y2xvYmJlcihlYXgpOworICAgICAgICBjbG9iYmVyKGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4
KTsKKyAgICAgICAgZWF4VGVtcC5lbXBsYWNlKCp0aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1w
LmVtcGxhY2UoKnRoaXMsIGVkeCk7CisgICAgICAgIGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4
KTsKKworICAgICAgICBlYXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIGVjeFRlbXAtPmdwcigpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAt
PmdwcigpID09IGVheCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09
IGVkeCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisK
KyAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBsaHMpOworICAgICAgICByaHNUZW1wLmVt
cGxhY2UoKnRoaXMsIHJocyk7CisgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xv
d0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMp
KQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAg
ICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGxocywgcmVnVDQsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1Q0KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVj
eCk7CisgICAgICAgIG1vdmUocmVnVDQsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwg
cmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBK
dW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJ
bW0zMigtMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWws
IGVheCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3RO
ZWcxLmxpbmsodGhpcyk7CiAgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2
RGl2MzIoZWN4KTsKQEAgLTQzMiwxNSArNTEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgp
KTsKICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwogICAgIGJveEludDMyKGVkeCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCiAjZWxzZSAvLyBDUFUoWDg2XzY0KQpAQCAtNDUxLDcgKzUyNCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOwogfQpAQCAtNDYzLDcgKzUzNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
KQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3Ay
OwpAQCAtNDczLDYgKzU0Niw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBA
IC01NjEsMTUgKzYzNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3Qg
SW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1Qz
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CkBAIC03MjMsMTAgKzc5NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAv
LyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVO
ZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNT
bG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOwpAQCAtNzg2LDYgKzg1NiwxOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0R1BSIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdEdQUi5ncHIoKSk7CisgICAgICAgICAgICBu
b3QzMihyZXN1bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1
bHRHUFIuZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IE9PUFMKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTkwMSwxNiArOTgzLDQ4IEBAIHZv
aWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRk
SUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAg
IGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAg
ICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZw
cigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gT09QUworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQ
cm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRB
ZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihh
ZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1p
emUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUp
OwogfQpAQCAtMTIxNSwzMiArMTMyOSw5NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJm
bG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIE9PUFMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVs
SUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVs
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklD
KGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gT09QUworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5n
cHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQz
MihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsMTAgKzE0NSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxF
dmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yNjQsMTMgKzI2MiwxMSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAg
ICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAt
MzM0LDQ0ICszMzAsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2Fs
bFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBA
IC00MTEsMTQgKzQwNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93
Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAv
LyBPT1BTCisgICAgbGlua0FsbFNsb3dDYXNlcyhzbG93Q2FzZSk7CiAKICAgICBHUFJSZWcgaXRl
cmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC01MTUsMTAgKzUx
MywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFz
dENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKHNsb3dDYXNlKTsKKyAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVt
cCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5l
eHQ+KCk7CkBAIC01MjYsNyArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5t
X2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKHNsb3dDYXNlKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAg
ICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAg
ICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpA
QCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdz
IHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNr
IHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNv
IHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRo
ZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcp
Ci17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xv
d0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVy
LT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNl
cy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4
LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3
ICsxODksMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAg
IGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklU
OjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVt
cCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkg
fHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7
CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBp
ZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9
IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0Lmlz
VmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVz
dWx0ID0gcmVzdWx0OworICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExp
c3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyBy
ZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBm
b3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dD
YXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBl
bnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0
eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRl
eCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7
CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAg
c2xvd0Nhc2UuanVtcHMuYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5LDExICszMDEs
MTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIHJldHVy
biBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkg
JiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9
PSAxOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkKIHsKICAgICBB
U1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFs
dWUgPSByZWdUMDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJlZ2lzdGVySUQg
dmFsdWVUYWcgPSByZWdUMTsKICNlbmRpZgpAQCAtMzM4LDExICszMjksMTEgQEAgaW5saW5lIHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShN
ZXRhZGF0YSYgbWV0YWRhdGEpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVnKQogewogICAgIGlmICghc2hvdWxkRW1p
dFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0
ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpAQCAtMzkzLDEx
ICszODQsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAg
cmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsK
LSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwot
fQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNy
YykgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5w
dXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQu
Z3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAg
IGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMDgsNTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9
IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25j
dXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9
IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0
ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJS
ZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRv
clJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRj
aFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOwor
ICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1Qy
OworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1
bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3Bl
Y0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEu
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTY0LDUwIEBAIHZvaWQgSklU
OjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29u
c3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBo
YXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3Rh
bmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzog
aW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3Ry
dWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0
aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlz
LCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAg
ICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3Rh
bmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0
YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBp
ZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3Vz
dG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFu
Y2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9u
KCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsK
KyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0
cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9y
ICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEg
Qy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1
Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1w
bGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIxNyw5MyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
dG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChi
YXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0g
ICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRo
IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFy
ZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUg
Z2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8v
IHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAv
LyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFu
Y2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFs
dWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7
CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRl
bXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcg
cHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1w
LmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVt
cC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hv
dWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1w
bGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0
aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3By
KCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAg
ICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJv
dG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5n
cHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZh
bHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5l
cmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigp
LAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAg
ICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChn
ZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2
ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFs
IHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1
c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEp
OworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VW
YWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3Ig
U3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAg
ICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAg
ICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAg
IAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5j
ZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3Rv
dHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9j
dXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMTgsMjkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzQ4LDcyIEBAIHZvaWQgSklU
OjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAot
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVu
ZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXND
ZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAg
dGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0g
anVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIs
IHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisK
KyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAg
IEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAg
ICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyMiwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHNwZWN1bGF0
ZSBvdGhlciBoZXJlPworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
TnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ1NywzMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRl
c3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ4OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVt
YmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJl
IHNwZWN1bGF0ZSBudW1iZXIgaGVyZSBpZiBwcm9maWxpbmcgc2F5cyBzbz8KKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5w
dXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTE5LDU2IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMy
VGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBh
bmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7
Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2
NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNF
KEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1ODUsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENl
bGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4
ICs2MzQsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2
YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAg
ICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNjk5LDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0
aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2
OSwxNSArNzE4LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1t
LmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1t
LmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTM4Niw1MiArNzYxLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5j
aElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBp
c1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0
byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsK
KyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlv
bk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJv
b2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIo
WmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5s
aW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0
Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29s
ZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBs
b3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVz
cGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdo
aWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsK
KworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVl
IHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAg
Ly8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9y
IGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52
ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGlu
LCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdU
MCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpm
YWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRp
b247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRp
dGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUg
bW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJU
ZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gy
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAg
RlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVl
PigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZG
YWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBj
YXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZw
U2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRo
aXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24s
IHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTY2LDEyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVu
ZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAg
ICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKwor
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBj
YXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5n
cHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
LQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5NywyNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTI1LDI2IEBAIHZvaWQgSklUOjplbWl0X29w
X2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNTE1LDY1ICsxMTU2LDMwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25z
dCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVj
aWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVk
SW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAg
ICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0
ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRv
IGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJl
ID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5
cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNU
ZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOwor
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2
ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihF
cXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZh
bHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAg
ICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
Q2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7Cisg
ICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
ZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0
IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNH
UFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
dHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30K
IAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQ
UlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0K
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVx
SW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0K
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsK
KyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVl
R1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
amVxSW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAg
ICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nh
c2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDcwLDE1MCBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
c3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
Ym9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAg
ICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBh
dXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZh
bHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBh
cmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAg
ICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5j
aElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCBy
ZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxl
dmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0g
ICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdv
dG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAg
IGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0K
LSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0
IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3
b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJ
Zk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQz
MiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5n
IGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGws
IHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5n
IG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsK
LSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwg
cmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2
NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVy
bywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBp
ZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4K
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5T
dHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7
CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAg
ICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBD
ZWxsKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGlt
cGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5n
bGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVk
IGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUg
dHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5
IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAK
KyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxs
IGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91Ymxl
cyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdU
Mik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0
ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBj
ZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHBy
ZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhl
IHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4
b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwg
SlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93
IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4g
Rmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRl
c3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAg
ICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0
T0subGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0
byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBv
cjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdU
MikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Cisg
ICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qw
KSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTY3NCw2OCArMTYzMSwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7
CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0Vx
ID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91
YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAg
ICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhz
KSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVP
YmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgICAgICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJl
LgorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7Cisg
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2Ug
ZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChs
ZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8
fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtl
bjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERv
dWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9m
IHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElm
SW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFs
dWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVy
ZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBu
dW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0g
ICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92
ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJl
Z1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAg
YXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVx
dWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xv
dyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRz
KS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBz
b21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywg
cmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0
RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFs
LmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBo
aWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAg
ICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3Rv
IHNsb3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0
YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAg
ICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLwor
CisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwg
cmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0
aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2Jy
YW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBu
dW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Cisg
ICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAg
ICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJl
Z1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAg
IG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVP
ckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNo
NjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJn
ZXQpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93
IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMp
LgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291
bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIs
IHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsK
KyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAg
IGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRP
Sy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3Ry
aWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRh
cmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2Vs
bHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4g
Rmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRl
c3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51
bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0
YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc3Miwy
MTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBp
bGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihz
bG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxh
dGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYg
U3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNy
Y1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVn
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAg
ICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAg
aXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhp
cyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0lu
dChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRo
aXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFu
Y2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgor
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBq
dW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhp
cyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIp
OworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwog
CiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwNDAsMjMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNv
ZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3Bl
KSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3Bl
cmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkg
KzIwNzEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFi
bGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwot
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC05MjIsOSArMjA5NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
Y2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBU
YWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsy
MTIwLDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAg
U3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0
R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxs
Rm9yQ2FsbCgpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJl
c3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwg
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVn
Z2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BF
cU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVx
dWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29t
cGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7
Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7
CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0
KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwot
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVt
cCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
LSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21w
YXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdElt
bWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBP
T1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0
ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vz
bid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVy
cyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2lu
ZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAg
ICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90
IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50
OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9y
KHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIo
bV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyNzEsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBz
Y29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIyOTUsODAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNo
ZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9
IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVj
dDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAm
JiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2Un
cmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5U
eXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVj
Q2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAg
ICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3Jj
RHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8g
Tm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsK
KyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIs
IHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAg
ICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAg
IGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNy
Y0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkp
OwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVn
VDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUp
KTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
NTksNiArMjM3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNl
PEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAg
IFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJl
ZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyMzg2LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVn
VDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAg
Z3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7
CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0
dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMt
PmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAg
Y2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9
IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0
ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI0MjgsMzMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFk
ZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
Y3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVl
R1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVy
blZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5W
YWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3Bl
Y0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRo
IGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTY0LDYgKzI0NzUsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICB1aW50NjRfdCogcHRyID0g
dm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBs
b2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNo
NjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5m
aW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI0OTksMTEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1p
emF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JS
ZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0
ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNTE2LDEwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVu
dHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMg
Y2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFN
KGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1NDIsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBB
YnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKIH0KIApAQCAtMTI0NSw4ICsyNTUyLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdl
eHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBq
c0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmpl
Y3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJl
Z0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI1NzMsNDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29t
bW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAor
ICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5l
bXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29w
ZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdw
cigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAj
ZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNs
KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5j
X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwog
ICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVy
YXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247
CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNjM3LDQ1IEBAIHZvaWQgSklUOjplbWl0TmV3RnVu
Y0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVH
UFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1
bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0wo
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29w
ZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNl
bmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5m
dW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI3MDYs
MTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2Fy
Z2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVH
UFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjcyNywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsK
KworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1w
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
dGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRl
bXAtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBh
cmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUlu
ZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQ
Uik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMjc2
MCw0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2VsbDsK
KyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAgICAgICAgIGJhc2VDZWxsLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VDZWxsLT5ncHIoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICB9CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAg
ICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI4MTUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogewor
ICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgp
LnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg0
Myw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcworCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSAr
Mjg3MCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklU
QXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFy
Z3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9
IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1
bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAg
CiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4LDEzICsyODg3LDExIEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogICAgIExhYmVsIG5leHRIb3RQ
YXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFs
SW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2Rl
LCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhl
ZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcg
KzI5MTcsOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAg
IFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVj
ayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51
bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5k
IGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJh
bmQ+IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgfQorICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8gQ2hlY2sgdGhl
IHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIp
OwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zm
c2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRo
ZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5l
IGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGlt
ZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAg
IC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihl
bnVtZXJhdG9yLCByZWdUMik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFz
ZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUo
aW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2ln
bkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0
ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Cisg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0
LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0
aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAv
LyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0
b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5l
QWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Cisg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0
T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91
dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAotICAg
IC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
dGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5l
ZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGlu
dDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0
SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDEyLDUxIEBAIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAg
IEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgp
KSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsK
KyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQz
Mk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRl
eCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOwor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7Cisg
ICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7
CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRz
ID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVn
VDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCBy
ZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmso
dGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1Zl
Y3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1NzQsMjEgKzMwNjYsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9
IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGlu
ZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVt
cDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQz
Mk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1l
cmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JH
UFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JH
UFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhH
UFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0
b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5k
ZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpl
bmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1l
c1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCBy
ZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCBy
ZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9h
ZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRH
UFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090
aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMjAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNo
ZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsK
IAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2
ICszMTgyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFk
b3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxs
RnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJn
R1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dD
aGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMxOTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2No
aWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2Fs
bCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25B
cmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJv
YmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICszMjMy
LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVn
VDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEp
OwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3
aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdU
MCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNTMsNDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9T
a2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwot
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9
IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkp
OwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIp
OworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
SnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIElt
bTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1Nr
aXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAg
emVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0
aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tp
cCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAg
IHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsK
ICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMwMiw5
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZC
b3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50
T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNl
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAg
IEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVn
VDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRS
ZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRz
LmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwot
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5k
cy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVn
cyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENl
bGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RP
YmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBl
KHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBz
bG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7Cisg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFn
R1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1
ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAg
ICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIx
MSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgp
OwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRv
IHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4
ICs2MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2
NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03
NjMsOCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Ywog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4
ICsxMDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0x
MjAxLDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDQ5ICs1MSwxMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJv
cGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkp
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAog
ICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0
QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRo
aXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90
Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYmFzZUdQUiwgcmVzdWx0R1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwu
aXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAg
ICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJv
ZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJv
cGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVT
dHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2Up
LCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJhc2VHUFIsIHJlc3VsdEdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVs
c2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcp
KQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1
ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
cHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAg
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0K
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlW
YWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIs
IHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAyLDM5
ICsxNjQsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1
c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAot
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlW
YWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHBy
b3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUyLDYg
KzI0OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJ
bmRleCk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUjsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQg
PSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5TmFtZUlz
SW50ZWdlckNvbnN0YW50KQpAQCAtMzM0LDcgKzQzMiw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3Ig
SklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9w
Y29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2U7CkBAIC0zNDIsNyArNDQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9k
ZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVj
b2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAg
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICs0
NDgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07
CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
YnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93
UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKQEAgLTM3Miw0OSArNDY5LDEwNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
YWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vz
c29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhp
cywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0
aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7Cisg
ICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BS
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9w
dGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVy
LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJh
c2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0
ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNl
dHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMy
X3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUs
IGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0g
YWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29y
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3Iu
Z3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDI0
LDE4ICs1NzcsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisg
ICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2Ny
YXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
ICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVu
Y2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC00NDQsMjUgKzYz
MSwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE5
ICs2NjEsNjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qw
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VH
UFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgfQorCisg
ICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0
eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJh
cnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJz
IHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00OTMsMjEzICs3MzIsMzQ5IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVs
QnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NU
eXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJh
c2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAg
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgIH0KKwogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFy
cmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRh
dGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90
PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJh
eUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJhc2VHUFIsIHJlc3VsdEdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFy
cmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUu
bGluayh0aGlzKTsKICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
dGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5l
bXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQ
UiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRo
aXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgfQorCisgICAg
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKICAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpKTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c0dQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAg
IAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRo
VGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBi
eXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
Ym9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUg
U3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAot
ICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8g
cmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1
Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlz
dGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcs
IHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFs
dWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1
ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAg
ICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgfQogCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1v
ZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVj
dCA/IERpcmVjdCA6IE5vdERpcmVjdCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29kZSkp
OwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTcwOSw3NyArMTA4
NCw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBp
biBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVn
IHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNl
KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIg
PSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
aW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2lu
QnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVz
dWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJl
dHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJl
c3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQot
ewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCkt
PmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1bHRH
UFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc5MSwxNyArMTE4NCwyNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0g
bWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNv
bnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5k
aW5nRXBvY2goKSksIHJlc3VsdEdQUikpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtODExLDIxICsxMjEyLDM0IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFu
dFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9u
YWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7
CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3Bl
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29w
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVwdGggPiAwKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyAr
K2kpCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJl
c3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04MzgsOSArMTI1
Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtODUz
LDI5ICsxMjY3LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlz
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtODg0LDE1ICsxMjk4LDIwIEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjpl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJS
ZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJl
U2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNs
b3QsIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2Ny
YXRjaEdQUikpOworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNW
YWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAgLTkwNiwxMiArMTMyNSw2IEBAIHZvaWQgSklU
OjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1Qw
KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTkyMiw1MSArMTMzNSw4NCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEu
bV9vcGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0
Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29w
ZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsK
LSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBv
ZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAg
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQ
UjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAg
ICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zm
c2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9
IHJlZ1QyOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
dHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGpp
dEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5k
U2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BS
KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1
c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBp
c091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVz
dGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAg
ICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZz
ZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBuZWczMihvZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
R1BSLCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIs
IG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
aWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBy
ZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihz
Y29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZh
bHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTk4MCwxMCAr
MTQyNiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIp
OworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1
bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogCkBAIC05OTYsMjcgKzE0NDIsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVU
eXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
LSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
LCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTAyNiw0MCArMTQ3MiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQp
OwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBp
bmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQs
IHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0
cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDczLDIyICsxNTAxLDQ5IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwog
CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVW
YWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlCisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7CisKICAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1
Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNl
IHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2Jq
ZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhl
IHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7
CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAg
IE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNj
b3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJl
ZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFs
bHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24u
CiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAg
ICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRl
eChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90
LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAg
ICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEwOTgs
MjggKzE1NTMsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRp
b24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFRE
WiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1p
dCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAg
ICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0
cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBv
aW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExv
Y2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRT
bG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6
CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTEzNCwxMiArMTYxOCwyMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5l
cnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ug
d2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hH
UFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qw
OworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
IEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUg
dG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTE1MywyMyArMTY0NiwzMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8v
IFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9j
YXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0
Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTE4
NiwxMCArMTY4OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3MDUsMTUxIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFy
Z3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQog
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAg
bG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50
c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50
c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJS
ZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAg
ICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50
c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsK
KyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwg
QWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIC8vIHZhbHVlIG1heSBi
ZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Nl
bGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
KSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZhbHVl
Tm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFs
dWU7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQ
Uik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
d25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gb3duZXJWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBvd25l
clZhbHVlLmVtcGxhY2UoKnRoaXMsIG93bmVyKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUtPmdwcigpOworICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CiAgICAgSnVtcCBv
d25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkg
fHwgISEocHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZt
KCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cisg
ICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBv
d25lckdQUiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNp
bGVudFNwaWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRv
IHNpbGVudCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGls
bFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7
CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlz
KTsKKyAgICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkp
IAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQor
ICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAg
ICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAg
ICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMTM4NSw4ICsxOTc1LDI1IEBAIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7CisgICAgSnVtcCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzY3JhdGNoR1BSKTsK
KyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNv
cmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVu
dFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisKICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVy
SW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21h
cFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVy
biBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJs
ZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAg
ICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBv
biBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7
CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0
ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAg
ICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3Nl
bWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJQ01GdXp6ZXIsIDQyNDI0Miwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNNUHJvYmFi
aWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VDdXN0b21T
ZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVt
IE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415270</attachid>
            <date>2020-12-02 19:33:33 -0800</date>
            <delta_ts>2020-12-03 15:11:58 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>391194</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzMyBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICgh
IShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0
ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
aWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNT
dHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBv
cF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiBy
aWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSA7CisgICAgICAgICAgICAgICAg
aWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJ
bnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAg
ICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZy
b21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNw
ZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3Vi
bGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8g
YmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
QmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5h
czxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOwor
ICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAg
ICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
dHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0g
dHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJl
IHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
RG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5
YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRp
bmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5z
aWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTog
eworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFp
bnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVj
SW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjQW55SW50QXNEb3Vi
bGU7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
U3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1
cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNC
eXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8
IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisK
KyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOwor
ICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6
IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAg
ICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0
byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVm
dCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAo
aXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JC
b29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUp
OworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
bHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hp
ZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2
ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRp
dmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisg
ICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBl
ICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1By
aW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5
bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAg
ICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdl
IGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVk
IHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRo
aXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kg
d2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAg
ICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7Cisg
ICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
Y29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19h
cnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJy
YXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUg
d2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09i
amVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjU3Ry
aW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9z
Y29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
LCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0
cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3By
b3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfZW51
bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lz
dGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNv
ZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVu
dHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigp
LCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9h
cmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1l
bnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRD
b3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3By
ZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdF
eHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0
cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0
ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVy
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lz
X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09i
amVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVv
Zl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNv
ZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRl
Y29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0
LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
T3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6Ogor
ICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNh
c2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5k
OgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBj
YXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJv
d19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAg
ICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ug
b3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToK
KyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFf
cHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9q
ZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29y
X251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2Fz
ZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgor
ICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3Bf
amdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgor
ICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2Fz
ZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGlu
dDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAg
ICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoK
KyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9m
bG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6Cisg
ICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2Vu
ZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ug
b3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9w
cm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2Ug
bGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoK
KyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAg
Y2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2Fs
bF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2lu
dF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9t
X2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9p
dGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRf
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9u
KCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29k
ZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNB
dEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUp
OworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0g
KFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29k
ZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
LT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9y
IChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxl
ID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1f
cHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9u
OworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBh
cmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCks
IG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7
CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9y
ZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNl
IGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERG
UyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlu
cHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVk
IGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAq
bV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rp
b25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50
cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7
CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1f
Y3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0g
d2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQor
ICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKApAQCAtNjcsNiArODk2LDEyIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKTsKIH0KIAorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVj
a2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQogICAgICwg
bV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKQEAgLTc2LDYgKzkxMSw3IEBAIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNlTE9MID0gT3B0aW9uczo6Zm9yY2VMT0woKSB8
fCBTdHJpbmcobV9jb2RlQmxvY2stPmluZmVycmVkTmFtZSgpLmRhdGEoKSkgPT0gImZvbyI7CiB9
CiAKIEpJVDo6fkpJVCgpCkBAIC0xNDAsNiArOTc2LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNl
IG9wXyMjbmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRl
Y29kZUluZGV4KSB7IFwKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyBcCiAgICAgICAgICAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7IFwK
ICAgICAgICAgfSBcCkBAIC0xNTYsMjYgKzk5MywzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAg
IGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2Rl
ZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6
IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBz
bG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2Uu
cmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5k
c3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93
Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAg
IE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQg
SklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1
blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAg
ICAKQEAgLTIzMSw3ICsxMDc0LDczIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAg
ICAgICAvLyBPT1BTCisKKyAgICAgICAgbV9zdGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXpl
KCkpOworICAgICAgICBtX3ByZWRlY2Vzc29ycy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBpZiAoYmxv
Y2suaXNFbnRyeUJsb2NrKCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJsb2Nr
LnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNbc3Vj
Y2Vzc29ySW5kZXhdLmNvbnRhaW5zKGJsb2NrLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAg
ICBtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgZm9yIChtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVj
dGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAo
IW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50
QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7
CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCld
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRl
eCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhp
dEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRv
JiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3Nv
cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJl
ZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vz
c29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRl
QXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVj
ZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2Nrcykg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9j
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCku
c2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29u
c3RhbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8
QWxsb2NlZFJlZz4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxv
Y2VkUmVnKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0
ZXJzID0geyB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKworICAgICAgICAgICAgfQorICAgICAgICB9CisK
ICAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6
ZSgpOwogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAm
JiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgICAgICAvLyBXZSd2
ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJl
YWNoYWJsZS4KQEAgLTQ3Nyw2ICsxMzg2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQogCisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1
Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwg
bV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTUsMTIgKzE0MjcsMTQgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9m
aWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhh
dmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVy
ID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAg
ICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xv
d0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2Fz
ZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAg
ICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dD
YXNlLmp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8g
PSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5k
ZXgpLnB0cigpOwogICAgICAgICAKQEAgLTU3OSw3ICsxNDkzLDYgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3Ry
aWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX25lcSkKQEAgLTU5Nyw2ICsxNTEwLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVu
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQ
VShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbHNlCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCisjZW5kaWYKKwogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzMs
MTUgKzE1NTIsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBm
aXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5l
bmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3Vn
aCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9m
ZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwor
ICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShp
dGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8u
b2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4i
KTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQo
KSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBz
bG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRk
cmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRo
aXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNs
b3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2U7CiAgICAgfQpAQCAtNzc0LDYgKzE2OTYsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0
TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0
aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxh
YmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAK
KyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisgICAgeworICAgICAgICBmb3IgKGF1
dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAganVtcC5saW5rKHRoaXMpOworICAg
ICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMp
OwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsxOTg3LDY1MiBAQCBTZWNvbmRz
IEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21w
aWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQor
dm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhpdEp1
bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
YW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBn
ZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2Rl
YmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5
IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhp
cyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOwor
ICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBh
dXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2
ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOwor
fQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBn
ZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2Rl
YmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJs
eSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRo
aXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVz
dWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNv
bnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0
dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhl
IGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRo
aXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7
CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkp
OworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3Nl
cnROb1Nsb3dQYXRoKCkKK3sKKyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nh
c2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgQ1JB
U0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAg
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgewor
ICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAo
cmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdw
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9Owor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2Nh
dGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7
CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29t
ZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAg
YWdyZWUuCisKKyAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlKHJlZykub3BlcmFuZDsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisg
ICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9y
T3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAgfQor
ICAgIHJlZ1ZhbHVlKHJlZykgPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6OnNwaWxs
Rm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0
byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYg
KCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBs
KHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkp
OworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpzbG93
UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3Rl
cgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsK
KyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJl
Z1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQ
UnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9yZUNh
bGwoKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2ls
ZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1dG8g
YXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFs
dWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5z
cGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7Cisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQo
cmVnKTsKKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNw
aWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpz
aWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7Cisg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9y
Q2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6
ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCByZWNvcmQuc2F2
ZVBsYW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgdG9JZ25vcmUs
IGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzYXZl
UGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSB0b0lnbm9y
ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3Rl
cigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gp
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7
CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQ
bGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFu
KHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6c2V0
SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8gT09Q
UzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0VfQVNT
RVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNWYWx1
ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJl
c3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAg
ICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAgICByZWdWYWx1ZShncHIp
Lm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVl
KGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BS
UmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7
IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zvcihv
cGVyYW5kKSk7CisKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWco
ZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNvZGVE
b3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxv
Y2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICBhc3Np
Z25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQor
Cit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFs
dWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5v
cGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BS
VGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQor
CitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6
R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFs
aWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6
RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6
RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisg
ICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9j
ayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBp
ZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9j
YXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5k
LCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAg
ICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2Vs
bE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJl
ZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAg
ICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9q
aXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9q
aXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0
LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKwor
SklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitK
SVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBt
X2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5k
LmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0g
bV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICgh
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkp
IHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIo
SlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpT
VmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmls
dGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9q
aXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5hc3NpZ25S
ZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lzdGVy
U2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNl
dCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAg
ICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9j
YXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChS
ZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFp
c1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1i
b2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBp
ZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0
ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9v
bGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFs
dWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0
OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWND
ZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQW55
QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHJldHVy
bjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9
IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFsc2U7Cisj
ZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1c2VCaWdJ
bnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAgICAg
aWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSGVhcEJp
Z0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmln
SW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hlYXBCaWdJ
bnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgaWYg
KCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
YnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0ludDMyKHZh
bHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAgICAgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNlCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyAr
NDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUg
PHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwor
ICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwog
ICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwot
ICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBC
eXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8o
dCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVn
aXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAg
ICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNs
b3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQor
ICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAg
ICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBzOworICAgICAgICBTYXZlUGxhbiBzYXZlUGxh
bjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3
ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsK
IAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5OCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJl
c3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwog
CiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNl
SklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHVi
Q2FsbDsKIApAQCAtMTkwLDEyICsyMDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRC
eUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdp
YyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNp
Z25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29t
cHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBw
YXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlk
RGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29k
ZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZz
ZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI3NCwy
MCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hH
ZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAg
ICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQg
Y2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisg
ICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lk
IGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQg
Y29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2Fs
bChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7
CkBAIC0zMDAsOSArMzI1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFu
Y2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAg
ICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRT
bG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBS
ZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBT
bG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7
CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAo
Y29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1
bXAsIGludCk7CkBAIC0zMTAsNyArMzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNTQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlu
a0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAg
ICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3Qg
T3AmKTsKIApAQCAtMzM3LDcgKzM2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNs
YXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BF
cUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5
cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNs
b3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAg
ICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNo
b3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUgfTsKQEAgLTM1MCw4ICszNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBU
aGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhh
dCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCi0gICAgICAgIHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0
YSYpOworICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwg
R1BSUmVnIHZhbHVlID0gcmVnVDApOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnIHZhbHVlID0g
cmVnVDApOwogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bj
b2RlKC4uLik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSks
IFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDggKzUwMiw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0
cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSArNTEx
LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAg
ICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAg
ICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Jp
dGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTUxMiw5ICs1NDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAg
LTY0Myw3NyArNjc5LDgxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxf
ZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWls
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJn
dW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jl
c29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93
Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1p
dF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lk
IGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlz
VW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJS
ZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNs
b3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9t
UG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzI4
LDggKzc2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJh
bWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpT
VmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDYsMzQgKzc4
NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAg
IHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMo
U2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZy
b207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXIt
PmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0g
ICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93
Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0
ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAg
dm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtB
bGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29s
IGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQp
OwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nh
c2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgVU5V
U0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9vbCBi
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2Vz
LCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5NDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNl
bmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAg
IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAg
IHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBj
b21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTM1LDYgKzk1NiwyMzEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgogICAgICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAorICAg
ICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgR1BSVGVt
cChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgfkdQUlRl
bXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAg
ICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAg
Y2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklU
Jik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQ
UlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3Bl
cmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMg
YXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dl
ZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJh
bmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOwor
ICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
R1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQg
eworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAgICAg
ICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
Y2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkRv
dWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJ
bnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwor
ICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50
U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUg
ZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZp
bHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisK
KyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVn
Lm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJG
b3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnBy
OworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9j
ZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7Cisg
ICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAg
ICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAg
ICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOwor
ICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZnBy
OworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RDZWxs
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3Bl
Y0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VMT0woKTsKKworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9y
IHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoR1BSUmVnIGhp
bnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7CisgICAg
ICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lk
IHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0SlNW
YWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2UgdGhpcyB0YWtlIHRo
ZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNldCBpdC4KKyAgICAg
ICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFNh
dmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50U3BpbGxSZWNvcmQgc2ls
ZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2FsbChj
b25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2
ZVBsYW4oUmVnIHRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3RlclNl
dCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciog
bV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAg
LTk1Myw3ICsxMTk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFi
bGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7
Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRj
aFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25l
ZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsxMjM2LDc3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJv
b2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAg
ICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJp
YW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
ICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZw
ciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxv
Y2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9
IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAg
ZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
eyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBi
b29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25z
dCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQg
IT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9
IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0
IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAg
ICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAgICBS
ZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8U3Bl
Y3VsYXRlZFR5cGU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0
IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VS
VChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkpOworICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIub3Bl
cmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBlcy5zaXpl
KCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAg
ICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVzW2ldLCBv
dGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJz
LnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAg
VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAg
ICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOworCisg
ICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRp
b25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVu
c2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNl
IH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVj
dG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgyIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Smxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NU
aGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91Ymxl
R3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVx
dWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91Ymxl
TGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNl
LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
SmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5s
ZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5v
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MCw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChj
b25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24s
IERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdl
dCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
LCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRl
IGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAg
ICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAt
IGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGlt
bWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ay
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BS
KTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7
CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMjUgKzMwNSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIs
IHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVy
dCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNs
b3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNp
emVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNp
emVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAg
ICAgYXV0byBmYWxsdGhyb3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBOb25aZXJvIDogWmVy
bywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
c2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGZhbGx0aHJvdWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBp
biB0aGUgc2xvdyBwYXRoOgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0
YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxv
YXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxv
YXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8
fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQ
UjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsK
ICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMjk5
LDggKzM0MCw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAg
ICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsK
ICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjUsOCAr
MzY0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0K
IAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7
CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAg
ICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiArMzg3
LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJ
bnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBm
YWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50
MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Cisg
ICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQo
bnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0
ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAt
MzY4LDkgKzQwNCw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAg
ICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9
CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBA
IC00MDYsMjUgKzQ0Miw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rp
b24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE1vZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ug
c3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAg
ICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2
UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBh
dXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwog
ICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVy
KGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4
VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMs
IGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigp
OworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhU
ZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIo
KSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gp
OworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVt
cC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
bGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOwor
ICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1Q0LCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUNCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChlY3gpOworICAgICAgICBtb3ZlKHJlZ1Q0LCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVn
VDQsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAg
ICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVz
dGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVx
dWFsLCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9y
Tm90TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAg
IHg4NkRpdjMyKGVjeCk7CkBAIC00MzIsMTUgKzUxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywg
ZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKICAgICBib3hJbnQzMihl
ZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsK
LSAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKQEAgLTQ1MSw3ICs1MjQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs1MzYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRp
dGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQz
Mk9wMjsKQEAgLTQ3Myw2ICs1NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDAp
OwpAQCAtNTYxLDE1ICs2MzUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNv
bnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCBy
ZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3OTUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdh
dGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVRO
ZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAg
ICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZh
bHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0
aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Myw5ICs4NTMsMzUgQEAgdm9pZCBK
SVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0
bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3VsdElzSW50MzIgPSBm
YWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3Ax
LCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQg
YSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1bHRHUFIpOworICAg
ICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50
MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNw
ZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBA
IC04MDIsNyArODk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0
aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUp
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdzKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkw
MSwxNiArOTk3LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJp
dGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBG
UFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5m
cHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCBy
aHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnByKCksIHJo
c0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBtb3ZlKGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhz
LmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29k
ZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC05MTgsNiArMTA1MCw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3QKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Q
cm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CisgICAgLy8gT09QUworCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwpAQCAtMTIxNSwzMiArMTM0OSwxMDEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRN
dWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBC
aW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2Jz
ZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAg
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1
bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0
S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIo
KSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3Vi
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgewor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1
bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxo
cy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc3ViRG91Ymxl
KGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJs
ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRL
aW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigp
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMs
IG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAg
ICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9j
b2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1
Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxK
SVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7
CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAg
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNh
bGwsIHJlZ1QwKTsKQEAgLTI2NCwxMyArMjYyLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2Rl
SUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykK
ICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzMCw0NCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9w
Q2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2Fs
bD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
ICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nv
bnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODIsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0KICAg
ICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTQxMSwxNCArNDA5LDE2IEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRo
aXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAg
IGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIC8vIE9PUFMKKyAgICBsaW5rQWxsU2xvd0Nh
c2VzKHNsb3dDYXNlKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1
bXBMaXN0IG5vdE9iamVjdDsKQEAgLTUxNSwxMCArNTE1LDExIEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgLy8gT09QUworICAgIGxpbmtBbGxTbG93
Q2FzZXMoc2xvd0Nhc2UpOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1MjcsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0
ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwor
ICAgICAgICAvLyBPT1BTCisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoc2xvd0Nhc2UpOwogICAg
ICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTUwLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhz
bG93Q2FzZSk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZh
c3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vs
c2UKQEAgLTE1OCw2ICsxNTksNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEpOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9u
IHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKICNlbHNlCkBAIC0xNjYsMjUgKzE2OCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2Nr
LT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUg
KGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0g
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5
dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4OSwzNiBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUs
IHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1
bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAg
ICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0
ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAg
ICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAg
ICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAg
ICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFk
ZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1
bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5
KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0
KS5qdW1wcy5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBM
aXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3
YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1
bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoanVt
cCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQg
cmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVl
UHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwogI2VuZGlm
CkBAIC0zMzgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSkKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQ
UlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0
YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NCw2IEBAIEFMV0FZU19JTkxJTkUg
ZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcs
IEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDgg
KzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0x
MjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDI0
IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzcmMu
aXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7Cisg
ICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpA
QCAtOTAsMzIgKzEwOCw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlv
blNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0Pigq
bV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBh
bGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsK
KyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BS
UmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1
bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3By
KCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJl
Z1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxv
Y2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25z
dGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
YnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwot
ICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCBy
ZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAg
cHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3Zl
cnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTI1LDIzICsxNjQsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19p
bnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29u
c3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0lu
c3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBj
b25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAor
ICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BS
ID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0
YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3Ry
dWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsK
KyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFz
SW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJh
bmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAg
ICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3Rh
bmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsK
IAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1
bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2Up
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
KSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjE3LDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBl
OwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUg
cmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJh
c2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0
aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwot
ICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUg
YSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJ
bnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVn
VDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8v
IHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRp
b25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9U
ZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRl
bXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVn
IHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gx
VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkg
eworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAg
ICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BS
ID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1
ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxh
Y2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdw
cigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAg
ICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAg
ICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwK
KyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBz
Y3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFz
ZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAg
ICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdp
dGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBD
aGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMg
aXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJ
bnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAg
ICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBz
Y3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9p
bnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4Kytd
OwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFz
ZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
CkBAIC0xOTksMTEgKzMxOCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJ
bnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMjExLDI4ICszNDgsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVm
aW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlw
ZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwot
ICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQ
dHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFs
dWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2Vs
bCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1w
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRH
UFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOwor
CisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAg
aXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5r
KHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0
MSwxMyArNDIyLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ1NiwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0
KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jv
b2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQ
UiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NCha
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yNjgsMTEgKzQ4NywyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3Qg
SW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051
bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywg
cmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRl
c3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAg
LTI4MiwyMSArNTE3LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5z
dHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJ
bnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0lu
dDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwog
Ci0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0lu
dFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNr
KSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjpl
bWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1ODMsNDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVj
b2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05v
dENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2MzIsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZh
bHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0
KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFy
ZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0zNTUsNyArNjk3LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVj
dGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNv
ZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1
ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzE2LDQxIEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlz
SW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9i
amVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNy
YykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMp
ICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVl
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQ
cmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAh
PSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzU5LDIwMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5
bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUo
dmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5j
dGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhp
cywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0
aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVu
Y3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVu
Y3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1
bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVh
bih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291
bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhh
dCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZh
bHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBh
Z2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5k
IGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1Zh
bHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFs
bCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAo
d2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVs
eSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2gg
d2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0
aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAg
R1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBj
b25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5
dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihj
b25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29u
ZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIs
IFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3Jh
dGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJ
ZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ0MCw0NiArOTY0LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3Ro
ZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
c2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1
YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAg
fQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVt
cCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5v
dyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFO
dWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
c2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0
aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0
ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ4OCwxMCArMTA5NSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwo
Y29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAg
fSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTIz
LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIp
KQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90
aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTU0LDMwNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2lu
dGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwg
PSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFz
Q2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVt
cGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIo
RXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7
CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9p
bnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9M
KCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3As
IE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVx
dWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6
IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJo
cykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0lu
dChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChy
aHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBS
ID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQ
UiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzog
Q291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJo
cyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3Nh
bWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7
Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBD
b21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyks
IHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNU
ZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdl
dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxh
dGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsK
KworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwot
ICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcg
cmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90
RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdU
MTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgeG9yMzIoVHJ1
c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjpl
bWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRh
cmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBq
ZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQ
UlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0K
KworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMs
IHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAg
ICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6
OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwpA
QCAtNTg5LDc0ICsxNDY4LDE1MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3Qg
SW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVh
bCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVh
bEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyks
IHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
SlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxo
cywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIp
OworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZw
Q29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2Vz
IGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0UoQklHSU5U
MzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUg
U3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0g
ICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8
IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMg
KGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNo
IGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVz
ZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0
IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBt
YWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0
IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdo
IGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1
MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0g
ICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxz
aGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwot
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRv
bmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVn
VDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3Zl
ciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8v
IEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUg
aXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBh
cmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAg
ICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdU
NSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
bGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8q
IEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToK
KyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAg
ICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAg
ICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxl
ZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsK
KyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAg
ICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0
IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3
b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJ
Zk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4g
SW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVh
dmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVy
IGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAg
ICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAg
bW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Cisg
ICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7
CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0
KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVh
bCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVn
VDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJl
Z1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRz
KS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNv
dWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMy
LCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpO
U3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklH
SU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJp
bmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93
IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdo
aWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAg
IEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJp
Z2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51
bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBz
bG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShy
ZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBl
aXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBp
cyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAg
ICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOwor
ICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRo
aXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
LSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNl
Ci0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
ICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTYyOSwxMzUgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAg
ICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0
byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1
YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgLy8gT09QUzog
Y2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMg
aGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOwor
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7Cisg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAg
ICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RF
cSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBn
b3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47
Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xv
d1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVu
dCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEg
c2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1
aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUg
dHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5
IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAK
LSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUg
aXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUg
b3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEs
IHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRz
KSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJl
Z1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJl
Z1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdU
MywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAs
IHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVx
KQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwg
cmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBj
b3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhl
cmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90
aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJ
TlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScg
dG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSBy
aWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8
fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3Rv
IG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVt
ZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBi
cmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYg
d2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmlj
ayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8g
aXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAg
ICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUg
aXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAg
ICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAg
ICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNv
dmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwor
ICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5s
ZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRo
IGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJl
Z1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3Ry
aWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAg
ICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJ
TlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmlu
Z3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cg
aWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hp
Y2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAg
SnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmln
aHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBK
dW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93
IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdo
aWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4K
KyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhp
cyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxp
bmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3Ry
aWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDAp
LCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTc0OCw4OSArMTc3MCwyMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3Rv
cmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBH
UFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1i
ZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMp
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICB9CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJp
Z0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENl
bGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0
VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29k
ZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAg
ICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNl
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Cisg
ICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Cisg
ICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9
IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNy
YykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdU
MCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZS
ZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNW
UmVnLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlm
IChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAg
fQorCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJl
Z1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUzogZGVhbCB3aXRoIHRoaXMuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIw
MzgsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwot
ICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEg
Y2VsbC4KKworICAgICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUg
fTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDAp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgcmVnVDApOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIwNjksMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChq
dW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJ
bW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgp
KSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgp
KSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdU
MCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjA5NCwxNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJ
VGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJs
ZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
Y3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTE4LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9j
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsK
KyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlYnVnPigpOworICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgIGxvYWQzMihjb2RlQmxvY2so
KS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVn
SG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNF
cSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVP
cCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQo
Y29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkg
eworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKwor
ICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEg
PyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0
aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVx
TnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBz
dGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAg
IC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBj
b25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lk
IHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVt
VmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAg
IGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0K
IAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyNjks
MjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigp
OworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNj
b3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2Nv
cGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEwNDUsMTMgKzIyOTMsODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlz
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hl
ZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNE
c3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQ
Uiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAg
ICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRh
dGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBp
ZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChw
cm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2lu
Y2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAg
ICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAg
ICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAg
ICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0
aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUo
cmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qx
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1Zh
bHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBl
KHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjM3NCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5
dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFk
YXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAg
ICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyMzg0LDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklE
IGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0g
cmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgq
dGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVn
ID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAx
LT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAg
ICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdw
clRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3By
KCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JS
YXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykp
KTsKQEAgLTEwODYsNjQgKzI0MjYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMo
Y29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Omlu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lz
dGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQot
Ci0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMy
KFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigp
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
ISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0
R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9y
IExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAg
aGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTY0
LDYgKzI0NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiB7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFy
bHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRz
QXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09QUzog
Y2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRlci4KICAg
ICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGlu
c3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNr
aXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlv
bnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEzICsy
NDk3LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBw
YXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6
ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlD
YWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
T3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwxMSAr
MjUxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAg
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
ICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAv
LyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsg
Ly8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3MgaW4g
TE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rp
b24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsy
NTQwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4o
Jmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU1MCwxOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBi
eXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhw
Kj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFsdWVH
UFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVn
ZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAg
IH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTcxLDQyIEBAIHZv
aWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29w
ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7Cisg
ICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAg
IGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBz
Y29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9j
b2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
bmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9w
Y29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjYzNSw0NSBA
QCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7
CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9z
Y29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9u
KTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2Ugewog
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4
cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQ
UiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0K
IH0KIApAQCAtMTM0OSw5ICsyNzA0LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGlu
dCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVz
U3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BS
UmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxh
Y2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7
CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJh
eTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3MjUsMjYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4
ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRh
ZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwg
YXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFy
Z0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxz
ZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChz
aXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlm
CiB9CiAKQEAgLTEzODEsMTUgKzI3NTgsNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMs
IGVudW1lcmF0b3IgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9y
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworICAgICAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAg
ICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VH
UFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTQwOSw2ICsyODEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3By
b3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7CkBAIC0xNDM2LDYgKzI4NDEsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogaW1w
bGVtZW50IHRoaXMKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4NjgsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFz
ayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHBy
b2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dD
YXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3
OCwxMyArMjg4NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
CiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5
dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9u
ZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZh
bENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVt
cCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTE1LDkyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9k
aXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07
CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07CisgICAg
ICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBl
bnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFs
dWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFI7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAg
ICAgICAgIGJhc2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQ
UiA9IGJhc2VDZWxsLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBi
YXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zm
c2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElm
IGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFn
ZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDAp
OwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworCisgICAgICAgIGxvYWQz
MihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRl
eCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRo
ZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsK
KyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0
IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3Vi
MzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2Ny
YXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwg
c2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRo
YXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAg
Ly8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJh
dG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vzcwor
ICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVn
VDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihy
ZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAg
IGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1QwKTsKKyAgICB9CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAg
IG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzAx
MCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRl
bXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRl
bXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNl
KCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIg
PSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRl
bXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9Cisg
ICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAg
IGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDY0LDUxIEBAIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEp
OwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZz
ZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3du
SW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywg
aW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9y
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigp
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRz
ID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1Qw
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVz
dWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEs
IHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0
b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIs
IHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5
OCw2ICszMTE4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwog
ICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9j
YXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90
YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0
IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE4MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2Zp
bGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdH
UFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxl
bXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszMTk3
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4o
KSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwog
ICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJl
Z1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWls
PigpOwpAQCAtMTcwMiwxMSArMzIzMCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9j
b3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWls
YWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQzMihk
c3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAg
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsK
KyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NzE0LDI5ICszMjUxLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25z
dCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tp
cDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
LSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJ
bW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXAp
LCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFu
T3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3Vi
MzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwor
ICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1Qw
LCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1z
VG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIHpl
cm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CiAj
ZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE3NDQsNDkgKzMzMDAsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50
KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgp
KSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5
dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAK
LSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2Fk
VmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0g
ICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShqc1VuZGVm
aW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1Qy
KTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5P
ckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBp
bmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAg
ICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZVZhbHVlKGpz
VW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RP
YmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0KKworICAg
ICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
T2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAg
ICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qx
OworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2Vu
ZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJl
Z3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwog
Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0
aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpA
QCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3Bl
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29w
ZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0
ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw0OSArNTEsMTExIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
YmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3Bl
cnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMu
Y291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsK
LSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0g
ICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAg
ICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIHJlc3VsdEdQUiwgcHJvZmlsZSk7
CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAg
ICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVT
eW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJp
bmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRHUFIsIHByb2ZpbGUpOwogCiAg
ICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50
MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5
KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
cHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9
CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0
QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAg
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmls
ZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY0LDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAg
IHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BS
KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNl
KSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwog
CiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE1Miw2ICsyNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFk
ZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgR1BSUmVnIGJhc2VHUFI7CisKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwog
ICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMzNCw3ICs0MzIsNyBA
QCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdl
bjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0g
Y3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzQ0MCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7
CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRv
IGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0
byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTM1MCwxMyArNDQ4LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2Fk
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdl
dFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAg
ZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7
CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7
CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0zNzIsNDkgKzQ2OSwxMDUgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwot
ICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNz
b3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJS
ZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25z
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBy
ZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQ
UiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
KyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBh
dHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0
dGVyR1BSID0gZ2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVy
LmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQz
Ml90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUu
bV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29k
ZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBi
eXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3Bl
cnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5t
X2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBh
Y2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1
dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQyNCwxOCArNTc3LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCBiYXNlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVs
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmll
ciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVn
aXN0ZXJzLgpAQCAtNDQ0LDI1ICs2MzEsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5
SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFs
dWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIo
KTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQ3MiwxOSArNjYxLDY5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
cHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVy
dHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChw
cm9wZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChwcm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5k
KGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBX
ZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ug
d3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAt
NDkzLDIxMyArNzMyLDM0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAg
fQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsK
KyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIH0KIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJh
c2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9
IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QxOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKICAgICBpZiAoKmlkZW50
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRh
dGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRHUFIsICZtZXRh
ZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAg
ICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0
aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QyOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7
CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVn
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwg
dGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHRoaXNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlz
VlJlZyk7CisgICAgfQogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7CisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5
SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
cmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhp
c0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0Rp
cmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBh
YmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3
ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMg
aGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdl
bmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUg
YWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZh
bHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIH0K
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0
ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QsIHByaXZhdGVGaWVs
ZEFjY2Vzc0tpbmQoYnl0ZWNvZGUpKTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CkBAIC03MDksNzcgKzEwODQsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29u
ZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNv
ZGUgc2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7
CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0
aGlzKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21f
cHV0QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
LQorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5C
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5q
ZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJl
Z2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0
aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
OChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
OTEsMTcgKzExODQsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsK
ICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRk
cmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRy
ZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSArMTIxMiwzNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNv
bnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2
ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAg
ICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGRlcHRoID4gMCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50Lmdl
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25t
ZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgpAQCAtODM4LDkgKzEyNTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAKQEAgLTg1MywyOSArMTI2NywyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVz
dWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwx
NSArMTI5OCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsK
LSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cisg
ICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYs
MTIgKzEzMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAg
ICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNp
emVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBA
IC05MjIsNTEgKzEzMzUsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVy
ZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAg
IEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7
Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29w
ZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAg
ICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBi
YXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIo
b3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwor
ICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAg
ICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsK
ICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsK
KyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3Bl
R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC05ODAsMTAgKzE0MjYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDQyLDI3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsK
KyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE0NzIsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0
b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0
Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9h
ZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1Qx
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUw
MSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOwor
CiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wg
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zm
c2V0VmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRH
UFI7CisgICAgICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29w
ZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICAgICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAg
c2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIg
PSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0
dGVyZmx5VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOwor
ICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAor
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2Nv
cGVHUFIsIG9mZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJk
YTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVH
UFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAg
ICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5k
U2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0
b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAg
ICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihv
ZmZzZXRHUFIpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0
ZXJmbHlHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgp
IHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6CkBAIC0xMDk4LDI4ICsxNTUzLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVC
bG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAg
ICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
ICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5
cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRW
YXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0g
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdy
aXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2
YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90
LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BS
OworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29w
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlX
cml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFs
dWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
ICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
QEAgLTExMzQsMTIgKzE2MTgsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Cisg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qg
d2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlz
IHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgs
IHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFs
TGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1
bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBh
dHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGlu
Zy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTExNTMsMjMg
KzE2NDYsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
IH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNj
cmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMg
b2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2Ug
aWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIg
YWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOwor
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKQEAgLTExODYsMTAgKzE2ODgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUo
KTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1LDYxICsxNzA1
LDE1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRz
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBh
cmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFy
Z3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBs
b2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQ
Uik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVn
VDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFy
cmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAor
ICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Nl
bGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
IHsKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBp
cyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShv
d25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOwor
ICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzLCBvd25lcik7CisgICAg
ICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgb3duZXJHUFIgPSBvd25l
clZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdU
MCk7CisgICAgfQogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAg
IG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgewor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxs
KSkKKyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7
CisgICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJy
YW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFs
PFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUu
cmVzZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwg
b3duZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2Fs
bCgqc2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQog
ICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYg
KHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkg
eworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0g
cmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7
CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90
Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAg
LTEzODUsOCArMTk3NSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAg
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25l
ciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7Cisg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qw
OworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCBvd25lciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxS
ZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2ls
ZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNv
cmQpOworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01h
Y3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShz
aXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNp
emVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6
OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFw
IHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENh
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQ
YXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAg
ICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBX
ZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8g
bV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigm
bV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNl
dF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3Rl
eHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRG
b3JMSUNNRnV6emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBh
bGxvd0hvaXN0aW5nTElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlv
biwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415356</attachid>
            <date>2020-12-03 15:11:58 -0800</date>
            <delta_ts>2020-12-03 19:52:44 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>396385</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzMyBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICgh
IShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0
ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
aWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNT
dHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBv
cF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiBy
aWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSA7CisgICAgICAgICAgICAgICAg
aWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJ
bnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAg
ICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZy
b21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNw
ZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3Vi
bGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8g
YmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
QmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5h
czxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOwor
ICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAg
ICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
dHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0g
dHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJl
IHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
RG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5
YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRp
bmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5z
aWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTog
eworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFp
bnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVj
SW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjQW55SW50QXNEb3Vi
bGU7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
U3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1
cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNC
eXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8
IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisK
KyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOwor
ICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6
IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAg
ICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0
byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVm
dCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAo
aXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JC
b29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUp
OworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
bHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hp
ZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2
ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRp
dmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisg
ICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBl
ICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1By
aW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5
bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAg
ICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdl
IGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVk
IHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRo
aXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kg
d2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAg
ICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7Cisg
ICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
Y29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19h
cnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJy
YXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUg
d2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09i
amVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjU3Ry
aW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9z
Y29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
LCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0
cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3By
b3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfZW51
bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lz
dGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNv
ZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVu
dHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigp
LCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9h
cmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1l
bnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRD
b3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3By
ZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdF
eHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0
cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0
ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVy
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lz
X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09i
amVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVv
Zl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNv
ZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRl
Y29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0
LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
T3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6Ogor
ICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNh
c2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5k
OgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBj
YXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJv
d19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAg
ICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ug
b3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToK
KyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFf
cHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9q
ZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29y
X251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2Fz
ZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgor
ICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3Bf
amdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgor
ICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2Fz
ZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGlu
dDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAg
ICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoK
KyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9m
bG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6Cisg
ICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2Vu
ZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ug
b3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9w
cm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2Ug
bGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoK
KyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAg
Y2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2Fs
bF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2lu
dF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9t
X2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9p
dGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRf
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9u
KCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29k
ZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNB
dEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUp
OworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0g
KFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29k
ZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
LT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9y
IChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxl
ID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1f
cHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9u
OworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBh
cmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCks
IG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7
CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9y
ZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNl
IGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERG
UyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlu
cHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVk
IGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAq
bV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rp
b25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50
cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7
CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1f
Y3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0g
d2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQor
ICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKApAQCAtNjcsNiArODk2LDEyIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKTsKIH0KIAorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVj
a2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQogICAgICwg
bV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKQEAgLTc2LDYgKzkxMSw3IEBAIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNlTE9MID0gT3B0aW9uczo6Zm9yY2VMT0woKSB8
fCBTdHJpbmcobV9jb2RlQmxvY2stPmluZmVycmVkTmFtZSgpLmRhdGEoKSkgPT0gImZvbyI7CiB9
CiAKIEpJVDo6fkpJVCgpCkBAIC0xNDAsNiArOTc2LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNl
IG9wXyMjbmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRl
Y29kZUluZGV4KSB7IFwKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyBcCiAgICAgICAgICAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7IFwK
ICAgICAgICAgfSBcCkBAIC0xNTYsMjYgKzk5MywzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAg
IGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2Rl
ZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6
IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBz
bG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2Uu
cmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5k
c3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93
Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAg
IE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQg
SklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1
blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAg
ICAKQEAgLTIzMSw3ICsxMDc0LDczIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAg
ICAgICAvLyBPT1BTCisKKyAgICAgICAgbV9zdGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXpl
KCkpOworICAgICAgICBtX3ByZWRlY2Vzc29ycy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBpZiAoYmxv
Y2suaXNFbnRyeUJsb2NrKCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJsb2Nr
LnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNbc3Vj
Y2Vzc29ySW5kZXhdLmNvbnRhaW5zKGJsb2NrLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAg
ICBtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgZm9yIChtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVj
dGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAo
IW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50
QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7
CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCld
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRl
eCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhp
dEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRv
JiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3Nv
cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJl
ZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vz
c29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRl
QXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVj
ZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2Nrcykg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9j
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCku
c2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29u
c3RhbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8
QWxsb2NlZFJlZz4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxv
Y2VkUmVnKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0
ZXJzID0geyB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKworICAgICAgICAgICAgfQorICAgICAgICB9CisK
ICAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6
ZSgpOwogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAm
JiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgICAgICAvLyBXZSd2
ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJl
YWNoYWJsZS4KQEAgLTQ3Nyw2ICsxMzg2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQogCisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1
Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwg
bV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTUsMTIgKzE0MjcsMTQgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9m
aWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhh
dmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVy
ID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAg
ICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xv
d0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2Fz
ZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAg
ICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dD
YXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0
VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOwogICAgICAgICAKQEAgLTU3OSw3ICsxNDkzLDYgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pu
c3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX25lcSkKQEAgLTU5Nyw2ICsxNTEwLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9v
cGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lm
IENQVShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbHNl
CisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCisjZW5kaWYKKwogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02
MzMsMTUgKzE1NTIsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAi
LCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsK
LQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNl
cy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVu
b3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRv
Lm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FH
RShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+
dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdl
bi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZz
ZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBp
biBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRl
QWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRv
IHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2U7CiAgICAgfQpAQCAtNzc0LDYgKzE2OTYsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRo
b3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93
UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisgICAgeworICAgICAgICBmb3Ig
KGF1dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAganVtcC5saW5rKHRoaXMpOwor
ICAgICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRo
aXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsxOTg3LDY1MiBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhp
dEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2Vk
OworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAg
ICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVl
U2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkK
KyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2Vk
OworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9i
YWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6
IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4g
cmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0
LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBS
cygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxs
b2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4g
dGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtl
IHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+
KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjph
c3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xv
d0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAg
Q1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7Cisg
ICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykg
eworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBp
ZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQ
UnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBh
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxs
b2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50
KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQg
c29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBt
YXAgYWdyZWUuCisKKyAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlKHJlZykub3BlcmFuZDsKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkp
CisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVn
Rm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAg
fQorICAgIHJlZ1ZhbHVlKHJlZykgPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6OnNw
aWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAo
YXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAg
aWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJ
bXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJz
KCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpz
bG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZh
c3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZd
IChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQu
aXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcs
IHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9y
ZUNhbGwoKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAg
U2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1
dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVn
VmFsdWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVk
ZWQocmVnKTsKKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0
LnNwaWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklU
OjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7
CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNr
Rm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNr
U2l6ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCByZWNvcmQu
c2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgdG9JZ25v
cmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBz
YXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSB0b0ln
bm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdp
c3RlcigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0
Y2gpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRj
aCk7CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQ
bGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6
c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8g
T09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFk
ZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsK
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAgICByZWdWYWx1ZShn
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1Zh
bHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
R1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVn
cyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zv
cihvcGVyYW5kKSk7CisKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBhc3NpZ25S
ZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNv
ZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNB
bGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICBh
c3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sK
KyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50Owor
fQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVn
VmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1
ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6
R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQp
Cit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOwor
fQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGlu
dCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJ
VDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVt
cDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJ
VDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOwor
CisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxv
Y2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1
bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2pp
dC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6
Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsK
K30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9
IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
ICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAg
bV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAg
bV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sK
KyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOwor
CisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9v
cGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5k
KTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0g
bV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1f
b3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQor
CitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAg
IGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcg
PSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52
YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2pp
dC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07
CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVy
YW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnBy
ID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlm
ICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50
MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMy
KEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAg
bV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5hc3Np
Z25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lz
dGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3Rl
clNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisK
KyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7Cisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJl
Zyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5n
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYg
KCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVT
eW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAg
ICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAg
IHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1
bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsg
dmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2Jq
ZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRl
QW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAg
aWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHJl
dHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQz
MiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFsc2U7
CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1c2VC
aWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAg
ICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSGVh
cEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hlYXBC
aWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
aWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0ludDMy
KHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNlCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2lu
Y2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1
ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVt
IE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxl
OworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBo
OwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xh
c3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRv
OwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
LCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwg
dG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFs
UmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNh
dmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOwor
ICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0
IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsK
ICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkg
anVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBo
YXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZl
UGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBi
ZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMg
c2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAg
fTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5OCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
OwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJm
YWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRT
dHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hH
ZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBN
YWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBh
IHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwg
Y29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQg
YSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRC
eUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI3
NCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAg
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOwor
ICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZv
aWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wp
CisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2
b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBK
SVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5k
Q2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAg
ICB7CkBAIC0zMDAsOSArMzI1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFk
dmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0g
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3Qm
LCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAg
ICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1
bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90
KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNTQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxs
TGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwot
ICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29u
c3QgT3AmKTsKIApAQCAtMzM3LDcgKzM2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVt
IGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxl
T3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BF
cVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93
KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAg
ICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIs
IFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUgfTsKQEAgLTM1MCw4ICszNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAv
LyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQg
dGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCi0gICAgICAg
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRh
ZGF0YSYpOworICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnIHZhbHVl
ID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKC4uLik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmls
ZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDggKzUwMiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24s
IERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSAr
NTExLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZv
aWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3Io
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTUxMiw5ICs1NDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
QEAgLTY0Myw3NyArNjc5LDgxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2
b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29s
IGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRH
UFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2
ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAt
NzI4LDggKzc2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAg
IEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDYsMzQg
Kzc4NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAg
ICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0
IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24s
IFJlcGF0Y2hGdW5jdGlvbik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2Fz
ZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKyst
PmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0
ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlT
bG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICAr
K2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAg
ICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxp
bmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBi
b29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZz
ZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xv
d0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAg
VU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nh
c2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5NDMsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAg
ICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAg
ICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9v
bCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTM1LDYgKzk1NiwyMzEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgogICAg
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAor
ICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgR1BS
VGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgfkdQ
UlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAo
SklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMy
T3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJp
dHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRh
Z2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
Y2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
OworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3By
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJh
bmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAg
ICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
fkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIg
eyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5k
OworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5
cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25G
b3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChv
cGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25G
cm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9
CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRv
UmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBm
cHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCku
ZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFs
bG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVn
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7
CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKwor
ICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisK
KyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3By
OworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
ZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RD
ZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkgJiB+
U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VMT0woKTsKKwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNw
ZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxs
KTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9iamVj
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBz
cGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUg
Zm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoR1BSUmVn
IGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7Cisg
ICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2
b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0
SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2UgdGhpcyB0YWtl
IHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNldCBpdC4KKyAg
ICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAg
IFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50U3BpbGxSZWNvcmQg
c2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2Fs
bChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9t
U2F2ZVBsYW4oUmVnIHRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3Rl
clNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRl
ciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsK
QEAgLTk1Myw3ICsxMTk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1w
VGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5k
ZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3
aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNp
Z25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsxMjM2LDc3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAg
IGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7Cisg
ICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2
YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAg
ICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVn
IGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBB
bGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3By
ICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAg
ICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAg
ICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAg
ICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShj
b25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291
bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVk
ICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9y
bWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7Cisg
ICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAg
ICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNv
bnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFT
U0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkpOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIu
b3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBlcy5z
aXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVzW2ld
LCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0
ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsK
KworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAg
ICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsK
KyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IG1fY3VycmVudFByZWRpY3Rpb25zOwor
CisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisgICAgICAgIFZlY3RvcjxP
cHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZh
bHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAg
VmVjdG9yPEp1bXBMaXN0PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxl
c3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
SmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
T3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5v
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5s
ZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91
YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5P
ckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVy
ZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZh
bHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5s
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5v
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0
ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
VW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MCw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25l
ZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRh
cmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVy
YXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6
CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAv
LyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50
IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UoKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhz
R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNH
UFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFs
c2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMjUgKzMwNSwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBv
cDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGlu
dmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0
YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQs
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAg
ICAgICAgYXV0byBmYWxsdGhyb3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBOb25aZXJvIDog
WmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBs
YW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIGZhbGx0aHJvdWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNl
cyBpbiB0aGUgc2xvdyBwYXRoOgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNv
bnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8g
ZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8g
ZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVu
dEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIx
KTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAt
Mjk5LDggKzM0MCw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjUs
OCArMzY0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
IH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
KSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwog
ICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiAr
Mzg3LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5v
dCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVt
cCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9
IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElm
SW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7
CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRk
NjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVn
aXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpA
QCAtMzY4LDkgKzQwNCw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsK
ICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAg
ICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CkBAIC00MDYsMjUgKzQ0Miw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1
Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE1vZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1h
a2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4K
LSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0g
WDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAg
ICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgp
OwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9i
YmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAg
ZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRo
aXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdw
cigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChl
YXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5n
cHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBl
Y3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhz
VGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVu
c3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgp
OworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1Q0LCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChlY3gpOworICAgICAgICBtb3ZlKHJlZ1Q0LCBlYXgpOworICAgIH0KIAotICAgIG1vdmUo
cmVnVDQsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7
CiAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBU
cnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEVxdWFsLCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5h
dG9yTm90TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwog
ICAgIHg4NkRpdjMyKGVjeCk7CkBAIC00MzIsMTUgKzUxMyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVy
bywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKICAgICBib3hJbnQz
MihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9k
KTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKQEAgLTQ1MSw3ICs1MjQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs1MzYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNv
bmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJ
bnQzMk9wMjsKQEAgLTQ3Myw2ICs1NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVn
VDApOwpAQCAtNTYxLDE1ICs2MzUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVD
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9u
LCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3Ay
LCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEwICs3OTUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0
ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxK
SVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7
CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlv
blZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0
TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKQEAgLTc4Myw5ICs4NTMsMzUgQEAgdm9p
ZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Yml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3VsdElzSW50MzIg
PSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAg
ICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIo
b3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBh
ZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKworICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1bHRHUFIpOwor
ICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElz
SW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8
IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNl
CkBAIC04MDIsNyArODk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3Ry
dWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNv
ZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdzKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTkwMSwxNiArOTk3LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1
Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElD
KGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAo
YXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNG
UFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigp
LCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnByKCks
IHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3Vi
bGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBtb3ZlKGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywg
cmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRkSUMqIGFk
ZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Fk
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdp
c2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3Ry
dWN0aW9uKSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVB
ZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CiB9CkBAIC05MTgsNiArMTA1
MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3QKIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0
aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBO
b25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CisgICAgLy8gT09QUwor
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwpAQCAtMTIxNSwzMiArMTM0OSwxMDEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAg
ICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBS
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7
CisgICAgICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCBy
ZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2Rz
dCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5n
cHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkg
eworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCBy
ZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc3ViRG91
YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAg
ICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0Rv
dWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0g
bV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3Vi
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2Fz
dDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9u
KSk7CiAgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDgg
QEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTQsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBD
OyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVy
IGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2
YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2NSwxMSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNT
RVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0
ICszMzMsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAg
IGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
Rm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0
cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYs
MzkgKzM4NSw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAg
ICAgICAgIH0KICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBs
aWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRo
IG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3Vs
dCBoZXJlPworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKIAogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2l0ZXJhdG9yKSA9IFNwZWNI
ZWFwVG9wOworCiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJl
c3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsK
KyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVu
ZChuZXh0Q2hlY2twb2ludFNsb3cpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAgcHJv
dmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzAsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAgICAg
fSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBp
dCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVj
b2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwg
ZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdU
MCk7CiAKQEAgLTQ3NiwxOCArNDk1LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAgIHsK
LSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAg
ICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hlY2tw
b2ludFNsb3dQYXRoLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpKTsK
IAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQ
Uik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9w
ZXJ0eU5hbWVzLT5uZXh0LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1Zh
bHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVzZWRSZWdpc3RlcnMsCisgICAg
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0
R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgICAgIHNsb3dDYXNl
Lmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIH0KQEAgLTQ5OSwxMSArNTIxLDE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRl
cmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAorICAgICAgICBK
dW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2
bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2tw
b2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAogICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTUxNSwxMCArNTQwLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxp
bmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0
PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQo
anVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRv
ck5leHQ+KCk7CkBAIC01MjYsNyArNTUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29k
ZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGlu
ayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3Qu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVj
dC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3
Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAK
ICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dD
YXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZS
ZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QwOwogCkBAIC01NjEsNyArNTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUs
NiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAg
IC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBh
dGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBA
IC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
KTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUg
ZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVy
ICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0Fu
eVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQot
ewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29k
ZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlu
bGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODksMzcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlz
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQor
QUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2Vu
ZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisg
ICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2Rl
SW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZCht
X2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIG1f
c2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAg
ICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAgbV9z
bG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3Qo
KS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1w
TGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShq
dW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCku
anVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1w
TGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
QVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMg
d2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBq
dW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5k
KGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwg
aW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5LDExICszMDIsMTAgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2
YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2Zp
bGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWUgPSByZWdUMDsKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKICNl
bmRpZgpAQCAtMzM4LDExICszMzAsMTEgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9m
aWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBHUFJSZWcgcmVnKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0
YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpAQCAtMzkzLDExICszODUsNiBAQCBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJ
bml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Nyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAg
ICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNl
b2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpA
QCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1
MSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNyYykgPT0gSW52YWxpZEdQUlJlZykg
eworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKQEAgLTkwLDMyICsxMDgsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9j
YXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFs
bG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVj
dD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVy
SUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVn
VDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAg
IEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0g
cmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAt
PmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcg
PSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICgh
YWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6
Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRp
YWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAg
ICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwg
VHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEyNSwyMyArMTY0LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5t
X2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0
ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJS
ZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJh
bmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsK
KyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3Rv
ckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFz
SW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNv
bnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQ
Uik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9s
Lmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBp
bnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1
bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQ
Uik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhh
c0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3Vu
ZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIxNyw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3Rv
dHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZh
bHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZv
ciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBj
YW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1Qx
KTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0
IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wu
aGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1
ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAg
ICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAot
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1Qx
LCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0g
ICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAg
T3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHBy
b3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3Jh
dGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90
bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOwor
ICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAg
ICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90
b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5l
bXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1w
LT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAg
ICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVH
UFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIo
KSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMg
KGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4K
KyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9u
ZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQu
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0
aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAg
SklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
CisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUK
KyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsg
Ly8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAg
IG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRl
eCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCkt
PmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qKQpAQCAtMTk5LDExICszMTgsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29u
c3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTIxMSwyOCArMzQ4LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191
bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1
bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21w
YXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAg
ICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAg
ICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBp
c0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwg
dGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVz
dWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDAp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihF
cXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0yNDEsMTMgKzQyMiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVs
bChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NTYsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRl
c3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUik7CisgICAgICAgICAgICB0ZXN0NjQoWmVybywgaW5w
dXRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICB0ZXN0
NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMjY4LDExICs0ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNv
bnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdDY0KE5vblpl
cm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdpc3RlciwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAg
ICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0UoQklHSU5UMzIp
CkBAIC0yODIsMjEgKzUxNyw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0
IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZD
ZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpC
aWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKLSAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BS
KTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBC
aWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNl
bGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMy
TWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMxMywxOCArNTgz
LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBi
eXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjMyLDYxIEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09i
amVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNv
bXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90
Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMzU1LDcgKzY5NywxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJu
VmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcxNiw0MSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgCi0gICAgSnVt
cCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYgKGRzdCAh
PSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
c3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90
Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdCh2
YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgaXNJbW0g
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9i
amVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAgICAgIGlmIChk
c3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIgKzc1OSwyMDMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9z
cmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNo
SWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qw
KSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBt
b3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2
YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1
ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
IAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworCisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0
RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9m
dW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
YW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIG5hbWUg
eyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9
IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUuZ3ByKCk7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1w
LmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdl
IGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTogc3RyaW5ncywgYml0aW50LCBvYmplY3Rz
IHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBiZWxvdy4KKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRo
ZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCi0g
ICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEg
Zm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBpbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4s
IGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVy
bywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0gICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IGFnYWluc3Qg
SlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhl
biBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBi
aXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0
aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdo
aWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCisgICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICB4b3I2NChUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNv
bmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUg
eyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIg
eyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
R1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBz
Y3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRj
aDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNj
cmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KK30KIAot
ICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwot
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZh
bHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24g
PSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHZhbHVl
R1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0g
c2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNo
Mi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnBy
KCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZh
bHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gy
RlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBH
UFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00NDAsNDYgKzk2NCwxMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3Qg
SW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFu
ZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBp
c0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0Nl
bGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0
dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAg
ICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwor
ICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAg
IEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAv
LyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwot
ICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Owogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3Jj
KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVj
dWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNH
bG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5k
bGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1l
ZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
anVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00ODgsMTAgKzEwOTUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9u
dWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAg
ICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29y
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUwMCwxMCAr
MTEyMywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090
aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNl
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8v
IE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE1NCwzMDUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VSVChzcGVjaWFs
UG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRl
ci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hh
c0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwubGluayh0
aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMp
ICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAgICAgICAgICAg
c3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVxdWFsID0gYnJhbmNo
UHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwo
KSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFz
SnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAg
ICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lh
bFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1l
dGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVu
YW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgQVNTRVJUKHVz
ZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1l
PE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBO
b3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVy
ZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAo
IXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChs
aHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOwor
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJo
c0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBs
aHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9P
UFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29tcGFyZTMyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisKKyAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6amVxSW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIEFTU0VSVCh1c2VMT0woKSk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjpp
c19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRv
IGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShs
aHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChy
aHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAg
ICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWco
KSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0g
bGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0
YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3Bl
Y3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wRXE+KGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsK
LSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwot
ICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BS
UmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhz
R1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
IHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BOZXE+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMy
KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEs
IHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIHhvcjMy
KFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwor
fQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEp
LCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
eXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAg
ICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2Up
OworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7
CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9y
ZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4o
KTsKQEAgLTU4OSw3NCArMTQ2OCwxNTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNv
bnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8g
RXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91Ymxl
RXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShs
aHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21w
YXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAg
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURv
dWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJs
ZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwogCi0jaWYgVVNFKEJJ
R0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRv
IGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2Vs
bCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMg
dGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdp
bGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJ
ZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkg
aGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwg
MTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUp
OwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdU
Myk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUp
KTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVt
cCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8g
Y292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAg
ICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRo
ZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJv
dGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAg
ICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0
ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsg
cmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAg
ICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RF
cSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAg
ICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7
CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlm
IChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1Bh
dGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisK
KyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCBy
aWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRo
YXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJh
bmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlz
IGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3cs
IGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51
bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAg
ICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAg
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUp
OworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVn
VDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAg
b3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9y
RXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmln
SW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3
ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJ
bnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5n
cworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNF
KEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIg
c3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1Qy
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4K
LSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVt
cCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hp
Y2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgor
ICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlz
KTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGlu
ayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0
RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAg
ZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlm
ICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE2MjksMTM1IEBA
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1Qx
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJv
dmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEp
CisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhz
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChy
aHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8vIE9P
UFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURv
dWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNh
c2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0
aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikp
OworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBVU0UoQklHSU5UMzIp
Ci0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3Ry
aWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAg
ICAgZ290byBzbG93UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3RvIHRh
a2VuOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBnb3Rv
IHNsb3dQYXRoOwotICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJh
Z21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0
aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkg
cmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8g
VGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAx
PDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBh
dCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxs
IGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJl
Z1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdo
Qml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2
NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwg
cmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCByZWdUMSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKLSAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAo
dG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsK
LSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNz
IHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlm
IGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5
cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0
IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQg
PT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENl
bGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAg
Z290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGlt
cGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5n
bGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVk
IGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUg
dHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5
IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAK
KyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxs
IGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91Ymxl
cyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdU
Mik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0
ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAg
ICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAg
ICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAg
ICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0
byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1Qy
KTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6
IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cg
cGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0Uo
QklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBz
dHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBz
bG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIs
IHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgot
ICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1w
IHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAg
Ly8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAg
ICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3Vi
bGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5r
KHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRP
Sy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJl
Z1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03NDgsODkgKzE3NzAsMjE3IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7Cisg
ICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
TnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIo
c3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51
bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVy
aWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhl
YXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNO
b3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9
IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0
ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAgYXV0
byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7Cisj
ZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkp
OworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNy
YyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmlu
ZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmco
cmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAg
ICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2Jq
ZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAg
ICAgIH0KKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVj
dChyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5
ICsyMDM4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNj
b3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQn
cyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNj
b3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJl
Z1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMDY5LDE3IEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNv
cmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigm
dm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigm
dm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIwOTQsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3Vy
ZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
dGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAg
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjExOCwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0g
Jm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0
clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsKICAgICBsb2FkMzIoY29kZUJs
b2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVi
dWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9k
ZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwot
ICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29s
IGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21w
YXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFy
ZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21w
YXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1
bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIo
RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0K
IAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihp
c0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21w
YXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
Z1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0
X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVs
bD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxs
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25z
dCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0
ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisK
ICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBv
dXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBh
dm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5k
IGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2st
Pm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAg
ICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBm
b3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFi
bGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFs
dWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAg
ICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsy
MjY5LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwg
cmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3Bl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5n
cHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkp
LCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMDQ1LDEzICsyMjkzLDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3Qg
SW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
VGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9j
YWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1f
c3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0
KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1
bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3Jj
RHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/Cisg
ICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmNE
c3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3Qg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8g
dXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVs
c2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVjdE90aGVy
KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1
cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICAgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUs
IHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
CisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisg
ICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3Vs
dEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAg
ICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzog
aXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RU
eXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJl
SUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzNzQsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZt
ZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1Qw
OwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyArMjM4NCwz
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgUmVnaXN0
ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJl
ZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJl
Zyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAyOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdw
clRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5kLmVtcGxh
Y2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNhbGxl
ZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBncHJU
ZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURhdGFSZWcg
PSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQt
PmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworCisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7
CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJs
ZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpKSk7CkBAIC0xMDg2LDY0ICsyNDI2LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJl
OjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVn
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
LX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4
b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFs
dWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5l
cT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShp
bnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlzIHdvcmtz
IGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBq
dW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAt
MTE2NCw2ICsyNDczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dQogewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVy
bkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BI
aW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9P
UFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIu
CiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRl
cihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0
byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChP
cHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4Nywx
MyArMjQ5NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAg
ICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNs
b3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0
aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYs
MTEgKzI1MTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgog
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAg
ICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtz
IGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3Ry
dWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywx
MCArMjU0MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NTAsMTggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhw
ID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJl
Z0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZh
bHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjU3MSw0MiBA
QCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUp
OworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsK
KyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09
IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAg
IGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2MzUs
NDUgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2Rl
Lm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwg
ZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNl
IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVu
Y19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAg
ICB9CiB9CiAKQEAgLTEzNDksOSArMjcwNCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJy
YXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAg
ICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZh
bHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAg
IEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5l
bXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdw
cigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
QXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzI1
LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJ
bmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQog
I2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExv
YWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5t
X2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNl
bmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzU4LDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0
aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVy
YXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICAgICAgT3B0aW9u
YWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgewor
ICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBi
YXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
YmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KIAotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdU
MCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBsb2FkMzIoQWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE0MDksNiArMjgxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODQxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
SGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6
IGltcGxlbWVudCB0aGlzCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsyODY4LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFw
ZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9k
ZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlw
ZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9
IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7
CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudElu
c3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRT
bG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAg
LTE0NzgsMTMgKzI4ODUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUs
IGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQo
QnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJs
ZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMjkxNSw5MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRv
ciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9Owor
ICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRl
eFZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7Cisg
ICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJh
c2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChi
YXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIHRo
YXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhl
IG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAv
LyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0
b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nl
c3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
Z1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYg
aW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdl
LCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdz
IG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
IHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMy
KHNjcmF0Y2hHUFIpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3Vs
dEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVj
ayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAg
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWln
aHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAg
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVn
MzIocmVnVDEpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAg
ICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZWdUMCk7CisgICAgfQogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUK
LSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBz
dGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNl
dCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAg
IAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEg
KzMwMTAsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAg
IFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1
Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5k
ZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5k
ZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1w
bGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4
R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0
b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOwor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAg
fQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
IHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAK
ICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzA2NCw1MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JH
UFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBL
bm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRo
aXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVy
YXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5n
cHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCBy
ZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGlu
ayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRj
aEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE1OTgsNiArMzExOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlw
ZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1w
TGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzMxODAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9u
QXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHBy
b2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiAr
MzE5Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlj
a2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUo
KTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAh
PSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2Vu
VGFpbD4oKTsKQEAgLTE3MDIsMTEgKzMyMzAsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1l
bnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29B
dmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50
MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwor
ICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdU
MSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTcxNCwyOSArMzI1MSw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgo
Y29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNU
b1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdU
MCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9T
a2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAg
IHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBy
ZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBh
cmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAg
ICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDAp
OwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszMzAwLDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1
bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7Cisg
ICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7
CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdU
MCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRp
ZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAg
bG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
LQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNV
bmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NU
aGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFs
dWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1
ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3Mp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVl
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisK
KyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7
Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsK
ICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFs
dWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdz
KTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3Mp
KTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsr
bV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNl
bGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFS
TS4KQEAgLTU0Nyw4ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC01ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
Y3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDkgKzUxLDExMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAg
ICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZp
ZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygp
KSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUp
OwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8
ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkK
KyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRHUFIsIHByb2Zp
bGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgcmVzdWx0R1BSLCBwcm9maWxlKTsK
IAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
IGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMy
T25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9
IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAg
ICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewot
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFs
PigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0K
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKytt
X2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
ICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHBy
b2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5
VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDIsMzkgKzE2NCw3MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3Bl
cnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0
eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRH
UFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5
VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTIsNiArMjQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIEdQUlJlZyBiYXNlR1BSOwor
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBwcm9w
ZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5
KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMzQsNyArNDMy
LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVy
biBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVj
dCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICs0NDAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAg
YXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZd
KGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAg
ICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzQ0OCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAg
bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAg
ICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwog
ICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+
KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+
KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcyLDQ5ICs0NjksMTA1IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2Fj
Y2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNz
b3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMy
X3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVy
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNl
dHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdU
MSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJl
Z1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0
ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhp
cywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAg
ICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAg
ICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVn
VDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFz
ZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9w
cm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNv
ZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJS
ZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1
dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0
cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjQsMTggKzU3Nyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBi
YXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJh
cnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJz
IHJlZ2lzdGVycy4KQEAgLTQ0NCwyNSArNjMxLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRl
ckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9k
ZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTkgKzY2MSw2OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHBy
b3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTQ5MywyMTMgKzczMiwzNDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJl
ZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0Pigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVn
VDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCiAgICAgaWYgKCpp
ZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1l
dGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgcmVzdWx0R1BSLCAm
bWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAg
ICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRH
UFIgPSByZWdUMjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHRoaXNH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh0aGlz
VlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNH
UFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNW
UmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwg
dGhpc1ZSZWcpOworICAgIH0KIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4o
CiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOworICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107
CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3Mu
aXNEaXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8g
YmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNl
dCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1l
bnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3
ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQg
YXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiB2YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BS
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICB9CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2Rl
KGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0LCBwcml2YXRl
RmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2RlKSk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwpAQCAtNzA5LDc3ICsxMDg0LDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVj
ZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJh
c2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlk
c1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNl
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsK
KyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJ
VEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1
YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhcklu
amVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdU
MCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNzkxLDE3ICsxMTg0LDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5
cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRT
Y29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1f
Y29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVzdWx0R1BSKSk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC04MTEsMjEgKzEyMTIsMzQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJl
c29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZGVwdGgpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAg
ICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChkZXB0aCA+IDApOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVu
dC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZp
cm9ubWVudC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKQEAgLTgzOCw5ICsxMjUyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsK
KyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogCkBAIC04NTMsMjkgKzEyNjcsMjkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5Ogog
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNv
bHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUs
IHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAg
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04
ODQsMTUgKzEyOTgsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIp
CiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAt
OTA2LDEyICsxMzI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KAogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwpAQCAtOTIyLDUxICsxMzM1LDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1
Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVy
ZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29s
dmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAg
ICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOwor
ICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQ
UjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFs
dWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRH
UFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAot
ICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9h
ZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFC
TEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGlu
ZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAg
ICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6
CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVn
VDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgpAQCAtOTgwLDEwICsxNDI2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAogCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNO
b3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTk5NiwyNyArMTQ0Miwy
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQ
Uik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
c3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwog
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDI2LDQwICsxNDcyLDIy
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAg
ICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVj
dFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAg
IGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBy
ZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3Rp
ZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNzMsMjIg
KzE1MDEsNDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7
CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIg
PSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdmFsdWVHUFIgPSByZWdU
MjsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBi
b29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlw
ZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IG9mZnNldFZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFs
dWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zm
c2V0R1BSOworICAgICAgICAgICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywg
c2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgICAgIGJ1dHRlcmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0
R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9
IGJ1dHRlcmZseVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdU
MTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3Qs
IHNjb3BlR1BSLCBvZmZzZXRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRM
YW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNj
b3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAg
ICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3Bl
cmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAg
ICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CisgICAgICAgICAgICBuZWdQ
dHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNlSW5kZXgo
YnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgaWYgKCF1c2VM
T0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyOgpAQCAtMTA5OCwyOCArMTU1Myw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKKworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBh
bHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAg
ICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9t
SW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2Ny
YXRjaEdQUik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkp
OworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
IHsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRT
bG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXROb3Rp
ZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgIHN0b3Jl
NjQodmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3Rh
bnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29w
ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3Bl
VmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
c2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0Tm90
aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRy
KHZhbHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CkBAIC0xMTM0LDEyICsxNjE4LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRv
bid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcg
dGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBw
YXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAg
ICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBU
cnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYg
d2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJp
bmRpbmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMTUz
LDIzICsxNjQ2LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
ICAgICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5u
ZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNl
IHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNo
R1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisg
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7
IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CkBAIC0xMTg2LDEwICsxNjg4LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVU
eXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTIwNSw2MSAr
MTcwNSwxNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3Vt
ZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1l
bnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHZh
bHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOwor
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKyAg
ICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1v
ZGUpCiB7CiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1v
ZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5
cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8
fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsKKyAgICAgICAgICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHZhbHVlVmFs
dWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFs
dWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIG93bmVyVmFsdWUuZW1wbGFjZSgqdGhpcywgb3duZXIpOwor
ICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIG93bmVyR1BSID0g
b3duZXJWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwg
cmVnVDApOworICAgIH0KICAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAg
ICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2Up
IHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93bmVyKSAmIH5TcGVj
Q2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwob3duZXJH
UFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVk
ZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBPcHRp
b25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgc2NyYXRjaFZh
bHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4KKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxs
KCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZt
KCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRl
ckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChvd25lck5vdENlbGwuaXNTZXQo
KSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAg
IGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRo
aXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0g
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICB2
YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHZhbHVlR1BSID0g
dmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZUdQ
UiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5U
eXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3du
ZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2YWx1
ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQog
CkBAIC0xMzg1LDggKzE5NzUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVh
bFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQogewot
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
b3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW47CisgICAg
eworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2go
dm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlvbmFsPFNpbGVudFNw
aWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxs
UmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21h
cFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9y
W10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3Jb
XShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAg
c3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBt
X21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1Bh
dGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0
aENhbGwuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
bG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgog
CiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAg
Ly8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAg
IC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcp
CiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rp
b24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVP
ZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNv
bnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBz
ZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJs
ZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3Rpbmcs
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVP
cHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415380</attachid>
            <date>2020-12-03 19:52:44 -0800</date>
            <delta_ts>2020-12-04 16:03:02 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>414330</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzMyBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICgh
IShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0
ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
aWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNT
dHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBv
cF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiBy
aWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSA7CisgICAgICAgICAgICAgICAg
aWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJ
bnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAg
ICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZy
b21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNw
ZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3Vi
bGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8g
YmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
QmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5h
czxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOwor
ICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAg
ICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
dHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0g
dHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJl
IHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
RG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5
YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRp
bmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5z
aWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTog
eworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFp
bnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVj
SW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjQW55SW50QXNEb3Vi
bGU7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
U3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1
cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNC
eXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8
IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisK
KyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOwor
ICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6
IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAg
ICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0
byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVm
dCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAo
aXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JC
b29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUp
OworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
bHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hp
ZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2
ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRp
dmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisg
ICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBl
ICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1By
aW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5
bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAg
ICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdl
IGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVk
IHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRo
aXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kg
d2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAg
ICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7Cisg
ICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
Y29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19h
cnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJy
YXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUg
d2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09i
amVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjU3Ry
aW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9z
Y29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
LCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0
cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3By
b3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfZW51
bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lz
dGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNv
ZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVu
dHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigp
LCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9h
cmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1l
bnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRD
b3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3By
ZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdF
eHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0
cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0
ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVy
ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lz
X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09i
amVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVv
Zl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNv
ZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRl
Y29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0
LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
T3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9i
eV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6Ogor
ICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNh
c2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5k
OgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBj
YXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJv
d19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAg
ICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ug
b3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToK
KyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFf
cHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9q
ZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29y
X251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2Fz
ZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgor
ICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3Bf
amdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgor
ICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2Fz
ZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGlu
dDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAg
ICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoK
KyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9m
bG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6Cisg
ICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2Vu
ZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ug
b3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9w
cm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2Ug
bGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoK
KyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAg
Y2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2Fs
bF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2lu
dF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9t
X2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9p
dGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRf
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9u
KCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29k
ZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNB
dEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUp
OworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0g
KFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29k
ZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
LT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9y
IChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxl
ID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1f
cHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9u
OworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBh
cmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCks
IG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7
CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9y
ZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNl
IGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERG
UyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlu
cHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVk
IGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAq
bV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rp
b25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50
cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7
CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1f
Y3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0g
d2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQor
ICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKApAQCAtNjcsNiArODk2LDEyIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKTsKIH0KIAorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVj
a2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQogICAgICwg
bV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKQEAgLTc2LDYgKzkxMSw3IEBAIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNlTE9MID0gT3B0aW9uczo6Zm9yY2VMT0woKSB8
fCBTdHJpbmcobV9jb2RlQmxvY2stPmluZmVycmVkTmFtZSgpLmRhdGEoKSkgPT0gImZvbyI7CiB9
CiAKIEpJVDo6fkpJVCgpCkBAIC0xNDAsNiArOTc2LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNl
IG9wXyMjbmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRl
Y29kZUluZGV4KSB7IFwKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyBcCiAgICAgICAgICAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7IFwK
ICAgICAgICAgfSBcCkBAIC0xNTYsMjYgKzk5MywzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAg
IGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2Rl
ZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6
IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBz
bG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2Uu
cmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5k
c3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93
Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAg
IE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQg
SklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1
blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAg
ICAKQEAgLTIzMSw3ICsxMDc0LDczIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAg
ICAgICAvLyBPT1BTCisKKyAgICAgICAgbV9zdGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXpl
KCkpOworICAgICAgICBtX3ByZWRlY2Vzc29ycy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBpZiAoYmxv
Y2suaXNFbnRyeUJsb2NrKCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJsb2Nr
LnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNbc3Vj
Y2Vzc29ySW5kZXhdLmNvbnRhaW5zKGJsb2NrLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAg
ICBtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgZm9yIChtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVj
dGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAo
IW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50
QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7
CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCld
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRl
eCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhp
dEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRv
JiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3Nv
cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJl
ZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vz
c29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRl
QXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVj
ZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2Nrcykg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9j
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCku
c2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29u
c3RhbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8
QWxsb2NlZFJlZz4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxv
Y2VkUmVnKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0
ZXJzID0geyB9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKworICAgICAgICAgICAgfQorICAgICAgICB9CisK
ICAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6
ZSgpOwogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAm
JiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgICAgICAvLyBXZSd2
ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJl
YWNoYWJsZS4KQEAgLTQ3Nyw2ICsxMzg2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQogCisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1
Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwg
bV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTUsMTIgKzE0MjcsMTQgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9m
aWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhh
dmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVy
ID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAg
ICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xv
d0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2Fz
ZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAg
ICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dD
YXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0
VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOwogICAgICAgICAKQEAgLTU3OSw3ICsxNDkzLDYgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pu
c3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX25lcSkKQEAgLTU5Nyw2ICsxNTEwLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9v
cGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lm
IENQVShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbHNl
CisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCisjZW5kaWYKKwogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02
MzMsMTUgKzE1NTIsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAi
LCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsK
LQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNl
cy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVu
b3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRv
Lm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FH
RShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+
dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdl
bi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZz
ZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBp
biBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRl
QWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRv
IHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2U7CiAgICAgfQpAQCAtNzc0LDYgKzE2OTYsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRo
b3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93
UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisgICAgeworICAgICAgICBmb3Ig
KGF1dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAganVtcC5saW5rKHRoaXMpOwor
ICAgICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRo
aXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsxOTg3LDY1MiBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIG1fZXhp
dEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2Vk
OworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAg
ICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVl
U2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkK
KyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2Vk
OworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9i
YWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6
IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4g
cmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0
LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBS
cygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxs
b2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4g
dGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtl
IHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+
KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjph
c3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xv
d0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAg
Q1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7Cisg
ICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykg
eworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBp
ZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQ
UnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBh
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxs
b2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50
KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAgIHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQg
c29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBt
YXAgYWdyZWUuCisKKyAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlKHJlZykub3BlcmFuZDsKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkp
CisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVn
Rm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAg
fQorICAgIHJlZ1ZhbHVlKHJlZykgPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6OnNw
aWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAo
YXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAg
aWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJ
bXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJz
KCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpz
bG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZh
c3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZd
IChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQu
aXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcs
IHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9y
ZUNhbGwoKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAg
U2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1
dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVn
VmFsdWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVk
ZWQocmVnKTsKKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0
LnNwaWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklU
OjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7
CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNr
Rm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNr
U2l6ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCByZWNvcmQu
c2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgdG9JZ25v
cmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBz
YXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSB0b0ln
bm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdp
c3RlcigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0
Y2gpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRj
aCk7CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQ
bGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6
c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8g
T09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFk
ZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsK
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAgICByZWdWYWx1ZShn
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1Zh
bHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
R1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVn
cyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zv
cihvcGVyYW5kKSk7CisKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBhc3NpZ25S
ZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNv
ZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNB
bGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICBh
c3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sK
KyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50Owor
fQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVn
VmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1
ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6
R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQp
Cit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOwor
fQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGlu
dCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJ
VDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVt
cDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJ
VDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOwor
CisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxv
Y2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1
bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2pp
dC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6
Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsK
K30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9
IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
ICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAg
bV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAg
bV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sK
KyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOwor
CisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9v
cGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5k
KTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0g
bV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1f
b3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQor
CitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAg
IGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcg
PSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52
YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2pp
dC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07
CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVy
YW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnBy
ID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlm
ICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50
MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMy
KEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAg
bV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5hc3Np
Z25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lz
dGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3Rl
clNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisK
KyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7Cisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJl
Zyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5n
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYg
KCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVT
eW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAg
ICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAg
IHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1
bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsg
dmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2Jq
ZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRl
QW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAg
aWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHJl
dHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQz
MiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFsc2U7
CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1c2VC
aWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAg
ICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSGVh
cEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hlYXBC
aWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
aWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0ludDMy
KHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNlCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2lu
Y2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1
ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVt
IE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxl
OworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBo
OwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xh
c3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRv
OwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
LCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwg
dG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFs
UmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNh
dmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOwor
ICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0
IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsK
ICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkg
anVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBo
YXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZl
UGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBi
ZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMg
c2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAg
fTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5OCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
OwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJm
YWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRT
dHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hH
ZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBN
YWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBh
IHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwg
Y29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQg
YSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRC
eUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI3
NCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAg
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOwor
ICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZv
aWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wp
CisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2
b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBK
SVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5k
Q2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAg
ICB7CkBAIC0zMDAsOSArMzI1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFk
dmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0g
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3Qm
LCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAg
ICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1
bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90
KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNTQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxs
TGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwot
ICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29u
c3QgT3AmKTsKIApAQCAtMzM3LDcgKzM2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVt
IGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxl
T3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BF
cVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93
KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAg
ICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIs
IFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUgfTsKQEAgLTM1MCw4ICszNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAv
LyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQg
dGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCi0gICAgICAg
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRh
ZGF0YSYpOworICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnIHZhbHVl
ID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKC4uLik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmls
ZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDggKzUwMiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24s
IERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSAr
NTExLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZv
aWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3Io
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTUxMiw5ICs1NDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
QEAgLTY0Myw3NyArNjc5LDgxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2
b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29s
IGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRH
UFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2
ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAt
NzI4LDggKzc2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAg
IEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzgg
Kzc4MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRG
dW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+
Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
LCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2Fz
ZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAg
ICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlv
biwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBs
aW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJv
bS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZv
aWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwot
ICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdp
c3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAg
ICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRl
Y29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBz
bG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQzLDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdh
dGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2
ICs5NTYsMjMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50
ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25s
eSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5n
LiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
RlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJv
dmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAg
ICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVy
YW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
OworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3Ry
dWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJh
bmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFu
ZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9w
ZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2wo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhl
clNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wg
dXNlTE9MKCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhl
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0
S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1v
cmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9j
YXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxv
Y2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVn
KTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAg
ICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBN
YWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0
byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhS
ZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVu
dFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2b2lkIHNpbGVu
dEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9pZCBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAg
ICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAg
ICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNv
cmQ+IG1fY2FsbHM7CkBAIC05NTMsNyArMTE5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
bV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2Fz
ZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAg
ICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1
bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTIzNiw3
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFs
bG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVk
IGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2Ft
ZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQg
bWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAg
ICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9
OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAg
IHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAg
ICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8
fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAg
KnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAg
ICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJs
b2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZz4gb3BlcmFuZFRvUmVn
OworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAg
ICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAg
dm9pZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9S
ZWcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJh
bmRUb1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ld
Lm1lcmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQo
cHJvdmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhw
cm92ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAg
QVNTRVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9j
dXJyZW50U3RhdGU7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1f
Z3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxs
cHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fcHJlZGlj
dGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiBtX2N1cnJlbnRQ
cmVkaWN0aW9uczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKworICAg
ICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAg
VmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wg
bV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxPTCB7IGZhbHNl
IH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgyICs0Niw4MiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5B
bmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVx
dWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5P
ckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0
ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2Fz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEs
IGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRl
clRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0
cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwg
c2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYwLDIzICsxNjAsNTYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAg
ICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0
aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUK
ICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdw
cigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnBy
KCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKCk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQ
Uik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxs
b2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDI1ICszMDUsMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwg
b3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50
IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQg
aW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9p
bnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxKTsKQEAgLTI5OSw4ICszNDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDApOwpAQCAtMzI1LDggKzM2NCw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
CkBAIC0zNTAsMTIgKzM4NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7
CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
IEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFp
bDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElm
SW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0
KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICs0MDQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwy
LmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0Lmxp
bmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90
IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQpAQCAtNDA2LDI1ICs0NDIsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVj
KGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBp
bnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAg
ICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0
ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQo
cmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVn
VDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9w
MiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBl
Y3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsK
KyAgICAgICAgY2xvYmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVh
eCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVt
cC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAg
ICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVt
cC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7
CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0g
bGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsK
KworICAgICAgICBlbnN1cmVTbG93Q2FzZShlYXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGxocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMsIGxo
c0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChsaHNHUFIpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIocmhzLCByaHNHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKworICAgICAgICBtb3Zl
KGxoc0dQUiwgZWF4KTsKKyAgICAgICAgbW92ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUNCwgcmhzLCBlY3gpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICAgICAgbW92ZShyZWdUNCwgZWF4KTsKKyAgICB9
CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMy
KFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90
RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsK
ICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZDb252ZXJ0VG9Eb3Vi
bGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwpAQCAtNDMyLDE1ICs1MTMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7
CiAgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKICNlbHNlIC8vIENQVShYODZfNjQpCkBAIC00NTEsNyAr
NTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyArNTM2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2
NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAg
SnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNTQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9w
MiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNjM1LDEzIEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERv
dWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNs
b3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMyArNzk1LDExIEBAIHZvaWQg
SklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxP
cE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMq
IG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVy
IHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNh
biBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOwor
ICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
UHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03ODMs
OSArODUzLDM1IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKIHZv
aWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0
bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9v
bCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90
MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CiAjZWxzZQpAQCAtODAyLDcgKzg5OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Jp
dG5vdChjb25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC05MDEsMTggKzk5Nyw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNo
aWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJp
dGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKwor
ICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7
CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJl
c3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
bGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3Vi
bGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91
YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNo
QWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9u
VG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0
aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjMsMTUgKzEwNTUs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJl
Z2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEs
IHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBh
dGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVz
dWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lz
dGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIx
LCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBw
YXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAg
fQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lD
X1NUQVRTKQpAQCAtOTQwLDE5ICsxMDkyLDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVz
dWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9y
LT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJh
dGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0
ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3Mu
Z3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVn
cy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjIsNyArMTExNywxMSBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzMsMTIgKzEx
MzIsMjkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50
MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9w
ZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2Ny
YXRjaEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworCiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtOTg3LDI1ICsxMTYzLDQwIEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJp
Z2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25z
dGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdw
cigpIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9
IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
Mik7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAKLSAgICBS
RUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXND
b25zdCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0
YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBH
ZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CiAg
ICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmln
aHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFs
aWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRD
b25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5s
aW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE0LDE3ICsxMjA1LDM0IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2VuZXJhdGVk
SW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAgIGlmIChs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Cisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29u
c3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7Cisg
ICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9
OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAg
ICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAgICAgZWxzZSBp
ZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aEp1bXBzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsZWZ0UmVncy5ncHIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmlnaHRSZWdzLmdwcigpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoSnVtcHMsIHJlc3VsdEdQUiwgcmVzdWx0KTsKKyAgICB9CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBA
IC0xMDM0LDExICsxMjQyLDE4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8T3AsIE9wQWRkPigpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0g
U3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0
KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24s
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZv
aWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMs
IGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVk
RnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAg
ICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3Ry
dWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52
YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7
CkBAIC0xMDQ3LDggKzEyNjIsOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1Jl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTA4NCw3ICsxMjk5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlv
bj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiog
bWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBw
cm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVj
dGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKQEAgLTEwOTUsOSArMTMxMCw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vsc2UKICAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTExMTQs
MTAgKzEzMjksMTcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwog
CiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQobGVmdE9wZXJhbmQpKQorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENv
bnN0YW50KGxlZnRPcGVyYW5kKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRSZWdzLmdwcigpID09IHJlZ1QxID8gcmVnVDMgOiBy
ZWdUMSB9OworI2VuZGlmCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0
UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJh
bmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFJlZ3MuZ3ByKCkgPT0gcmVnVDIg
PyByZWdUNCA6IHJlZ1QyIH07CisjZW5kaWYKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAg
ICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTExNTUsMjMgKzEzNzcsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRp
ZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERp
dj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0
T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAg
ICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vj
b25kKCkpOwogCkBAIC0xMTg3LDI3ICsxMzkyLDkyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihj
b25zdCBJbnN0cnVjdGlvbioKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudERvdWJsZShv
cDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3BlcmFuZENvbnN0
YW50RG91YmxlKG9wMikpOwogI2VuZGlmCi0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJh
bmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7CisgICAgRlBSUmVn
IHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlv
bmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gbGVmdFRl
bXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICBy
aWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxlZnRUZW1wRlAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVt
cEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxlZnRUZW1wRlAtPmZwcigpOworICAgICAg
ICByaWdodEZQUiA9IHJpZ2h0VGVtcEYtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAg
bGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAgICAg
ICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIg
PSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRP
cGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0g
ICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
LCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAg
ICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAgICAgICBnZW4uZW5kSnVtcExpc3Qo
KS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJl
c3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKICAgICB9IGVs
c2UgewogICAgICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCkuZW1wdHkoKSk7CiAgICAgICAg
IEFTU0VSVChnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9kaXYpOwogICAgICAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwogICAgIH0KQEAgLTEyMTUsMzQgKzE0ODUsMTAzIEBAIHZvaWQgSklUOjplbWl0X29wX2Rp
dihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBh
cml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
CisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkp
IHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAg
cmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIG11bERv
dWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwor
ICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZw
cigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVs
SUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4o
bV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0
TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2Fz
ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRT
dWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNG
UFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCks
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNv
ZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihP
dmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAg
ICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMu
ZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xv
dzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAK
IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBP
UF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
LDEwICsxNDUsOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZh
bD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxNCw5IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6
ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsK
KwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9
IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY1LDExIEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
CkBAIC0zMzQsNDQgKzMzMyw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKQEAgLTM4NiwzOSArMzg1LDU0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHks
IGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0
ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0
LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxv
YyB0aGUgcmVzdWx0IGhlcmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7
CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIo
Tm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgY29tcGlsZU9w
Q2FsbDxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1faXRlcmF0
b3IpID0gU3BlY0hlYXBUb3A7CisKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAg
IC8vIGNhbGwgcmVzdWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNr
cG9pbnRTbG93OworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwo
KSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgc2xvd0Nhc2Uu
anVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwor
ICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJl
Z1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGlu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwogCiAgICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpAQCAtNDU2LDYg
KzQ3MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAg
ICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAvLyBPT1BTOiBM
b2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNl
cyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBv
d24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nhc2UgPSBicmFuY2hJZk5v
dEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDE4ICs0OTUsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIp
OwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3Vs
dEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xvd1BhdGg7CisgICAgICAg
IGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwoaXRlclJl
c3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3Mu
YWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1
ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3Vs
dEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lz
dGVycywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdz
KGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0
aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAg
IGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQpAQCAtNDk5LDExICs1MjEsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBjb25zdCBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBK
dW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
ZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwog
CisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwog
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoLmFw
cGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQo
dmFsdWVDaGVja3BvaW50U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwpAQCAtNTE1LDEw
ICs1NDAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAg
ZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1NTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJl
ZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdU
MjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5q
dW1wc1sxXS5saW5rKHRoaXMpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBA
IC01NDgsNyArNTcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
cwogICAgIH0KIAogICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHNbMl0ubGluayh0aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDA7CiAKQEAgLTU2MSw3ICs1ODUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dChjb25zCiAKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5j
dGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24g
dGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogI2Vsc2UKQEAgLTE1OCw2ICsxNTksNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEpOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0
aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKICNlbHNlCkBAIC0xNjYsMjUgKzE2OCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUlu
ZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAg
d2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5k
ZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRv
ID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4OSwzNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+
dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShK
dW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJl
ZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJ
bmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0
KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0
KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICAgICAgbV9zbG93
Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IH0pOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYg
anVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNl
KGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9p
bmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNv
bnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1w
c1swXS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAo
SnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMiwxMCBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0Nv
bnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmlu
ZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZh
bHVlUHJvZmlsZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1Qw
OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9
IHJlZ1QxOwogI2VuZGlmCkBAIC0zMzgsMTEgKzMzMCwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBt
ZXRhZGF0YSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0
YSYgbWV0YWRhdGEsIEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4
aW5nVHlwZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NSw2IEBA
IEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3Jl
VHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIw
MCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmlj
dGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3
NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4
ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDYgKzUxLDI0IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlv
bioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgbW92ZShpbnB1dC5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzEwOCw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9i
amVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxK
U0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0g
ICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0
Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0
b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBy
ZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxs
b2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFs
bG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQog
CiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklU
QWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAg
ICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmpl
Y3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFs
bG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNjQsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
b3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9
IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNl
VmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25v
d25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0
cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3Rh
bmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
IGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFu
Y2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBy
ZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUs
IGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cg
d2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1
bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICgh
dXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNv
bnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2Vy
IG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZh
dWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAg
ICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjE3LDkzIEBAIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVj
b2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHBy
b3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1
c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJz
dCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBi
YXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQg
Zm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHBy
b3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAg
ICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBl
bmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxs
OworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3Rv
KTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAg
ICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAg
cHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdw
cigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3Qp
OworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZh
bHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwg
cHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4o
CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAg
ICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRj
aDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRo
ZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8g
cmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ug
d2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3Ig
dGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAg
IAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJl
IGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFz
SW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFs
dWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsK
KworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdU
MywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5z
dGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4u
c3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
dCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMxOCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkp
LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBy
ZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNDgsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwg
cmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0
aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAo
KTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEp
OwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikp
IHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVu
ZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
YXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwg
cmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BS
LCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
IAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAg
ICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBj
b21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTI0MSwxMyArNDIyLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVm
aW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ1NiwzMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2
NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ4NywyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0
ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVy
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1Jl
Z2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVT
RShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTE3LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jp
Z19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwg
PSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJ
bnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUp
LCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qmln
SW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0Nl
bGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVU
VVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAt
MzEzLDE4ICs1ODMsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29u
cwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBp
bnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlw
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2MzIsNjEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmpl
Y3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8v
IHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92
ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNjk3LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXgu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzE2LDQxIEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAg
ICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0g
YnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0u
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
SnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAg
ICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzU5LDIwMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRv
bmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
dHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BS
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVl
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5j
aElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5
bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qw
KSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1
bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFt
ZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Tm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCBy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRp
bnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50
IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZh
bHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRz
IHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxs
IGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAv
LyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0
YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDAp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBi
b29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhh
biB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5w
dXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1
ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93
IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRp
b24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVl
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBS
ID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZw
U2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCks
IEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RF
cXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9
OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBT
Y3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRj
aDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQ
Uiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTY0LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFf
bnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90
aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1l
ZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8g
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAg
ICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxp
bmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAg
IEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlz
KTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAg
ICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5k
bGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlz
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAg
YWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRh
cmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5NSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5k
ZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0
byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhl
cikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNTAwLDEwICsxMTIzLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251
bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAg
ICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
IAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTU0
LDMwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNT
RVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNw
ZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1l
dGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7Cisg
ICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQp
OworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1
YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBz
dGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlw
ZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVl
RmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVP
YmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBj
b21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisg
ICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOwor
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21w
YXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKwor
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpq
ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJU
KHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlz
RXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1Qx
KSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFs
OworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERv
dWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAg
ICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5n
KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJo
cykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVt
cC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIs
IHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQg
ZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEplcT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5l
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAg
ICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDY4LDE1MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
U3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIs
IHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFy
ZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlz
RXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOwor
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBj
b21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNw
ZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BS
KSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAK
LSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWlu
ZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQg
PT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAo
bGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0g
ICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdt
ZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGgg
YSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJl
cXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRo
ZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8
NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQg
MAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBi
ZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92
ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdU
MSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJp
dHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwg
cmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQo
cmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJl
Z1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1
KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAg
bW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMg
YSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwg
cmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChy
ZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNW
YWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRv
IGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0
ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsK
KyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAg
Z290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQg
b2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNo
SWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBh
IEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBp
dCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQg
aXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2gg
Yml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAx
PDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCBy
ZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJp
dHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0
KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUp
OworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJp
bmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
Ly8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVy
ZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3Ro
IGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwor
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQo
MSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdU
NSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNl
IC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxz
ICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChy
ZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0g
ICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdz
IGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdz
IGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlz
KTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAg
ICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4K
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8v
IEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBp
bnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3Mg
YSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRP
Sy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAg
cmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCAr
MTYyOSwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGlu
dCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0
ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwg
c3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVh
bDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVk
IDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAg
IGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAg
ICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3Bl
Y3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBM
aXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVT
RShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAg
ICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQot
ICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRo
ZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwg
aGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5
IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAg
YWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1
KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJv
dmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUg
aXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdU
MSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVj
aXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBz
bG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAg
fQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAg
ICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYg
KGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRo
OworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMg
ZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwg
d2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZl
bHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAg
ICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBh
ZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdo
IGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcg
b25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQo
cmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1Qz
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVn
VDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0
RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBp
cyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1v
cmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBk
byB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2Ug
Ly8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMg
KHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJl
Z1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAg
ICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3Mg
YW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3Mg
YSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMp
OwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAg
IGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQp
OworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmlu
Z3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdz
IGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYg
aXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAg
bGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAg
ICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc3MCwyMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxP
cEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpO
U3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQ
UiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAg
ICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIg
PSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAg
cmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1
dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVj
b2RlTnVtYmVyOworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRz
dCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7
Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0lu
dCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNF
KEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAg
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJ
TlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BS
LCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGlu
ayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmln
SW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAg
ICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
Y1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkp
OwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwpAQCAtODg4LDkgKzIwMzgsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29w
ZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8g
V2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlz
LCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RP
dGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVn
VDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIwNjksMTcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwg
U3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxl
KCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIs
OSArMjA5NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBU
YWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTE4LDE0NyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBq
dW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJp
bmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsK
KyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgIGxv
YWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAg
IEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50Pihi
eXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0
aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVx
TnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29u
c3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAg
ICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2Ny
YXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BS
LCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1w
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21w
YXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0g
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
Y29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21w
YXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9p
ZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
LQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1w
bDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2
ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2Ug
QyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBp
bml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBs
aWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50
OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAg
YXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9y
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAg
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3Bl
Y090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBA
IC0xMDM1LDkgKzIyNjksMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IElu
c3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBH
UFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUg
PSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBz
Y29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0
T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIyOTMsODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
dGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZt
ZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0g
Ynl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1v
ZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAg
bG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9U
aGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhp
cyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8g
Tm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisg
ICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVj
T2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNh
Y2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAg
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUg
cHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChp
c1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBs
b2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1Ro
aXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1Nl
dCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0
OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwor
ICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMy
KGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjM3NCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1
bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVl
UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2
OCw3ICsyMzg0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QK
ICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
Z3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9w
ZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1w
My5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRv
clJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDIt
PmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICBy
YXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcg
PSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxl
ZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVl
UmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI0MjYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVn
LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8v
IFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhp
bmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CkBAIC0xMTY0LDYgKzI0NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVC
bG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAg
ICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlz
IE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVj
dXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwog
ICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1
c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7
CkBAIC0xMTg3LDEzICsyNDk3LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8g
RW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBp
ZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwpAQCAtMTIwNiwxMSArMjUxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50
KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0g
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQg
c28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQog
CkBAIC0xMjMzLDEwICsyNTQwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9l
bmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdp
c2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCAr
MjU1MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIz
ICsyNTcxLDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNv
ZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
RXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAg
QVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMw
MSwyNCArMjYzNSw0NSBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IElu
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNj
b3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxp
ZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhp
cywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9
CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
IAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dl
bmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24p
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1
bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNzA0LDE5IEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUu
bV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwg
c2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BS
ID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3Rh
cnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQ
Uik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJh
eV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEz
NjAsMTQgKzI3MjUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShj
bwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BS
ID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
Ci0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJh
eTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFy
Z0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3NTgsNDIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRv
clZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JH
UFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworICAg
ICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBi
YXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQogCi0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
LSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRH
UFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIp
OworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICsyODEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICAvLyBPT1BTOgogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQ
YXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzI4NDEsOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgLy8gT09QUzogaW1wbGVtZW50IHRoaXMKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4NjgsMTUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJ
bmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hv
b3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQ
YXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qg
c2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2Rl
LCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9k
ZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsK
IAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1w
KTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBs
YWJlbCgpOwpAQCAtMTQ3OCwxMyArMjg4NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAg
Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
YnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9k
ZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRl
eCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4
dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTE1LDkyIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2Vs
bAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlz
LCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMs
IGluZGV4IH07CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAgICAg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAgR1BSUmVnIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFI7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpIHsKKyAgICAgICAgICAgIGJhc2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICAgICAgYmFzZUdQUiA9IGJhc2VDZWxsLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8g
Q29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVn
VDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hl
ZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91
dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0g
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0g
ICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwor
CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5s
aW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRp
bWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7
CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3Ro
ZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhp
cyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0
aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4g
aW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDAp
OworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90
aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRo
aXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwor
ICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAg
IAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBv
dXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAg
IHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCBy
ZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTU1MCwyMSArMzAxMCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRl
eEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJP
cGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJh
dG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1w
LT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BS
ID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9y
R1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBp
bmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdU
MCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0
KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVz
dWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090
aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDY0
LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVn
VDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1By
b3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcg
ZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7
IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBl
bnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAu
ZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0
aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBp
bmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
bmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAg
ICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBp
bkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIo
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMy
VG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0
R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTU5OCw2ICszMTE4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90
eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0
YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxl
ID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwo
KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsK
IAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE4MCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAg
IHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGlj
X2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3
aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpA
QCAtMTY3Miw2ICszMTk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgp
LnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRv
cENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBu
b25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1
ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1No
YWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTcwMiwxMSArMzIzMCwyMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVn
czo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdU
MCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3Mo
cmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjUxLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9y
ZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVt
UGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihu
dW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXAp
KTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhh
bk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIo
SW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
Ym94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhp
cyk7CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdU
MCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigw
KSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzMzMDAsOTkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBs
b2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhp
cyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVn
VDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZC
b3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5k
ZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1v
dmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAg
ICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAg
ICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBl
X29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVP
YmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFs
dWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7
CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qz
OwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIp
OworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNj
cmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0
KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNl
cyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5
cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAg
fQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsK
ICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUw
OSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAK
ICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUg
cmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dh
cHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw0
OSArNTEsMTExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBw
cm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9z
ZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklk
ZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdU
MiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICgh
dXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWND
ZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BS
KTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIHJlc3Vs
dEdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBz
aG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRHUFIs
IHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkp
LCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNl
IGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJv
bCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZh
bHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwot
ICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlW
YWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY0LDczIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQ
UjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlW
YWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0NSw2ICsyNDEsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKQEAgLTE1Miw2ICsyNTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFs
SW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgR1BSUmVnIGJhc2VHUFI7CisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlz
SW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlm
IChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMzNCw3ICs0MzQsNyBAQCBKSVRQ
dXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVu
dEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzQ0Miw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAg
RUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQg
PSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRl
Y29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKQEAgLTM1MCwxMyArNDUwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRl
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQot
ICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAg
ICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CkBAIC0zNzIsNDkgKzQ3MSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGlu
dDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNj
ZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
MSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25z
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFj
Y2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1
dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BS
ID0gZ2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigp
OworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAg
ICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdU
Mik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3By
b3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29k
ZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRy
aWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vz
c29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3Nv
ckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBh
Y2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTQyNCwxOCArNTc5LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNl
KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxz
ZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisK
ICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0
aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJz
LgpAQCAtNDQ0LDI1ICs2MzMsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21f
ZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTQ3MiwxOSArNjYzLDY5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBwcm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVy
dHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0g
cHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJl
Z1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QyOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0
eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9w
ZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9w
ZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91
bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUt
YmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDkzLDIx
MyArNzM0LDM0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZh
bD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisg
ICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9
CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0KIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFs
dWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QxOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICAK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBi
YXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRHUFIsICZtZXRhZGF0YS5t
X21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90
QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VH
UFI7CisgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHRoaXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QwOworICAgICAgICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qy
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZS
ZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNH
UFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7
CisgICAgfQogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7CisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzV2l0
aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgp
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRv
IHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9y
ZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBi
ZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRl
IGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlz
IGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRj
aFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDI7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIH0KIAogICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUp
LAogICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QsIHByaXZhdGVGaWVsZEFjY2Vz
c0tpbmQoYnl0ZWNvZGUpKTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CkBAIC03MDksNzcgKzEwODYsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6
ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1
Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsK
LSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJ
ZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
IAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0K
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAg
ICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5q
ZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVy
IGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0
Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0
aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03OTEsMTcg
KzExODYsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1
bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09m
R2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZH
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSArMTIxNCwzNCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50
U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1
cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0
aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAg
R1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAg
c2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlcHRo
ID4gMCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9m
ZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50Lmdl
dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgpAQCAtODM4LDkgKzEyNTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAKQEAgLTg1MywyOSArMTI2OSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCBy
ZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BS
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwxNSArMTMw
MCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBs
b2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9h
ZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZh
ckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYsMTIgKzEz
MjcsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9h
ZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihS
ZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05MjIs
NTEgKzEzMzcsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJl
ZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAg
ICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAg
ICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAg
ICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgog
CiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAg
ICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFu
ZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAg
ICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5k
ZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAg
Y2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1p
dEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
cmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC05ODAsMTAgKzE0MjgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAg
ICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDQ0LDI3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAor
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE0NzQsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwor
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRy
KHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2lu
dFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihh
ZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUwMyw0OSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50
cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRh
dGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFs
dWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworCiAgICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFy
IGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBi
dXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMg
Y2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFs
dWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7Cisg
ICAgICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAg
ICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZz
ZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29w
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAg
ICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIs
IG9mZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5j
ZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9i
amVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRo
ZSB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1w
KHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9
KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwg
cmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRy
KHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9h
ZFB0cihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRH
UFIpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlH
UFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9i
YWxWYXI6CkBAIC0xMDk4LDI4ICsxNTU1LDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAgaWYg
KCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92
ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAgICAg
IGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9t
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+
KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2
YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQ
UiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
Q2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1
ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAg
ICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZSht
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIs
IEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAg
ICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAgLTEx
MzQsMTIgKzE2MjAsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogog
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0
byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUg
cmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdv
bid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0
IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KIAog
ICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTExNTMsMjMgKzE2NDgs
MzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hW
YWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1p
dENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2Ug
Z28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4u
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1
dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKQEAgLTExODYsMTAgKzE2OTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1LDYxICsxNzA3LDE1MSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3Vt
ZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVu
dHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCBy
ZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQo
QWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3Vt
ZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFk
ZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihh
cmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVl
VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMs
IGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOwor
ICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1l
bnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0
b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsK
KyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQor
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAg
ICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikg
JiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNl
KCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQ
UlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzLCBvd25lcik7CisgICAgICAgIHNj
cmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVl
LT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7Cisg
ICAgfQogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVy
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAg
fQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVu
dFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQo
KTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2ls
ZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAg
ICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVl
Tm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHZhbHVlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5p
c1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzODUs
OCArMTk3NywyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAK
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVn
VDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3By
KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAg
ICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25l
ciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+
IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3Bp
bGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOwor
CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNz
ZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3Qg
aSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBp
KSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5
PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9
IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6
OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0
IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQt
PnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAg
aWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQt
Pm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRy
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJv
b2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNN
RnV6emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hv
aXN0aW5nTElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415471</attachid>
            <date>2020-12-04 16:03:02 -0800</date>
            <delta_ts>2020-12-04 16:53:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>414908</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzMiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICgh
IShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0
ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
aWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNT
dHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBv
cF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiBy
aWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZs
b3coKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBT
cGVjQnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJv
bU5vbk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAg
ICAgICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQ
dXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENh
biBwcm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0lu
dFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAg
ICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
RGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAg
ICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBl
eGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91
bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0
ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55
SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2Rl
YzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihz
cmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChw
cm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCB8PSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3Qs
IHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAg
aWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07
CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAg
ICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFu
ZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUo
Ynl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwg
U3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hp
ZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMp
OworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3Ry
dWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRs
ZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAg
IGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8
IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsK
KyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNo
b3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlz
IGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgor
ICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3Rl
OiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0K
KyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBw
cm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAg
ICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0Zp
bmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgor
ICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29s
dmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZh
bD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9w
cm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21p
c2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9z
dHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5l
cmF0b3JGdW5jRXhwPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5j
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5j
X2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0
b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0
b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50
X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNj
b3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJv
cGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3Bl
Y0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwg
U3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9f
aW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5k
ZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNE
ZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRT
Y29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwg
U3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1By
b21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19n
ZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5
bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2Vx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVh
bjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJv
ZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2Fz
dDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19j
YXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBz
ZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
YWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgor
ICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgor
ICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBj
YXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2Fz
ZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3Bf
dGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1
ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9m
dW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBv
cF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9w
ZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ug
b3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAg
ICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2Fz
ZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3Rl
cToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9w
X2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoK
KyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dl
cToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAg
Y2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNl
IG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAg
IGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNh
c2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgor
ICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9l
dmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6Cisg
ICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoK
KyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0
aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5l
OgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2Ug
ZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1
Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9m
dW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6
cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5p
cXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytp
KQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+
Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgewor
ICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tl
ciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgewor
ICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29u
c3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAg
ICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJn
KSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVj
dWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQo
YXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERG
Uy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBp
bXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisg
ICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBh
cmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9P
UFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3
ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVj
b2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50
UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAg
ICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygp
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFs
TGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9j
ay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNj
ZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24o
c3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2Nr
LCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQor
CiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNiArODk1LDEyIEBA
IHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2Fs
bGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAorYm9vbCBKSVQ6
OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91
c2VMT0w7Cit9CisKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklU
KCZ2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKQEAg
LTc2LDYgKzkxMCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIK
ICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNlTE9M
ID0gT3B0aW9uczo6Zm9yY2VMT0woKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzUs
NyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5F
X1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1f
Ynl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkyLDMy
IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3df
IyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BD
T0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5h
bWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwo
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwK
KyAgICAgICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAg
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xv
d1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzMsNzMgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRl
QXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJl
c2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3Jh
cGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4
aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChh
dXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5k
ZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4
XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJl
bnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50
QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVu
ZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
QXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7
IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNp
Y0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygp
ICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3Jz
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRT
dGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJl
ZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVk
ZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0
YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAo
IXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAs
IG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3Rh
dGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rl
ckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0
aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dD
YXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5k
ZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+
IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODUsMTQgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmICghbV9jaGVja2Vk
VXNlTE9MKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBMT0w6ICIsIG9w
Y29kZUlEKTsKKyAgICAgICAgfQorICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKwor
ICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1
cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nh
c2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE1LDEyICsxNDMxLDE0IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBS
ZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0g
MDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xv
d0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDog
bV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNv
ZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1w
c1swXS5saW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5w
dHIoKTsKICAgICAgICAgCkBAIC01NzksNyArMTQ5Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVx
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9uZXEpCkBAIC01OTcsNiArMTUxNCwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2
XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZWxzZQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQorI2VuZGlmCisKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjMzLDE1ICsx
NTU2LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RU
bywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkg
fHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQo
KSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAg
ICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9
PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNl
dCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Cisg
ICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
JnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBz
byB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwog
ICAgIH0KQEAgLTc3NCw2ICsxNzAwLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFi
ZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAg
Ly8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1
bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAg
YnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk5MSw2NTIgQEAgU2Vjb25kcyBKSVQ6
OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRp
bWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQg
SklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5h
cHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4K
K1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEg
YmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2Nr
IGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24n
dCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMg
c29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBS
ZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byBy
ZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNv
bnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKwor
c3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEg
YmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2Nr
IGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9u
J3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlz
IHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1
Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiBy
ZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQorewor
ICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEg
ZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1
cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisg
ICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJl
Z2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAg
ICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9T
bG93UGF0aCgpCit7CisgICAgaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5s
YXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAgIENSQVNIKCk7
Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5n
cHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAg
ICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BS
KCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAg
ICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5p
c0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAg
ICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29u
c2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVl
LgorCisgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAg
ICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJh
bmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUgeyB9OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNh
bGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0
KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2Fs
bGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcp
OworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAg
ICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhT
YXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAg
ICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJl
ZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1
ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKCkK
K3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNw
aWxsUmVjb3JkIHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVu
ZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxl
ZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7
CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVk
UmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50
RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
KnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JT
cGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgcmVjb3JkLnNhdmVQbGFu
KTsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHRvSWdub3JlLCBjb25z
dCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2F2ZVBsYW4p
IHsKKyAgICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcgPT0gdG9JZ25vcmUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsK
KyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAg
ICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihj
b25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihzbG93
Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFk
ZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdz
IHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9y
KG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIp
LmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBn
cHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFu
ZCkpOworCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwg
b3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91Ymxl
OworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVk
KTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVn
KGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9p
ZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVn
VmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxv
Y2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFu
ZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6
OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAg
IGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BS
UmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRl
bXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRl
bXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRl
bXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnBy
ID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJl
dHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnBy
KTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJ
VDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9n
cHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBt
X2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQ
UigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9n
cHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQor
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVy
YW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJl
Z1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBl
KG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJh
bmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0
ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQor
CitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6
Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
Z3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0
ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwg
bV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlm
IChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAg
ICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30K
KworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnBy
KTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9m
cHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQu
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQu
ZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJS
ZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayht
X2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQ
UlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIo
KTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0
LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7Cisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFs
dWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVl
UmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5
cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVu
Ym94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1f
ZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBK
SVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVz
dWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0
byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
CisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJp
bmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFp
c1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29s
ZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4o
dmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0s
IHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3Ro
ZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30K
Kwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENo
ZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0lu
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0Jp
Z0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVl
OworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlm
CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIp
IHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICgh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQp
KQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2
YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50Owor
ICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9u
ZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
aWdJbnQzMihvcGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwg
c2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwo
dmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0lu
dCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3
IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50
ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJS
ZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
U2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJ
RCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBj
bGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBj
bGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0
aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSArMTA1LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAg
ICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNv
ZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisg
ICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVy
Pj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBz
YXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAg
dW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2Fz
ZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAg
IH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25l
IGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3Jl
IHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8v
IE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBz
bG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVn
aXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAg
ICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE4Myw2ICsxOTgsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAg
IGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7
CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7
CiAKQEAgLTE5MCwxMiArMjA3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERl
ZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVt
YmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQg
OGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNz
IHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hl
ZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1
bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9j
ayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0g
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNzQsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJy
YXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2Ji
ZXIoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9i
YmVySW1wbChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAt
MzAwLDkgKzMyNSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2tw
b2ludChKdW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSB7IH0pOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJl
c3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nh
c2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAg
ICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0
IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBp
bnQpOwpAQCAtMzEwLDcgKzMzNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zMjcsNyArMzU0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAg
dm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7
CiAKQEAgLTMzNyw3ICszNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBD
b21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1w
U2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2Fz
ZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBl
bnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRG
aWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07
CkBAIC0zNTAsOCArMzc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVn
VDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsK
KyAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
KTsKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSgu
Li4pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1
ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4KQEAgLTQ3NSw4ICs1MDIsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVD
b25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUxMSwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNp
emVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2
b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRf
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC01MTIsOSArNTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMs
NzcgKzY3OSw4MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9j
YWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1
dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VD
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2ln
bmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsK
KyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
Uik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTcyOCw4ICs3
NjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVl
IGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQyLDM4ICs3ODAsMTgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24s
IE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAg
ICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwg
UmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNs
b3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0
ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0
aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtE
dW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAg
ICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwot
ICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZv
aWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2Vz
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNB
bnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
ICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAg
ICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzk0Myw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxz
ZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsK
KyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisK
ICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRp
YyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTU2LDIz
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+
CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3Ap
OwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBHUFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAg
ICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFs
aWRHUFJSZWcpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBS
VGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcg
ZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+
SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIg
MzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQg
YmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5D
ZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVl
T3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQm
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7
CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBt
X2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxh
dGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxh
dGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVy
YW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJS
ZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVy
YW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAg
ICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdW
YWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAg
IH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFu
ZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5k
KSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgp
OworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmco
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZv
aWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
T2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2
b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8g
aGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihH
UFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIo
KTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlz
IHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0
LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAg
ICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJl
Y29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0
ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9y
ZUZyb21TYXZlUGxhbihSZWcgdG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVy
cHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2Nh
bGxzOwpAQCAtOTUzLDcgKzExOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9y
PEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0
b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzEyMzYsNzcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAg
ICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
IHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJv
eGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4K
KyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBG
UFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNv
bnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAg
ICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAg
ICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxv
Y2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxv
Y2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0g
eyB9OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRy
eSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERh
dGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRl
IHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVy
YW5kczxTcGVjdWxhdGVkVHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVy
Z2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShv
dGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5
cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlw
ZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChy
ZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0
YXRlOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOwor
ICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9Owor
ICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRI
ZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlv
bnM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVj
dG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxW
ZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9M
IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAg
ICAgICBWZWN0b3I8SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4s
ICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFs
c2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xv
d0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYwLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX3Vu
c2lnbmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIs
IHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3Qg
cGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQog
ICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8g
LSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRh
cmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Ym9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3
MiwyNSArMzA1LDMzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6
ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwg
Y29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJh
bmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0
aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGlu
ZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8g
LSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8v
IC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAv
LyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0yOTksOCArMzQwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZh
aWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVy
VGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNSw4ICszNjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAg
ICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEg
PSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEyICszODcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwot
ICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAg
ZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5j
aElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3Zl
NjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArNDA0LDkgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOwor
ICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTQwNiwyNSArNDQyLDcwIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9
IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVj
dCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdp
c3RlcnM6OmVheCk7CisgICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRv
IGVkeCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjpl
Y3g7CisgICAgQVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7
CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1Q0KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBlYXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1Rl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNH
UFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAg
ICBjbG9iYmVyKGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5l
bXBsYWNlKCp0aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7
CisgICAgICAgIGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1w
LT5ncHIoKTsKKyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBs
YWNlKCp0aGlzLCBsaHMpOworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7Cisg
ICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7
CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVn
VDQsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgICAgIG1vdmUocmVn
VDQsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVn
MSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEp
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0y
MTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAg
eDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4KTsKQEAgLTQzMiwx
NSArNTEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQb3Np
dGl2ZS5saW5rKHRoaXMpOwogICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiAjZWxzZSAvLyBDUFUoWDg2
XzY0KQpAQCAtNDUxLDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAtNDYzLDcg
KzUzNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNl
IC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5v
dEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzU0Niw3IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENo
YXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzYzNSwxMyBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24g
Kmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTMg
Kzc5NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0
IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5j
ZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0
ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBz
bG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2Vu
ZXJhdG9yPgpAQCAtNzgzLDkgKzg1MywzNSBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFz
dFBhdGgoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGJvb2wgcmVzdWx0SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIG5vdDMyKHJlc3VsdEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBpZiAocmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTgwMiw3ICs4OTgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTAxLDE4ICs5OTcsNTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRk
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIG1vdmUobGhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkp
OworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUobGhz
LmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
QWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBl
bWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93
Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpA
QCAtOTIzLDE1ICsxMDU1LDM1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1h
dGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1
c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdU
MT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8g
Y2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1Jl
Z3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFu
ZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hU
ZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNy
Y1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3Vs
dFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2lu
ZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVn
VDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRv
IGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQs
IHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MCwxOSArMTA5MiwyMiBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9y
ID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElD
R2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUg
PSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwog
ICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAg
fSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtOTYyLDcgKzExMTcsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2Vu
ZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdz
LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9u
PgpAQCAtOTczLDEyICsxMTMyLDI5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5h
cnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCisgICAgU25pcHBldE9wZXJh
bmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CisgICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgp
KTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQorICAgICAgICBsZWZ0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKKyAgICBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQorICAgICAgICByaWdodE9wZXJhbmQuc2V0
Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisKKyAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
KwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZw
UmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxl
ZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKwogI2Vsc2UKICAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTk4Nywy
NSArMTE2Myw0MCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAg
ICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogI2VuZGlmCiAKLSAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKLSAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25k
KCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0
T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgICAgICBsZWZ0VGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CisgICAgICAgIGlmICghR2VuZXJhdG9y
Ojppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkgeworICAgICAgICAg
ICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQogCi0gICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0
SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwotICAgIGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdl
dE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAg
ICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJh
bmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYgKCFH
ZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlm
ICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAg
IH0KIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBS
ZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJh
dG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9y
Ojppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAg
IGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkp
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYg
KCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2Vu
ZGlmCkBAIC0xMDE0LDE3ICsxMjA1LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRC
aW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2Vu
ZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5l
cmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAg
ICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAg
IGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlm
IChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOworICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICAgICAgfQorCiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3Mu
Z3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJl
Z3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5n
cHIoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aEp1bXBzLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgIH0KIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzQsMTEg
KzEyNDIsMTggQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAg
IH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBy
ZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxP
cCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rp
b24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRo
SUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ3LDgg
KzEyNjIsOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
IH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTA4NCw3ICsxMjk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVu
YW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0
aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBN
YXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVl
OwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAg
LTEwOTUsOSArMTMxMCw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkg
fTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFy
Z3VtZW50c1sxXS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTExMTQsMTAgKzEzMjksMTcg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJU
KCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYg
R2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwog
Ci0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJh
bmQpKQorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByZXN1bHRSZWdzLmdwcigpID09IHJlZ1QxID8gcmVnVDMgOiByZWdUMSB9OworI2Vu
ZGlmCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAg
ZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVy
YW5kKSkKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUNCA6IHJl
Z1QyIH07CisjZW5kaWYKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93
UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTExNTUsMjMgKzEzNzcsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAg
ICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0
T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBA
IC0xMTg3LDI3ICsxMzkyLDkyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKQogICAgICAg
ICByaWdodE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKG9w
MikpOwogI2VuZGlmCi0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgp
IHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVn
IHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7CisgICAgRlBSUmVnIHJpZ2h0RlBSOwor
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gbGVmdFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxlZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsK
KyAgICAgICAgbGVmdEZQUiA9IGxlZnRUZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9
IHJpZ2h0VGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEp
OworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBm
cFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CisKKyAgICAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9Cisj
ZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBG
UFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsK
KwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5k
aWYKKyAgICAKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7
CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKKyAgICAgICAgYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwogCiAgICAgSklURGl2R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmln
aHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJl
Z1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOworICAg
ICAgICBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9m
aWxlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGlmIChnZW4u
ZGlkRW1pdEZhc3RQYXRoKCkpIHsKICAgICAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdw
cigpLCByZXN1bHQpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0
KCkpOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAg
ICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9
CkBAIC0xMjE1LDM0ICsxNDg1LDEwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigp
LCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJo
cy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBS
LmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
c2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3Zl
cmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAg
ICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZw
cigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFBy
b2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9u
LCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8
T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmls
ZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxP
cHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxo
cy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklU
U3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1
YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1
YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6
ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7
CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9Q
T1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDgg
QEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTQsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBD
OyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVy
IGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2
YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2NSwxMSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNT
RVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0
ICszMzMsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAg
IGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
Rm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0
cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYs
MzkgKzM4NSw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAg
ICAgICAgIH0KICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBs
aWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRo
IG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3Vs
dCBoZXJlPworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKIAogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2l0ZXJhdG9yKSA9IFNwZWNI
ZWFwVG9wOworCiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJl
c3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsK
KyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVu
ZChuZXh0Q2hlY2twb2ludFNsb3cpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAgcHJv
dmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzAsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAgICAg
fSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBp
dCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVj
b2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwg
ZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdU
MCk7CiAKQEAgLTQ3NiwxOCArNDk1LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAgIHsK
LSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAg
ICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hlY2tw
b2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogCi0g
ICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgfQpAQCAtNDk5LDExICs1MjEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBM
aXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAogICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCku
cHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQodmFsdWVDaGVja3BvaW50
U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCiAgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwpAQCAtNTE1LDEwICs1NDAsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0
aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4
dD4oKTsKQEAgLTUyNiw3ICs1NTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1f
ZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRo
aXMpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTcyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAg
IHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2Uu
anVtcHNbMl0ubGluayh0aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7
CiAKQEAgLTU2MSw3ICs1ODUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4
dChjb25zCiAKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsx
NDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8g
T09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBk
b24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1
OCw2ICsxNTksNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiB7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwor
ICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0
IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNl
CkBAIC0xNjYsMjUgKzE2OCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
ciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Q2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0g
c2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xv
d0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0g
ICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5k
ZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5l
IHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4OSwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdB
WVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBp
ZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRl
eCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2Fz
ZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRz
dCA9IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlz
dCB7IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3Qp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3Ig
KGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0
eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRl
eCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7
CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAg
c2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5LDExICsz
MDEsMTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkKIHsKICAg
ICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lzdGVySUQg
dmFsdWUgPSByZWdUMDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJlZ2lzdGVy
SUQgdmFsdWVUYWcgPSByZWdUMTsKICNlbmRpZgpAQCAtMzM4LDExICszMjksMTEgQEAgaW5saW5l
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVnKQogewogICAgIGlmICghc2hvdWxk
RW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0
YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVn
aXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpAQCAtMzkz
LDExICszODQsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkK
LXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkp
OwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0Pigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9t
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5k
KHNyYykgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIG1vdmUo
aW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMDgsNTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxD
b25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJl
ZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVn
aXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBH
UFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVt
cDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9y
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9j
YXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2Ny
YXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1Qw
OworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJl
Z1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVn
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nh
c2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0g
U3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRh
dGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7
CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTY0LDUwIEBAIHZvaWQg
SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BS
UmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGlu
c3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09Q
UzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29u
c3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1w
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNl
KCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0
aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7Cisg
ICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAgIGlu
c3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJ
bnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVt
cCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5z
dGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVl
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1Qw
KTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNv
bnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVj
dG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90
IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25z
dHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIxNyw5
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRz
IChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMu
Ci0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3
aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3Rv
IGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0
aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIs
IC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQp
OyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5z
dGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4g
dmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENl
bGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJlc3Vs
dFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJS
ZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRU
ZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gy
VGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYg
c2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwu
ZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNl
KCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+
Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOworCisg
ICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsK
KyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAg
ICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0g
cHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVt
cC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdw
cigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAg
ICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVu
ZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVj
dGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVn
VDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJh
c2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBm
b3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAg
ICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAg
ICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAg
ICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0
YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnBy
b3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMTgsMjkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzQ4LDcyIEBAIHZvaWQg
SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsK
IAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAg
aXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRl
bXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOwor
CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAg
ICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyMiwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NTYs
MzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUik7CisgICAg
ICAgICAgICB0ZXN0NjQoWmVybywgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0ODcsMjcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxs
TnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BS
LCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUxNyw1NiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQo
cmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJ
TlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3Ry
dWN0aW9uKikKQEAgLTMxMywxOCArNTgzLDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxf
d2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAot
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBl
KSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjMy
LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVU
ZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzY5NywxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJl
c3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUg
KzcxNiw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5r
KHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92
ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAg
ICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
SnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5r
KHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYs
NTIgKzc1OSwyMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChzcmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0
cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
eW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJp
bmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNT
dHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNw
ZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAo
c3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25l
ID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYg
KHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAg
ICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcg
bmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9u
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFu
KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8s
IHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTog
c3RyaW5ncywgYml0aW50LCBvYmplY3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAv
LyBTZWUgY29tbWVudCBiZWxvdy4KKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblpl
cm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWlu
c3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwg
dGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJp
dCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3Rp
dmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3
aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAg
ICAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMg
dGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNs
ZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxz
ZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBh
Z2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5k
IGZsaXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5v
blplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJv
b2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24p
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUg
Y2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29u
ZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBm
cFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0
aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2Ny
YXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3Jh
dGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRp
b24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAg
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNv
bmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwg
dmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMg
aW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0
Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJG
UFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
Uiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1
ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk2NCwxMjkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAg
ICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwor
ICAgICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMg
LSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduLmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7
CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNr
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAg
ICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwor
CisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzEwOTUsMjYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTUwMCwxMCArMTEyMywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNP
dGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTUxNSw2NSArMTE1NCwzMDUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5z
dHJ1YwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0g
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVk
SW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBv
aW50ZXIpKSkgeworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRh
Lm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBhdXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0
cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIg
Ym9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENv
bXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlz
RXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOwor
CisgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxo
cyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBK
U1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVT
eW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJl
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5m
cHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNv
bXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2Fz
ZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhz
R1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisK
KyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICB9CisKKyAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+
Cit2b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigp
OworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1f
bGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25z
dGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1
YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFu
ZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgaWYgKCF2YWx1ZXND
b3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAg
IGlmICghaXNFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwo
cmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhz
LCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJo
c0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBW
YWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAg
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+
KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJ
bXBsPE9wRXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOworICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAKLSAg
ICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcg
bGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8
T3BOZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNv
bXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUlt
cGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJl
Z1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwor
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BS
UmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
aHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNs
b3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAg
ICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTQ2OCwxNTAgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
bGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBy
aHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEs
IHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wg
aXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAg
YXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBm
cENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxP
clVub3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXND
b3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0
R1BSLCBkc3QpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3
ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJl
c3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRv
bmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3Rv
IHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRo
ZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwg
aGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5
IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAg
YWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1
KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJv
dmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJl
Z1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQg
bGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAg
YW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5n
IG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0
byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0
RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xl
YW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisj
aWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3Vt
aW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAg
ICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkK
KyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBp
dHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
bW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAo
dG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQo
VHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFs
dWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292
ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAg
ICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwor
ICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC02NzQsNjggKzE2MjksMTM1IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
c3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
Ym9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAg
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVx
dWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYg
KCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7
CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNH
UFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsK
KworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQ
UiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3Vs
ZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAg
ICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBpZiAobGVmdCA9
PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmln
aHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGdvdG8gbm90VGFrZW47Ci0g
ICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUg
NCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMy
L2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlz
IGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3cs
IGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVy
IGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8v
IExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwg
cmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVx
dWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwg
dGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYg
YXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0g
ICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRo
aW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVl
ZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1Qx
KTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7
Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5r
KHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBs
ZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYg
KGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93
UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47
CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAg
Z290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAg
ICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0
IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3
b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJ
Zk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4g
SW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVh
dmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVy
IGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAg
ICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAg
bW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Cisg
ICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7
CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0
KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVh
bCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVx
dWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsK
KworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBh
dCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAg
ICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRv
IHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBv
bmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJv
dGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChy
ZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3Qg
dGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAg
ICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihy
ZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0
T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGlu
ayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVx
KQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJl
Z1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0
byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBv
cjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdU
MikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Cisg
ICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qw
KSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzE3NzAsMjE3IEBA
IHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BT
dHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAg
IH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nh
c2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNl
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAg
aWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1Qw
KTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmln
SW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwot
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNy
YyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihz
cmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3Jj
LCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVs
c2UgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisj
ZW5kaWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZO
dW1iZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJ
bnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGlzTnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgp
OworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwor
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJp
bmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RP
YmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3Jj
KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYg
KHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAg
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDM4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJy
ZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1f
ZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0g
U3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQg
c2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9
IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9p
bW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMDY5
LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5l
bnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtOTIyLDkgKzIwOTQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIo
Y29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIp
KTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUlu
ZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmco
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjExOCwx
NDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmlu
Z0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBU
YWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwg
dGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRy
VGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmlu
Z1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVn
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNh
bGwoKTsKICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCks
IHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRp
Y19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJl
cXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
K3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51
bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxs
Pjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNv
bXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVz
dWx0R1BSKTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1
bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsK
KyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAg
ICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21w
YXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwog
Ci0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0
cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFy
ZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
Z1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzog
YXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJy
aWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1
c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8g
emFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAg
ICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6
ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytq
KSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsK
KyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJp
YWJsZSkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZh
cmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMjY5LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9z
Y29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUg
PSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMjkzLDgwIEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3Ry
dWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRl
Y29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3Jj
RHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8v
IE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hv
dWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFu
IGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShz
cmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwp
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAg
ICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7
CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5l
ZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOwor
ICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNE
c3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYg
KG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAo
aXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAg
ICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsK
KworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Cisg
ICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYg
KzIzNzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0Nl
bGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdp
c3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSBy
ZWdUNDsKQEAgLTEwNjgsNyArMjM4NCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0Owog
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBj
YWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRl
bXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAg
ICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJl
ZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIo
KTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hl
ZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJU
ZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVT
bG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1
bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVu
Y3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDI2LDMzIEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNz
KHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRj
aFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRj
aFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0
eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vz
bid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2NCw2ICsyNDczLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5n
KCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28g
d2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdl
dExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChw
dHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxv
dywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxv
b3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjQ5NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9v
cF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24g
Y2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVy
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1MTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGlu
ayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0
cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVz
dCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7
CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjU0MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1
cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRl
QWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRs
ZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQog
CkBAIC0xMjQ1LDggKzI1NTAsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25z
dCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChy
ZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVn
ZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxS
ZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAg
ICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4o
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgpAQCAtMTI1NiwyMyArMjU3MSw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29u
c3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BS
UmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2Uo
KnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIo
KTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlz
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7Cisg
ICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2Rl
SUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIs
IGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVH
UFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9
CiB9CiAKQEAgLTEzMDEsMjQgKzI2MzUsNDUgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNv
bW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKwor
ICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3Bl
LmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNj
b3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBs
YWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+
Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsK
ICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAK
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9u
RXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVH
UFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjcwNCwxOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFy
dCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
UHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzI1LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJh
eV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAg
R1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVt
cGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3By
KCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJl
Z1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzU4LDQyIEBA
IHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEdQUlJl
ZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOworICAgICAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
IH0KIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgxMyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgLy8g
T09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODQxLDggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIg
aGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFz
SW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKQEAgLTE0NjEsMTUgKzI4NjgsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJl
Z1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUp
OwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVK
dW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5
cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRG
b3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJh
ZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyAr
Mjg4NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKICAg
ICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2Rl
SW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4
dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBp
bGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBi
YWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkBAIC0xNTEwLDM3ICsyOTE1LDkyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3Rf
cG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAg
ICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07CisgICAgICAgIE9w
dGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJh
dG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFI7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAgICAgICAg
IGJhc2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJh
c2VDZWxsLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKIAot
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4
IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhl
biBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0g
anVtcCgpOworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBs
ZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQn
cyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAg
ICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIp
OworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRj
aEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFz
ZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAg
ICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29t
cHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJl
Z1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3Mg
Y2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAg
ICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwor
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBs
aW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAg
ICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7
CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Qw
KTsKKyAgICB9CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9m
TGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzAxMCw1MSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3Bl
cnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51
bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8v
IE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVt
ZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1w
bGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlz
LCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRl
eFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRl
eEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisg
ICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5
SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAg
ICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVu
ZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVz
dWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDY0LDUxIEBAIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAg
IEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkp
OworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7Cisg
ICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJP
cGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgp
OworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAg
ICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAg
ICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAg
ICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BS
KTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwog
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1Qw
LCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0
Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1l
c0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICsz
MTE4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5
cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRW
aXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBU
b0VuZDsKQEAgLTE2NTgsNiArMzE4MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlw
ZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAg
ICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9
IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszMTk3LDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisK
KyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0
YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAi
d2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpA
QCAtMTcwMiwxMSArMzIzMCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChj
b25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BB
cmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJl
Z3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQzMihkc3QsIHJl
c3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHQg
PSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3Rf
bGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5
ICszMjUxLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2ln
bmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBK
dW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihu
dW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdU
MCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVh
bCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1t
MzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAg
ICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAg
ICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0z
MihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIHplcm9MZW5n
dGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CiAjZWxzZQot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE3NDQsNDkgKzMzMDAsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0
IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJn
dW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVt
cCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2Rl
VG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7
CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUo
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsg
aW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgYXJn
dW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgp
LCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAg
ICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkp
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFy
Z3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZVZhbHVlKGpzVW5kZWZp
bmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3Qo
dmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBl
bWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
LCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0
IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVl
UmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NF
UlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAg
ICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BS
KCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFs
SW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5
VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNs
b3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJl
bG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3
LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAg
LTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsK
ICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUp
LnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw0OSArNTEsMTExIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qx
KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BS
ID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVl
LT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQo
KSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAg
ICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAg
IG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAg
ICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIHJlc3VsdEdQUiwgcHJvZmlsZSk7CisgICAg
ICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wo
cHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJv
cGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCByZXN1bHRHUFIsIHByb2ZpbGUpOwogCiAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHBy
b3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0
cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAg
ICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVy
dHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJ
bmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwor
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBw
cm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEwMiwzOSArMTY0LDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVy
dHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3Bl
cnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNT
RVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE1Miw2ICsyNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFs
SW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1h
eWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQpCkBAIC0zMzQsNyArNDMyLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQ
dXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0
Miw3ICs0NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1v
ZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAg
ICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzQ0OCwxMiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlm
IChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlW
YWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFi
ZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcy
LDQ5ICs0NjksMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAq
dGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7
ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7
CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNl
R1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29k
ZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50
MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNj
ZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVy
U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlz
LCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlz
LCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1
dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BS
LCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
cHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5n
cHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRl
ckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkg
eyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNj
ZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAg
ICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVn
VDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjQsMTggKzU3Nyw1
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlm
ICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdl
IHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3
cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ0NCwyNSArNjMxLDI3IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQ
UikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTkgKzY2MSw2OSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFz
ZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJv
cGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBH
UFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJv
cGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSBy
ZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9
CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZWdUMik7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0
aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJz
LgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ5MywyMTMgKzczMiwzNjcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
U2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9k
ZWxCeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5
R1BSLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFz
ZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVl
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVj
dCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJh
c2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKwogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3Ro
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3Ro
TW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlk
TW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1v
ZGUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJhc2VHUFIsIHJlc3VsdEdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3Ro
TW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlz
KTsKICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7Cit9
CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAg
IEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCisgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAg
ICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdp
dGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHRoaXNWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0
aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSBy
ZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQodGhpc0dQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0
aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Cisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJl
ZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJ
bmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUu
bV9mbGFncy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBv
cmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmpl
Y3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRo
ZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2lu
JywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAm
IG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdU
MSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVl
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVl
KTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUo
Ynl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QsIHByaXZhdGVG
aWVsZEFjY2Vzc0tpbmQoYnl0ZWNvZGUpKTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CkBAIC03MDksNzcgKzExMDIsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNl
IGNvZGUgc2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFz
ZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdp
bih0aGlzKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRz
W21fcHV0QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVu
Y3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKLQorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZS
ZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklU
SW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVElu
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVh
bFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03OTEsMTcgKzEyMDIsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSArMTIzMCwzNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVz
b2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAg
ICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+
IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50Lmdl
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25t
ZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgpAQCAtODM4LDkgKzEyNzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAKQEAgLTg1MywyOSArMTI4NywyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVz
dWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwx
NSArMTMxOCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsK
LSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cisg
ICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYs
MTIgKzEzNDUsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAg
ICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNp
emVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBA
IC05MjIsNTEgKzEzNTUsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVy
ZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAg
IEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7
Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29w
ZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAg
ICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBi
YXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIo
b3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwor
ICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAg
ICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsK
ICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsK
KyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3Bl
R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC05ODAsMTAgKzE0NDYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDYyLDI3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsK
KyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE0OTIsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0
b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0
Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9h
ZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1Qx
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUy
MSw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9
CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9v
bCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBv
ZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNl
dEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAg
ICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQ
UiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBi
dXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7
CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQog
CisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBz
Y29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29w
ZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAg
ICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJh
bmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAg
c3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRy
KG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1
dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKQEAgLTEwOTgsMjggKzE1NzUsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAg
ICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3
YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVn
VDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsK
LSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5
V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0
KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50
U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgor
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNs
b3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2
YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwpAQCAtMTEzNCwxMiArMTY0MCwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24n
dCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRo
aXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0
aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
SnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdl
IGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5k
aW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTE1Mywy
MyArMTY2OCwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVy
cyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3
ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQ
UiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7
CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAv
LyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwpAQCAtMTE4NiwxMCArMTcxMCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlw
ZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3
MjcsMTUxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVu
dHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50
c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBp
bmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1
ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAg
CisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
Q2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQogewogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2Rl
IGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
ISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7
CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVl
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gb3duZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7
CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMsIG93bmVyKTsKKyAg
ICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBvd25lckdQUiA9IG93
bmVyVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJl
Z1QwKTsKKyAgICB9CiAgICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAg
ICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7
CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0Nl
bGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BS
KTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVy
QnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9u
YWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1
ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgp
LCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJD
YWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkp
CiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBp
ZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlz
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
KSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgICAgICBH
UFJSZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgdmFs
dWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVy
KTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVO
b3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApA
QCAtMTM4NSw4ICsxOTk3LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAg
ICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93
bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsK
KyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDA7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZt
KCksIG93bmVyLCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGls
bFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJl
Y29yZCk7CisKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBb
TWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltd
KHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10o
c2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0
ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9t
YXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRo
Q2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhD
YWxsLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xv
d1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAog
ICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8v
IFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAv
LyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQog
ICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9u
KCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zm
c2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25z
dGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2Vl
ZEZvckxJQ01GdXp6ZXIsIDQyNDI0MiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUs
IGFsbG93SG9pc3RpbmdMSUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihCb29sLCBleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0
aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415476</attachid>
            <date>2020-12-04 16:53:46 -0800</date>
            <delta_ts>2020-12-04 17:39:51 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>416436</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzMiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICgh
IShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0
ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
aWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNT
dHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBv
cF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiBy
aWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZs
b3coKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBT
cGVjQnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJv
bU5vbk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAg
ICAgICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQ
dXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENh
biBwcm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0lu
dFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAg
ICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
RGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAg
ICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBl
eGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91
bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0
ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55
SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2Rl
YzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihz
cmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChw
cm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCB8PSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3Qs
IHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAg
aWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07
CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAg
ICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFu
ZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUo
Ynl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwg
U3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hp
ZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMp
OworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3Ry
dWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRs
ZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAg
IGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8
IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsK
KyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNo
b3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlz
IGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgor
ICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3Rl
OiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0K
KyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBw
cm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAg
ICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0Zp
bmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgor
ICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29s
dmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZh
bD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9w
cm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21p
c2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9z
dHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5l
cmF0b3JGdW5jRXhwPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5j
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5j
X2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0
b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0
b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50
X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNj
b3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJv
cGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3Bl
Y0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwg
U3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9f
aW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5k
ZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNE
ZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRT
Y29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwg
U3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1By
b21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19n
ZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5
bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2Vx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVh
bjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJv
ZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2Fz
dDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19j
YXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBz
ZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
YWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgor
ICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgor
ICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBj
YXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2Fz
ZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3Bf
dGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1
ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9m
dW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBv
cF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9w
ZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ug
b3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAg
ICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2Fz
ZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3Rl
cToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9w
X2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoK
KyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dl
cToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAg
Y2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNl
IG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAg
IGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNh
c2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgor
ICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9l
dmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6Cisg
ICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoK
KyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0
aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5l
OgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2Ug
ZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1
Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9m
dW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6
cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5p
cXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytp
KQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+
Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgewor
ICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tl
ciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgewor
ICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29u
c3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAg
ICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJn
KSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVj
dWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQo
YXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERG
Uy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBp
bXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisg
ICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBh
cmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9P
UFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3
ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVj
b2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50
UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAg
ICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygp
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFs
TGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9j
ay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNj
ZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24o
c3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2Nr
LCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQor
CiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNiArODk1LDEyIEBA
IHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2Fs
bGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAorYm9vbCBKSVQ6
OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91
c2VMT0w7Cit9CisKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklU
KCZ2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKQEAg
LTc2LDYgKzkxMCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIK
ICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNlTE9M
ID0gT3B0aW9uczo6Zm9yY2VMT0woKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzUs
NyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5F
X1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1f
Ynl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkyLDMy
IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3df
IyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BD
T0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5h
bWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwo
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwK
KyAgICAgICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAg
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xv
d1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzMsNzMgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRl
QXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJl
c2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3Jh
cGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4
aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChh
dXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5k
ZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4
XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJl
bnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50
QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVu
ZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
QXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7
IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNp
Y0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygp
ICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3Jz
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRT
dGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJl
ZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVk
ZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0
YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAo
IXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAs
IG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3Rh
dGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rl
ckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0
aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dD
YXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5k
ZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+
IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODUsMTQgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmICghbV9jaGVja2Vk
VXNlTE9MKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBMT0w6ICIsIG9w
Y29kZUlEKTsKKyAgICAgICAgfQorICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKwor
ICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1
cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nh
c2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE1LDEyICsxNDMxLDE0IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBS
ZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0g
MDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xv
d0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDog
bV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNv
ZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1w
c1swXS5saW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5w
dHIoKTsKICAgICAgICAgCkBAIC01NzksNyArMTQ5Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVx
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9uZXEpCkBAIC01OTcsNiArMTUxNCwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2
XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZWxzZQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQorI2VuZGlmCisKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjMzLDE1ICsx
NTU2LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RU
bywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkg
fHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQo
KSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAg
ICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9
PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNl
dCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Cisg
ICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
JnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBz
byB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwog
ICAgIH0KQEAgLTc3NCw2ICsxNzAwLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFi
ZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAg
Ly8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1
bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAg
YnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk5MSw2NTIgQEAgU2Vjb25kcyBKSVQ6
OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRp
bWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQg
SklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5h
cHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4K
K1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEg
YmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2Nr
IGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24n
dCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMg
c29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBS
ZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byBy
ZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNv
bnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKwor
c3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEg
YmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2Nr
IGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9u
J3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlz
IHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1
Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiBy
ZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQorewor
ICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEg
ZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1
cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisg
ICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJl
Z2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAg
ICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9T
bG93UGF0aCgpCit7CisgICAgaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5s
YXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAgIENSQVNIKCk7
Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5n
cHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAg
ICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BS
KCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAg
ICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5p
c0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAg
ICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29u
c2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVl
LgorCisgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAg
ICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJh
bmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUgeyB9OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNh
bGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0
KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2Fs
bGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcp
OworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAg
ICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhT
YXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAg
ICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJl
ZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1
ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKCkK
K3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNw
aWxsUmVjb3JkIHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVu
ZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxl
ZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7
CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVk
UmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50
RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
KnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JT
cGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgcmVjb3JkLnNhdmVQbGFu
KTsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHRvSWdub3JlLCBjb25z
dCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2F2ZVBsYW4p
IHsKKyAgICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcgPT0gdG9JZ25vcmUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsK
KyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAg
ICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihj
b25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihzbG93
Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFk
ZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdz
IHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9y
KG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIp
LmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBn
cHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFu
ZCkpOworCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwg
b3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91Ymxl
OworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVk
KTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVn
KGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9p
ZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVn
VmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxv
Y2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFu
ZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6
OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAg
IGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BS
UmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRl
bXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRl
bXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRl
bXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnBy
ID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJl
dHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnBy
KTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJ
VDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9n
cHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBt
X2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQ
UigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9n
cHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQor
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVy
YW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJl
Z1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBl
KG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJh
bmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0
ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQor
CitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6
Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
Z3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0
ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwg
bV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlm
IChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAg
ICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30K
KworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnBy
KTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9m
cHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQu
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQu
ZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJS
ZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayht
X2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQ
UlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIo
KTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0
LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7Cisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFs
dWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVl
UmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5
cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVu
Ym94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1f
ZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBK
SVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVz
dWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0
byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
CisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJp
bmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFp
c1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29s
ZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4o
dmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0s
IHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3Ro
ZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30K
Kwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENo
ZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0lu
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0Jp
Z0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVl
OworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlm
CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIp
IHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICgh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQp
KQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2
YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50Owor
ICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9u
ZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
aWdJbnQzMihvcGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwg
c2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwo
dmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0lu
dCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3
IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50
ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJS
ZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
U2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJ
RCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBj
bGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBj
bGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0
aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSArMTA1LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAg
ICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNv
ZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisg
ICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVy
Pj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBz
YXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAg
dW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2Fz
ZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAg
IH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25l
IGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3Jl
IHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8v
IE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBz
bG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVn
aXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAg
ICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE4Myw2ICsxOTgsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAg
IGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7
CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7
CiAKQEAgLTE5MCwxMiArMjA3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERl
ZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVt
YmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQg
OGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNz
IHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hl
ZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1
bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9j
ayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0g
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNzQsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJy
YXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2Ji
ZXIoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9i
YmVySW1wbChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAt
MzAwLDkgKzMyNSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2tw
b2ludChKdW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSB7IH0pOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJl
c3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nh
c2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAg
ICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0
IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBp
bnQpOwpAQCAtMzEwLDcgKzMzNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zMjcsNyArMzU0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAg
dm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7
CiAKQEAgLTMzNyw3ICszNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBD
b21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1w
U2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2Fz
ZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBl
bnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRG
aWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07
CkBAIC0zNTAsOCArMzc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVn
VDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsK
KyAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
KTsKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSgu
Li4pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1
ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4KQEAgLTQ3NSw4ICs1MDIsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVD
b25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUxMSwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNp
emVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2
b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRf
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC01MTIsOSArNTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMs
NzcgKzY3OSw4MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9j
YWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1
dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VD
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2ln
bmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsK
KyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
Uik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTcyOCw4ICs3
NjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVl
IGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQyLDM4ICs3ODAsMTgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24s
IE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAg
ICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwg
UmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNs
b3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0
ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0
aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtE
dW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAg
ICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwot
ICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZv
aWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2Vz
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNB
bnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
ICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAg
ICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzk0Myw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxz
ZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsK
KyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisK
ICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRp
YyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTU2LDIz
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+
CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3Ap
OwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBHUFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAg
ICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFs
aWRHUFJSZWcpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBS
VGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcg
ZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+
SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIg
MzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQg
YmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5D
ZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVl
T3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQm
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7
CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBt
X2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxh
dGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxh
dGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVy
YW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJS
ZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVy
YW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAg
ICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdW
YWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAg
IH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFu
ZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5k
KSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgp
OworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmco
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZv
aWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
T2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2
b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8g
aGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihH
UFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIo
KTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlz
IHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0
LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAg
ICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJl
Y29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0
ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9y
ZUZyb21TYXZlUGxhbihSZWcgdG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVy
cHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2Nh
bGxzOwpAQCAtOTUzLDcgKzExOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9y
PEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0
b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzEyMzYsNzcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAg
ICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
IHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJv
eGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4K
KyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBG
UFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNv
bnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAg
ICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAg
ICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxv
Y2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxv
Y2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0g
eyB9OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRy
eSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERh
dGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRl
IHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVy
YW5kczxTcGVjdWxhdGVkVHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVy
Z2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShv
dGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5
cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlw
ZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChy
ZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0
YXRlOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOwor
ICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9Owor
ICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRI
ZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlv
bnM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVj
dG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxW
ZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9M
IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAg
ICAgICBWZWN0b3I8SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4s
ICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFs
c2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xv
d0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYwLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX3Vu
c2lnbmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIs
IHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3Qg
cGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQog
ICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8g
LSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRh
cmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Ym9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3
MiwyNSArMzA1LDMzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6
ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwg
Y29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJh
bmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0
aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGlu
ZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8g
LSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8v
IC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAv
LyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0yOTksOCArMzQwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZh
aWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVy
VGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNSw4ICszNjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAg
ICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEg
PSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEyICszODcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwot
ICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAg
ZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5j
aElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3Zl
NjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArNDA0LDkgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOwor
ICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTQwNiwyNSArNDQyLDcwIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9
IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVj
dCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdp
c3RlcnM6OmVheCk7CisgICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRv
IGVkeCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjpl
Y3g7CisgICAgQVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7
CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1Q0KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBlYXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1Rl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNH
UFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAg
ICBjbG9iYmVyKGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5l
bXBsYWNlKCp0aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7
CisgICAgICAgIGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1w
LT5ncHIoKTsKKyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBs
YWNlKCp0aGlzLCBsaHMpOworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7Cisg
ICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7
CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVn
VDQsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgICAgIG1vdmUocmVn
VDQsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVn
MSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEp
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0y
MTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAg
eDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4KTsKQEAgLTQzMiwx
NSArNTEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQb3Np
dGl2ZS5saW5rKHRoaXMpOwogICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiAjZWxzZSAvLyBDUFUoWDg2
XzY0KQpAQCAtNDUxLDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAtNDYzLDcg
KzUzNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNl
IC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5v
dEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzU0Niw3IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENo
YXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzYzNSwxMyBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24g
Kmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3Bl
cmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTMg
Kzc5NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0
IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5j
ZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0
ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBz
bG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2Vu
ZXJhdG9yPgpAQCAtNzgzLDkgKzg1MywzNSBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFz
dFBhdGgoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGJvb2wgcmVzdWx0SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIG5vdDMyKHJlc3VsdEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBpZiAocmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTgwMiw3ICs4OTgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTAxLDE4ICs5OTcsNTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRk
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIG1vdmUobGhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkp
OworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUobGhz
LmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
QWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBl
bWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93
Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpA
QCAtOTIzLDE1ICsxMDU1LDM1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1h
dGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1
c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdU
MT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8g
Y2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1Jl
Z3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFu
ZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hU
ZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNy
Y1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3Vs
dFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2lu
ZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVn
VDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRv
IGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQs
IHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MCwxOSArMTA5MiwyMiBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9y
ID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElD
R2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUg
PSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwog
ICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAg
fSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtOTYyLDcgKzExMTcsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2Vu
ZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdz
LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9u
PgpAQCAtOTczLDEyICsxMTMyLDI5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5h
cnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCisgICAgU25pcHBldE9wZXJh
bmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CisgICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgp
KTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQorICAgICAgICBsZWZ0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKKyAgICBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQorICAgICAgICByaWdodE9wZXJhbmQuc2V0
Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisKKyAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
KwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZw
UmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxl
ZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKwogI2Vsc2UKICAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTk4Nywy
NSArMTE2Myw0MCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAg
ICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogI2VuZGlmCiAKLSAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKLSAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25k
KCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0
T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgICAgICBsZWZ0VGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CisgICAgICAgIGlmICghR2VuZXJhdG9y
Ojppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkgeworICAgICAgICAg
ICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQogCi0gICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0
SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwotICAgIGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdl
dE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAg
ICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJh
bmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYgKCFH
ZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlm
ICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAg
IH0KIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBS
ZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJh
dG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9y
Ojppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAg
IGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkp
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYg
KCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2Vu
ZGlmCkBAIC0xMDE0LDE3ICsxMjA1LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRC
aW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2Vu
ZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5l
cmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAg
ICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAg
IGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlm
IChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOworICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICAgICAgfQorCiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3Mu
Z3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJl
Z3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5n
cHIoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aEp1bXBzLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgIH0KIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzQsMTEg
KzEyNDIsMTggQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAg
IH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBy
ZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxP
cCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rp
b24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRo
SUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ3LDgg
KzEyNjIsOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
IH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTA4NCw3ICsxMjk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVu
YW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0
aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBN
YXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVl
OwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAg
LTEwOTUsOSArMTMxMCw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkg
fTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFy
Z3VtZW50c1sxXS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTExMTQsMTAgKzEzMjksMTcg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJU
KCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYg
R2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwog
Ci0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJh
bmQpKQorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByZXN1bHRSZWdzLmdwcigpID09IHJlZ1QxID8gcmVnVDMgOiByZWdUMSB9OworI2Vu
ZGlmCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAg
ZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVy
YW5kKSkKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUNCA6IHJl
Z1QyIH07CisjZW5kaWYKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93
UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTExNTUsMjMgKzEzNzcsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAg
ICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0
T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBA
IC0xMTg3LDI3ICsxMzkyLDkyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKQogICAgICAg
ICByaWdodE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKG9w
MikpOwogI2VuZGlmCi0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgp
IHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVn
IHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7CisgICAgRlBSUmVnIHJpZ2h0RlBSOwor
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gbGVmdFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxlZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsK
KyAgICAgICAgbGVmdEZQUiA9IGxlZnRUZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9
IHJpZ2h0VGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEp
OworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBm
cFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CisKKyAgICAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9Cisj
ZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBG
UFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsK
KwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5k
aWYKKyAgICAKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7
CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKKyAgICAgICAgYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwogCiAgICAgSklURGl2R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmln
aHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJl
Z1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOworICAg
ICAgICBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9m
aWxlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGlmIChnZW4u
ZGlkRW1pdEZhc3RQYXRoKCkpIHsKICAgICAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdw
cigpLCByZXN1bHQpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0
KCkpOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAg
ICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9
CkBAIC0xMjE1LDM0ICsxNDg1LDEwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigp
LCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJo
cy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBS
LmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
c2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3Zl
cmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAg
ICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZw
cigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFBy
b2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9u
LCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8
T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmls
ZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxP
cHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxo
cy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklU
U3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1
YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1
YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6
ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7
CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9Q
T1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDgg
QEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTQsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBD
OyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVy
IGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2
YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2NSwxMSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNT
RVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0
ICszMzMsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAg
IGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
Rm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0
cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYs
MzkgKzM4NSw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAg
ICAgICAgIH0KICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBs
aWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRo
IG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3Vs
dCBoZXJlPworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKIAogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2l0ZXJhdG9yKSA9IFNwZWNI
ZWFwVG9wOworCiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJl
c3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsK
KyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVu
ZChuZXh0Q2hlY2twb2ludFNsb3cpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAgcHJv
dmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzAsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAgICAg
fSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBp
dCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVj
b2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwg
ZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdU
MCk7CiAKQEAgLTQ3NiwxOCArNDk1LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAgIHsK
LSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAg
ICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hlY2tw
b2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogCi0g
ICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgfQpAQCAtNDk5LDExICs1MjEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBM
aXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9p
bnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2Uu
anVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
KTsKQEAgLTUxNSwxMCArNTQwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTUwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0
R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJl
c3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTg1LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQg
Y2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNl
LgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5n
cyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFj
ayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9
PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4m
IHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODks
MzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAu
bGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1
cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9i
eXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9z
bG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91
c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0
aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAh
IXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1f
c2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRk
U2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3Qu
anVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBz
WzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3Qm
IGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0
byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6
IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1w
KTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCBy
ZWxhdGl2ZU9mZnNldCkKQEAgLTMwOSwxMSArMzAxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW4KICAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlLCBHUFJSZWcgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7CiAKLSAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlID0gcmVnVDA7CiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7CiAjZW5kaWYK
QEAgLTMzOCwxMSArMzI5LDExIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxkZWMKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRP
cGNvZGUoLi4uKSB7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhKQoraW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BS
UmVnIHJlZykKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRh
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpLCByZWcpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSkKQEAgLTM5MywxMSArMzg0LDYgQEAgQUxXQVlTX0lOTElORSBk
b3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNV
bmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCAr
MTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEy
NDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMjQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNyYy5p
c0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsKKyAg
ICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKworICAgICAgICBtb3ZlKGlucHV0LmdwcigpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBA
IC05MCwzMiArMTA4LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9u
U2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCpt
X3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFs
bG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOwor
ICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJS
ZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3Vs
dFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVn
VDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9j
YXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBi
dXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJl
c3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBw
cm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0
ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMjUsMjMgKzE2NCw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25z
dHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2Rl
Lm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNv
bnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisg
ICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAg
ICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIg
PSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3Rh
bmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1
Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOwor
ICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJ
bnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFu
Y2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwog
CiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVu
Y3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2Up
LCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMTcsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7
CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSBy
ZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBh
IGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0lu
c3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdU
MCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8g
cHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlv
bmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1Rl
bXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVt
cCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcg
dmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFU
ZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7
CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIg
PSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVl
VGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3By
KCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAg
IH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAor
ICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNj
cmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNl
VmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAg
ICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0
aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBp
cyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAg
ICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNj
cmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107
CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNl
R1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikK
QEAgLTE5OSwxMSArMzE4LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IElu
c3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yMTEsMjggKzM0OCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0g
ICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1
ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
CisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBH
UFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQ
UiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisK
KyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBp
c0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVn
VDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQx
LDEzICs0MjIsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDU2LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jv
b2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQo
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9v
bGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVzdDY0KFplcm8sIGlucHV0R1BS
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFpl
cm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTI2OCwxMSArNDg3LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJ
bnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVt
YmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCBy
ZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVz
dDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAt
MjgyLDIxICs1MTcsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0
cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFs
LCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChp
bnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0lu
dDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAK
LSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJl
Z1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2sp
LCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU4Myw0NyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNv
ZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90
Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAg
ICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzYzMiw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19v
YmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNP
YmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFs
dWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3Qp
KQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJl
OChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
dmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVz
cyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihP
YmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTM1NSw3ICs2OTcsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29k
ZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVl
R1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MTYsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJ
bW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2Jq
ZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3Jj
KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykg
JiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwo
dmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1By
aW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3Qo
cmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9
IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NTksMjAzIEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3lt
Ym9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2
YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
eW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVH
UFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0
aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlz
LCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5j
dGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5j
dGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVu
Y3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFu
KHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAg
ICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3Vs
ZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0
IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAg
ICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFs
dWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8v
IGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBm
YWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFn
YWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQg
ZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFs
dWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxs
IGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3
aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5
KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3
aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRp
b24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1
ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAg
ICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9
IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRj
aDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZw
cigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2
YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNo
MkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
R1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBH
UFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNv
bnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0
ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNv
bmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBG
UFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0
Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3By
KCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVn
IHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDQwLDQ2ICs5NjQsMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3Ry
dWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3Jj
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBz
Y3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
c2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0
aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0
Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24u
bGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9
Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1w
IG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklU
OjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51
bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
T3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3Qs
IGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBv
biB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFs
LCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBz
Y3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRo
ZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRK
dW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAg
ICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAg
ICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRl
ZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDg4LDEwICsxMDk1LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChj
b24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMjMs
MjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikp
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3Ro
aW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNTQsMzA1IEBAIHZvaWQgSklU
OjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50
ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXND
ZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihF
cXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsK
KyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBl
ZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0wo
KSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwg
T3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1
YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDog
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1
ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhz
KSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJo
c0dQUikpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAg
SW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
IGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBD
b3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2Ft
ZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAg
IGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENv
bXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwg
cHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsK
KworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBE
b3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0
aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQ
Uik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwor
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRh
cmdldCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwg
cmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1Qx
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVz
dGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVt
aXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGpl
cUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BS
UmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQor
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBA
IC01ODksNzQgKzE0NjgsMTUwIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJ
bnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFs
IDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFs
QW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwg
cHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBK
U1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhz
LCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
SW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
cmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZnBD
b21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMg
aGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQz
MikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAg
ICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAg
aWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwg
cmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAo
bGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2gg
aW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNl
ZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQg
aWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1h
a2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQg
aXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2gg
Yml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUw
LgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAg
ICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0K
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVy
IHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8g
RklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBp
cyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFy
ZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAg
ICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1t
NjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhs
aHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyog
QXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgor
ICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAg
ICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAg
ICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVm
dCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOwor
ICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAg
ICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQg
aXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdv
dWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElm
TnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJ
bnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2
aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIg
YXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAg
IC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAg
ICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsK
KyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQo
cmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFs
LCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdU
MSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVn
VDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93
IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMp
LgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291
bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIs
IHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5T
dHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJ
TlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmlu
Z3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cg
aWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hp
Y2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAg
SnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmln
aHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNs
b3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVp
dGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlz
IGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAg
ICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7Cisg
ICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhp
cyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQot
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UK
LSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
I2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjI5LDEzNSBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRv
IGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5
cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAg
ICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkg
eworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBj
YW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
cmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBo
ZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7Cisg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAg
IC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVx
KToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsK
LSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93
UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50
IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBz
aW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVp
cmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0
cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkg
dG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAot
ICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBp
dHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBv
ciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwg
cmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMp
LCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVn
VDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVn
VDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1Qz
LCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwg
cmVnVDEpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEp
Ci0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNv
dmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAg
Ly8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVy
ZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3Ro
IGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0
byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJp
Z2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8
IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8g
bm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBp
dHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
bW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAg
IEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAg
IGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIp
OworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292
ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxl
c3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGgg
aWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAg
ICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lO
VDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5n
cykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hp
Y2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgor
ICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlz
KTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGlu
ayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCks
IHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNzQ4LDg5ICsxNzcwLDIxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpz
dHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAg
R1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9y
ZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQ
UlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJl
cj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmln
SW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2Rl
TnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
TnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAg
ICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIg
fCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAg
ICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAg
ICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0g
ZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qw
KSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVn
VDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBP
T1BTOiBkZWFsIHdpdGggdGhpcy4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjAz
OCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0g
ICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
cHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBj
ZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9
OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjA2OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1
bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6Oklt
bWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsyMDk0LDE3IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElU
YWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxl
SW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNj
cnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIxMTgsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2Nv
ZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
dGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwor
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgbG9hZDMyKGNvZGVCbG9jaygp
LT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2Vy
UmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdI
b29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1
bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBK
dW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0Vx
ID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29tcGFyZU9w
ID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChj
b21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9w
LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9w
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFO
dWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUu
bGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3Vy
cmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0
YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAg
Ly8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNv
bnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQg
dW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNy
ZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1W
YXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAg
ZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChz
aXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQog
CiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI2OSwy
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1Qw
KTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2Nv
cGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29w
ZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTA0NSwxMyArMjI5Myw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0Rz
dCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0Rz
dDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0
ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlm
IChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHBy
b3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5j
ZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAg
ICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIs
IHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAg
ICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRo
aXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShy
ZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBy
ZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFs
dWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUo
cmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJl
SUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyMzc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0
ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRh
dGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAg
ICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzIzODQsMzEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQg
Y2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBy
ZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1w
NDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0
aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
Z3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcg
PSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEt
PmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3By
VGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0ciha
ZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkp
OwpAQCAtMTA4Niw2NCArMjQyNiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5s
aW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0K
LQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVx
PigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIo
VHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BS
LCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7
Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90
YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgh
IShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRH
UFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3Ig
TE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBo
ZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjQs
NiArMjQ3Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJs
eUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNB
cmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTOiBj
bGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgogICAg
ICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5z
dHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tp
cEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9u
czo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI0
OTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBh
dGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXpl
ZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNh
bGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25P
cHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsy
NTE0LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwog
ICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8v
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAv
LyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBM
T0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlv
bik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1
NDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigm
Z19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNTUwLDE4IEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5
dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAq
PihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQ
UiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdl
eHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
fQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI1NzEsNDIgQEAgdm9p
ZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAg
ICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNj
b3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNl
IGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNjM1LDQ1IEBA
IHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsK
KworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Nj
b3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
dGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wp
OwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0
aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24p
OwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAg
ICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhw
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQog
fQogCkBAIC0xMzQ5LDkgKzI3MDQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50
IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNT
dGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJS
ZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFj
ZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsK
KyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjcyNSwyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXgg
PSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBh
cmdHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJn
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNl
Ci0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNp
emVJbmRleCwgcmVnVDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYK
IH0KIApAQCAtMTM4MSwxNSArMjc1OCw0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywg
ZW51bWVyYXRvciB9OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JW
YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgICAgIE9wdGlvbmFsPENl
bGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAg
ICAgICAgIGJhc2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQ
UiA9IGJhc2VDZWxsLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zm
c2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xNDA5LDYgKzI4MTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJv
cGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQogeworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFk
VHlwZTsKQEAgLTE0MzYsNiArMjg0MSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGlsbEZvckNhbGwo
KTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsyODY4LDE1IEBAIHZv
aWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJheU1vZGUgbW9k
ZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7
CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgogICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFu
ZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1
bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlv
biwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JB
cnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAgICAgCiAg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBy
ZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShiYWRU
eXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBMYWJlbCBk
b25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4ODUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgp
OwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRp
b25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5
cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVj
b2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRv
bmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMjkxNSw5MiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBp
cyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUg
eyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7
ICp0aGlzLCBpbmRleCB9OworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7
CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIEdQ
UlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJS
ZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNl
KTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9Cisg
ICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQot
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3In
cyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVn
VDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVn
VDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhl
IHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QyKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7
CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2Fj
aGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBK
dW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNo
R1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1
bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5s
aW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShpbmRleEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0
cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91
dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0
KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmly
c3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgICAgIC8vIElmIGluZGV4IGlz
IGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBp
dCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSks
IHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3Mu
bGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJl
Z1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwor
ICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogCi0gICAgLy8gT3RoZXJ3aXNl
IGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwot
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShm
aXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE1NTAsMjEgKzMwMTAsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5k
cyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJS
ZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFs
PEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAg
ZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3Vs
dFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVy
YXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBp
bmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51
bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihC
ZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGlt
ZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkp
LCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdo
dCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8
IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJp
Y19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwy
MSArMzA2NCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVs
b3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5k
ZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5k
ZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1w
bGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4
R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0
b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOwor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAg
fQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0
KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25F
eHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4
KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAg
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzExOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlv
biA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRv
UHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxG
b3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCBy
ZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzMxODAsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7
CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAg
IHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1Qy
LCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZT4oKTsKQEAgLTE2NzIsNiArMzE5Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1
cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVn
VDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlz
IGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAgLTE3MDIsMTEgKzMyMzAsMjAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNW
YWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50
MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFi
bGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzI1MSw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29k
ZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIo
SW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5n
dGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1z
VG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAg
IHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5s
aW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkp
KSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszMzAwLDk5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5j
aDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAg
ICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVu
dE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZElt
bTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsK
LSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdz
KTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5k
cyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkp
OworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3By
b3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFs
dWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikp
OworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQ
UikpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2Ugewog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIo
KSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlw
ZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBz
bG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2Fk
UHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0
Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3Mp
OworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9u
IDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5
LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAg
ICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAg
Ly8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lz
dGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDgg
KzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNDkgKzUxLDExNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJl
ZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BS
ID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVl
LT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIg
PSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAg
ICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAg
ICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRl
bnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZp
ZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJv
ZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hl
Y2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlw
ZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBz
aG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5
cGVHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJv
cGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAg
ICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3Bl
Y1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9n
ZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkp
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAg
ICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xv
d0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAg
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5k
ZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY3LDczIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVy
dHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFt
ZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Miw2ICsyNTEsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAg
c3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJ
c0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKICAgICBp
ZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTQsOCArNDE1LDExIEBAIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyByZWxvYWQgdGhl
IHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFs
dWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3RlcnMgPSBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFpbGFibGVSZWdpc3RlcnMu
bWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKICAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlOYW1lLAogICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5
dGVjb2RlKSwgcHV0S2luZCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29kZSkpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0zMzQs
NyArNDM4LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAg
IHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICs0NDYsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwog
Ci0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRl
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzQ1NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcyLDQ5ICs0NzUsMTA1IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUu
bV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29k
ZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vz
c29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3Ig
fTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcg
YWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
MSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jh
c2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dl
dHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1f
c2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQ
UiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVy
LCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0
ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFs
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7
Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhp
cywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3Ig
eyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRl
cywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNv
ZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywg
Ynl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAg
ICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjQsMTggKzU4Myw1MiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAog
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ0NCwyNSArNjM3LDI3IEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3Vs
ZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTkgKzY2Nyw2OSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
YmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBz
Y3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlH
UFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAg
cHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
CiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVl
bmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KQEAgLTQ5MywyMTMgKzczOCwzNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBK
SVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7
CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7
CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBi
YXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNl
KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIg
PSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBi
YXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAg
IGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSks
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5n
dGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxl
KTsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BS
IDogcmVnVDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BS
LCBpbmRleGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1v
ZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7
CiAgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAg
CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNW
UmVnKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywg
dGhpc0dQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BS
KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZS
ZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BS
LCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0
Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9u
ZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4g
bG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29k
ZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQg
dGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0g
cmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFs
dWUsIHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNt
YU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRp
cmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29k
ZSkpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTcwOSw3NyAr
MTEwNyw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BS
UmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBh
dGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBk
c3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNo
cG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlv
bldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzkxLDE3ICsx
MjA3LDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5z
aWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdF
cG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVzdWx0R1BSKSk7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC04MTEsMjEgKzEyMzUsMzYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNj
b3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJl
KGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgp
OworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
ICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUo
c2NvcGVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BS
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAg
LTgzOCw5ICsxMjc3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogCkBAIC04NTMsMjkgKzEyOTIsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04ODQsMTUgKzEzMjMsMjAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQor
dm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0
cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIo
c3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3Ry
dWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9t
UG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTA2LDEyICsxMzUwLDYg
QEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIo
cmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTIyLDUxICsx
MzYwLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwog
ICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+
KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFs
dWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFz
ZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBy
ZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhp
cywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
ICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAg
b2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAg
ICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVt
cCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9h
ZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90
LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAg
ICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
b2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZz
ZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAg
ICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAg
ICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNj
cmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1Qx
OworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BS
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtOTgwLDEwICsxNDUxLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJl
c29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAg
IEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTk5NiwyNyArMTQ2NywyNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExv
YWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDI2LDQwICsxNDk3LDIyIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQs
IHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVz
c09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwot
ICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNzMsMjIgKzE1MjYsNTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90
KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1f
b3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7
CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAg
ICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAg
YnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFs
dWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQ
UiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9m
ZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZv
aWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7
CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVn
VDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJl
Z1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0
cihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIp
OworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIs
IG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxW
YXI6CkBAIC0xMDk4LDI4ICsxNTgwLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAgaWYgKCFp
c0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3
ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCks
IHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1
ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFk
YXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwg
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2Vs
bCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFk
ZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAg
Y2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAgLTExMzQs
MTIgKzE2NDUsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBi
bG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVn
aXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0
IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
c2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZh
cikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRv
IHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KIAogICAg
ICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTExNTMsMjMgKzE2NzMsMzIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1
ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENv
ZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28g
ZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAg
ICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
ciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKQEAgLTExODYsMTAgKzE3MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1LDYxICsxNzMyLDE1MSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMg
PSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50
c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNH
UFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywg
cmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdU
MCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRk
cmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50
czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJl
c3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1
bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFs
dWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFy
Z3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAg
ICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVl
R1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRz
R1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0b3Jl
NjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAg
ICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICAv
LyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAg
ICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5
cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdU
MDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IG93
bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJl
ZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzLCBvd25lcik7CisgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAg
fQogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBp
ZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQog
Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNw
aWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsg
Ly8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50
U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBv
d25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90
Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVl
R1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1w
bGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2
YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1Nl
dCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzODUsOCAr
MjAwMiwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDAp
OworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwg
c2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNp
bGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxS
ZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAg
ICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1i
bGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkg
eyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAg
Y29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQs
IE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNh
bGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdh
bm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNw
aWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYg
KG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wg
ZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6
emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0
aW5nTElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwg
ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415479</attachid>
            <date>2020-12-04 17:39:51 -0800</date>
            <delta_ts>2020-12-04 19:45:31 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>417453</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9u
cywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgp
LCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFk
LT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAi
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEp
OworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91
dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAg
ICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJs
b2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJ
Q1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RG
OjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBz
dGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9j
YXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmls
ZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MywyMSArMTQzLDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDI0ICsxNzUsMjkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKTsg
fQogCiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CkBAIC0xOTksNiArMjA3LDkgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArIHNpemU7CiAg
ICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1
ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7
CkBAIC0zMDcsNiArMzE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50
b0FyZ3VtZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAK
QEAgLTMyMSw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzUzLDggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAg
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArMzgxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkp
CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQxMiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0
IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBh
cmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBt
X251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAg
U3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50
cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJP
bmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNC
eXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNw
ZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVy
IGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0
aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsK
IHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYg
bV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NF
UlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9P
cGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQg
Y29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25z
dGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQg
KzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJ
bmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAg
ICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBp
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFz
dFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJh
Y3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBh
YmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzMiBAQCBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7
CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0
VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgewor
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07
CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2Ug
cmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMg
aXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAg
ICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxh
dGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3Bl
cmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4
b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFk
YXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVj
dGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICgh
IShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0
ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
aWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNT
dHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBv
cF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiBy
aWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZs
b3coKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBT
cGVjQnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJv
bU5vbk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAg
ICAgICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQ
dXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENh
biBwcm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0lu
dFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAg
ICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
RGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAg
ICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBl
eGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91
bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0
ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55
SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2Rl
YzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihz
cmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChw
cm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCB8PSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3Qs
IHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAg
aWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07
CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAg
ICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFu
ZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUo
Ynl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwg
U3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hp
ZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMp
OworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3Ry
dWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRs
ZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAg
IGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8
IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsK
KyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNo
b3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlz
IGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgor
ICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3Rl
OiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0K
KyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBw
cm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAg
ICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0Zp
bmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgor
ICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29s
dmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZh
bD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9w
cm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21p
c2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9z
dHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5l
cmF0b3JGdW5jRXhwPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5j
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5j
X2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0
b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0
b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50
X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNj
b3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJv
cGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3Bl
Y0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwg
U3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9f
aW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5k
ZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNE
ZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRT
Y29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwg
U3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1By
b21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19n
ZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5
bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2Vx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVh
bjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJv
ZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2Fz
dDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19j
YXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBz
ZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
YWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgor
ICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgor
ICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBj
YXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2Fz
ZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3Bf
dGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1
ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9m
dW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBv
cF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9w
ZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ug
b3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAg
ICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2Fz
ZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3Rl
cToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9w
X2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoK
KyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dl
cToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAg
Y2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNl
IG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAg
IGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNh
c2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgor
ICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9l
dmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6Cisg
ICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoK
KyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0
aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5l
OgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2Ug
ZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1
Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9m
dW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6
cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5p
cXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytp
KQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+
Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgewor
ICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tl
ciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgewor
ICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29u
c3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAg
ICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJn
KSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVj
dWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQo
YXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERG
Uy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBp
bXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisg
ICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBh
cmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9P
UFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3
ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVj
b2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50
UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAg
ICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygp
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFs
TGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9j
ay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBzdWNj
ZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24o
c3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2Nr
LCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQor
CiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNiArODk1LDEyIEBA
IHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2Fs
bGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAorYm9vbCBKSVQ6
OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91
c2VMT0w7Cit9CisKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklU
KCZ2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKQEAg
LTc2LDYgKzkxMCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIK
ICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNlTE9M
ID0gT3B0aW9uczo6Zm9yY2VMT0woKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTE0MCw2ICs5NzUs
NyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNkZWZpbmUgREVGSU5F
X1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1f
Ynl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkyLDMy
IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklO
RV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3df
IyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BD
T0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5h
bWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwo
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwK
KyAgICAgICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAg
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xv
d1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzMsNzMgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRl
QXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJl
c2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3Jh
cGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4
aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChh
dXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5k
ZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4
XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJl
bnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50
QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVu
ZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
QXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7
IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNp
Y0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygp
ICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3Jz
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRT
dGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJl
ZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVk
ZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0
YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAo
IXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihtX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAs
IG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3Rh
dGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rl
ckZvckNvbnN0YW50KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0
aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dD
YXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5k
ZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+
IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEzODUsMTQgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmICghbV9jaGVja2Vk
VXNlTE9MKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBMT0w6ICIsIG9w
Y29kZUlEKTsKKyAgICAgICAgfQorICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKwor
ICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1
cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nh
c2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE1LDEyICsxNDMxLDE0IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBS
ZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0g
MDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xv
d0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDog
bV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNv
ZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNv
ZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1w
c1swXS5saW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5w
dHIoKTsKICAgICAgICAgCkBAIC01NzksNyArMTQ5Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVx
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9uZXEpCkBAIC01OTcsNiArMTUxNCwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2
XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZWxzZQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQorI2VuZGlmCisKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjMzLDE1ICsx
NTU2LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RU
bywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkg
fHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQo
KSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAg
ICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9
PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNl
dCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Cisg
ICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
JnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBz
byB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwog
ICAgIH0KQEAgLTc3NCw2ICsxNzAwLDEzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFi
ZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAg
Ly8gT09QUzogaW1wbGVtZW50IE9TUiBleGl0LgorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGp1
bXAgOiBtX2V4aXRKdW1wcykKKyAgICAgICAgICAgIGp1bXAubGluayh0aGlzKTsKKyAgICAgICAg
YnJlYWtwb2ludCgpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMTk5MSw2NTIgQEAgU2Vjb25kcyBKSVQ6
OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRp
bWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQg
SklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICBtX2V4aXRKdW1wcy5h
cHBlbmQoSnVtcExpc3QgeyBqdW1wIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4K
K1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEg
YmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2Nr
IGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24n
dCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMg
c29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBS
ZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byBy
ZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNv
bnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKwor
c3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEg
YmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2Nr
IGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9u
J3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlz
IHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1
Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiBy
ZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQorewor
ICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEg
ZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1
cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisg
ICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJl
Z2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAg
ICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9T
bG93UGF0aCgpCit7CisgICAgaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5s
YXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAgIENSQVNIKCk7
Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5n
cHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAg
ICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BS
KCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAg
ICAgICAgICAgcmVnVmFsdWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5p
c0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAg
ICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29u
c2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVl
LgorCisgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZShyZWcpLm9wZXJhbmQ7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAg
ICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJh
bmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZWdWYWx1ZShyZWcpID0gUmVnVmFsdWUgeyB9OworCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNh
bGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0
KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2Fs
bGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcp
OworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAg
ICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhT
YXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAg
ICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJl
ZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1
ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKCkK
K3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNw
aWxsUmVjb3JkIHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVu
ZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxl
ZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7
CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVk
UmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50
RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
KnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JT
cGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgcmVjb3JkLnNhdmVQbGFu
KTsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHRvSWdub3JlLCBjb25z
dCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2F2ZVBsYW4p
IHsKKyAgICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcgPT0gdG9JZ25vcmUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsK
KyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAg
ICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihj
b25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihzbG93
Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFk
ZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdz
IHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9y
KG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVy
YW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIp
LmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBn
cHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFu
ZCkpOworCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwg
b3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91Ymxl
OworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVk
KTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVn
KGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9p
ZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVn
VmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxv
Y2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFu
ZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6
OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAg
IGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BS
UmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRl
bXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRl
bXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRl
bXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnBy
ID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJl
dHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnBy
KTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJ
VDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9n
cHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBt
X2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQ
UigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9n
cHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQor
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVy
YW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJl
Z1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBl
KG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJh
bmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0
ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQor
CitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6
Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
Z3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0
ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwg
bV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlm
IChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAg
ICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30K
KworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnBy
KTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9m
cHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQu
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQu
ZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJS
ZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayht
X2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQ
UlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIo
KTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0
LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7Cisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFs
dWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVl
UmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5
cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVu
Ym94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1f
ZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBK
SVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVz
dWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0
byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
CisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJp
bmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFp
c1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29s
ZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4o
dmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0s
IHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3Ro
ZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30K
Kwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENo
ZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0lu
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0Jp
Z0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVl
OworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlm
CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIp
IHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICgh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQp
KQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2
YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50Owor
ICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9u
ZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
aWdJbnQzMihvcGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwg
c2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwo
dmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0lu
dCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3
IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50
ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJS
ZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
U2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJ
RCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBj
bGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBj
bGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0
aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwxNSArMTA1LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAg
ICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNv
ZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisg
ICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVy
Pj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBz
YXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAg
dW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2Fz
ZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAg
IH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25l
IGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3Jl
IHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8v
IE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBz
bG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVn
aXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAg
ICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE4Myw2ICsxOTgsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAg
IGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7
CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7
CiAKQEAgLTE5MCwxMiArMjA3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERl
ZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVt
YmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQg
OGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNz
IHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hl
ZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1
bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9j
ayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0g
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNzQsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJy
YXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2Ji
ZXIoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9i
YmVySW1wbChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAt
MzAwLDkgKzMyNSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2tw
b2ludChKdW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSB7IH0pOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJl
c3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nh
c2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAg
ICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0
IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBp
bnQpOwpAQCAtMzEwLDcgKzMzNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zMjcsNyArMzU0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAg
dm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7
CiAKQEAgLTMzNyw3ICszNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBD
b21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1w
U2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2Fz
ZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBl
bnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRG
aWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07
CkBAIC0zNTAsOCArMzc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVn
VDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsK
KyAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
KTsKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSgu
Li4pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1
ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4KQEAgLTQ3NSw4ICs1MDIsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVD
b25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUxMSwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNp
emVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2
b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRf
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC01MTIsOSArNTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMs
NzcgKzY3OSw4MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9j
YWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1
dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VD
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2ln
bmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsK
KyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
Uik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTcyOCw4ICs3
NjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVl
IGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQyLDM4ICs3ODAsMTgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24s
IE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAg
ICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwg
UmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNs
b3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0
ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0
aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtE
dW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAg
ICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwot
ICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZv
aWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2Vz
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNB
bnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
ICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAg
ICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzk0Myw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxz
ZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsK
KyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisK
ICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRp
YyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTU2LDIz
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+
CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3Ap
OwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBHUFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAg
ICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFs
aWRHUFJSZWcpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBS
VGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcg
ZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+
SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIg
MzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQg
YmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5D
ZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVl
T3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQm
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7
CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBt
X2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxh
dGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxh
dGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVy
YW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJS
ZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVy
YW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAg
ICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdW
YWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAg
IH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFu
ZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5k
KSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgp
OworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmco
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZv
aWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
T2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2
b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8g
aGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihH
UFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIo
KTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlz
IHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0
LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAg
ICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJl
Y29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0
ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9y
ZUZyb21TYXZlUGxhbihSZWcgdG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVy
cHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2Nh
bGxzOwpAQCAtOTUzLDcgKzExOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9y
PEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0
b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtOTkwLDYgKzEyMzYsNzcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAg
ICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
IHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJv
eGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4K
KyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBG
UFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNv
bnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAg
ICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAg
ICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxv
Y2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxv
Y2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0g
eyB9OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRy
eSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERh
dGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRl
IHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWc+IG9wZXJhbmRUb1JlZzsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVy
YW5kczxTcGVjdWxhdGVkVHlwZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVy
Z2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShv
dGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5
cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlw
ZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChy
ZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0
YXRlOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOwor
ICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9Owor
ICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3ByZWRpY3Rpb25zQXRI
ZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gbV9jdXJyZW50UHJlZGljdGlv
bnM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVj
dG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxW
ZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9M
IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAg
ICAgICBWZWN0b3I8SnVtcExpc3Q+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4s
ICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFs
c2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xv
d0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE2MCwyMyArMTYwLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX3Vu
c2lnbmVkKGNvbnN0IEluc3RydWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIs
IHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3Qg
cGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQog
ICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8g
LSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRh
cmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Ym9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3
MiwyNSArMzA1LDMzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6
ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwg
Y29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJh
bmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0
aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGlu
ZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8g
LSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8v
IC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAv
LyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0yOTksOCArMzQwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZh
aWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVy
VGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNSw4ICszNjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAg
ICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEg
PSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEyICszODcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwot
ICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAg
ZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5j
aElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3Zl
NjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArNDA0LDkgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOwor
ICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTQwNiw0MSArNDQyLDkxIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9
IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVj
dCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdp
c3RlcnM6OmVheCk7CisgICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBhdXRv
IGVkeCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjpl
Y3g7CisgICAgQVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7
CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1Q0KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBlYXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1Rl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNH
UFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAg
ICBjbG9iYmVyKGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5l
bXBsYWNlKCp0aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7
CisgICAgICAgIGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1w
LT5ncHIoKTsKKyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBs
YWNlKCp0aGlzLCBsaHMpOworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7Cisg
ICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7
CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KGVjeCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUo
cmVnVDQsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7
CiAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBU
cnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEVxdWFsLCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5h
dG9yTm90TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwog
ICAgIHg4NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMy
KEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBu
dW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBU
cnVzdGVkSW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgp
KTsKICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7
CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNJ
bnQzMk9ubHkpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0lu
dDMyT25seSkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5Owor
ICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNw
ZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMp
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkK
QEAgLTQ1MSw3ICs1MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
JikKIHsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs1NDks
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQz
Mk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs1NTksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
aW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0
ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAg
ZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs2NDgsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0
cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEzICs4MDgs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVtaXRN
YXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9u
VG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3Vs
ZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhl
IG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5l
Z0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRp
bWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVP
cHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSwgc2xvd0Nh
c2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRv
cj4KQEAgLTc4Myw5ICs4NjYsMzUgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRo
KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOwor
ICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47
CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDIsNyArOTExLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIGxlZnRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
bGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMSwxOCArMTAxMCw1NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9
IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIo
KSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3Bl
Y0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVy
ZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnBy
KCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
QygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPiht
X2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRN
YXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNl
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05
MjMsMTUgKzEwNjgsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElD
PAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5n
IHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1h
cmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxs
IHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsK
KyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRo
ZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09
YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2Fs
bCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwor
ICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3Jj
UmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQwLDE5ICsxMTA1LDIyIEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBH
ZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlv
blN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5l
cmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRl
KCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1h
dGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAg
aWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAg
ICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVs
c2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjIsNyArMTEzMCwxMSBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3By
KCkpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBA
IC05NzMsMTIgKzExNDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBs
ZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0
T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwor
CisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5k
LnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25z
dEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJU
KCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdU
MjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAg
ICBGUFJSZWcgc2NyYXRjaEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsK
KyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworCiAjZWxzZQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtOTg3LDI1ICsx
MTc2LDQwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICBG
UFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsg
bGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICBy
aWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQz
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAt
PmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBz
Y3JhdGNoRlBSID0gZnBSZWdUMjsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVy
YXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFH
ZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQog
CiAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRP
cGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAgaWYg
KCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIUdl
bmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYK
QEAgLTEwMTQsMTcgKzEyMTgsMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0
ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRl
ZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgIGVs
c2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQu
aXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwor
ICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIo
KSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsZWZ0UmVncy5n
cHIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmlnaHRSZWdzLmdwcigp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVt
cHMsIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhf
SUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNCwxMSArMTI1
NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgfSk7
CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdz
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3Vs
dFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBP
cEFkZD4pCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2Rl
TnVtYmVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmls
ZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiBy
ZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0
aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDcsOCArMTI3
NSw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVn
cyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CkBAIC0xMDg0LDcgKzEzMTIsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUg
UHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVt
aXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24s
IFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Ns
b3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRv
TWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5
NSw5ICsxMzIzLDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9Owor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTExNCwxMCArMTM0MiwxNyBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShH
ZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5l
cmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAg
ICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkp
CisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJh
bmQpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJlc3VsdFJlZ3MuZ3ByKCkgPT0gcmVnVDEgPyByZWdUMyA6IHJlZ1QxIH07CisjZW5kaWYK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBlbHNl
IGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQp
KQorICAgIH0gZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
cmlnaHRPcGVyYW5kKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzIHsgcmVzdWx0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1Q0IDogcmVnVDIg
fTsKKyNlbmRpZgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRo
U3RhcnQgPSBsYWJlbCgpOwpAQCAtMTE1NSwyMyArMTM5MCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgRlBSUmVnIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QyOwotCi0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBudWxscHRyOwotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTEx
ODcsMjcgKzE0MDUsOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9u
KgogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJp
Z2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7
CiAjZW5kaWYKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwg
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2Ny
YXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2Ny
YXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlv
bmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
cmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAg
ICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmln
aHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Cisg
ICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVn
VDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNl
CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJl
ZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAg
ICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgor
ICAgIAorICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7CiAKICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAs
IGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAg
IGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUp
OwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRF
bWl0RmFzdFBhdGgoKSkgewogICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCks
IHJlc3VsdCk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQs
IHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKICAgICB9IGVsc2UgewogICAgICAgICBB
U1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCkuZW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChnZW4uc2xv
d1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9kaXYpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0KQEAg
LTEyMTUsMzQgKzE0OTgsMTAzIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11
bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCBy
aHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxo
c0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdw
cigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIuZnBy
KCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxv
dywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAg
IHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCks
IHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11
bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
SklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRv
TWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11
bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9w
dGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGlt
aXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2Zp
bGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
OworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIo
KSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3Bl
Y0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdw
cigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5m
cHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMq
IHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAg
ICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCBi
b29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxNCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENv
ZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0
ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkK
ICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY1LDExIEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQo
b3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMz
Myw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29t
cGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BU
YWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93
Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3
YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4NiwzOSAr
Mzg1LDU0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAg
ICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ug
d2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVs
dGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhl
cmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJ
dGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9y
T3Blbj4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IpID0gU3BlY0hlYXBU
b3A7CisKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0
IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAg
IG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5l
eHRDaGVja3BvaW50U2xvdyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOworICAgICAgICBwcm92ZW5U
eXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKIAogICAgIGZh
c3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRl
cmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93
Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBz
bG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0g
cmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpAQCAtNDU2LDYgKzQ3MCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgp
OwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZl
ZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVz
IHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMu
Li4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwg
cmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nhc2UgPSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsK
IApAQCAtNDc2LDE4ICs0OTUsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOwogCiAgICAgewotICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAg
IEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xvd1BhdGg7CisgICAgICAgIGRvbmVDaGVja3BvaW50
U2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAKLSAgICAg
ICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAg
ICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCk7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKHZhbHVlR1BSKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1l
cy0+bmV4dC5pbXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3Mo
ZG9uZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpT
VmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5h
cHBlbmQoZG9uZUNoZWNrcG9pbnRTbG93UGF0aCk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKTsKICAgICB9CkBAIC00OTksMTEgKzUyMSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRv
bmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKKyAgICAgICAgSnVtcExpc3Qg
dmFsdWVDaGVja3BvaW50U2xvd1BhdGg7CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNs
b3dQYXRoLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1w
cy5hcHBlbmQodmFsdWVDaGVja3BvaW50U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogCiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOwpA
QCAtNTE1LDEwICs1NDAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1NTAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBz
bG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7
CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIp
KTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0
R1BSKSk7CkBAIC01NDgsNyArNTcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMl0ubGluayh0aGlzKTsKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJl
ZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKQEAgLTU2MSw3ICs1ODUsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxs
IHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1OCw2ICsxNTksNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEpOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRo
YXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3
aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNjYsMjUgKzE2OCw2IEBAIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Ci17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5
dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xv
d0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYm
IGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcgKzE4OSwzNiBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5r
VG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNs
b3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dD
YXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAg
bV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxP
TCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2
ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVz
dWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAg
ICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFz
dCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93
Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShj
b25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93
Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
QVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1w
cygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5
dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0u
YXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVt
cExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1h
a2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShl
bXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVt
cExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0
aXZlT2Zmc2V0KQpAQCAtMzA5LDExICszMDEsMTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbgogICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUsIEdQUlJlZyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsK
IAotICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWUgPSByZWdUMDsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKICNlbmRpZgpAQCAt
MzM4LDExICszMjksMTEgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRl
YwogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZSguLi4pIHsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcg
cmVnKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSks
IHJlZyk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlKQpAQCAtMzkzLDExICszODQsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJs
ZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVm
aW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAog
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJl
Z2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4
ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyNCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc3JjLmlzQ29u
c3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNyYykgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5
cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworCisgICAgICAgIG1vdmUoaW5wdXQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkw
LDMyICsxMDgsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgog
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0s
IGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAK
LSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2Nh
dG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAg
R1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBz
Y3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVt
cC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
KyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9y
KQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQo
YWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRl
cmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxp
bmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0
UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3Zl
blR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZElt
bVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEyNSwyMyArMTY0LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVj
dG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9o
YXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5j
ZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3Ry
dWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBP
cHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhh
c0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNv
bnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VU
ZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9y
R1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAg
fQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3Rh
bmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQ
UiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJv
dG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAg
ICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
JyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlv
bi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
dGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJl
c3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNl
VmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTEsNDAgKzIxNyw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAot
ICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3Bl
Y3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFs
IHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1
c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAK
LSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2Vs
bCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFu
Y2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAv
LyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90
bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8
Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsK
KworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsg
KnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAu
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAg
ICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAg
ICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHBy
b3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRU
ZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1w
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0
aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAg
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQor
CisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAg
ICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRj
aDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAg
ICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWws
IHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAg
Ly8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRo
aXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sg
dGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNo
ZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAg
ICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAg
ICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRj
aAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFu
Y2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIs
IGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAt
MTk5LDExICszMTgsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1
YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVv
Zl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTIxMSwyOCArMzQ4LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQo
Y28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklz
VW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBK
dW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBp
ZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgdGVtcEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBi
cmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlu
cHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAg
ICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAg
ICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2Vs
bCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlz
KTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChO
b25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9v
cl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMg
KzQyMiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBy
ZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMjU1LDEyICs0NTYsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJv
LCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFu
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9v
bGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCBpbnB1dEdQUik7CisgICAgICAgICAgICB0ZXN0NjQoWmVybywgaW5wdXRHUFIsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywg
cmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MjY4LDExICs0ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3Ry
dQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1Qw
LCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
dGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQo
Tm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIs
MjEgKzUxNyw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0
R1BSKTsKKworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJN
YXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1h
c2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAg
IGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBl
KSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDAp
OworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJl
Z1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMxMywxOCArNTgzLDQ3IEBAIHZv
aWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5t
X3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsK
KworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTMzMywxOCArNjMyLDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVj
dChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVj
dCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkp
IHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisg
ICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFi
b3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1
ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZh
bHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVj
dFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwog
Ci0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAg
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MzU1LDcgKzY5NywxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1f
dmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAg
ICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIp
OwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcxNiw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19w
cmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3Qo
cmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5T
cGVjUHJpbWl0aXZlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1
ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0
aXZlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdU
MCkpOworICAgICAgICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3Jj
KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIgKzc1OSwyMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVl
LmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1
dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBt
b3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5
cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25O
YW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywg
Ynl0ZWNvZGUubV9uYW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9u
LmdwcigpOworICAgICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9u
TmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlv
bkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFs
dWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBt
b3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KHZhbHVlKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdlIGNvdWxkIGhh
bmRsZSBtb3JlIHN0dWZmIGlubGluZTogc3RyaW5ncywgYml0aW50LCBvYmplY3RzIHRoYXQgYXJl
bid0IG1hc3F1ZXJhZGVyLCBldGMuCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBiZWxvdy4KKyAgICAgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
fQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3
YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xl
YXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNl
IG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlw
IHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShm
YWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0
cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNo
IHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgor
ICAgICAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwg
YWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNv
bnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9
IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVh
bihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
Y29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BS
LCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9
OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2Ny
YXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5n
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVl
R1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBS
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3Rl
eHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29k
ZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0
aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVz
dGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
T09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gx
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAg
ICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0s
IHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAs
NDYgKzk2NCwxMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Ywog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNy
YywgaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAg
ICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2Fz
ZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgor
ICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3Jh
dGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKKworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5r
KHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAg
ICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAor
CisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30K
IAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFu
ZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAK
LQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0
Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmpl
Y3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2Fz
ZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgs
MTAgKzEwOTUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUwMCwxMCArMTEyMywyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE1NCwzMDUgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5p
c0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwo
KSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7
Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3Vs
YXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAgICAgICAgICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAg
ICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVh
bCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIu
YXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgor
dm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVx
Pjo6dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsK
KyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3Vi
bGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0Nv
dWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhz
R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BS
KSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29t
cGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJo
c0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxk
IGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisKKyAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBi
eXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9w
LCBPcEplcT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgYXV0
byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFy
ZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92
ZW5UeXBlKHJocykpKSB7CisgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgIGFkZEp1bXAo
anVtcCgpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAg
ICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNH
UFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5m
cHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUg
Y2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsK
KworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wRXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoRXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJS
ZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1
bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQ
UiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BOZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1w
bDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcg
bGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BS
UmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4
OSw3NCArMTQ2OCwxNTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3Ry
dQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBO
b3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRP
cmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92
ZW5UeXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFs
dWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQo
bGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMp
KSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJl
LgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQot
ICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmlj
dEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAg
ICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAo
cmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdo
dCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0
ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJy
YW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBh
IEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBp
dCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBu
b3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQg
c2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFk
ZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0g
YnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3Ry
aW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhN
RTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEg
QmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0
cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAg
IGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgx
KSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywg
cmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBh
IGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAg
ICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBn
b3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAg
IGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlz
IENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAg
ICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMy
LCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcg
YWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBh
bGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8g
TGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAg
ICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAg
ICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdU
MiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJl
Z1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCBy
ZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7
CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
YXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisg
ICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBk
byBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ug
b25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmlj
dEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMy
KQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncyku
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBl
aXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBp
cyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1w
IGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBp
ZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAg
ICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsK
IAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAg
ICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
b21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5k
aWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE2MjksMTM1IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1
dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBD
b21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShs
aHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAg
ICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAg
ICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBk
byBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0
cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFw
QmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50
MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMp
KSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
ZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUu
CisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyog
QXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgot
ICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290byBz
bG93UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwotICAg
IGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQYXRo
OwotICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1w
bGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmds
ZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQg
aWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAg
Ly8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBv
bmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVx
dWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdU
Myk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJl
Z1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7
Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwg
cmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJl
Z1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdU
MSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAg
ICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIg
c3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBG
SVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlz
IGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJl
IHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJl
IFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJs
ZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQp
CisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmln
aHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RU
YWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMg
KGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNo
IGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVz
ZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMg
dGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdp
bGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAg
Ly8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBv
bmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBv
ciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3Zl
KHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2Vz
dE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAg
ICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigx
KSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVt
cCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRk
SnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Cisg
ICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBz
dHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAg
ICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0
aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBi
b3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFy
ZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIp
Ci0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4K
LSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVp
dGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlz
IGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAg
bGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBz
bG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShy
ZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBl
aXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBp
cyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAg
ICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOwor
ICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRo
aXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVx
KQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFy
Z2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC03NDgsODkgKzE3NzAsMjE3IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmlj
dGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVn
IHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAg
fQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQo
cmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAg
ICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBh
dXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNw
ZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAg
ICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAg
ICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3Qp
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9i
amVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6
IGRlYWwgd2l0aCB0aGlzLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDM4LDIz
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBl
bWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92
ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwu
CisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07Cisg
ICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0
KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTkwNSw5ICsyMDY5LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9p
bW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRp
YXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJl
Z1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0
clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlu
cHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIwOTQsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwg
U3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxl
KCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRp
bmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFy
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTkzOCw5MyArMjExOCwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJs
ZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
Y3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAg
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsKICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRl
YnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1
ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tU
eXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBz
dGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBp
c0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBh
cmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
MCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwor
ICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1
bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6
IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJl
Z1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7
Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3
YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJ
bXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7
Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUg
aGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBF
dmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3Rh
bnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5l
Y2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNp
bmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMo
KTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0
SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVf
dCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRl
ZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMjY5LDIzIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwot
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBy
ZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1
LDEzICsyMjkzLDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1
Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCBy
ZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Owor
ICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
c3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1
cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNy
Y0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
c3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7Cisg
ICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHBy
b3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlz
U3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVu
VHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdl
J3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAg
ICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3Jj
RHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyBy
aWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1Qx
LCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1Qy
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShz
cmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdU
MSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwg
cmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzNzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29k
ZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5t
X2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJl
Z2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyArMjM4NCwzMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNo
ZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1Qz
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0Owor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMs
IGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJU
ZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNh
bGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3By
KCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1w
NC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOwor
ICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURh
dGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBA
IC0xMDg2LDY0ICsyNDI2LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2No
ZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlciwg
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0v
LyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVz
dGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHBy
b3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkp
OworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wg
c2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
Q3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2NCw2ICsy
NDczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogewogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJv
bUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVs
aWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFy
IHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAg
IHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVj
dGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFy
bHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjpl
YXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjQ5Nywx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBm
b3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGlt
aXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1MTQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAg
ICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1p
dEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9P
UFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0
b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjU0MCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1
cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NTAsMTggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNv
ZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjU3MSw0MiBAQCB2b2lkIEpJ
VDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAg
ICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAo
IXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVH
UFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJs
b2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2MzUsNDUgQEAgdm9p
ZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUp
OworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsK
KyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
ID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24p
OwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1
bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAK
QEAgLTEzNDksOSArMjcwNCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3Qg
SW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6
ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBh
cmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0
aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAg
IH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzI1LDI2IEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5
dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEu
bV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAg
ICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUlu
ZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQog
CkBAIC0xMzgxLDE1ICsyNzU4LDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVt
ZXJhdG9yIH07CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVl
LmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9w
ZXJhbmQ+IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAg
ICAgYmFzZUNlbGwuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0g
YmFzZUNlbGwtPmdwcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisg
ICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSkpOworICAgICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE0MDksNiArMjgxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0
eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUpCiB7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OwpAQCAtMTQzNiw2ICsyODQxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhl
ZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAv
LyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4NjgsMTUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBt
b2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5
TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVK
dW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMjg4NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAg
ICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbklu
Zm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwg
bW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJ
bmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
bmV4dEhvdFBhdGgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTE1LDkyIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEg
Y2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0
aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRo
aXMsIGluZGV4IH07CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAgR1BSUmVn
IGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBp
bmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFI7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpIHsKKyAgICAgICAgICAgIGJhc2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VDZWxsLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAg
IGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAg
Ly8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
cmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1w
IG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7
Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7
Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAvLyBDaGVjayB0aGUgc3Ry
dWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIp
OworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKwor
ICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQg
aW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIs
IFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
T3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
dGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVn
VDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5r
KHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEp
OworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qx
LCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAg
ICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiAKLSAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTU1MCwyMSArMzAxMCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBp
bmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50
MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVt
ZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9y
R1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRU
ZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9y
R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJh
dG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93
LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0Vp
Z2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwg
cmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICsz
MDY0LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywg
cmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRl
bXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRl
bXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNl
KCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIg
PSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRl
bXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisK
KyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5
SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAg
ICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVu
ZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVz
dWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTU5OCw2ICszMTE4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmls
ZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0g
bWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9m
aWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1Qw
KTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE4MCw5IEBAIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKwor
ICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3Rh
dGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3
ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigp
OwpAQCAtMTY3Miw2ICszMTk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2
bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0
ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAm
JiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMg
dHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExv
Z1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTcwMiwxMSArMzIzMCwyMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVl
UmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihy
ZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwor
ICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJl
Z3MocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjUxLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9yZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1f
bnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhh
bk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0z
MihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9
IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1Nr
aXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3Vi
MzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMy
KHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmso
dGhpcyk7CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBy
ZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJl
cigwKSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzMzMDAsOTkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAg
ICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVk
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwg
cmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0
T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
aW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAg
IG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Cisg
ICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90
eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7
CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hH
UFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09
IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dD
YXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90
b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7Cisg
ICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCAr
Mjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxl
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
ICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAg
LTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBU
aGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIg
c3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNv
cGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0
Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKQEAgLTUxLDQ5ICs1
MywxMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgaW5kZXhpbmdU
eXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9w
ZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVzdWx0R1BS
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGluZGV4
aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNv
dW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0g
ICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAg
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAg
ICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2Zp
bGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9m
aWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3Bl
Y0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJ
bnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQor
ICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsK
KyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVy
KSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAg
ICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDIsMzkgKzE2OSw3MyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0g
ICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7Cisg
ICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChw
cm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0
ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hl
YXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTIsNiArMjUzLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2Fs
bCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE0LDggKzQxNywxMSBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMu
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7
CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1
dEtpbmQsIHByaXZhdGVGaWVsZEFjY2Vzc0tpbmQoYnl0ZWNvZGUpKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM0LDcgKzQ0MCw3IEBA
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2Vu
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArNDQ4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsK
ICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8g
bG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRv
IGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMzUwLDEzICs0NTYsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0
U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBl
bHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsK
KyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsK
IAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM3Miw0OSArNDc3LDEwNSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0g
ICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3Nv
ciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BS
ID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwor
ICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IGF0
dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9Owor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBnZXR0
ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0ZXIu
Z3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5t
X2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIs
IGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVy
dHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1f
YWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFj
Y2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0
ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNDI0LDE4ICs1ODUsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2g7
CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
IAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVy
IGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdp
c3RlcnMuCkBAIC00NDQsMjUgKzYzOSwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJ
ZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0Lmdwcigp
OworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDcyLDE5ICs2NjksNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVl
OworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBw
cm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5R1BS
ID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0
eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBu
ZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAg
LTQ5MywyMTMgKzc0MSwzNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFs
dWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BS
UmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nl
c3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRH
UFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
RGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZS
ZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAg
ICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRh
ZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAg
ICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVnVDE7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGlu
Z1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQ
cm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSwgdGhpc1ZSZWcpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdp
c3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7
CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNl
R1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJl
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dl
dEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNX
aXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcg
PSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8v
IHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUg
ZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2
YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVl
R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2
YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0
ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IERp
cmVjdCA6IE5vdERpcmVjdCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29kZSkpOwogICAg
IAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTcwOSw3NyArMTExMCw5NSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2Fu
IHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBj
ZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNl
bGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0
aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNr
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJl
ZyByZXN1bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAg
ICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+
YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVw
dGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRl
QWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9p
bnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJl
c3VsdEdQUiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzkxLDE3ICsxMjEwLDI1IEBA
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVw
dGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVn
VDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCgpKSwgcmVzdWx0R1BSKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCkBAIC04MTEsMjEgKzEyMzgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVn
VDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNv
bnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2Nv
cGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAg
ICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBP
cHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29w
ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3Bl
VmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
c2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7
ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwg
cmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTgzOCw5ICsx
MjgwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC04
NTMsMjkgKzEyOTUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04ODQsMTUgKzEzMjYsMjAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6
OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQ
UlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1
cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJl
U2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBz
Y3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihK
U1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTA2LDEyICsxMzUzLDYgQEAgdm9pZCBK
SVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcp
OwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVn
VDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTIyLDUxICsxMzYzLDg0IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1Qw
OwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVn
IG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAg
IE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUp
OworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BS
ID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAg
aml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJh
bmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRH
UFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1w
IGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRy
dXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0
V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNP
dXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihv
ZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9m
ZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZz
ZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQ
Uiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCks
IHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFy
KHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtOTgwLDEw
ICsxNDU0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQ
Uik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
c3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNO
b3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAKQEAgLTk5NiwyNyArMTQ3MCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2
ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAg
ICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0xMDI2LDQwICsxNTAwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFu
ZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
IGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFu
ZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3Jl
UHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNzMsMjIgKzE1MjksNTEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7
CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1
ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwg
c3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZh
bHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAg
ICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBH
UFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1Qw
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1
dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAg
ICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5k
U2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOworICAgICAg
ICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9mZnNldEdQ
UiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0x
MDk4LDI4ICsxNTgzLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAg
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
ICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxp
emF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8g
YSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRv
IGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAgICAgIGlmIChpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFk
YXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGxv
YWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGxvYWRQ
dHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9j
YXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBz
Y29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2Nv
cGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVy
YW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5h
bWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAgLTExMzQsMTIgKzE2NDgs
MjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUg
aW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNp
bmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3Jh
dGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQ
Uik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAg
ICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOworICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZh
bHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KIAogICAgICAgICBpc0ds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTExNTMsMjMgKzE2NzYsMzIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgp
OyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBh
bGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkg
ZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQog
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlz
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKQEAg
LTExODYsMTAgKzE3MTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
Y29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1LDYxICsxNzM1LDE1MSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29k
ZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVt
cGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAg
IH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwot
ICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1
bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRl
Y29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAs
IERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1
bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAg
R1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7
CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBhcmd1
bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFs
dWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVn
VDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0b3JlNjQodmFsdWVH
UFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVz
ZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICAvLyB2YWx1ZSBt
YXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2
YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1
ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFs
dWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IG93bmVyVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQ
UjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
b3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzLCBvd25lcik7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgfQogICAgIEp1
bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVzZUxP
TCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG93
bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgs
ICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMp
OworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3Jk
PiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8gbmVl
ZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50
U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNv
cmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
dGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5vdENl
bGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1Nl
dCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhp
cywgdmFsdWUpOworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxs
KSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7
CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAg
ICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzODUsOCArMjAwNSwyNSBA
QCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1
bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQ
Uik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxs
UmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBz
aWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRl
QmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdp
c3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4g
bV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyBy
ZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNz
ZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgp
CiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRo
aXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2Fs
bCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5t
X2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkK
ICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2Vi
QXNzZW1ibHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQy
NDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVBy
b2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3Vz
dG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAog
ZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415481</attachid>
            <date>2020-12-04 19:45:31 -0800</date>
            <delta_ts>2020-12-07 15:58:27 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>422410</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3Ry
dWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5p
bmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAg
ICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAg
Y29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5k
ZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkp
LCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25z
LmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3Vs
YXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewogICAgICAgICAgICAgYXV0byYg
Y3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkgKyBibG9jay5sZWFkZXJPZmZz
ZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlv
biwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NyArMTA2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29k
ZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxCbG9jaz4gewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVt
cEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
T3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rp
b25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmls
ZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKIAogICAgIHZvaWQgZHVt
cElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlv
bmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwg
UHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCisgICAgdm9pZCBkdW1wKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNw
ZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkK
ICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9ja1R5cGU+Ojpk
dW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVh
ZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMz
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElDU3Rh
dHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAgIEJ5
dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENvZGVC
bG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlv
bnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6
Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwg
Y29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTExLDYg
KzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0
aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUlu
ZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVl
UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0
IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hB
cnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVBy
b2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFs
c2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJlRGF0
YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0
IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2ZpbGVC
dWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMzQsNyAr
MTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVt
IE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgogY2xhc3Mg
T3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFs
X3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGljOgogCiAg
ICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3Qg
bnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXpl
X3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9udW1Bcmd1
bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAg
ICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIHNp
emVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVt
VG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAg
ICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAg
ICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFu
ZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMs
IGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVt
QXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNv
bnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRz
KG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAg
ICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1
ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBz
ICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsK
ICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE9w
ZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBU
JiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVt
YmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxv
Y2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29uc3RhbnRz
KCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAgICAgICAg
IG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBAIHB1Ymxp
YzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
QXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX251bUNv
bnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51
bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9v
bCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2Fs
bGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRleChzaXpl
X3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygp
KTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXplX3QgYXJn
dW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8
IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KLSAgICAK
ICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVtYmVyT2ZB
cmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90
IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNvbnN0YW50
cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJu
IG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAogICAg
IFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0
ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRy
YWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3Qo
KTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxsZWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBlIGxvY2Fs
KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICBD
b25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9j
YWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGNv
bnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgo
aWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAg
ICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
VG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxl
ZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2Fscygp
OwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBt
X3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUo
KTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFj
a0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAg
ICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVk
c0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAogICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQo
KSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
YWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVy
YW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5k
LnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0
KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3Bl
cmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygpOwogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1i
ZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29u
c3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4
IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChpbmRl
eCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICBpZiAo
aW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1l
bnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkK
KyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRleCAtIG51
bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxlZUluZGV4
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXgg
LSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0
YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQz
NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3Zh
bHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUg
bmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMu
CiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAg
fTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNv
bnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3Rlcigp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFj
a0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChz
aXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgt
LTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0
KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQp
KTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRleHQpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+
Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBA
IC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0
bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0
cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxs
ZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxhdGlv
bihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5
KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRl
Y29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihTcGVj
dWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJ
bnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8v
IFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNh
bGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUg
Y29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1
YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7
IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAgYm9v
bCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92
aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29s
IGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQo
aXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpA
QCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2Nh
bChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBv
cGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVy
YW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQgY29u
c3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFu
dEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEz
NSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJn
dW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJbmRl
eCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAgICAg
LCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2
YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBpbnRl
cnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZh
bHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJn
dW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
OSArMzAsMTEgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGgu
aCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmls
aXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTYwLDYgKzYyLDgzNCBAQCBTZWNvbmRz
IHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBT
ZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1
Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlw
ZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisK
KyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBl
IHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsK
KworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNv
ZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFj
aWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQg
cmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBh
dXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVk
VHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFu
ZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAg
IGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlf
dmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4b3I6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJp
dHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUu
bV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFkYXRh
Lm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBz
ZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVjdGlv
bi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdz
OgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0
KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAm
JiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShs
ZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4p
KQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIK
KyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxh
dGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJ
bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJp
bmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmpl
Y3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAv
LyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9z
dWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8g
Ynl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdo
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3co
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0g
b3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVj
Qnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5v
bk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAg
ICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJl
TmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBw
cm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKworICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAg
aGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVj
dGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAg
aWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0
cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkg
fCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIg
fCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNp
Z25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBm
ZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50
QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoK
KyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHBy
b2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMp
OworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBTcGVjSW50MzJPbmx5OworICAgICAgICAgICAgICAgIGlmIChwcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCB8PSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYg
KGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAg
ICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlv
bihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisK
KyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAg
ICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxl
KGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0
ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAm
JiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6
CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8g
Ynl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9s
aHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOwor
ICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0
aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShp
bnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3Io
Ynl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1
dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNw
ZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZm
ZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAg
ICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3Vs
ZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlm
IHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAg
ICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0
aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAg
ICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
JiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9m
aWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAg
ICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFs
T2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAg
ICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVk
IHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJl
c29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
VGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
bl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9t
aXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+
KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJj
YXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0
b3JGdW5jRXhwPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4
cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3Jf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JG
dW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19n
ZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVj
RnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0
b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5
bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Nj
b3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9l
bnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVy
dHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1
Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5T
dHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0Nl
bGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3Bu
YW1lOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3Bl
Y1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5k
ZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhT
dHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9y
ZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0
TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9y
ZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNs
SW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3Bl
Y1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0Nl
bGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21p
c2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5l
cmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNH
ZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmlu
Zz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmls
ZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxT
cGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0
PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
aXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxs
YWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAg
IGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAg
IGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3By
b2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBv
cF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoK
KyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5j
dGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9k
ZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0
eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3Bf
anRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBj
YXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBj
YXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBv
cF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToK
KyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pn
cmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAg
ICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bf
am5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToK
KyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNl
IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAg
IGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9w
X3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ug
b3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAg
IGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFs
X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAg
Y2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1
bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAg
ICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToK
KyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgor
ICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5l
OgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6
emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0
RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Ns
b3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5j
dGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVu
UHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVl
PEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkp
OworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQor
ICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUs
IHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxs
ZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9j
ay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkg
eworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
KyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxv
Y2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikg
eworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAg
ICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZv
ckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQo
YXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBT
cGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1l
bnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAg
ICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBE
RlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIg
aW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgor
ICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQg
YXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBP
T1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYg
d2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRl
Y29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVu
dFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAg
ICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2so
KSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3Rh
bExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChpICsgYmxv
Y2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlcklu
c3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGkgKz0g
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nl
c3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9w
cmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tp
XSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dl
ZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBt
X2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30KKwogSklUOjpK
SVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAg
ICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEyLDcgQEAgSklU
OjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0
UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxP
TCgpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTQwLDYgKzk3Nyw3IEBAIHZvaWQgSklUOjphc3Nl
cnRTdGFja1BvaW50ZXJPZmZzZXQoKQogI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCiAg
ICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0
YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAg
ICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOyBcCiAgICAgICAgIH0gXApAQCAtMTU2LDI2ICs5OTQsMzIgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUp
IFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9
CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3Bf
IyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBpZiAodXNlTE9M
KCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNs
b3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xv
d0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAog
ICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxu
Iik7CiAgICAgCkBAIC0yMzEsNyArMTA3NSw3MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAw
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0
cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFw
aC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUo
KSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAg
aWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXgg
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNz
b3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRl
eCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGZvciAobV9ieXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwg
aW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgaWYgKCFtX2N1cnJlbnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1f
Y3VycmVudEJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0
aCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5p
bmRleCgpXSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9j
ay0+aW5kZXgoKV0gPSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9m
ZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2Nr
LT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byYgcHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tz
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJl
ZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0
RW5kW3ByZWRlY2Vzc29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQ
cmVkZWNlc3NvcnNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3Mg
PSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAq
bV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9
IHByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50U3RhdGUubWVyZ2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JC
bG9ja3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2st
PmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBl
cy5udW1iZXJPZkNvbnN0YW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21W
YWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQo
aSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVz
LmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4obV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAw
LCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9j
dXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5p
bmRleCgpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVkIHBy
ZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKICAgICAgICAgaWYgKG1f
Ynl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4
Lm9mZnNldCgpID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29k
ZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCkBAIC00NzcsNiAr
MTM4NywxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYg
KCFtX2NoZWNrZWRVc2VMT0wpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNr
IExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICB9CisgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9
IGZhbHNlOworCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6
OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjog
IiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTUsMTIgKzE0MzMsMTQg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQ
cm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBp
dGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsK
LSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYg
c2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93
Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAg
ICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNs
b3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZp
cnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVj
b2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKQEAgLTU3OSw3ICsxNDk5LDYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX25lcSkKQEAgLTU5Nyw2ICsxNTE2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRv
cl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAor
I2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNl
bHNlCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCisjZW5kaWYKKwogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBA
IC02MzMsMTUgKzE1NTgsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJB
dCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4i
KTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSkt
PnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2Vu
LiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRl
ci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29k
ZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5v
ZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtl
ZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29s
dXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5
IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2U7CiAgICAgfQpAQCAtNzc0LDYgKzE3MDIsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVX
aXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZT
bG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJ
dGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4o
KSk7CiAKKyAgICAvLyBPT1BTOiBpbXBsZW1lbnQgT1NSIGV4aXQuCisgICAgeworICAgICAgICBm
b3IgKGF1dG8ganVtcCA6IG1fZXhpdEp1bXBzKQorICAgICAgICAgICAganVtcC5saW5rKHRoaXMp
OworICAgICAgICBicmVha3BvaW50KCk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5r
KHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsxOTkzLDY1MiBAQCBT
ZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxp
bmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1l
OwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIG1f
ZXhpdEp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IGp1bXAgfSk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHBy
b2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09Q
UzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxv
d2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENh
bGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAg
ICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2Fs
bGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVn
KSkKKyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxv
d2VkOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNl
dD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2Vk
RlBScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2Ug
YWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUg
aW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBs
aWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKwor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5
LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUklu
Zm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklU
Ojphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICBpZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1f
c2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7
CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAg
ICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAg
ICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
cmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYg
KCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUg
eyB9OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAg
ICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8g
YWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICByZWdWYWx1ZSA9IFJlZ1ZhbHVlIHsgfTsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnBy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBh
ZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRo
ZSBtYXAgYWdyZWUuCisKKyAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlKHJlZykub3BlcmFuZDsKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BS
KCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0g
SW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2Vk
UmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9Cisg
ICAgfQorICAgIHJlZ1ZhbHVlKHJlZykgPSBSZWdWYWx1ZSB7IH07CisKK30KKwordm9pZCBKSVQ6
OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsm
XSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAg
ICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2Ji
ZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRH
UFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklU
OjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90
IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0g
WyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJh
bmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihy
ZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJl
Zm9yZUNhbGwoKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisg
ICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAg
IGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxv
Y2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywg
cmVnVmFsdWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
c3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZO
ZWVkZWQocmVnKTsKKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVz
dWx0LnNwaWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
SklUOjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQp
Cit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0
YWNrU2l6ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCByZWNv
cmQuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgdG9J
Z25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIg
OiBzYXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSB0
b0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigp
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hS
ZWdpc3RlcigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNj
cmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2Ny
YXRjaCk7CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnBy
KCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNh
dmVQbGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJ
VDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAg
Ly8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwg
SlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIs
IGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdw
cjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAgICByZWdWYWx1
ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07Cisg
ICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVl
UmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVz
c0ZvcihvcGVyYW5kKSk7CisKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBhc3Np
Z25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0
ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwciku
aXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAg
ICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykK
K3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50
OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0t
cmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdW
YWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJ
VDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChq
aXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQp
OworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIo
aGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisK
K0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBS
VGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVn
IEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykK
KyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIp
OworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51
bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYg
aml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIo
KTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sK
KyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOwor
CisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9v
cGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5k
KTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNw
ZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNw
ZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBt
X2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJ
VDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dw
ciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIp
OworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAg
ICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisg
ICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0
LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBl
LCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAg
IG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1f
aml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
bV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVy
YW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJz
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
Z3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6Omdwcigp
Cit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dw
cjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3By
ID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIs
IG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJu
IG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOwor
fQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQorewor
ICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyBy
ZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0g
SW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBt
X2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5k
IH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVP
cGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1f
ZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAg
IGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVy
YW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBt
X2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdElu
dDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9q
aXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisg
ICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5h
c3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1Jl
Z2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdp
c3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7
CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVk
KHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3Ry
aW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAg
aWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sK
KyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sK
KyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7Cisg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdz
IHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
T2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7Cisg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJ
bnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFs
c2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1
c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAg
ICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVj
SGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hl
YXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0lu
dDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNlCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgor
I2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBl
bnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdy
YXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAg
Y2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4
IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAg
ICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0
dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAg
IFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJz
OworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3Ry
dWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
IHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFs
bHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNh
biBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBz
YXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhp
cyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBv
cHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAg
ICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5OCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rp
b24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50
ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBK
SVRTdHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0
Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAv
LyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBh
cyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdp
bGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBm
aXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQ
dXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZN
JiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYg
KzI3NCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
UGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisg
ICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgp
OworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAg
IHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VM
T0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAg
ICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJv
bSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBw
ZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAg
ICAgICB7CkBAIC0zMDAsOSArMzI1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7
Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9p
ZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
ICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAg
ICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVy
IGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFk
ZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1Rv
SG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNTQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBD
YWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYp
OwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQo
Y29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBl
bnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21w
aWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxl
T3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBT
bG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAg
CiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUgfTsKQEAgLTM1MCw4ICszNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBh
bmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCi0gICAg
ICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShN
ZXRhZGF0YSYpOworICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9m
aWxlJiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnIHZh
bHVlID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKC4uLik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJv
ZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDggKzUwMiw4IEBAIG5h
bWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25z
dCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwx
MSArNTExLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwog
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJh
dGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9u
Kik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+
CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAg
IHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0
b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTUxMiw5ICs1NDgsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKQEAgLTY0Myw3NyArNjc5LDgxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0
cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3Nl
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVt
aXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZv
aWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1p
dFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9p
ZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBi
b29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihj
b25zdCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1p
dFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFs
aWRHUFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVz
b2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZv
aWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRW
YXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpA
QCAtNzI4LDggKzc2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENs
b3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5p
dFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAg
ICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIs
MzggKzc4MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFz
dChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmls
ZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rp
b24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93
KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93
Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElD
U2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsK
KyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+Kiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5j
dGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xv
d0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9p
ZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dD
YXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+
ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkp
OwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dD
YXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxS
ZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgo
VmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0K
LSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+
JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMK
KyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNv
ZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQog
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsg
cmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9w
YWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAg
ICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkz
NSw2ICs5NTYsMjMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmls
ZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBo
aW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQm
IG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAg
ICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAg
ICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8g
T25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRo
aW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAg
ICAgICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVn
IG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
b3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAg
ICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
Y2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVP
cGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1
ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAg
ICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnBy
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYg
cHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5k
KSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisg
ICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2Vk
UmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAg
c3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWdd
OworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVn
XTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3Jl
Z107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFu
ZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9w
ZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3Bl
cmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9
IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Io
b3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1i
b2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNP
dGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJv
b2wgdXNlTE9MKCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVP
dGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShF
eGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50
IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFs
bG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBh
bGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BS
UmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOwor
ICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BT
OiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdl
dCB0byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9j
ayhSZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNp
bGVudFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2b2lkIHNp
bGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9p
ZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAg
ICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxS
ZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyArMTE5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggbV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93
Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAg
ICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1h
cDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTIz
Niw3NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJ
bmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0
ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0
IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJv
eGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUg
c2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZv
aWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisg
ICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsg
MCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAg
ICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAg
ICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAg
ICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAg
ICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3Ry
dWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAg
ICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3Bl
cmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsK
KyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsK
KworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBv
dGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
b3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAg
ICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNp
emUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJn
ZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisg
ICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJz
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3Rl
cnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShv
dGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAg
IEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJy
ZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKworICAgICAgICBWZWN0b3I8
TG9nRW50cnk+IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0
ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJl
ZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBi
b29sIG1fY2hlY2tlZFVzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxKdW1wTGlzdD4g
bV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDgyICs0Niw4MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1Ro
YW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExl
c3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRP
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdy
ZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91
YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
bk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9y
ZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNz
VGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZh
bHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFs
c2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVl
LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5v
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTYw
LDIzICsxNjAsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Ywog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRp
b24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwg
ZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGlt
bWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQg
aW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50
IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihj
b25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNv
bmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIo
KTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlv
biA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDI1ICszMDUsMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09Q
RVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0
aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEs
IG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwg
aW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9u
LCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9u
LCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQ
Uik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9u
WmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47
CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dp
bmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJl
ciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRp
YXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVt
YmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
YXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3Vt
ZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
KTsKQEAgLTI5OSw4ICszNDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJl
cihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpA
QCAtMzI1LDggKzM2NCw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5n
UG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0z
NTAsMTIgKzM4NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExI
UyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAg
ICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAg
ZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAg
ICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJl
clRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJl
Z1QwKTsKQEAgLTM2OCw5ICs0MDQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmso
dGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhp
cyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4K
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQpAQCAtNDA2LDQxICs0NDIsOTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0
IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVj
dGlvbnMuCi0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRv
IGVheCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjpl
ZHg7CiAgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAg
PT0gZWF4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0g
ZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1w
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAg
ICAgY2xvYmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7Cisg
ICAgICAgIGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBs
YWNlKCp0aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhU
ZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4
VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3By
KCkgPT0gZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAg
ICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVt
cC0+Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAg
ICAgICBlbnN1cmVTbG93Q2FzZShlYXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGxocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMsIGxoc0dQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNH
UFIpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzIocmhzLCByaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKworICAgICAgICBtb3ZlKGxoc0dQ
UiwgZWF4KTsKKyAgICAgICAgbW92ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbGhzR1BSID0gcmVnVDQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywg
bGhzR1BSLCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNH
UFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICAgICAgbW92
ZShsaHNHUFIsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9taW5hdG9y
Tm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgz
NjQ3LTEpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1c3RlZElt
bTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7
CiAgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4KTsKLSAg
ICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBy
ZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJh
bmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0
aXZlLmxpbmsodGhpcyk7Ci0gICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKLX0KKyAgICBib3hJbnQzMihl
ZHgsIEpTVmFsdWVSZWdzIHsgZWF4IH0pOwogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgZWF4KTsKKyAgICAgICAgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0ludDMyT25seSkgJiYgaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCeXRlY29kZU51bWJlcikp
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0Jp
Z0ludCkgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQmlnSW50
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCaWdJbnQ7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNw
ZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBlYXgpOwogfQogCiAjZWxzZSAvLyBDUFUoWDg2XzY0KQpAQCAtNDUxLDcgKzUzNyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOwogfQpAQCAtNDYzLDcgKzU0OSw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91Ymxl
Q29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5v
dEludDMyT3AyOwpAQCAtNDczLDYgKzU1OSw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCBy
ZWdUMCk7CkBAIC01NjEsMTUgKzY0OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJs
ZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9
IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChv
cDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTMgKzgwOCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5l
Z2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQs
IG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJp
dHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudElu
c3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRo
b3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJ
bnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0
aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNzgzLDkgKzg2NiwzNSBA
QCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0SXNJ
bnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgewor
ICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxhdGVJ
bnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3VsdEdQ
Uik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAocmVz
dWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7
IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJP
bmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwog
I2Vsc2UKQEAgLTgwMiw3ICs5MTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3Qg
SW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShi
eXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3Mp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtOTAxLDE4ICsxMDEwLDU0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3Qg
SW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJ
VEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAg
ICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVt
cCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCks
IGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhz
LmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIu
ZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBtb3ZlKGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVy
ZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQz
MihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRk
SUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAg
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElD
KiBhZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5n
ZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7Cisg
ICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwg
dHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTkyMywxNSArMTA2OCwzNSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMg
c3JjIGFuZCBkc3QuCi0gICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVn
VDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KLSAgICBK
U1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHNyY1RlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzcmNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wZXJhbmQpOworICAgICAgICByZXN1bHRUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzcmNUZW1wLT5ncHIoKSB9OworICAgICAgICBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3Jj
IGFuZCBkc3QuCisgICAgICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJl
Z1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCisgICAg
ICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKKyAgICB9CiAjZWxzZQog
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kLCBzcmNSZWdzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBA
IC05NDAsMTkgKzExMDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0
aElDPAogCiAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBz
cmNSZWdzLCBzY3JhdGNoR1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCwgc3JjUmVncyk7Ci0KICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwog
CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgq
dGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNv
ZGUpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICAgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Q
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVz
dWx0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChzcmNSZWdzLmdwcigpKTsK
ICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMp
OworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5k
ID0gbGFiZWwoKTsKQEAgLTk2Miw3ICsxMTMwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRVbmFyeU1hdGhJQzwKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3MywxMiArMTE0NSwyOSBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOwor
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IHNjcmF0Y2hUZW1wRlA7CisKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC05ODcsMjUgKzExNzYsNDAgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAg
ICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAt
PmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudElu
dChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAg
ICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07
CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDIpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwog
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVy
YW5kLmlzQ29uc3QoKSk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFs
aWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJh
bmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJh
dG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hG
UFIpOwogICAgIAogICAgIEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29u
c3RhbnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpKTsKICAgICAKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3Bl
cmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBh
dXRvIGlubGluZVN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgpAQCAtMTAxNCwxNyArMTIxOCwzNCBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAKICAgICBib29sIGdl
bmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAg
ICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBv
cDEpOworICAgICAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkg
eworICAgICAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAg
ICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIH0KKwogICAgICAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7
CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MpOwotICAgIH0gZWxzZQotICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOworICAgICAgICBhZGRTbG93Q2Fz
ZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcywgcmVzdWx0UmVncy5ncHIoKSwg
cmVzdWx0KTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlu
bGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM0LDExICsxMjU1LDE4IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBS
ZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0
aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24g
cHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3Vy
cmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA0Nyw4ICsxMjc1LDggQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mgc3Jj
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vsc2UKICAg
ICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTEw
ODQsNyArMTMxMiw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24s
IFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0
Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUu
ZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDk1LDkgKzEzMjMsOSBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
IHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7CkBAIC0xMTE0LDEwICsxMzQyLDE3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUMKIAogICAgIEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRW
YWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKIAotICAgIGlmIChHZW5lcmF0b3I6OmlzTGVm
dE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICBpZiAoR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0UmVncy5ncHIoKSA9
PSByZWdUMSA/IHJlZ1QzIDogcmVnVDEgfTsKKyNlbmRpZgogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCisgICAgfSBlbHNlIGlmIChHZW5l
cmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRS
ZWdzLmdwcigpID09IHJlZ1QyID8gcmVnVDQgOiByZWdUMiB9OworI2VuZGlmCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0x
MTU1LDIzICsxMzkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9u
KgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0K
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYg
KHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5k
VHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4NywyNyArMTQwNSw5MiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVy
YW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91
YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFT
RV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBs
ZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlv
bmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1w
RlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhp
cywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAg
IHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBs
ZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigp
IH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9
OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3Jh
dGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVt
cEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIg
PSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIg
PSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYg
KCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJS
ZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOwor
ICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
ICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERp
dkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwg
c2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAg
ICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3Qo
KS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHko
KSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAg
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQpAQCAtMTIxNSwzNCArMTQ5OCwxMDMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRN
dWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBC
aW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2Jz
ZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAg
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1
bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0
S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIo
KSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3
aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNT
bG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
TXVsT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0g
bV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAg
ICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVt
cCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCks
IGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhz
LmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShsaHNGUFIu
ZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3Zl
cmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3Vi
PihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wU3Vi
PihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1p
emUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVO
RDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2
YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAg
ICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yMTYsNiAr
MjE0LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAg
ICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENh
bGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KKwor
ICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsK
ICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAgICAgICBpbmZvID0gbV9jb2Rl
QmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwpAQCAt
MjY0LDEzICsyNjUsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBT
bG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2
YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzMzLDQ0IEBAIHZvaWQgSklUOjplbWl0
X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7Cisg
ICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7
CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENh
bGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0
cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDM5ICszODUsNTQgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAg
IC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBs
ZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFj
aCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3Vy
ZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2Fs
bCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlv
biwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAg
ZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMp
KSk7CiAKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5
cGUoYnl0ZWNvZGUubV9pdGVyYXRvcikgPSBTcGVjSGVhcFRvcDsKKwogICAgIGFkdmFuY2VUb05l
eHRDaGVja3BvaW50KCk7CiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdU
MAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5u
ZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAg
ICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFw
cGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVj
a3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
ZXh0KTsKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENoZWNrcG9pbnRTbG93KTsKKwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNv
ZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0K
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmso
dGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBu
b3RPYmplY3Q7CkBAIC00NTYsNiArNDcwLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwo
KTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2
ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3Bv
aW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5l
cmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMTggKzQ5NSwyMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1
ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9p
bnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2
ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAg
ICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRS
ZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJl
Z2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJl
c2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0LmltcGwoKSksIEpTVmFs
dWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBs
KCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVD
aGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNs
b3dQYXRoKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25l
R1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KQEAgLTQ5
OSwxMSArNTIxLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4K
ICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBm
YWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0
aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9p
bnRTbG93UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKICAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CkBAIC01MTUsMTAgKzU0MCw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1
bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JO
ZXh0PigpOwpAQCAtNTI2LDcgKzU1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUu
bV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmso
dGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3Qu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzIs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAg
ICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2Fz
ZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVn
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdU
MDsKIApAQCAtNTYxLDcgKzU4NSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYg
KzE0NSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAv
LyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRo
IGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAt
MTU4LDYgKzE1OSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoK
IHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7
CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZh
c3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vs
c2UKQEAgLTE2NiwyNSArMTY4LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNs
b3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAh
PSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlT
bG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsK
LSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJ
bmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxp
bmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQiKTsKQEAgLTIwNiwyNyArMTg5LDM2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FM
V0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAg
IGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUlu
ZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbV9zbG93
Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBtX3Nsb3dD
YXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCku
ZHN0ID0gZHN0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5kKEp1bXBM
aXN0IHsgfSk7CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlz
dCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJl
c3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4
KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZv
ciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVt
cHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAg
IG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUlu
ZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0
KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAg
ICBzbG93Q2FzZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEg
KzMwMSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAg
cmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJp
bmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0
aCgpID09IDE7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewog
ICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJ
RCB2YWx1ZSA9IHJlZ1QwOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0
ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwogI2VuZGlmCkBAIC0zMzgsMTEgKzMyOSwxMSBAQCBpbmxp
bmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJiBtZXRhZGF0YSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFk
YXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBS
ZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0z
OTMsMTEgKzM4NCw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0
KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihj
b25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJh
bmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMu
aXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIg
KzExMSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxs
b2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxs
b2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JS
ZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJS
ZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0
Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1w
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5n
cHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAg
ICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwg
cmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAg
ICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxv
Y2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0
b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcs
IGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVy
ZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hh
c19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1
LDIzICsxNjcsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQog
ICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3Rv
ckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlv
bmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29u
c3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5z
dGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3Ry
dWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIg
PSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAK
ICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ug
d291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1
c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hh
c0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8v
IENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGku
ZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgot
ICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0
OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0
R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1MSw0MCArMjIwLDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAg
Ly8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2
ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2lu
Y2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBp
dCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAg
IC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0g
dGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4K
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJl
c3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0g
ICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9w
dGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxs
T3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2
YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhp
cyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BS
OworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAg
ICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBw
cm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9U
ZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAu
Z3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1w
bGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMs
IHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAg
ICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAg
ICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAg
ICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRl
bXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAg
IG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJv
dG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBX
ZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBm
aXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJl
Z1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAg
cmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisg
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2Vu
LnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTks
MTEgKzMyMSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5w
dXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjEx
LDI4ICszNTEsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRl
ZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBi
cmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7Cisg
ICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICgh
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5j
aElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29t
cGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAg
ICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0g
YnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
anVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI1
LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0yNTUsMTIgKzQ1OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNv
bnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
c0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFu
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgs
MTEgKzQ5MCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0
NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25a
ZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSAr
NTIwLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2sp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayks
IHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29t
cGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXND
ZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEp
OworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAj
ZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lz
X2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1ODYsNDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlw
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAg
ICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMzMzLDE4ICs2MzUsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVH
UFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlw
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAK
LSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUs
NyArNzAwLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAog
ICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1
ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKQEAgLTM2OSwxNSArNzE5LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1p
dGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdU
MCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQ
cmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7
CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzYyLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19w
cm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3By
KCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNy
YykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAg
ICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBp
c1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUo
dmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5j
dGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNv
ZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRl
Y29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3By
KCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BS
LCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25v
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
dmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFs
dWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAg
ICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxl
IG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3Qg
bWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92
ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAK
LSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0
YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBv
dGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3Ig
dHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpT
VmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhl
IGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29w
ZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNl
KTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdp
bGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2ls
bCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAg
ICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQg
dGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3Rl
eHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0
ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNv
bmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRy
dXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBS
VGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNo
MS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigp
OworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElm
RmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZh
bHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1f
Y29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24p
KSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJ
bW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAg
ICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBm
cFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2Ny
YXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiAr
OTY3LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBp
bnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIu
Z3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAt
IGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAg
ICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gy
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhp
cyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAg
IEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAg
ICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0g
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0g
ICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNy
YywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
c3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJH
UFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJH
UFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRp
YXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVk
aWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAt
IHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAK
LSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCAr
MTA5OCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090
aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTI2LDI2IEBAIHZv
aWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBk
by4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTU3LDMwNSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2Vs
bCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQ
dHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7
Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlv
bkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlu
cHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAg
ICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAg
ICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0Nl
bGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNK
dW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lk
IEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2
YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRC
ZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJl
MzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJo
cykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVt
cC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBS
LCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgs
IHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVj
b2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9w
SmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRk
SnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdw
Q29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0g
aXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7
CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5
cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNl
cyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
cT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1
ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+
KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAg
R1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAg
fQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgamVxSW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9w
Sm5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAg
ICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcg
cmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRo
U2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3Bf
dGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0
ICsxNDcxLDE1MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVx
dWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVy
ZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5
cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6
VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJo
cykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9i
amVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BS
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNH
UFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhz
R1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJo
cykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwg
bGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQ
Uik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAg
LyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEp
OgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1
bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlz
IENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVz
dWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQg
b2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNo
SWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNW
YWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92
ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBh
IG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQK
LSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQo
cmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFu
Y2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAg
IC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdz
IGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3
ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJ
bnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5n
cwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgY29t
cGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCBy
ZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdU
MCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGln
aCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAg
SWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgIGdvdG8g
c2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2Vs
bCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAg
ZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBU
aGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJs
ZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBu
YWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgor
ICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRo
ZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwg
aGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwg
dGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2
aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdU
MCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFk
ZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCBy
ZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMs
IHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1
KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKKwor
ICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBs
ZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAg
ICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNv
bWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5
IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEp
CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0g
ICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhl
ciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZp
bmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVm
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJv
dGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVn
VDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMg
YSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBh
bmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAg
bGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCi0g
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAg
IGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBh
cmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRpZgor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTYzMiwxMzUgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9
IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBn
cENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBh
cmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3Jk
ZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyks
IHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywg
cmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgLy8gT09QUzogY2FuIGRvIGEg
bG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5n
KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0lu
dChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKwor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBh
IGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAg
SWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQ
YXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYg
KGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0g
ICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMg
dGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdp
bGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJ
ZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkg
aGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwg
MTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUp
OwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdU
Myk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUp
KTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsK
LSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAg
ICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJp
bmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1F
OiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBC
aWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3Ry
aW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxo
cywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0g
ICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3Ry
aWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQor
ICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAg
ICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBp
cyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3RvIG5vdFRha2Vu
OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVm
dCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5z
dGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBi
cmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0
IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBt
YWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJ
ZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkg
aGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVx
dWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVn
VDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZI
aWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAg
YWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBKdW1wIGFy
ZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1w
KGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmlu
Z3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAv
LyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJl
IGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGgg
YXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisK
KyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1
YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0
KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhl
ciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZp
bmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAg
SnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAg
ICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7
CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTc0OCw4OSArMTc3MywyMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxo
c0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhz
R1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNH
UFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQ
YXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAg
ICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251
bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdU
MCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlz
QmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikp
IHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8g
aXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludDsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1
bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlz
QmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9T
dHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdU
MCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVh
bCB3aXRoIHRoaXMuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwNDEsMjMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRT
dG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5
cGUoY3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKwor
ICAgICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAg
ICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtOTA1LDkgKzIwNzIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShj
b25zdCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUp
KTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAs
IHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRH
UFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJ
bW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJ
bmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjA5NywxNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0
Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsK
LSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUg
fTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtOTM4LDkzICsyMTIxLDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5n
KGNvbnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0
aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVn
PigpOworICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdn
ZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3Rz
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUp
KTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1t
ZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6Omlz
X3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8g
RXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAg
ICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
CisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBK
dW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBj
b21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBz
Y3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQ
Uiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAg
ICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSks
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAs
IHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwor
CisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAg
ICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05v
dEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8
T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChO
b25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0
cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9u
KikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJl
IHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4g
dGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAog
ICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNz
YXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBH
QyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwot
ICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0
UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGog
PSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5l
ZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyNzIsMjMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3Vs
dC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0g
ZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMg
KzIyOTYsODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0
cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1Qx
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAg
YXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNE
c3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBp
ZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hl
YXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNE
c3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNl
IGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAg
ICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVu
VHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJp
Y3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBl
KHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiks
IHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUg
YW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAg
ICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCBy
ZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3Qp
OworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5v
dENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0
PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZp
bmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0Rz
dCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBG
aW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdU
Mik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qx
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEwNTksNiArMjM3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1f
Y2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyMzg3LDMxIEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1
bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
Z3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2Fs
bGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAy
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVl
T3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsK
KyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNo
UmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5n
cHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgp
KSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFy
ZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEw
ODYsNjQgKzI0MjksMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3Jh
Z2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tf
dGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNs
b3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVu
VHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cisg
ICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5j
ZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0
b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTY0LDYgKzI0NzYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5m
aW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2li
bGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09QUzogY2xlYXIgcmVn
aXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRlci4KICAgICAgICAgdWlu
dDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9u
KTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJl
dHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5
UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEzICsyNTAwLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
CiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0
aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZl
c0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwxMSArMjUxNywxMCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAg
bm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAvLyBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzog
SSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4K
ICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAg
IFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsyNTQzLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJT
YW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU1MywxOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5t
X3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdl
eHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwor
ICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTc0LDQyIEBAIHZvaWQgSklUOjpl
bWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNj
b3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
cmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNl
TE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
c2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7
CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fz
eW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIs
IGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25l
d19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjYzOCw0NiBAQCB2b2lkIEpJ
VDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29w
ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7Cisg
ICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzY29wZS5yZXNldCgpOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9
CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
IAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dl
bmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24p
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1
bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNzA4LDE5IEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUu
bV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwg
c2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BS
ID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3Rh
cnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQ
Uik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJh
eV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEz
NjAsMTQgKzI3MjksMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShj
bwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BS
ID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
Ci0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJh
eTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFy
Z0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3NjIsNDIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRv
clZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JH
UFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworICAg
ICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBi
YXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQogCi0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
LSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRH
UFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIp
OworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICsyODE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICAvLyBPT1BTOgogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQ
YXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzI4NDUsOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVy
dHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwx
NSArMjg3MiwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAg
SklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5k
IEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNl
cyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlw
ZUp1bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAg
YWRkU2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAg
ICAgCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4LDEzICsyODg5LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogICAgIExhYmVsIG5leHRI
b3RQYXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hh
YmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwor
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAs
MzcgKzI5MTksOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9w
ZXJhbmQ+IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8gQ2hlY2sg
dGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
YmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBv
dXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1v
dmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0Vp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAg
ICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5l
IHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJz
dE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAot
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxp
bmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAg
IG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAg
IGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9m
ZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDE0LDUxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwot
ICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNl
dCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVt
cDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25J
bnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBp
bmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3Ip
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7
CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7
CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91
bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgp
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
LCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxp
bmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1l
c1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRl
eEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE1NzQsMjEgKzMwNjgsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5k
cyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVn
IGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJ
bnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVu
dW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0
b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0
b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5k
ZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1l
cmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywg
aW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qw
LCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQp
LCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAg
bG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1
bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMjIsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBj
YWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rl
cjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1
OCw2ICszMTg0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwog
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5z
aGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BD
YWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9u
QXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUu
Iik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMyMDEsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICsz
MjM0LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVn
VDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdz
Ojp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihy
ZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNTUsNDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1z
VG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDAp
OwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0
aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tp
cCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRH
UFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIs
IEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNU
b1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMy
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xl
bmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1Rv
U2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYK
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAot
ICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vs
c2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMw
NCw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0
T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBl
bHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwot
ICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1
bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91
bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3Mp
OwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFy
Z3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3Mp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJv
dW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0
UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90
eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BS
LCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwg
ZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7
CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3Mu
dGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdU
Mik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2
YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwor
ICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAg
LTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAg
IAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJl
bCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2Vu
IHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYz
Miw4ICs2MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4
ICs2NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBA
IC03NjMsOCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0
NCw4ICsxMDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBA
IC0xMjAxLDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUo
KTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFt
YmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKIApAQCAtNTEsNDkgKzUzLDExNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0
eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHBy
b3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGlu
Z1R5cGVHUFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEu
bV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJP
ZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlm
ICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGlu
ZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisg
ICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtb3Zl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHBy
b3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3Bl
cnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VM
T0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxD
aGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBp
bmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
ICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAg
ICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Cisg
ICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3Bl
cnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICgh
dXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAo
aGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dl
dEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY5
LDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhp
cywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBw
cm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Miw2ICsyNTMs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgp
OwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPwor
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBwcm9w
ZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5
KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTQsOCArNDE3
LDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyBy
ZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBy
ZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFpbGFibGVS
ZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlOYW1lLAog
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVj
bWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29k
ZSkpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC0zMzQsNyArNDQwLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZh
bFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAg
ICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICs0
NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0
cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRv
IGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAg
ICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzQ1NiwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0Rp
cmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJl
Y3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlW
YWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcyLDQ5ICs0
NzcsMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywg
Ynl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlz
LCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAg
ICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVy
QnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jh
c2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1f
YWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAg
ICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVy
QnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRl
Y29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRl
Y29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0
ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNl
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVy
dHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
YWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsK
KyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
cmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFs
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7
Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhp
cywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3Ig
eyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRl
cywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjQsMTggKzU4NSw1MiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ0NCwyNSArNjM5LDI3IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJh
c2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBi
b3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQ
UikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTkgKzY2OSw3MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkp
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigp
OworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7
CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0KKwog
ICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qy
KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBl
bmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAg
ICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlm
IGEgYmFzZSBpcyBjZWxsLgpAQCAtNDkzLDIxMyArNzQxLDM2NiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91
bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5
VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIs
IFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNl
R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2Rl
ID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5h
cnJheVByb2ZpbGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNlTE9MKCkg
PyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFy
cmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUu
bGluayh0aGlzKTsKICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRo
aXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7
CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUuZW1wbGFjZSgq
dGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0aGlz
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BSID0g
cmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0aGlz
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOworICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRo
aXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNE
aXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUg
YWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwg
d2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRz
IGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBn
ZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJl
IGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2
YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBi
YXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwK
ICAgICAgICAgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0LCBwcml2YXRlRmllbGRBY2Nlc3NL
aW5kKGJ5dGVjb2RlKSk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpA
QCAtNzA5LDc3ICsxMTEwLDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0g
ICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJ
bmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklU
SW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVElu
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVh
bFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03OTEsMTcgKzEyMTAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSArMTIzOCwzNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVz
b2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAg
ICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+
IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50Lmdl
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25t
ZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgpAQCAtODM4LDkgKzEyODAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAKQEAgLTg1MywyOSArMTI5NSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVz
dWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwx
NSArMTMyNiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsK
LSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cisg
ICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYs
MTIgKzEzNTMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAg
ICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNp
emVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBA
IC05MjIsNTEgKzEzNjMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVy
ZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAg
IEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7
Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29w
ZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAg
ICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBi
YXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIo
b3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwor
ICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAg
ICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsK
ICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsK
KyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3Bl
R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC05ODAsMTAgKzE0NTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDcwLDI3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsK
KyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE1MDAsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0
b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0
Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9h
ZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1Qx
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUy
OSw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9
CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9v
bCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBv
ZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNl
dEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAg
ICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQ
UiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBi
dXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7
CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQog
CisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBz
Y29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29w
ZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAg
ICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJh
bmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAg
c3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRy
KG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1
dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKQEAgLTEwOTgsMjggKzE1ODMsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAg
ICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3
YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVn
VDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsK
LSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5
V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0
KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50
U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgor
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNs
b3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2
YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwpAQCAtMTEzNCwxMiArMTY0OCwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24n
dCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRo
aXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0
aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
SnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdl
IGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5k
aW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTE1Mywy
MyArMTY3NiwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVy
cyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3
ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQ
UiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7
CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAv
LyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwpAQCAtMTE4NiwxMCArMTcxOCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlw
ZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3
MzUsMTUxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVu
dHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50
c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBp
bmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1
ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAg
CisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
Q2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQogewogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2Rl
IGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
ISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7
CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVl
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gb3duZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7
CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMsIG93bmVyKTsKKyAg
ICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBvd25lckdQUiA9IG93
bmVyVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJl
Z1QwKTsKKyAgICB9CiAgICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAg
ICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7
CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0Nl
bGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BS
KTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVy
QnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9u
YWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1
ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgp
LCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJD
YWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkp
CiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBp
ZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlz
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
KSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgICAgICBH
UFJSZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgdmFs
dWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVy
KTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVO
b3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApA
QCAtMTM4NSw4ICsyMDA1LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAg
ICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93
bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsK
KyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDA7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZt
KCksIG93bmVyLCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGls
bFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJl
Y29yZCk7CisKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBb
TWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltd
KHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10o
c2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0
ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9t
YXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRo
Q2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhD
YWxsLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xv
d1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAog
ICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8v
IFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAv
LyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQog
ICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9u
KCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zm
c2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw2ICszOTYsOSBAQCBzdGF0aWMgdm9p
ZCBkaXNhYmxlQWxsSklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucygpCiB7CisgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlv
bnM6OmZvcmNlTE9MKCkgPSAxOworCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6
OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFz
c2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQy
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9i
YWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3Rv
bVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVu
dW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415596</attachid>
            <date>2020-12-07 15:58:27 -0800</date>
            <delta_ts>2020-12-07 18:51:27 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>425182</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3Ry
dWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5p
bmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAg
ICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAg
Y29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5k
ZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkp
LCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25z
LmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3Vs
YXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewogICAgICAgICAgICAgYXV0byYg
Y3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkgKyBibG9jay5sZWFkZXJPZmZz
ZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlv
biwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NyArMTA2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29k
ZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxCbG9jaz4gewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVt
cEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
T3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rp
b25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmls
ZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKIAogICAgIHZvaWQgZHVt
cElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlv
bmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwg
UHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCisgICAgdm9pZCBkdW1wKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNw
ZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkK
ICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9ja1R5cGU+Ojpk
dW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVh
ZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMz
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElDU3Rh
dHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAgIEJ5
dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENvZGVC
bG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlv
bnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6
Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwg
Y29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTExLDYg
KzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0
aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUlu
ZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVl
UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0
IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hB
cnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVBy
b2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFs
c2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJlRGF0
YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0
IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2ZpbGVC
dWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMzQsNyAr
MTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVt
IE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgogY2xhc3Mg
T3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFs
X3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGljOgogCiAg
ICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3Qg
bnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXpl
X3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9udW1Bcmd1
bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAg
ICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIHNp
emVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVt
VG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAg
ICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAg
ICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFu
ZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMs
IGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVt
QXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNv
bnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRz
KG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAg
ICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1
ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBz
ICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsK
ICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE9w
ZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBU
JiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVt
YmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxv
Y2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29uc3RhbnRz
KCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAgICAgICAg
IG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBAIHB1Ymxp
YzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
QXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX251bUNv
bnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51
bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9v
bCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2Fs
bGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRleChzaXpl
X3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygp
KTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXplX3QgYXJn
dW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8
IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KLSAgICAK
ICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVtYmVyT2ZB
cmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90
IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNvbnN0YW50
cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJu
IG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAogICAg
IFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0
ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRy
YWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3Qo
KTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxsZWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBlIGxvY2Fs
KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICBD
b25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9j
YWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGNv
bnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgo
aWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAg
ICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
VG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxl
ZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2Fscygp
OwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBt
X3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUo
KTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFj
a0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAg
ICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVk
c0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAogICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQo
KSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
YWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVy
YW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5k
LnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0
KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3Bl
cmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygpOwogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1i
ZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29u
c3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4
IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChpbmRl
eCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICBpZiAo
aW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1l
bnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkK
KyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRleCAtIG51
bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxlZUluZGV4
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXgg
LSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0
YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQz
NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3Zh
bHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUg
bmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMu
CiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAg
fTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNv
bnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3Rlcigp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFj
a0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChz
aXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgt
LTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0
KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQp
KTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRleHQpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+
Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBA
IC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0
bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0
cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxs
ZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxhdGlv
bihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5
KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRl
Y29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihTcGVj
dWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJ
bnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8v
IFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNh
bGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUg
Y29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1
YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7
IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAgYm9v
bCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92
aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29s
IGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQo
aXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpA
QCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2Nh
bChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBv
cGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVy
YW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQgY29u
c3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFu
dEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEz
NSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJn
dW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJbmRl
eCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAgICAg
LCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2
YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBpbnRl
cnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZh
bHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJn
dW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTIgKzMwLDE1IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBo
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAj
aW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAg
LTYwLDYgKzYzLDgzNCBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRv
dGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAor
dm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5k
KHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8g
Ynl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29k
ZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVj
b2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2Zp
bGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9u
bHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRp
Y3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJl
ZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFu
ZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Qml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1l
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJl
Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
KyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0
YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRh
Lm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1v
dj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVP
Zj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJ
bnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1l
cmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVh
bDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJp
Z2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVj
RG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6
IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQp
IHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBo
ZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAg
ICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAgICAgICAg
Ym9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gfHwg
ISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJl
TmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOwor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50MzIKKyAg
ICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmln
SW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7
CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNl
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5k
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRl
Y29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50
MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBi
ZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4g
c29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVz
dWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BV
cnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBh
dXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNy
YywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjSW50MzJPbmx5Owor
ICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAg
ICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJl
YWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAg
ICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZU51bWJl
cik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0
ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
ZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVj
PigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3Ny
Y0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsK
KyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7
CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwg
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAo
IShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNC
aWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVm
dCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVy
T3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9
OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAg
ICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAg
ICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICgh
dHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVj
dCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3Bl
cnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9Q
cmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMp
OworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEo
dHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdl
IHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2
ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFz
IHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFp
biB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBl
KHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5u
dW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBT
cGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCks
IFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhT
aXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9y
ZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCks
IFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhf
c3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BI
YXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8g
YmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdG
dW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19m
dW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhw
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5l
cmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5l
cmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4o
KSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFy
ZW50X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVu
dFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVy
dHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJl
UHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwg
U3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4o
KSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRv
SW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1
bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4o
KSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3Jl
YXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwg
U3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3Bl
Y1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3lu
Y19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
QXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
QmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxv
d2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9u
dWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JO
dWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9v
bGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BU
b1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRo
UHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNf
Y2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRp
Y19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlz
OgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxk
OgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAg
ICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAg
Y2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ug
b3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9k
ZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3Nl
dF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2Fz
ZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9w
cm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNh
c2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoK
KyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoK
KyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAg
Y2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJp
Y3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNl
IG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVz
czoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNh
c2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVs
b3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06Cisg
ICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAg
ICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBl
OgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBj
YXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgor
ICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0
dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAg
IGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMy
OgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGlu
dF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6
CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxs
aW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5j
dGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9j
b25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2lu
dDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
bmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3Rf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFt
cG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNh
c2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2Fz
bV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtl
VW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsg
KytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5u
dW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2Nv
ZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwg
Ym9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9j
a2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9m
aWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1
ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9j
aygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOwor
CisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcp
IHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJv
ZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJn
dW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAg
IGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0u
YXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247
CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFz
dCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29u
c2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1
bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVz
IHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAg
ICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFi
bGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9y
IChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1f
Y3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsK
KworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0
QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9j
ay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChp
ICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVw
T3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2Nr
LnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRz
ID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVy
YW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTgsMTIgQEAgdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5y
ZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkKK3sK
KyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30KKwog
SklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxv
Y2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEzLDcg
QEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91
bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpm
b3JjZUxPTCgpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTQwLDYgKzk3OCw3IEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1l
KSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4
ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsg
XAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOyBcCiAgICAgICAgIH0gXApAQCAtMTU2LDI2ICs5OTUsMzIgQEAgdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09Q
KG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwK
ICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNh
c2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBpZiAo
dXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAgICAg
IH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9u
IHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQog
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9j
aywgIlxuIik7CiAgICAgCkBAIC0yMzEsNyArMTA3Niw2NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0g
bnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUo
bV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgt
PnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAg
ICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29y
SW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJl
ZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9j
ay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGZvciAo
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkg
Pj0gKG1fY3VycmVudEJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3Rh
bExlbmd0aCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJs
b2NrLT5pbmRleCgpXSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJl
bnRCbG9jay0+aW5kZXgoKV0gPSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVu
dEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50Qmxv
Y2stPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9y
QmxvY2tzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29y
IDogcHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9z
dGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbGxQcmVkZWNlc3NvcnNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNz
b3JzU2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JC
bG9ja3MgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3Rh
dGUgPSAqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNl
c3NvciA9IHByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50U3RhdGUubWVyZ2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9t
UHJpb3JCbG9ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0
YXRlKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJl
ZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xv
d0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJ
bmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgp
ID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVj
dGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCkBAIC00NzcsNiArMTM4MiwxNCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKCFtX2NoZWNr
ZWRVc2VMT0wpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwg
b3Bjb2RlSUQpOworICAgICAgICB9CisgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOwor
CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Y3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9zbG93
Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTUsMTIgKzE0MjgsMTQgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9
IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Ns
b3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2Ug
PSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9z
bG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAg
bV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2Ug
OiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRl
Y29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRl
Y29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1
bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBt
X2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgp
LnB0cigpOwogICAgICAgICAKQEAgLTU3OSw3ICsxNDk0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0
ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX25lcSkKQEAgLTU5Nyw2ICsxNTExLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShY
ODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbHNlCisgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCisjZW5kaWYKKwogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1df
T1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzMsMTUg
KzE1NTMsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJz
dFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQo
KSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBq
dW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNl
dCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAg
ICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVy
ID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zm
c2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsK
KyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVz
cygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMs
IHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQ
YXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7
CiAgICAgfQpAQCAtNzc0LDYgKzE2OTcsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlu
a2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChs
YWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAg
ICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7Cisg
ICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hl
Y2twb2ludCBleGl0cy4KKworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3Ry
dWN0aW9uID0gKm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5w
dHIoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3Rp
bmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8T1NSRXhpdFB0clRhZz4oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgLy9pZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAg
IC8vICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hl
Y2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAv
LyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFk
YXRhVGFibGVHUFIpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6
cGJHUFIpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIs
IE9TUkV4aXRQdHJUYWcpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsK
ICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMjAwMyw2ODEgQEAgU2Vjb25kcyBK
SVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGls
ZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3Zv
aWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBPT1BTOiBo
YW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0SnVt
cHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0SnVtcHMu
YXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhpdEp1bXBz
Lmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFu
az4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0
IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJs
b2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBk
b24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMg
aXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAg
ICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZl
cyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0
byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAg
ICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30K
Kworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0
IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJs
b2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkg
ZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlz
IGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3Vs
dDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25z
dHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVy
biByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQor
eworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRl
IGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBm
dXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlz
CisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVk
PFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewor
ICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0
Tm9TbG93UGF0aCgpCit7CisgICAgLy8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdy
aXRlQmFycmllci4gQnV0IGdlbmVyYWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJl
IHdlIGNhbiBmaWd1cmUgc29tZXRoaW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMu
c2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJ
bmRleCkKKyAgICAvLyAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihH
UFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgcmVnVmFs
dWUgPSBSZWdWYWx1ZSB7IH07CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2Nh
dGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBk
dXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQ
UnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlID0gUmVnVmFsdWUgeyB9
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQorewor
ICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJv
dGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBpZiAo
b3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAg
ICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVy
YW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAgICAgLy8g
V2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBiZWNh
dXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAgIC8v
IC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAgLy8g
LSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2UgZGVh
bGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1cCBm
dWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxseSBk
ZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+VmFs
dWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisgICAg
ICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFuZCA9
IFZpcnR1YWxSZWdpc3RlcigpOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxs
SW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkg
eworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxl
ZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAg
ZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2
ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAg
U2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcp
IHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUu
b3BlcmFuZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQor
ICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRH
UFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpCit7
CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxlbnRTcGls
bFJlY29yZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBhcHBlbmRJ
Zk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMt
PnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICAgICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAg
IHJlc3VsdC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNwaWxsZWRS
ZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChSZWcgcmVn
IDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOwor
CisgICAgcmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxlZFJl
Z2lzdGVycywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVudEZp
bGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0
aGlzLCByZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9yU3Bp
bGwsIDApOworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCksIHJlY29yZC5zYXZlUGxhbik7
Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3Qg
U2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFuKSB7
CisgICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHRvSWdub3JlKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7Cisg
ICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29u
c3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nh
c2UucmVzdWx0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQg
ZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQocmVn
VmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7
IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zvcihv
cGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFu
ZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnByKS5p
c0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3By
ID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0s
IEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQp
KTsKKworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9w
ZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsK
K30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7
CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGFzc2lnblJlZyhn
cHIsIG9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQg
SklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2Nr
Q291bnQ7CisgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQu
aXNWYWxpZCgpKQorICAgICAgICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpH
UFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBp
ZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJl
ZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1w
Ojp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJl
Zyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1w
KEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1w
OjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1
cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9
IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1
cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7
Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6
OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5h
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9n
cHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIo
KTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3By
KTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKwor
ICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9q
aXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5
cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJ
VDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFu
ZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJS
ZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAg
IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1f
aml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdW
YWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
Cit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAg
ICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5v
dENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dw
cik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmICht
X2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
bV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVH
UFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1f
Z3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9v
cGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBl
LCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKwor
SklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxv
Y2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFu
ZCwgbV9ncHIpOworCisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisK
K0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91
YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7
Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnBy
ICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVn
KSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9m
cHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAg
VmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJU
ZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7
CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5h
bGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAg
ICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVl
UmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJl
Z3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBl
KG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJv
eERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2Zw
ciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworUmVnaXN0ZXJTZXQgSklU
Ojp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3Vs
dCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8g
YWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0g
dGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQor
ICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5n
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNT
eW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVh
bihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZh
bHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBz
Y3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVy
OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmpl
Y3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVj
azsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJ
bnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisj
aWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsK
KyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgor
CisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7
CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFs
dWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUp
IHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmln
SW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJ
Zk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNj
cmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZh
bHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQo
dmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRC
bG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0
cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29k
ZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3Zl
blR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUu
cHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1
cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCks
IDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAg
bV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYs
MTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJ
bnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUg
IlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0
Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9wY29k
ZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAg
IGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwogICAg
IGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRnVu
Y3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwotICAg
ICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRl
Y29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8odCkK
KyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVnaXN0
ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQbGFu
IHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAgICAg
ICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3dD
YXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAg
ICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAg
ICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVzdCBv
bmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZlIG1v
cmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsg
Ly8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVu
IHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2ZSBy
ZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsKIAog
ICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5OCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAg
ICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklU
IHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2Fs
bDsKIApAQCAtMTkwLDEyICsyMDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlk
RGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBu
dW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25l
ZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJl
c3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRj
aGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVm
YXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJs
b2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQg
PSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI3NCwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRB
cnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAg
ICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xv
YmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAg
ICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNs
b2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29k
ZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBA
IC0zMDAsOSArMzI1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VU
b05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93
Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lk
IGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcg
cmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93
Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAg
ICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29u
c3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAs
IGludCk7CkBAIC0zMTAsNyArMzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAog
ICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNTQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0lu
Zm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAg
ICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3Am
KTsKIApAQCAtMzM3LDcgKzM2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNz
IENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1
bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUs
IGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dD
YXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNP
cGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAg
IGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3Vs
ZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUg
fTsKQEAgLTM1MCw4ICszNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUaGlz
IGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCBy
ZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCi0gICAgICAgIHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYp
OworICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BS
UmVnIHZhbHVlID0gcmVnVDApOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4g
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnIHZhbHVlID0gcmVn
VDApOwogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2Rl
KC4uLik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZh
bHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDggKzUwMiw4IEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJs
ZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSArNTExLDIw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
KiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVy
dCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09Q
RVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAg
dm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAg
IHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1p
dF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFu
ZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKQEAgLTUxMiw5ICs1NDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0
Myw3NyArNjc5LDgxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZh
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVj
a190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1l
bnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9m
cm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2Fz
ZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hp
ZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVt
aXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0Umln
aHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5z
aWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVt
aXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0
cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWcp
OworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNo
R1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzI4LDgg
Kzc2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFs
dWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzggKzc4MCwx
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlv
biwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAg
ICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25z
dCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9u
LCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5
cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKLQotICAgICAg
ICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkK
LSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0
ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xv
d0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywK
LSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1f
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2Fz
ZSYpOwogCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5
PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNs
b3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhh
c0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAg
ICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleCht
X3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQzLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigp
OworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NTYs
MjMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlP
cD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlP
cCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAg
ICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52
YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBG
UFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
SW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAg
IH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dl
ciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdo
dCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
fkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsg
SW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFs
dWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJ
VCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVn
IH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVn
IG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
b3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlw
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1
bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9w
ZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQ
UlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9w
ZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAg
ICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJh
bmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJl
Z1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAg
ICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5k
KSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVy
YW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7
CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJv
bFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9M
KCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmlu
ZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAg
dm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxh
dGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5m
byBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BS
KEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQ
UigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAg
ICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2
b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRo
aXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQg
aXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOwor
ICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxs
UmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2b2lkIHNpbGVudEZpbGxB
ZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9pZCByZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCByZXN0
b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50
ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1f
Y2FsbHM7CkBAIC05NTMsNyArMTE5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0
b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRl
Y29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7Cisg
ICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZl
Y3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25l
ZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTIzNiw3OSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwog
ICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRS
ZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVu
Ym94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1l
LgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAg
ICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAg
ICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQg
bWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwg
bG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0Fs
bG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMg
PSB7IH07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0Vu
dHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAg
RGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3Rh
dGUgeworICAgICAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVn
OworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAg
ICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAg
ICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVy
YW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRv
UmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBB
U1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7Cisg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0
aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAg
ICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdp
c3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3Rh
dGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRl
KCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7Cisg
ICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07Cisg
ICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlv
bnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJl
bnRQcmVkaWN0aW9uczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKwor
ICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAg
ICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJv
b2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxPTCB7IGZh
bHNlIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Qnl0ZWNvZGVJbmRleCwgSnVtcExpc3Q+
PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFu
ZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBE
b3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3Jl
YXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxl
c3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFu
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JF
cXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NjAsMjMgKzE2MCw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVj
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9u
LCBkb3VibGVDb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25k
aXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2Rl
IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQg
aW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGlu
dCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBp
bnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91Ymxl
Q29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdw
cigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0
aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMjUgKzMwNSwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVy
YXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9u
LCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhz
R1BSKTsKKyAgICAgICAgYXV0byBmYWxsdGhyb3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBO
b25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQ
YXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIGZhbGx0aHJvdWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxv
d2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVt
YmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1l
ZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBu
dW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJn
dW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEpOwpAQCAtMjk5LDggKzM0MCw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7
CkBAIC0zMjUsOCArMzY0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAg
LTM1MCwxMiArMzg3LDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
TEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVt
cCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9
IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQz
MihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAg
ICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZw
UmVnVDApOwpAQCAtMzY4LDkgKzQwNCw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGlu
ayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0
aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50
LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CkBAIC00MDYsNDEgKzQ0Miw5MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29u
c3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAog
ICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3Ry
dWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1
dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6
OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdU
MCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAh
PSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBl
Y3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAg
ICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsK
KyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVt
cGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVk
eFRlbXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNF
X0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChl
ZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5n
cHIoKSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAg
ICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNU
ZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhz
R1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhz
LCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBt
b3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0
b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0
ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVk
SW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlz
KTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwot
ICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9z
aXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQorICAgIGJveEludDMy
KGVkeCwgSlNWYWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjSW50MzJPbmx5KSAmJiBpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZSBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYm
IGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVy
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAg
ICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVj
QmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJ
bnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwg
U3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIGVheCk7CiB9CiAKICNlbHNlIC8vIENQVShYODZfNjQpCkBAIC00NTEsNyArNTM3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00NjMsNyArNTQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
K3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qg
bm90SW50MzJPcDI7CkBAIC00NzMsNiArNTU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEs
IHJlZ1QwKTsKQEAgLTU2MSwxNSArNjQ4LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNp
Z25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91
YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2Fk
KG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyMywxMyArODA4LDExIEBAIHZvaWQgSklUOjplbWl0
X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4o
bmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxl
ZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVn
YXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0g
Yml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwg
dGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJp
Z0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRo
TmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRN
YXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQs
IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03ODMsOSArODY2LDM1
IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKIHZvaWQgSklUOjpl
bWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1bHRJ
c0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7
CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
T09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisK
KyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVzdWx0
R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChy
ZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25s
eTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQz
Mk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CiAjZWxzZQpAQCAtODAyLDcgKzkxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25z
dCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2Rl
KGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0UmVn
cyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC05MDEsMTggKzEwMTAsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25z
dCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmls
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAg
ICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJU
ZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIo
KSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShy
aHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQ
Ui5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92
ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldElu
dDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5m
cHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRB
ZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsK
ICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRk
SUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRk
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsK
KyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTIzLDE1ICsxMDY4LDM1IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBh
cyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyBy
ZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBz
cmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcg
cmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAg
ICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNl
CiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
QEAgLTk0MCwxOSArMTEwNSwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlN
YXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3Ms
IHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7
CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCBy
ZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkp
OwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1w
cyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVF
bmQgPSBsYWJlbCgpOwpAQCAtOTYyLDcgKzExMzAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0
aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTczLDEyICsxMTQ1LDI5IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogCisgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKworICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDEpKQorICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9w
ZXJhbmRDb25zdGFudEludChvcDEpKTsKKyAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDIpKQorICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25z
dCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMzsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7
CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gc2NyYXRjaFRlbXBGUDsKKwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTk4NywyNSArMTE3Niw0MCBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QyOwogI2VuZGlmCiAKLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVm
dE9wZXJhbmQpKSB7CisgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOwor
ICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICB9CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29u
c3RhbnQocmlnaHRPcGVyYW5kKSkgeworICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgfQogCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MSkpCi0gICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMSkpOwotICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAg
ICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIp
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7
CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3Bl
cmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAogICAgIG1hdGhJQy0+bV9nZW5l
cmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRj
aEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29u
c3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRP
cGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE0LDE3ICsxMjE4LDM0
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wg
Z2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAg
ICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQu
aXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1w
LT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAg
ICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAg
ICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJp
Z2h0UmVncyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzLCByZXN1bHRSZWdzLmdwcigp
LCByZXN1bHQpOworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8g
aW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzQsMTEgKzEyNTUsMTggQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAgICAgICAg
cHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlv
biBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChj
dXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ3LDggKzEyNzUsOCBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBz
cmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQog
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAt
MTA4NCw3ICsxMzEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5
cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVw
YXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsOSArMTMyMyw5IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSB9OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKQEAgLTExMTQsMTAgKzEzNDIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNM
ZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgIGlmIChHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRSZWdzLmdwcigp
ID09IHJlZ1QxID8gcmVnVDMgOiByZWdUMSB9OworI2VuZGlmCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1Jp
Z2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICB9IGVsc2UgaWYgKEdl
bmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3Vs
dFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUNCA6IHJlZ1QyIH07CisjZW5kaWYKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAg
LTExNTUsMjMgKzEzOTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vs
c2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsK
LQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBp
ZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJh
bmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg3LDI3ICsxNDA1LDkyIEBAIHZv
aWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbHNlIGlmIChpc09w
ZXJhbmRDb25zdGFudERvdWJsZShvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RE
b3VibGUoZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpOwogI2VuZGlmCi0KICAgICBSRUxF
QVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVn
IGxlZnRGUFI7CisgICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0
aW9uYWw8RlBSVGVtcD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRl
bXBGUDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGxlZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigp
IH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigp
IH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNj
cmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxlZnRU
ZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQ
UiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdodEZQ
UiA9IGZwUmVnVDE7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBp
ZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQ
UlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7
CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKKwogICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3Mp
OwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKKyAgICAKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CisgICAgaWYgKHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogCiAgICAgSklU
RGl2R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BS
LCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOworICAgICAgICBsZWZ0RlBSLCByaWdodEZQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKIAogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpIHsKICAg
ICAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwogCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwg
cmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlz
dCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0
eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CkBAIC0xMjE1LDM0ICsxNDk4LDEwMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjpl
bWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJ
VE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAg
ICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsK
KyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJl
c3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0g
bV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJp
dHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudElu
c3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFs
dWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJ
Q1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAg
ICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJU
ZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIo
KSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShy
aHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKGxoc0ZQ
Ui5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpP
dmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1
bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgc3Vi
RG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAg
c2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2Fz
dDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9u
KSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRP
cHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRp
bWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9QT1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0x
NDUsMTAgKzE0OCw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxF
dmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yMTYsNiArMjE3LDkgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFs
aXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxs
RnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQg
IT0gb3BfY2FsbF9ldmFsKQogICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjgsMTEgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29k
ZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAKQEAgLTMzNCw0NCArMzM2LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWls
Q2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
b25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3Ry
dWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAg
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQpAQCAtMzg2LDM5ICszODgsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxs
eSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBi
eXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1
bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2Fs
bG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9u
KTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gz
MihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBjb21waWxl
T3BDYWxsPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9pdGVy
YXRvcikgPSBTcGVjSGVhcFRvcDsKKwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAg
ICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hl
Y2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1w
bCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBzbG93Q2Fz
ZS5qdW1wcy5hcHBlbmQobmV4dENoZWNrcG9pbnRTbG93KTsKKworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7
CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwg
cmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJS
ZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYs
NiArNDczLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAg
ICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6
IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNh
c2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRz
IG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElm
Tm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMTggKzQ5OCwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQ
Uik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVz
dWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAg
ICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1
bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFk
ZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVH
UFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
dm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRH
UFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVzZWRSZWdpc3Rl
cnMsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhp
dGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGgu
YXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgICAg
IHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBh
ZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KQEAgLTQ5OSwxMSArNTI0LDE0IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgY29uc3QgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAgSnVt
cExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAor
ICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52
YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
dmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAg
ICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAgICAg
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSk7CkBAIC01MTUsMTAgKzU0Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRl
cmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcg
KzU1Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1
bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzUsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRo
aXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU4
OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNv
IHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRo
ZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU4LDYgKzE1OSw3IEBAIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIHsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgLy8gT09QUzogTWFr
ZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGls
bCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE2NiwyNSArMTY4
LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVy
biBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkg
JiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNs
b3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBz
bG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFu
Y2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNv
ZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAg
LTIwNiwyNyArMTg5LDM2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nh
c2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMu
c2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJ
bmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQ
bGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5p
c1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0
ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAg
ICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0IHsgfSk7CisgICAgfQor
ICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcg
aXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0
IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wc1sw
XS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVt
cCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMSwxMCBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVl
UHJvZmlsZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJl
Z1QxOwogI2VuZGlmCkBAIC0zMzgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZf
dDxzdGQ6OmlzX3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRh
ZGF0YSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYg
bWV0YWRhdGEsIEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmls
ZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5n
VHlwZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NCw2IEBAIEFM
V0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1
c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxS
ZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4
ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgs
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQ
cm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDYgKzUxLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzExMSw1MyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVh
bENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0
UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBS
ZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAg
IEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0
b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxs
b2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVn
VDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0g
cmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsK
ICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkg
PSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJl
KTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNjcsNTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcg
aW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBP
T1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBj
b25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxh
Y2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2Uo
KnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsK
KyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAg
aW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBq
dW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJ
bnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVu
Y3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3Ry
dWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBu
b3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNv
bnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjIw
LDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFu
ZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVy
cy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25l
IHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJv
dG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5
IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdU
MiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdU
NCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9p
bnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1w
Q2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVz
dWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQ
UlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3Vs
dFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2Vs
bC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxh
Y2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxs
LT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisK
KyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIg
PSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRU
ZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAg
ICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAu
Z3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAg
ICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBw
ZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNw
ZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJh
c2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0
aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBy
ZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4g
YmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lk
IGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAg
ICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisg
ICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAg
ICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2lu
c3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3Mu
cHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMyMSwyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNTEsNzIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDAp
OwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAg
ICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxs
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BS
VGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7
CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVt
cEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKwor
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI1LDMzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVy
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29s
ZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ1
OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5MCwyNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1
bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRH
UFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVy
VGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTIwLDU2IEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAg
ICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFn
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2
NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
ICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChy
ZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJ
R0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1ODYsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2Vs
bF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwog
Ci0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5
cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2
MzUsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZh
bHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVj
dFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1
ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAg
ICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92
ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0
aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzAwLDEyIEBAIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUg
cmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwx
NSArNzE5LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxp
bmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBt
b3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7Cisg
ICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxp
bmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19w
cm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4
Niw1MiArNzYyLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElm
U3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0
cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBp
c1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlm
IChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBp
ZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAg
ICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25h
bWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVy
bywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5l
OiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4K
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdh
aW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFu
LCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cg
Yml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVj
dGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNo
IHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKwor
ICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdh
cyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8g
Y2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZh
bHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0
IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBh
bmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7
CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxz
ZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
Qm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlv
bikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24g
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9y
ZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1w
IGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsg
KnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBS
UmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBz
Y3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNj
cmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
Y29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFs
LCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNl
cyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2Ny
YXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMg
fTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNo
MkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gy
R1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZh
bHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTY3LDEyOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlu
cHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVm
aW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAg
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFu
Y2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIo
KTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQot
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5OCwyNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAg
ICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTI2LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNTE1LDY1ICsxMTU3LDMwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFs
UG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
UHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhw
ciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdw
Q29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0g
aXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7
CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUo
bGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBh
cmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1w
LmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAg
Y29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAg
SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihy
aHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNv
bnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFs
QW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVl
c0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAg
ICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBD
b21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAg
IFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNs
b3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIp
KTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1
ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBl
cUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAot
ICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwot
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJl
ZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
KyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1w
bDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30K
Kwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
Y29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVx
SW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBH
UFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2Up
OworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDcxLDE1MCBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3Jj
MSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9v
bCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRv
IGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVl
c0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0
cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAg
ICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBD
b3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAg
IEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElm
Tm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1
bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVs
IHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlz
IERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAg
cmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8g
ZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAg
ICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlz
IERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3Vs
ZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51
bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwg
dGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFs
bCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRo
ZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9u
bHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAg
ICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVn
VDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBh
dCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhp
bmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVk
IHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNz
dW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAg
IHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxs
KQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxl
bWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUg
YnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlm
IHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJp
Y2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRv
IGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAg
ICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJl
IGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBh
Ym92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAg
ICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7
CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBk
b25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2
NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNW
YWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlm
IGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmly
c3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QK
LSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQz
MihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBs
ZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0su
bGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBj
b3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0
KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRl
c3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAg
ICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7
CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFu
Y2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTY3NCw2OCArMTYzMiwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVt
cChjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8g
RXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91Ymxl
RXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBp
ZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkp
IHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIp
OworCisgICAgICAgICAgICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENv
dWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRoKTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8g
KGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0
ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCBy
aWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsK
LSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJs
ZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRo
ZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50
MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJl
RXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFs
LCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBp
ZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4K
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVn
VDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEp
IHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxp
bmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNs
b3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtl
bjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAg
ICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisg
ICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0
IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5j
aElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBh
biBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBs
ZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAg
ICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qz
KTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9y
NjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVx
dWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQp
OworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgor
ICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQg
ZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdl
IG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAg
ICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYg
Ym90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAot
ICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxl
ZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5s
aW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0
RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwg
cmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMg
KHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJl
Z1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmly
c3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QK
KyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFu
Y2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9
IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJn
ZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc3MywyMTcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVP
cFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAg
IH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nh
c2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcs
IHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVO
dW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNC
aWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7
Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
c3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0g
ZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMp
OworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJ
Zk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJp
Z0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
dHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChz
cmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBp
ZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAg
ICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwNDEsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1
cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUu
bV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAm
PSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFu
ZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BS
ID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIw
NzIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUt
PmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOwor
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC05MjIsOSArMjA5NywxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJs
ZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTIx
LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3Ry
aW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BS
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVi
dWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9y
Q2FsbCgpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3Mo
KSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3Rh
dGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2Vy
UmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
TnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51
bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFs
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
aXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFy
ZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQo
Y29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBy
ZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0g
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIp
OworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNv
bXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJl
UHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVk
aWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21w
YXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BT
OiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJh
cnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0
IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0
byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwog
ICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBz
aXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGog
PSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyAr
K2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGop
OworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZh
cmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
dmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyNzIsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29w
ZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIyOTYsODAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5
dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBz
cmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsg
Ly8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBz
aG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUg
YW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBl
KHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2Vs
bCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAg
ICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAg
ICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0
KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8g
bmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAg
ICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7
CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNy
Y0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAgICBp
ZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlm
IChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwot
ICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEp
OworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsK
KyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTks
NiArMjM3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
Q2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJl
Z2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9
IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyMzg3LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7
CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3By
VGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7Cisg
ICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJl
UmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdw
cigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2Fj
aGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdw
clRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI0MjksMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJl
c3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3Jh
dGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3Jh
dGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1
ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0Vt
cHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRv
ZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTYyLDggKzI0NzQsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJs
b2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJl
Z2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYm
IG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigp
KSkgeworICAgICAgICAvLyBPT1BTOiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNh
biBhbHdheXMgT1NSIGVudGVyLgogICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29w
SGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCBy
ZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xp
bWl0KCkpKTsKQEAgLTExODcsMTMgKzI1MDIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNr
OgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5h
c0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNTE5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhp
cyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUg
cmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2Vu
ZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9z
YW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJl
c3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFw
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAt
MTI0NSw4ICsyNTU1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5z
dHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhw
KSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhw
Kj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAg
LTEyNTYsMjMgKzI1NzYsNDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IElu
c3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBz
Y29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlk
R1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlz
LCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0
dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0K
KwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVH
UFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
RXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2Ugewog
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBm
dW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQog
CkBAIC0xMzAxLDI0ICsyNjQwLDQ2IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBs
YWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+
Z3ByKCk7CisgICAgICAgIHNjb3BlLnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNj
b3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1f
Y29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAg
ICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFT
U0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlv
bik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0x
MzQ5LDkgKzI3MTAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3Ry
dQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBi
eXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5t
X2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BS
ID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBh
cmdHUFIsIHNpemUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjczMSwyNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29k
ZS5tX2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2l6ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1p
dExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwg
cmVnVDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAt
MTM4MSwxNSArMjc2NCw0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3Bl
cnR5CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRv
ciB9OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiBiYXNlQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpIHsKKyAgICAgICAgICAgIGJh
c2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VD
ZWxsLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICB9CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5
LDYgKzI4MTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQogeworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKQEAg
LTE0MzYsNiArMjg0Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09Q
UzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsyODc0LDE1IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5k
ZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29z
ZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
b3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNs
b3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwg
YmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUo
Y3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAK
LSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFi
ZWwoKTsKQEAgLTE0NzgsMTMgKzI4OTEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAot
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
by5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgs
IFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRI
b3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcgKzI5MjQsOTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBj
ZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRo
aXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIGluZGV4VmFsdWUgeyAqdGhp
cywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOworICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBHUFJSZWcg
ZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFjZSgqdGhpcywgYmFzZSk7Cisg
ICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAg
YmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAv
LyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2Fj
aGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsK
LSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1
Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7
CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisg
ICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBv
dXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwg
VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBP
dGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0
aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2Ny
YXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdU
MCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
T3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
dGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7
CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAotICAgIC8vIE90aGVyd2lzZSBpdCdz
IG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSks
IHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xNTUwLDIxICszMDE5LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3Ry
dWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBi
cmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGlu
ZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVt
cDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQz
Mk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1l
cmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JH
UFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JH
UFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhH
UFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0
b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3cs
IGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJl
Z1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWln
aHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCBy
ZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NzQsMjEgKzMw
NzMsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYQogICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihl
bnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBy
ZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmlj
UHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJl
ZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVt
cDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVt
cC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2Uo
KnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9
IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVt
cC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKwor
ICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJ
bmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAg
IGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwg
cmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5k
MzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1
bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAgIAogICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxl
X3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBt
ZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2Zp
bGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNwaWxsRm9yQ2Fs
bCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDAp
OwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszMTg5LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisg
ICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0
aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndl
IHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7
CkBAIC0xNjcyLDYgKzMyMDYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZt
KCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRl
VG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICszMjM5LDIwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVS
ZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwotICAgIGJveEludDMyKHJl
Z1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVn
cyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNjAsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9u
dW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFu
T3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMy
KG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tp
cCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZXN1bHRHUFIpOwor
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRo
aXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NU
aGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIz
MihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHplcm9MZW5ndGgubGluayh0
aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJl
Z1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMwOSw5OSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihM
ZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAg
IGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQp
LCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRP
ZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihp
bmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAg
bW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBi
cmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAg
ICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAg
ICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5
cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
MzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQ
Uik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0g
c2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENl
bGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUodm0o
KSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nh
c2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0TG9hZFByb3Rv
dHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BS
LCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAg
ICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI3OSw4ICsy
NzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhd
OwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
ICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAt
NTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
IAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRo
ZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBz
d2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2MjEsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyMiw4ICs3MDcs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMsOCArNzQ2LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsxMDI1LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAxLDggKzExODAsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29w
aWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIu
aCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTEsNDkgKzUz
LDExNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRleGluZ1R5
cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3Bl
cnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFz
ZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRHUFI7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5kZXhp
bmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291
bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAg
ICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAg
ICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAg
ICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmls
ZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAg
ICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAg
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxh
dGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
dHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2Zp
bGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVj
SW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisg
ICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwor
ICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAg
ICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSArMTY5LDczIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAg
ICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHBy
b3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
IAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Miw2ICsyNTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2Rl
QmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxs
KCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25z
dGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlO
YW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTQsOCArNDE3LDExIEBAIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4K
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsK
IAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFpbGFibGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlOYW1lLAogICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0
S2luZCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29kZSkpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0zMzQsNyArNDQwLDcgQEAg
SklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3ICs0NDgsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwog
ICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBs
b2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8g
Ynl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CkBAIC0zNTAsMTMgKzQ1NiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRT
dGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVs
c2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwog
CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcyLDQ5ICs0NzcsMTA1IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29y
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIg
PSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Cisg
ICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0
cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRl
ckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5n
cHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1f
YmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUu
bV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0
ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBH
UFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwg
YXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQz
Ml90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1
dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0
eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9h
Y2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNj
ZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRl
cywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00MjQsMTggKzU4NSw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsK
KyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIg
YXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lz
dGVycy4KQEAgLTQ0NCwyNSArNjM5LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlk
c1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC00NzIsMTkgKzY2OSw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7
CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BS
UmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHBy
b3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNl
R1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5
R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5k
KGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBX
ZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ug
d3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAt
NDkzLDIxMyArNzQxLDM2NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQ
Uik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7
CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7
CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAg
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAg
IAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVu
dCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFk
YXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAg
ICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNlTE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5n
VHlwZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVBy
b2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChi
YXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVn
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BS
LCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0
QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdp
dGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dp
dGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRX
aXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRo
ZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIs
Ci0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50
byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8g
c3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBk
aXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJl
ZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdmFsdWVW
YWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVH
UFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHZh
bHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRl
Y29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gRGly
ZWN0IDogTm90RGlyZWN0LCBwcml2YXRlRmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2RlKSk7CiAgICAg
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzA5LDc3ICsxMTEwLDk1IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2Vs
aW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
U2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
LQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRo
aXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFs
dWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2so
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVn
IHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5h
ZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0
aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVz
dWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03OTEsMTcgKzEyMTAsMjUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0
aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
ewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdU
MSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKQEAgLTgxMSwyMSArMTIzOCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdU
MCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29u
c3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29w
ZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9w
dGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBz
Y29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29wZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsg
KytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCBy
ZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODM4LDkgKzEy
ODAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTg1
MywyOSArMTI5NSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwxNSArMTMyNiwyMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BS
UmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVy
ZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVT
bG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNj
cmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpT
VmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYsMTIgKzEzNTMsNiBAQCB2b2lkIEpJ
VDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdU
MCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05MjIsNTEgKzEzNjMsODQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0
cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRh
Lm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7
Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcg
b2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAg
ICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9m
ZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIg
PSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFu
ZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQ
Uik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBK
dW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRy
dXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAg
aXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1
c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAg
ICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9m
ZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zm
c2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNl
dEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BS
LCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIo
c2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVW
YWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUp
OworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC05ODAsMTAg
KzE0NTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BS
KTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVz
dWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDcwLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAg
ICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwog
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAg
ICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE1MDAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworCisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5k
KTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiog
aW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwot
ICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5k
LCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQ
dHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUyOSw1MSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRT
bG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsK
IAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVl
VmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2Rl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVy
YW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBz
dHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFs
dWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQ
UlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAg
ICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFs
dWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7
CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0
dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAo
KSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAg
ICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRT
bG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAg
ICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BS
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEw
OTgsMjggKzE1ODMsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6
YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBh
IFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8g
ZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwor
ICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBl
bWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9h
ZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNj
b3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29w
ZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJh
bmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFt
aWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTEzNCwxMiArMTY0OCwy
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAg
ICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBp
bm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2lu
Y2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0
Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
KyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BS
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFs
dWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTE1MywyMyArMTY3NiwzMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7
IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFs
bG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBl
bWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAK
LSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAt
MTE4NiwxMCArMTcxOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBj
b3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3MzUsMTUxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1w
bGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAg
fQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0g
ICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3Vt
ZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3Vt
ZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBH
UFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsK
KyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3Vt
ZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1
ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdU
MDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQ
UiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNl
TE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIC8vIHZhbHVlIG1h
eSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkg
JiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1
ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gb3duZXJWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BS
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBv
d25lclZhbHVlLmVtcGxhY2UoKnRoaXMsIG93bmVyKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUtPmdwcigpOworICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CiAgICAgSnVt
cCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3du
ZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1w
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwg
JnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7
CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCBvd25lckdQUiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+
IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVk
IHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRT
cGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29y
ZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0
aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0
KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwp
KQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsK
KyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMTM4NSw4ICsyMDA1LDI1IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAgICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzY3JhdGNoR1BS
KTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxS
ZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNp
bGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisKICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcs
MTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lz
dGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBt
X21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJl
dHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3Nl
bWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkK
ICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhp
cyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxs
KCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1f
Ynl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5Niw2ICszOTYsOSBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxsSklUT3B0aW9u
cygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiB7CisgICAg
T3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOwor
CiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9u
SGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYg
KzUxOCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2
KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVj
dEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNl
TE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2Ug
ewogICAgIFNhbWVPcHRpb24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415605</attachid>
            <date>2020-12-07 18:51:27 -0800</date>
            <delta_ts>2020-12-07 19:53:47 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>439904</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3Ry
dWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5p
bmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAg
ICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAg
Y29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5k
ZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkp
LCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25z
LmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3Vs
YXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewogICAgICAgICAgICAgYXV0byYg
Y3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkgKyBibG9jay5sZWFkZXJPZmZz
ZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlv
biwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NyArMTA2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29k
ZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxCbG9jaz4gewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVt
cEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
T3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rp
b25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmls
ZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKIAogICAgIHZvaWQgZHVt
cElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlv
bmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwg
UHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCisgICAgdm9pZCBkdW1wKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNw
ZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkK
ICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9ja1R5cGU+Ojpk
dW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVh
ZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMz
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElDU3Rh
dHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAgIEJ5
dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENvZGVC
bG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlv
bnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6
Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwg
Y29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTExLDYg
KzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0
aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUlu
ZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVl
UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0
IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hB
cnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVBy
b2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFs
c2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJlRGF0
YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0
IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2ZpbGVC
dWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMzQsNyAr
MTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVt
IE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgogY2xhc3Mg
T3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFs
X3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGljOgogCiAg
ICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3Qg
bnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXpl
X3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9udW1Bcmd1
bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAg
ICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIHNp
emVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVt
VG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAg
ICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAg
ICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFu
ZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMs
IGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVt
QXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNv
bnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRz
KG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAg
ICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1
ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBz
ICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsK
ICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE9w
ZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBU
JiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVt
YmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxv
Y2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29uc3RhbnRz
KCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAgICAgICAg
IG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBAIHB1Ymxp
YzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
QXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX251bUNv
bnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51
bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9v
bCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2Fs
bGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRleChzaXpl
X3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygp
KTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXplX3QgYXJn
dW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8
IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KLSAgICAK
ICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVtYmVyT2ZB
cmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90
IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNvbnN0YW50
cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJu
IG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAogICAg
IFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0
ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRy
YWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3Qo
KTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxsZWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBlIGxvY2Fs
KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICBD
b25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9j
YWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGNv
bnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgo
aWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAg
ICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
VG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxl
ZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2Fscygp
OwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBt
X3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUo
KTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFj
a0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAg
ICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVk
c0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAogICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQo
KSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
YWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVy
YW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5k
LnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0
KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3Bl
cmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygpOwogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1i
ZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29u
c3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4
IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChpbmRl
eCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICBpZiAo
aW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1l
bnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkK
KyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRleCAtIG51
bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxlZUluZGV4
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXgg
LSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0
YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQz
NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3Zh
bHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUg
bmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMu
CiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAg
fTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNv
bnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3Rlcigp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFj
a0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChz
aXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgt
LTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0
KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQp
KTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRleHQpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+
Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBA
IC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0
bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0
cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxs
ZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxhdGlv
bihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5
KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRl
Y29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihTcGVj
dWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJ
bnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8v
IFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNh
bGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUg
Y29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1
YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7
IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAgYm9v
bCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92
aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29s
IGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQo
aXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpA
QCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2Nh
bChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBv
cGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVy
YW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQgY29u
c3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFu
dEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEz
NSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJn
dW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJbmRl
eCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAgICAg
LCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2
YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBpbnRl
cnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZh
bHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJn
dW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTIgKzMwLDE1IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBo
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAj
aW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAg
LTYwLDYgKzYzLDgzMSBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRv
dGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAor
dm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5k
KHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8g
Ynl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29k
ZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVj
b2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2Zp
bGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9u
bHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRp
Y3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJl
ZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFu
ZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Qml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1l
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJl
Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
KyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0
YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRh
Lm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1v
dj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVP
Zj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJ
bnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1l
cmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVh
bDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJp
Z2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVj
RG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6
IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQp
IHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBo
ZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAg
ICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAgICAgICAg
Ym9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gfHwg
ISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJl
TmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOwor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50MzIKKyAg
ICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmln
SW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7
CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNl
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5k
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRl
Y29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50
MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBi
ZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4g
c29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVz
dWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BV
cnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBh
dXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNy
YywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHByb2ZpbGUuZGlkT2JzZXJ2
ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNBbnlJbnRBc0RvdWJsZSA6IFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAm
IFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0Rv
dWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNC
eXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5
cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQp
KSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3Qs
IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAg
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5k
bGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29k
ZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9w
Y29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJ
bnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNh
c2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2Rl
KSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAg
ICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
RnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8
T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNQcmltaXRpdmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0
cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9w
X2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRj
aD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZm
ZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlm
ICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0
aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBu
ZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAg
IGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2Fk
IGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmls
ZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3By
ZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0
VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8g
RklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlm
IHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2Nv
cGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90
aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCks
IFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVj
UHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKSwgU3BlY1N0cmluZyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5j
X2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNF
eHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fz
eW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVy
dHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJv
cGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3Rpbmdf
ZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9w
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigp
LCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1l
bnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3Ro
ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2Nv
dW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+
KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxs
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3Rl
cToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5
cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jp
Z0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29i
amVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmpl
Y3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNf
ZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBj
YXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9w
X3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAg
ICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBv
cF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3Rh
dGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2Fz
ZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1
dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAg
Y2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoK
KyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNl
OgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2Fz
ZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxs
OgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bf
am5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBj
YXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVh
dGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBj
YXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bf
amJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6Cisg
ICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoK
KyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBj
YXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNh
c2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6Cisg
ICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRv
cl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dp
ZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9n
dWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAg
Y2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2Ug
bGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3Ny
X2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29w
X2hpbnQ6CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2Nh
bGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0
b3Jfb3Blbl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBs
bGludF9wcm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7
CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9j
aywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFk
LnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
cmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVh
ZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25l
KTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZd
IChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2Nv
ZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAg
ICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFw
aC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBm
YWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZv
ciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmls
ZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBt
X3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlv
bjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwg
YXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgp
LCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0
YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBd
LmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsK
KyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3Jk
ZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2Ug
Z3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZT
IGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5w
dXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQg
YXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICpt
X2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlv
bnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRy
eUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29y
XTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRp
Y3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
U3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ld
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisg
ICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1w
KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNB
dEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2Fs
bGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcs
NiArODk1LDEyIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAg
ICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0K
IAorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAg
ICByZXR1cm4gbV91c2VMT0w7Cit9CisKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpT
SW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRl
cnByZXRlcikKQEAgLTc2LDYgKzkxMCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1f
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewor
ICAgIG1fdXNlTE9MID0gT3B0aW9uczo6Zm9yY2VMT0woKTsKIH0KIAogSklUOjp+SklUKCkKQEAg
LTE0MCw2ICs5NzUsOCBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNk
ZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAg
ICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAg
ICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsgXAorICAgICAgICAgICAgc3BpbGxGb3JD
YWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkzLDMyIEBAIHZv
aWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9X
Q0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNu
YW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1l
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5h
bWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwK
ICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xv
d0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAg
ICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAor
ICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhG
dW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAo
SklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzQsNjcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRC
bG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQu
cmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZSht
X2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9j
aygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1
Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkp
CisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBl
bmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9j
ay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1
cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRb
bV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisK
KyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2Nr
Rm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFt
X2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3Vy
cmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZy
b21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNz
b3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3Nv
cnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVk
ZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFBy
ZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJv
bVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0
YXRlRnJvbVByaW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRDdXJyZW50
QmxvY2tTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2
aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5
dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUg
aW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEz
ODAsMjYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmICht
X2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAo
IW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2Vu
ZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBvcGNv
ZGVJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBt
X2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZUxP
TCkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsK
KwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsK
ICAgICB9CkBAIC01MTUsMTIgKzE0MzgsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJl
Q2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1
bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRl
ciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRl
ci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAg
ICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAg
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisK
KyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKQEAg
LTU3OSw3ICsxNTA0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9j
aGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lcSkKQEAgLTU5Nyw2ICsx
NTIxLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9tb2QpCisjZW5kaWYKKwogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNp
Z25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzMsMTUgKzE1NjMsMTggQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIg
LSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9X
SVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgp
ICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJz
dFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMg
bGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAg
ICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgp
IHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZz
ZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5t
X2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBl
YXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2Up
OworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAg
ICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAtNzc0LDYgKzE3
MDcsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBmb3IgKGF1dG8mIGV4aXQgOiBt
X2V4aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0Owor
ICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgIGp1bXBzLmxpbmsodGhp
cyk7CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAg
ICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0cy4KKworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKm1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENv
ZGVQdHI8T1NSRXhpdFB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgLy9pZiAo
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIC8vICAgIGRlc3RpbmF0aW9uID0g
TExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF90cmFt
cG9saW5lKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExM
SW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAg
ICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPm1ldGFk
YXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOworICAgICAg
ICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAgICAgICBtb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworICAg
IH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKQEAgLTEwNTgsNiArMjAxMyw2ODMgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUo
KQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBp
bGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhp
dEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAg
aWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1f
Ynl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUlu
ZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5k
KGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1
dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUu
IFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8g
Y29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5h
bmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFy
bS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2Vk
Q2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51
bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lz
dGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxs
b3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFkZChy
ZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0
JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUu
IFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8v
IGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVu
YW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBh
cm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRS
ZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisK
K3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBh
IGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9j
ayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRv
bid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBp
cyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3Ry
dWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
cmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAg
Ly8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmllci4gQnV0IGdlbmVy
YWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBmaWd1cmUgc29tZXRo
aW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAvLyAgICBDUkFT
SCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBh
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7Cisg
ICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChy
ZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3By
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNB
bGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcu
Z3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAg
ICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xv
YmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2
YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBh
dXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYgKHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUu
b3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBp
ZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3Bl
cmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOwor
ICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIGlzQWxsb2NhdGVk
L2xvY2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAvLyBoYXZlIGNvZGUg
dGhhdCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vIC0gc3Bp
bGxGb3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vCisgICAg
ICAgIC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2UgdGhlIFZhbHVlT3Bl
cmFuZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxvY2F0aW5nIHRoZSBy
ZWdpc3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1wLgorICAgICAgICAv
LyBPdGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNhbGxzIHVubG9jaygp
LCB3ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuCisgICAg
ICAgIHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IGZh
bHNlOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAg
UmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3Ig
KGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5z
KHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93
ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAg
IC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0
OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUu
aXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAg
IH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJ
Zk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAg
IGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTaWxlbnRT
cGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29yZCByZXN1bHQ7
CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAo
UmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgaWYgKHJl
Z1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5zYXZlUGxh
bi5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJl
Zyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmVzdWx0LnN0
YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lz
dGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29u
c3QgU2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3Bp
bGxlZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJl
c3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklU
OjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQ
bGFuKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJlZyBy
ZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIu
c2Vjb25kOworICAgICAgICBpZiAocmVnID09IHRvSWdub3JlKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NF
UlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHVuYm94RG91
YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNs
b3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93
Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRv
cCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0Fs
bG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAg
ICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
PSBTcGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cit9
CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBm
cHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7Cisg
ICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsK
KworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3Rl
cnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGFzc2ln
blJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOworCisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6
OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChn
cHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOwor
fQorCit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCk7CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVn
IHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
UkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJU
KHJlZ1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYg
KCFyZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAg
ICAgICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0
LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6
OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAg
IDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAg
IGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRl
RlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisK
K0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9
IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6
fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVn
IEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6
OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3Bl
cmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAg
ICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dw
ciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3Bl
cmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+
Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWND
ZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
ZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJh
bmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisg
ICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3Bl
cmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcg
cmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRv
dWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBK
SVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJS
ZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAg
ICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAg
ICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZh
bHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2pp
dCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOwor
ICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBI
YXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3Bl
Y0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRl
bXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsK
KworICAgIHJldHVybiBtX2ZwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVkZWVkID0g
WyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgcmVz
dWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygp
KQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2Vk
R1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5v
dFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N0
cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3JhdGNoR1BS
KSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BSKSk7Cisg
ICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2b2lkIEpJ
VDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUp
Cit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQor
ICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUpKTsKKyAg
ICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVj
dWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAg
aWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENo
ZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkp
OworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUp
Cit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBT
cGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SW50
MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVO
dW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMy
KQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29u
c3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1
bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZh
bHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAg
ICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sK
KyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRTdGF0
ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1f
Y29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9m
Q29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29u
c3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92
ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVy
YW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50U3RhdGUu
cmVnaXN0ZXJzID0geyB9OworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRl
ICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIK
ICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgi
CiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7
CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2Rl
QmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5r
SW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxl
OwpAQCAtMTAxLDE1ICsxMDUsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAg
U2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0g
ICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZl
UGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0
cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAg
ICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFj
a1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAg
U2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBm
b3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0
IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUg
aGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisg
ICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAg
IFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0
aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0
Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NM
QVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNp
bmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93
UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkwLDEy
ICsyMDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVy
ZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0
QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFs
IG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBv
ciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNl
bWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1
NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIs
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4
KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI3NCwyMCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisg
ICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZv
aWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xv
YmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7
CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBl
eGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMDAsOSArMzI1LDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50
KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwog
Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAg
ICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1
bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAg
ICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCks
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xv
d0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRk
SnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBp
bnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAs
NyArMzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7
CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6
Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcg
KzM2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBD
b21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlw
ZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0
KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9w
RXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJy
aWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNo
b3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTM1MCw4ICsz
NzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0
aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFi
bGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYpOworICAgICAgICB2b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnIHZhbHVlID0gcmVn
VDApOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOwogICAgICAgICB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZh
bHVlLCB2b2lkPgpAQCAtNDc1LDggKzUwMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9u
YWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
LCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9u
YWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSArNTExLDIwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1
Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0
aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJv
b2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAg
ICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxsSW1w
bChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
QEAgLTUxMiw5ICs1NDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29w
X2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0Myw3NyArNjc5LDgxIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3Bl
cnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5j
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9u
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBWaXJ0dWFsUmVn
aXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWcpOworI2Vsc2UKICAgICAg
ICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsK
KyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1
Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBv
cGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzI4LDggKzc2OCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpT
VmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
cik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRP
cGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzggKzc4MCwxOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRG
dW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxl
ZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbios
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rp
b24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hG
dW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKLQotICAgICAgICBKdW1wIGdldFNsb3dD
YXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBs
aW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAg
ICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20u
aXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBs
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
VmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNv
ZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dD
YXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7
Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAg
IGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2Fz
ZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyht
X3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9Q
QVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRy
dWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRl
ciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
IAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lk
IHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0
aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0
ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NTYsMjMxIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAg
Y2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklU
JiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7
CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BS
UmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOwor
ICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcg
bV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50
MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJ
VCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0
aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1p
Z2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENl
bGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklU
JiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7
CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJl
ZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBt
X29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVP
cGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6Cisg
ICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxp
ZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAg
ICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
LnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7
CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5p
c0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVl
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVy
YW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVn
JiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAg
ICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAg
UmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAg
ICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxs
Q2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmco
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7
CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAgICAg
dm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVT
eW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
TnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2
b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRh
dGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0g
SW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2
b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUo
VmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVz
dWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAgIHZv
aWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxh
biBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVudFNw
aWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3Qg
U2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2
ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFu
KFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50
ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMs
NyArMTE5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBt
X2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAg
ICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNv
cmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1f
Y29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTIzNiw3OSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAg
ICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMK
KyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAg
R1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJ
bnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJl
ZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhl
ci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
ICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9
IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3Ry
dWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsK
KyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBp
c0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVn
VmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
ICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90
aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhl
ci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3Jt
YXQ7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAg
ICAgT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAg
UmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJn
ZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90
aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlw
ZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBl
c1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3Rh
dGU7CisKKyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2Rl
QmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAg
ICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsK
KworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8
T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rv
cjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBm
YWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxPTCB7IGZhbHNlIH07CisgICAgICAg
IFZlY3RvcjxzdGQ6OnBhaXI8Qnl0ZWNvZGVJbmRleCwgSnVtcExpc3Q+PiBtX2V4aXRKdW1wczsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
ODIgKzQ2LDgyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBE
b3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFs
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpn
cmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhh
bkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRl
clRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
dHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0
cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjAsMjMgKzE2MCw1NiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25k
aXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRp
b24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29u
ZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNv
bnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8g
aW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhz
LmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMu
ZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAg
IHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisK
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKSk7CkBAIC0yNzIsMjUgKzMwNSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlVW5zaWduZWRJbXBsKFZpcnR1CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9w
ZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRh
cmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAg
YXV0byBmYWxsdGhyb3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBOb25aZXJvIDogWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGZhbGx0aHJvdWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0
aGUgc2xvdyBwYXRoOgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50
IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRp
bmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRp
bmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBp
c09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjAp
OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMjk5LDgg
KzM0MCw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9
CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkg
ewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAg
ICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjUsOCArMzY0
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAg
ICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAg
ICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiArMzg3LDEx
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQu
Ci0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWls
MSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIo
cmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAg
ICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY4
LDkgKzQwNCw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAg
ICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAg
ICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAK
LSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC0z
ODAsMTEgKzQxNiw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcgZnByID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShpbnB1dEdQUiwgZnByKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9u
ZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUp
LCBmcHIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOwor
ICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAg
ICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNz
KCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xv
d0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3Zl
cmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMy
KGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9
IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBi
b3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVj
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTIsMTEgKzQ2NCw1
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAg
RlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7
CisgICAgICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAg
IGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICAg
ICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVtcEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
ICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3Vi
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAg
ICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
dGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIo
KTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1
dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwg
aW5wdXRGUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29t
ZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAg
ICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiAvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQwNiw0MSArNTIwLDkxIEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2
IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVh
eCk7CisgICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBhdXRvIGVkeCA9IFg4
NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAg
QVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7CiAgICAgQVNT
RVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJl
Z1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBl
YXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNHUFI7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAgICBjbG9iYmVy
KGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5lbXBsYWNlKCp0
aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7CisgICAgICAg
IGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1wLT5ncHIoKTsK
KyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigpOworCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlz
LCBsaHMpOworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7CisgICAgICAgIGxo
c0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC0+
Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIo
bGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhz
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAg
ICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7
CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQsIHJl
Z1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAgSnVt
cCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1t
MzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBl
YXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90TmVn
MS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4NkRp
djMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0b3JQ
b3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1t
MzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBu
dW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Cisg
ICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAg
IGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNJbnQzMk9ubHkp
ICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0ludDMyT25seSkp
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OworICAgICAgICBl
bHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29k
ZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2Rl
TnVtYmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhz
KSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKQEAgLTQ1MSw3
ICs2MTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTQ2Myw3ICs2MjcsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAg
ICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs2MzcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4K
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQo
b3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs3MjYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzIzLDEzICs4ODYsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVtaXRNYXRoSUNGYXN0
PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVROZWdJ
QyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMu
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0
ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQg
Y2FuIGJlIGEgQmlnSW50Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSk7
CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0
MCwxOCArOTAxLDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDQ7Ci0jZW5kaWYKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAg
IFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKIApAQCAtNzU5LDMzICs5MDgsMTA2IEBAIHZv
aWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAgbGVmdE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAgICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVMRUFTRV9BU1NF
UlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAg
Ly8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICBy
aWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlm
ICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgaWYg
KCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCi0gICAg
U25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlwcGV0R2VuZXJh
dG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExp
c3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3Qo
KSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxpbmdQb2xpY3kg
PT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5ncHIoKSk7CiAK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAg
ICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQz
Mk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1bHRJc0ludDMy
ID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAg
ICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
KG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
YWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisKKyAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVzdWx0R1BSKTsK
KyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChyZXN1bHRJ
c0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seTsgCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHkg
fCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxz
ZQpAQCAtODAyLDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5z
dHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRl
Y29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtODQ4LDIwICsxMDcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29u
c3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owot
ICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgotCiAgICAgU25pcHBldE9w
ZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBA
IC04NzIsMjEgKzEwODAsNzcgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29u
c3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFsaWRGUFJSZWc7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRl
bXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
MSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1w
RlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAg
ICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAg
ICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgc2Ny
YXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmlnaHRTaGlmdEdlbmVyYXRvciBnZW4o
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgc25pcHBldFNoaWZ0
VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIyLCBzbmlw
cGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAg
IEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3Mp
OworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3By
KCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3Bl
Y0JpZ0ludDsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC05MDEsMTggKzExNjUsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChj
b25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAg
ICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBG
UFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRG
UFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5n
cHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxo
c0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMy
KE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNl
dEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBK
SVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
QWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0
aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4o
YWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXpl
KTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0
aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTIzLDE1ICsxMjIzLDM1IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3Rl
ciBhcyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2lu
ZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgot
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAg
ICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBh
cyBzcmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNp
bmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4K
KyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNl
bHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKQEAgLTk0MCwxOSArMTI2MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJl
Z3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFs
dWU7CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5s
aW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5s
aW5lQ29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJv
ZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigp
LCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3By
KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhK
dW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxp
bmVFbmQgPSBsYWJlbCgpOwpAQCAtOTYyLDcgKzEyODUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgcHJv
dmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTczLDEyICsxMzAwLDI5
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9
IGJ5dGVjb2RlLm1fcmhzOwogCisgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKworICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKQorICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdl
dE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKKyAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDIpKQorICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXND
b25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMzsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hG
UFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBS
VGVtcD4gc2NyYXRjaFRlbXBGUDsKKwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTk4NywyNSArMTMzMSw0MCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgRlBSUmVnIHNjcmF0Y2hGUFIg
PSBmcFJlZ1QyOwogI2VuZGlmCiAKLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRl
Y29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9w
ZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
bGVmdE9wZXJhbmQpKSB7CisgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEp
OworICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9
OworICAgICAgICB9CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkgeworICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMik7CisgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQogCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpCi0gICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMSkpOwotICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0g
ICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVn
VDI7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJh
bmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0
T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAogICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFs
aWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xl
ZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQog
ICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE0LDE3ICsxMzcz
LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJv
b2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0g
ICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRU
ZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25z
dCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7Cisg
ICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigp
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAg
ICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2Zp
bGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzLCByZXN1bHRSZWdzLmdw
cigpLCByZXN1bHQpOworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1
dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzQsMTEgKzE0MTAsMTggQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIH0pOwogI2VuZGlmCiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQ
cm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNo
RnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5j
dGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmlu
ZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ3LDggKzE0MzAsOCBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxz
ZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwog
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpA
QCAtMTA4NCw3ICsxNDY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0
aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRC
aW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24g
cmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUm
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsOSArMTQ3OCw5IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9Owor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSB9OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKQEAgLTExMTQsMTAgKzE0OTcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRP
cGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3Bl
cmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6
aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgIGlmIChHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRSZWdzLmdw
cigpID09IHJlZ1QxID8gcmVnVDMgOiByZWdUMSB9OworI2VuZGlmCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjpp
c1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICB9IGVsc2UgaWYg
KEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJl
c3VsdFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUNCA6IHJlZ1QyIH07CisjZW5kaWYKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsK
QEAgLTExNTUsMjMgKzE1NDUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwot
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdU
MjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg3LDI3ICsxNTYwLDkyIEBA
IHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbHNlIGlmIChp
c09wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29u
c3REb3VibGUoZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpOwogI2VuZGlmCi0KICAgICBS
RUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXND
b25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7
CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBS
UmVnIGxlZnRGUFI7CisgICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAg
T3B0aW9uYWw8RlBSVGVtcD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdo
dFRlbXBGUDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAg
ICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGxlZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdw
cigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdw
cigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxl
ZnRUZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdo
dEZQUiA9IGZwUmVnVDE7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAg
ICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAg
IEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVn
VDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKKwogICAgIGlmICghbGVmdE9wZXJh
bmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKKyAgICAKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CisgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogCiAgICAg
SklURGl2R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdz
LCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNo
R1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOworICAgICAgICBsZWZ0RlBSLCByaWdodEZQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKIAogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpIHsK
ICAgICAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwogCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigp
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1w
TGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5l
bXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsK
ICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CkBAIC0xMjE1LDM0ICsxNjUzLDEw
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklU
OjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAg
IEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOwor
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNG
UFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCks
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhz
LmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29k
ZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9
IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CisgICAgZW1pdE1h
dGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAg
ICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBG
UFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRG
UFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5n
cHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKGxo
c0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5k
OjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
c3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2Vf
Y2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8
T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmls
ZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJP
cHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9QT1cgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBA
IC0xNDUsMTAgKzE0OCw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxs
RXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENh
bGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yMTYsNiArMjE3LDkgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0
aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBj
YWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2Fs
bCgpOworCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2Rl
SUQgIT0gb3BfY2FsbF9ldmFsKQogICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxM
aW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjgsMTEg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9w
Y29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAKQEAgLTMzNCw0NCArMzM2LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChj
b25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BU
YWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29u
c3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAg
ICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKQpAQCAtMzg2LDM5ICszODgsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2lj
YWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBl
ciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biBy
ZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJl
Z2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0
aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFu
Y2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBjb21w
aWxlT3BDYWxsPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9p
dGVyYXRvcikgPSBTcGVjSGVhcFRvcDsKKwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0
Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBl
bmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBzbG93
Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENoZWNrcG9pbnRTbG93KTsKKworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdU
MCk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgcmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Bl
bj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBH
UFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00
NTYsNiArNDczLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4K
ICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9P
UFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93
IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMg
aXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5j
aElmTm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMTggKzQ5OCwyMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3Vs
dEdQUik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVy
UmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAg
ICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJS
ZXN1bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdz
LmFkZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFs
dWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1
bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVzZWRSZWdp
c3RlcnMsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1Bh
dGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAg
ICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAg
ICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KQEAgLTQ5OSwxMSArNTI0LDE0IEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgY29uc3Qg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAg
SnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsK
IAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAg
ICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAg
ICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSk7CkBAIC01MTUsMTAgKzU0Myw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
SXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2
LDcgKzU1Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAg
ICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzUsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5r
KHRoaXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcg
KzU4OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAg
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0K
LQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0
IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRv
IHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU4LDYgKzE1OSw3IEBA
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgLy8gT09QUzog
TWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBz
cGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE2NiwyNSAr
MTY4LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJl
dHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0g
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBz
bG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5k
KCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9y
PFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAh
PSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFk
dmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0
ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsK
QEAgLTIwNiwyNyArMTg5LDM2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xv
d0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2Fz
ZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNv
ZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNh
dmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRz
dC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVz
dWx0ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAg
ICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0IHsgfSk7CisgICAg
fQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYg
anVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNl
KGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9p
bmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNv
bnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1w
c1swXS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAo
SnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMSwxMCBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0Nv
bnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmlu
ZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZh
bHVlUHJvZmlsZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1Qw
OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9
IHJlZ1QxOwogI2VuZGlmCkBAIC0zMzgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBt
ZXRhZGF0YSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0
YSYgbWV0YWRhdGEsIEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4
aW5nVHlwZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NCw2IEBA
IEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3Jl
VHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIw
MCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmlj
dGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3
NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4
ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDYgKzUxLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlv
bioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzExMSw1MyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmly
dHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVz
dWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAg
ICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOwor
ICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0
b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxv
Y2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAg
YWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0g
cmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVn
ID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAg
ICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0
KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2Rz
dCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
ZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0
dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNjcsNTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdp
c3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJS
ZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAv
LyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5j
ZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVt
cGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxh
Y2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAg
ICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24n
dCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAg
SnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9I
YXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNl
VmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9s
RnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
cmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29u
c3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBp
cyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNz
KGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCAr
MjIwLDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3Bl
cmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lz
dGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBk
b25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3Vs
dC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQg
cHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2Vk
IGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICBy
ZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCBy
ZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
bV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVy
YW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9U
ZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAg
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAg
cmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAg
IEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJl
c3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVl
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1w
Q2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVt
cGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBD
ZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7
CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAg
ICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9H
UFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
ICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRl
bXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAor
ICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAg
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMu
YXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSBy
ZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9y
IGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNh
biB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Rv
LCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxs
cy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5
X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQK
KyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3Rv
CisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
KyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBt
X2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJl
Z3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMyMSwyOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Vt
cHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNTEsNzIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAK
LSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwg
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlu
cHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAg
R1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQ
Uik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRv
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwg
dGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJl
Z1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAg
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsK
KworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI1LDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090
aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19i
b29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIg
KzQ1OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5MCwyNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5w
dXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTIwLDU2IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMy
VGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBh
bmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7
Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2
NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNF
KEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1ODYsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENl
bGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4
ICs2MzUsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2
YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAg
ICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzAwLDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0
aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2
OSwxNSArNzE5LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1t
LmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1t
LmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTM4Niw1MiArNzYyLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5j
aElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBp
c1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0
byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsK
KyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlv
bk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJv
b2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIo
WmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5s
aW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0
Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29s
ZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBs
b3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVz
cGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdo
aWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsK
KworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVl
IHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAg
Ly8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9y
IGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52
ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGlu
LCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdU
MCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpm
YWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRp
b247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRp
dGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUg
bW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJU
ZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gy
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAg
RlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVl
PigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZG
YWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBj
YXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZw
U2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRo
aXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24s
IHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTY3LDEyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVu
ZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAg
ICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKwor
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBj
YXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5n
cHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
LQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTA5OCwyNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTI2LDI2IEBAIHZvaWQgSklUOjplbWl0X29w
X2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNTE1LDY1ICsxMTU3LDMwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25z
dCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVj
aWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVk
SW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAg
ICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0
ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRv
IGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJl
ID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5
cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNU
ZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOwor
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2
ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihF
cXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZh
bHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAg
ICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
Q2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7Cisg
ICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
ZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0
IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNH
UFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
dHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30K
IAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQ
UlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0K
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVx
SW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0K
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsK
KyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVl
R1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
amVxSW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAg
ICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nh
c2UpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDcxLDE1MCBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
c3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
Ym9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAg
ICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBh
dXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZh
bHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBh
cmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAg
ICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5j
aElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCBy
ZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxl
dmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0g
ICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdv
dG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAg
IGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0K
LSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0
IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3
b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJ
Zk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQz
MiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5n
IGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGws
IHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5n
IG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsK
LSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwg
cmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2
NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVy
bywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBp
ZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4K
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5T
dHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7
CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAg
ICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBD
ZWxsKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGlt
cGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5n
bGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVk
IGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUg
dHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5
IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAK
KyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxs
IGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91Ymxl
cyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdU
Mik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0
ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBj
ZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHBy
ZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhl
IHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4
b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwg
SlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93
IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4g
Rmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRl
c3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAg
ICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0
T0subGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0
byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBv
cjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdU
MikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Cisg
ICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qw
KSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTY3NCw2OCArMTYzMiwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7
CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0Vx
ID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91
YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAg
ICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhz
KSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVP
YmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgICAgICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJl
LgorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7Cisg
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2Ug
ZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChs
ZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8
fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtl
bjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERv
dWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9m
IHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElm
SW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFs
dWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVy
ZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBu
dW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0g
ICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92
ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJl
Z1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAg
YXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVx
dWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xv
dyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRz
KS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBz
b21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywg
cmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0
RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFs
LmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBo
aWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAg
ICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3Rv
IHNsb3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0
YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAg
ICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLwor
CisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwg
cmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0
aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2Jy
YW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBu
dW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Cisg
ICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAg
ICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJl
Z1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAg
IG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVP
ckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNo
NjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJn
ZXQpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93
IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMp
LgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291
bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIs
IHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsK
KyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAg
IGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRP
Sy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3Ry
aWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRh
cmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2Vs
bHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4g
Rmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRl
c3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51
bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0
YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc3Mywy
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBp
bGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihz
bG93Q2FzZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxh
dGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYg
U3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNy
Y1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVn
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAg
ICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAg
aXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhp
cyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0lu
dChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRo
aXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFu
Y2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgor
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBq
dW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhp
cyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIp
OworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisg
ICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50
ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFt
ZSk7CkBAIC04ODgsOSArMjA0MiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29w
ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDAp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAv
LyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRo
aXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIo
KTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIs
IEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVj
dE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29w
ZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjA3MywxNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFi
bGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZElt
bVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTky
Miw5ICsyMDk4LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVt
cFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAg
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIxMjIsMTQ3IEBAIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUq
IGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAg
bG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAg
ICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBj
b25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOwor
ICAgIGF1dG8gY29tcGFyZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBz
Y3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisK
KyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1
bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoY29tcGFyZU9wLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAK
LSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAg
ICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNv
bXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05v
dEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAg
ICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJ
bXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBo
YXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFr
ZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdl
IGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBw
b2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0
IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9
IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291
bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAg
ICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0
b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBT
cGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAK
QEAgLTEwMzUsOSArMjI3MywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3Qg
SW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAg
IEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29w
ZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisK
KyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9m
U2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmpl
Y3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTA0NSwxMyArMjI5Nyw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b190aGlzKGNvbnN0IEluc3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0g
Jm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21h
TW9kZS5pc1N0cmljdCgpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAg
ICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNU
b1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0
aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAv
LyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4K
KyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNw
ZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIo
Y2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAg
ICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0
ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYg
KGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1Rv
VGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlz
U2V0KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQor
ICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmpl
Y3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNh
Y2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7
CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2Fk
MzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyMzc4LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVk
RnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxs
ZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0x
MDY4LDcgKzIzODgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2Fs
bGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFu
ZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVl
T3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRl
bXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2Nh
dG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1w
Mi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAg
IHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJl
ZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigp
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2Fs
bGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxs
ZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2NCArMjQzMCwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVS
ZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAg
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVj
dDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90
YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAg
Ly8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0
aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTExNjIsOCArMjQ3NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAv
LyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlw
ZSBzdGF0ZS4KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2st
Pmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAg
IC8vIE9PUFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1Ig
ZW50ZXIuCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9u
Q291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAg
ICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJ
bW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAt
MTE4NywxMyArMjUwMywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQg
dGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNh
bkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAg
LTEyMDYsMTEgKzI1MjAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsK
KyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0
IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVu
dEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAt
MTIzMywxMCArMjU0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNv
bnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nh
c3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NTYs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganND
YXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1p
dFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJl
dHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjU3
Nyw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1f
c2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
RXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wp
OwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMp
OwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBl
bHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4
ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VS
VChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQg
KzI2NDEsNDYgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQ
UiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5
dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAg
ICAgc2NvcGUucmVzZXQoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3Vs
dC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgp
KQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3Bl
R1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vu
ZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1
bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9w
Y29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjcxMSwx
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJn
YzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzMyLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwor
CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0
ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVt
cC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFy
Z0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5k
ZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BS
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzY1
LDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIH0KIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgyMCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7Cisg
ICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODQ4
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBi
ZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4NzUsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFz
ayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHBy
b2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dD
YXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3
OCwxMyArMjg5MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
CiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5
dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9u
ZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZh
bENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVt
cCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMjkyNSw5MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRv
ciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9Owor
ICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRl
eFZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7Cisg
ICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJh
c2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChi
YXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIHRo
YXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhl
IG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAv
LyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0
b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nl
c3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
Z1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYg
aW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdl
LCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdz
IG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
IHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMy
KHNjcmF0Y2hHUFIpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3Vs
dEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVj
ayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAg
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWln
aHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAg
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVn
MzIocmVnVDEpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAg
ICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZWdUMCk7CisgICAgfQogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUK
LSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBz
dGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNl
dCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAg
IAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEg
KzMwMjAsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAg
IFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1
Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5k
ZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5k
ZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1w
bGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4
R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0
b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOwor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAg
fQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
IHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAK
ICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzA3NCw1MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JH
UFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBL
bm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRo
aXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVy
YXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5n
cHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCBy
ZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGlu
ayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRj
aEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE1OTgsNiArMzEyOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlw
ZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1w
TGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzMxOTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9u
QXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHBy
b2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiAr
MzIwNyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlj
a2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUo
KTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAh
PSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2Vu
VGFpbD4oKTsKQEAgLTE3MDIsMTEgKzMyNDAsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1l
bnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29B
dmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50
MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwor
ICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdU
MSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTcxNCwyOSArMzI2MSw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgo
Y29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNU
b1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdU
MCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9T
a2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAg
IHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBy
ZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBh
cmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAg
ICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDAp
OwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszMzEwLDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1
bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7Cisg
ICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7
CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdU
MCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRp
ZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAg
bG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
LQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNV
bmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NU
aGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFs
dWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1
ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3Mp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVl
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisK
KyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7
Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsK
ICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFs
dWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdz
KTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3Mp
KTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsr
bV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNl
bGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFS
TS4KQEAgLTU0Nyw4ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC01ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
Y3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQAog
I2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3Bh
Y2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01MSw0OSArNTMsMTE3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSBy
ZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAg
IH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9u
czo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1
bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAg
aWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHBy
b3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0
eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkg
fHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkg
fHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2sp
KQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhp
bmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAg
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KHByb3BlcnR5KSwgU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAg
ICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSks
IFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlz
U3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxP
TCgpKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiAgICAgfQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4Owor
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDIsMzkgKzE3Miw3MyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BS
UmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHBy
b3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
YmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVy
dHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAg
ICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0
ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4Owog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTIsNiArMjU2LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAor
ICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlO
YW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAg
ICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE0LDggKzQyMCwxMSBA
QCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2Fk
IHRoZSByZWdpc3RlcnMuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAs
IHZhbHVlLCByZWdUMSk7CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9k
ZShieXRlY29kZSksIHB1dEtpbmQsIHByaXZhdGVGaWVsZEFjY2Vzc0tpbmQoYnl0ZWNvZGUpKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAt
MzM0LDcgKzQ0Myw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQK
ICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJv
b2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArNDUxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3Qo
KTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRT
dGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICs0NTksMTIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3Qp
Ci0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0Pigp
KTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGly
ZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM3Miw0OSArNDgwLDEw
NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0
ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBp
bnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBh
Y2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
LSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vz
c29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9u
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
LSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUu
bV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUu
bV9nZXR0ZXIgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29k
ZS5tX3NldHRlciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0
ZXJHUFIgPSBzZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dl
dHRlciwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2V0dGVyLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJC
eVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVn
VDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVn
VDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0
aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsg
KnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vz
c29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAg
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1Qx
KTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qy
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRl
Y29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5
dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDI0LDE4ICs1ODgsNTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHNjcmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBi
YXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1p
dCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmll
ciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC00NDQsMjUgKzY0MiwyNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBT
aG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nh
c2UucmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE5ICs2NzIsNzAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAg
ICAgIHByb3BlcnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChwcm9wZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChwcm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBK
SVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Cisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
ZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9m
IHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8v
IElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJh
c2UgaXMgY2VsbC4KQEAgLTQ5MywyMTMgKzc0NCwzNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmls
dGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAK
ICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
LQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KwogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJy
YW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEu
bW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJy
YXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQ
cm9maWxlKTsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVz
dWx0R1BSIDogcmVnVDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
YXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxl
bmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmso
dGhpcyk7CiAgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMs
IHRoaXNWUmVnKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVl
LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1Qx
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlz
VlJlZywgdGhpc0dQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0
aGlzR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
dGhpc1ZSZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0
aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBn
ZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdU
MSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BS
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0
KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0
b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZl
IGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJh
dGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdh
eXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJh
c2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3Jh
dGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3Jh
dGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNl
R1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQ
UiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdU
MiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAg
ICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChi
eXRlY29kZSkpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTcw
OSw3NyArMTExMyw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBl
bWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgr
K107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdp
c3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlv
bldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhcklu
amVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzkx
LDE3ICsxMjEzLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAg
ICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJs
b2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJl
c3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVz
c09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVzdWx0R1BSKSk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC04MTEsMjEgKzEyNDEsMzYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25z
dGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlw
ZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29w
ZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25z
dGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVD
bG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
ZGVwdGgpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQor
ICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVz
dWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5n
ZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKQEAgLTgzOCw5ICsxMjgzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogCkBAIC04NTMsMjkgKzEyOTgsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwg
cmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQ
Uik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwog
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04ODQsMTUgKzEz
MjksMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
bG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxv
YWRQdHIoc3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQ
UiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRW
YXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTA2LDEyICsx
MzU2LDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxv
YWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTIy
LDUxICsxMzY2LDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xv
dCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7
CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9v
bCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJS
ZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAg
ICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2ggPSByZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1
ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAg
ICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAg
ICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
IAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkg
LT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAg
ICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJh
bmRTbG90LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0g
ICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAg
ICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFs
LCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAg
ICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAg
ICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0
ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoq
PihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Q
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+
KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVt
aXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAg
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHJlZ1QxOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxl
VmFyOgpAQCAtOTgwLDEwICsxNDU3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1
dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0g
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTk5NiwyNyArMTQ3MywyNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
KyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7
IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDI2LDQwICsxNTAzLDIyIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsK
KworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0
cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9p
bnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIo
YWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVp
bnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNl
dCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShz
ZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNzMsMjIgKzE1MzIsNTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWlu
dHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFk
YXRhLm1fb3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAg
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRs
ZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0
VmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7
CisgICAgICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBv
ZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVy
Zmx5VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAg
ICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVH
UFIsIG9mZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxK
dW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAg
ICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xv
dCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3Jl
UHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAg
bG9hZFB0cihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZz
ZXRHUFIpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJm
bHlHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8
ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBH
bG9iYWxWYXI6CkBAIC0xMDk4LDI4ICsxNTg2LDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90
b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBw
cm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRl
KG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1
ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVH
UFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAg
ICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAg
LTExMzQsMTIgKzE2NTEsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNh
bWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdl
IHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRl
bXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4K
IAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTExNTMsMjMgKzE2
NzksMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0K
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2Yg
ZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYg
d2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdh
aW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKQEAgLTExODYsMTAgKzE3MjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1LDYxICsxNzM4LDE1
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFy
Z3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1
bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2Fk
NjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEs
IEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmll
cihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZh
bHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRo
aXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUp
OworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJn
dW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAg
IHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwp
KQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVy
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsK
ICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25l
cikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
VmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAg
ICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAg
IEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzLCBvd25lcik7CisgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgb3duZXJHUFIgPSBvd25lclZh
bHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7
CisgICAgfQogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93
bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAg
ICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkK
KyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7Cisg
ICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5j
aCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJh
cnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNp
bGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVz
ZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3du
ZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgq
c2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAg
ICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZh
bHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVn
IHZhbHVlR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHZhbHVlVmFs
dWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVn
VDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAK
LSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2Vs
bC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEy
NzEsMTEgKzE4OTQsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhp
cywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAg
ICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46
Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyODUsMTAgKzE5MjMsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2Zp
ZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBl
bWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9w
ZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAg
c3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdU
MSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTEz
ODUsOCArMjAzNiwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0
CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwg
cmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOwor
ICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBv
d25lciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNv
cmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50
U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQp
OworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3Jv
QXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVf
dCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFy
cmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsg
eyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5o
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRo
Q2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBK
SVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBq
dXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9q
aXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAg
ICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9q
aXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0s
IHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDkgQEAgc3RhdGljIHZvaWQgZGlz
YWJsZUFsbEpJVE9wdGlvbnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9w
dGlvbnMoKQogeworICAgIE9wdGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAgICBPcHRpb25zOjpm
b3JjZUxPTCgpID0gMTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBPcHRpb25zOjp2YWxp
ZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJs
eVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJQ01GdXp6ZXIsIDQyNDI0MiwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNNUHJvYmFiaWxp
dHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VDdXN0b21TZXR0
ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisg
ICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVtIE9w
dGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415608</attachid>
            <date>2020-12-07 19:53:47 -0800</date>
            <delta_ts>2020-12-08 11:46:07 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>442356</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3Ry
dWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5p
bmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAg
ICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAg
Y29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5k
ZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkp
LCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25z
LmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3Vs
YXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewogICAgICAgICAgICAgYXV0byYg
Y3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkgKyBibG9jay5sZWFkZXJPZmZz
ZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlv
biwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NyArMTA2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29k
ZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxCbG9jaz4gewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVt
cEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
T3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rp
b25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmls
ZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKIAogICAgIHZvaWQgZHVt
cElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlv
bmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwg
UHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCisgICAgdm9pZCBkdW1wKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNw
ZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkK
ICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9ja1R5cGU+Ojpk
dW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVh
ZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMz
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElDU3Rh
dHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAgIEJ5
dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENvZGVC
bG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlv
bnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6
Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwg
Y29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTExLDYg
KzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0
aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUlu
ZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVl
UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0
IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hB
cnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVBy
b2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFs
c2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJlRGF0
YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0
IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2ZpbGVC
dWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMzQsNyAr
MTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVt
IE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgogY2xhc3Mg
T3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFs
X3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGljOgogCiAg
ICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3Qg
bnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXpl
X3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9udW1Bcmd1
bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAg
ICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIHNp
emVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVt
VG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAg
ICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAg
ICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFu
ZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMs
IGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVt
QXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNv
bnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRz
KG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAg
ICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1
ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBz
ICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsK
ICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE9w
ZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBU
JiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVt
YmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxv
Y2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29uc3RhbnRz
KCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAgICAgICAg
IG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBAIHB1Ymxp
YzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
QXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX251bUNv
bnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51
bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9v
bCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2Fs
bGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRleChzaXpl
X3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygp
KTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXplX3QgYXJn
dW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8
IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KLSAgICAK
ICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVtYmVyT2ZB
cmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90
IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNvbnN0YW50
cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJu
IG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAogICAg
IFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0
ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRy
YWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3Qo
KTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFi
bGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxsZWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBlIGxvY2Fs
KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICBD
b25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9j
YWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSB7IHJl
dHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGNv
bnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgo
aWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAg
ICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
VG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxl
ZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2Fscygp
OwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBt
X3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUo
KTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFj
a0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAg
ICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVk
c0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAogICAgIHNp
emVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQo
KSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
YWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVy
YW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5k
LnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0
KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3Bl
cmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygpOwogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1i
ZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29u
c3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4
IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChpbmRl
eCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICBpZiAo
aW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1l
bnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkK
KyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRleCAtIG51
bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxlZUluZGV4
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXgg
LSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0
YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQz
NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3Zh
bHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUg
bmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMu
CiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAg
fTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNv
bnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3Rlcigp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFj
a0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChz
aXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgt
LTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0
KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQp
KTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRleHQpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+
Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBA
IC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0
bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0
cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxs
ZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxhdGlv
bihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5
KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRl
Y29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihTcGVj
dWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJ
bnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8v
IFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNh
bGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUg
Y29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1
YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7
IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAgYm9v
bCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92
aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29s
IGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQo
aXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpA
QCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2Nh
bChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBv
cGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVy
YW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQgY29u
c3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFu
dEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEz
NSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJn
dW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJbmRl
eCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAgICAg
LCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2
YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBpbnRl
cnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZh
bHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJn
dW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTIgKzMwLDE1IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBo
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAj
aW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAg
LTYwLDYgKzYzLDgzMSBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRv
dGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAor
dm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5k
KHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8g
Ynl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29k
ZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVj
b2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2Zp
bGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9u
bHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRp
Y3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJl
ZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFu
ZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Qml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1l
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJl
Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
KyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0
YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRh
Lm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1v
dj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVP
Zj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJ
bnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1l
cmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVh
bDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJp
Z2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVj
RG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6
IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQp
IHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBo
ZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAg
ICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAgICAgICAg
Ym9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gfHwg
ISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJl
TmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOwor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50MzIKKyAg
ICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmln
SW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7
CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNl
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5k
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRl
Y29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50
MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBi
ZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4g
c29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVz
dWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BV
cnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBh
dXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNy
YywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHByb2ZpbGUuZGlkT2JzZXJ2
ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNBbnlJbnRBc0RvdWJsZSA6IFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAm
IFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0Rv
dWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNC
eXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5
cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQp
KSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3Qs
IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAg
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5k
bGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29k
ZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9w
Y29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJ
bnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNh
c2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2Rl
KSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAg
ICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
RnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8
T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNQcmltaXRpdmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0
cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9w
X2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRj
aD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZm
ZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlm
ICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0
aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBu
ZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAg
IGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2Fk
IGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmls
ZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3By
ZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0
VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8g
RklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlm
IHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2Nv
cGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90
aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCks
IFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVj
UHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKSwgU3BlY1N0cmluZyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5j
X2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNF
eHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fz
eW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVy
dHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJv
cGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3Rpbmdf
ZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9w
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigp
LCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1l
bnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3Ro
ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2Nv
dW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+
KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxs
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3Rl
cToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5
cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jp
Z0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29i
amVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmpl
Y3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNf
ZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNG
dW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29u
c3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
dG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3Bl
Y3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
ZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBj
YXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9w
X3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAg
ICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBv
cF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3Rh
dGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2Fz
ZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1
dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAg
Y2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoK
KyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNl
OgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2Fz
ZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxs
OgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bf
am5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBj
YXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVh
dGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBj
YXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bf
amJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6Cisg
ICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoK
KyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBj
YXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNh
c2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6Cisg
ICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRv
cl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dp
ZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9n
dWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAg
Y2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2Ug
bGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3Ny
X2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29w
X2hpbnQ6CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2Nh
bGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0
b3Jfb3Blbl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBs
bGludF9wcm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7
CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9j
aywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFk
LnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
cmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVh
ZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25l
KTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZd
IChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBtX2Nv
ZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAg
ICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFw
aC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBm
YWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAgIGZv
ciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmls
ZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICBt
X3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGljdGlv
bjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJnIiwg
YXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgp
LCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAgZGF0
YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBd
LmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsK
KyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3Jk
ZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2Ug
Z3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZT
IGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5w
dXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQg
YXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICpt
X2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlv
bnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRy
eUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKS5wdHIoKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29y
XTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRp
Y3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
U3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ld
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisg
ICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1w
KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNB
dEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2Fs
bGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcs
NiArODk1LDEyIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAg
ICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0K
IAorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAg
ICByZXR1cm4gbV91c2VMT0w7Cit9CisKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpT
SW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRl
cnByZXRlcikKQEAgLTc2LDYgKzkxMCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1f
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewor
ICAgIG1fdXNlTE9MID0gT3B0aW9uczo6Zm9yY2VMT0woKTsKIH0KIAogSklUOjp+SklUKCkKQEAg
LTE0MCw2ICs5NzUsOCBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICNk
ZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAg
ICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAg
ICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsgXAorICAgICAgICAgICAgc3BpbGxGb3JD
YWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1NiwyNiArOTkzLDMyIEBAIHZv
aWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9X
Q0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNu
YW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1l
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5h
bWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwK
ICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xv
d0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAg
ICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAor
ICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhG
dW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAo
SklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzQsNjcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRC
bG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQu
cmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZSht
X2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9j
aygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1
Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkp
CisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBl
bmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9j
ay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1
cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRb
bV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisK
KyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2Nr
Rm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFt
X2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3Vy
cmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZy
b21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNz
b3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3Nv
cnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVk
ZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFBy
ZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJv
bVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0
YXRlRnJvbVByaW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRDdXJyZW50
QmxvY2tTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2
aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5
dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUg
aW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtNDc3LDYgKzEz
ODAsMzIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmICht
X2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAo
IW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2Vu
ZDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX3B1dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4n
dCBjaGVjayBMT0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dD
YXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNSwxMiArMTQ0NCwxNCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0g
UmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9
IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Ns
b3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBt
X2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6
IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVj
b2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVj
b2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHNbMF0ubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1f
Ynl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgICAgIApAQCAtNTc5LDcgKzE1MTAsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3Rl
cSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3RyYXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfbW9kKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVnYXRlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfbmVxKQpAQCAtNTk3LDYgKzE1MjcsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2Vsc2UKKyAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKKyNlbmRpZgorCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19P
UChpbmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGRlYykKQEAgLTYzMywxNSAr
MTU2OSwxOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZpcnN0
VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgp
IHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0
KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAg
ICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIg
PT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZz
ZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwor
ICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09
IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cg
Y2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNz
KCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFscmVhZHkgZG8gdGhpcywg
c28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsK
ICAgICB9CkBAIC03NzQsNiArMTcxMywyOCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5r
aW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxh
YmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwo
KSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAg
IGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBzKSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJ
bmRleCA9IGV4aXQuZmlyc3Q7CisgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAg
ICAgICAganVtcHMubGluayh0aGlzKTsKKworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpCisgICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVj
a3BvaW50IGV4aXRzLgorCisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSAqbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0
cigpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGlu
YXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxPU1JFeGl0UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAg
Ly8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVj
a3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUpOworICAgICAgICAvL2Vsc2UgCisgICAgICAgIC8v
ICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVu
dEluc3RydWN0aW9uKTsKKworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRh
dGFUYWJsZUdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgZmFySnVtcChHUFJJbmZvOjpyZWdUMiwg
T1NSRXhpdFB0clRhZyk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwog
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsyMDE5LDY4MyBAQCBTZWNvbmRzIEpJ
VDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxl
VGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9p
ZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhh
bmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1w
cy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5h
cHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMu
bGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5r
PgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQg
YSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxv
Y2sgZm9yIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRv
bid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBp
cyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAg
IFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVz
ID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRv
IHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMu
Y29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAg
ICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQor
CitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQg
YSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxv
Y2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBk
b24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMg
aXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9u
Y2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0
OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0
cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJu
IHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7
CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUg
YSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1
dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMK
KyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Cisg
ICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOwor
ICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnRO
b1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3Jp
dGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUg
d2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5z
aXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUlu
ZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQ
UlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9
IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkg
eworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAg
ICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
cmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVy
SW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkK
K3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRp
b24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFk
ZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhl
IG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsK
KyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxv
Y2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZw
ciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBj
bGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0Cisg
ICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5k
KCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5k
KCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhp
bmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAv
LyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50
byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVu
cyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29u
c2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3Rl
cigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZv
ckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8g
c2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICgh
Y2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChy
ZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsK
KyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1Bh
dGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIK
KyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVn
IHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdW
YWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJz
KCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxs
KCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVu
dFNwaWxsUmVjb3JkIHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFw
cGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0g
dGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVl
Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3Bp
bGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGls
bGVkUmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2ls
ZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNh
bGwoKnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVG
b3JTcGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgcmVjb3JkLnNhdmVQ
bGFuKTsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHRvSWdub3JlLCBj
b25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2F2ZVBs
YW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcgPT0gdG9JZ25vcmUp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihz
bG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldElu
dDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6
IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VS
VChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVS
ZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNz
Rm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5v
cGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShm
cHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJl
ZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOworCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZw
ciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91
YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2Nh
dGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJU
KHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwor
dm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVl
LmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3Bl
cmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRl
bXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQorewor
ICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKwor
R1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOwor
ICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQ
UlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQ
UlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQ
UlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAg
IHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1f
ZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAg
IHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1f
ZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQo
b3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisK
K0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0
ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwg
bV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlv
bihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmls
dGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30K
KworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7
CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBp
ZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxP
cGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAg
ICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0
LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQu
YnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJ
VDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAg
aWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAg
IG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxv
Y2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFu
ZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7Cisg
ICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlw
ZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJh
ZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1
cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOwor
fQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgewor
ICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9v
cGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJh
bmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsK
K30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklU
OjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
ZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAo
bV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9q
aXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRG
UFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9j
ayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAg
IEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5n
cHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1f
aml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlz
Qnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7
CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpT
VmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1Zh
bHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRl
clR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0
LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVn
KG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNl
dCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQg
cmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAg
YXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNT
dHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9s
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYg
KCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVC
b29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xl
YW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVl
IH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
T3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5v
dE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsK
K30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2Vs
bENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51
bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJp
Z0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChp
c0JpZ0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47
CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0
cnVlOworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2Vu
ZGlmCisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50
MzIpIHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlm
ICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJ
bnQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0lu
dCh2YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50
OworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICgh
ZG9uZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVCaWdJbnQzMihvcGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1
ZSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENl
bGwodmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJp
Z0ludCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3Vy
cmVudEJsb2NrU3RhdGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5
dGVjb2RlVG9wKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUu
cHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRT
dGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAg
IG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+
KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsK
KyAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEz
ICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5j
bHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVk
ZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0g
T3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7
CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7
CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFz
cyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwyNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87
Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYs
IEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0
byh0KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxS
ZWdpc3Rlcj4+OworCisgICAgc3RydWN0IFNpbGVudFNwaWxsUmVjb3JkIHsKKyAgICAgICAgU2F2
ZVBsYW4gc2F2ZVBsYW47CisgICAgICAgIFJlZ2lzdGVyU2V0IHNwaWxsZWRSZWdpc3RlcnM7Cisg
ICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZUZvclNwaWxsOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
U2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
CisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewog
ICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAg
ICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0LCAxPiBqdW1wczsgLy8gVXN1YWxseSBq
dXN0IG9uZSBlbnRyeS4gQnV0IGZvciB0aGluZ3Mgd2l0aCBjaGVja3BvaW50cywgd2UgY2FuIGhh
dmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgSnVtcExpc3RzCisgICAgICAgIFNhdmVQbGFuIHNhdmVQ
bGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJl
dHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21lIG9wcyBz
YXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UKICAgICB9
OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTk4LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRk
cmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7
CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZh
Y2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0
dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdl
dEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1h
Z2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEg
c2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBj
b21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBh
IHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5
SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBD
b2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMsNiArMjc0
LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRj
aEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBsKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9p
ZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgICAgIHZv
aWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRD
YWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAg
IHsKQEAgLTMwMCw5ICszMjUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAg
ICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYs
IFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAg
IFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVt
cChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3Qo
SnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM1NCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxM
aW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0g
ICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25z
dCBPcCYpOwogCkBAIC0zMzcsNyArMzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChj
b25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0g
Y2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVP
cEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVx
VHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3co
U2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9v
bCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAg
ICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwg
U2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSB9OwpAQCAtMzUwLDggKzM3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8v
IFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0
aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KLSAgICAgICAg
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFk
YXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
LCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcgdmFsdWUg
PSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRP
cGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxl
KSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNTAyLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElu
c3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNDg0LDExICs1
MTEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1
Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChK
SVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAg
ICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChj
b25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAg
ICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9p
ZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
Yml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihj
b25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0OCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpA
QCAtNjQzLDc3ICs2NzksODEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3Nl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Rh
aWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9h
cmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNs
b3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBl
bWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0Umln
aHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZv
aWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVt
aXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wg
aXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluc3RydWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQ
UlJlZyk7CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZl
Q2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNj
cmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZy
b21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03
MjgsOCArNzY4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAg
SlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0MiwzOCAr
NzgwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1
bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4K
LSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPios
IGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklU
QmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNl
Jik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93
KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwotCi0g
ICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAg
ICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1Nl
dCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAg
ICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtB
bGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nh
c2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
cyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRl
ciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNs
b3dDYXNlJik7CiAKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNl
RW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5r
QWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwor
ICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAg
ICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUlu
ZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5NDMsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0
aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlv
biopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAg
ICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTM1LDYg
Kzk1NiwyMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJp
bmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJp
bmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAg
ICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVnIGhpbnQg
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAg
RlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5
IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcu
IE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3Bl
cmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOwor
ICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92
ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
U3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQp
OworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAg
ICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJh
bmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7
CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUu
b3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1
Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9w
ZXJhbmQpID0gZ3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFu
ZDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5k
KG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3Bl
cmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0lu
dDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Io
b3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
U3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVy
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1
c2VMT0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
U3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNw
ZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRL
aW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9y
ZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2Nh
dGVHUFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9j
YXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcp
OworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAg
ICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1h
a2UgdGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRv
IHNldCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJl
Zyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50
U3BpbGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgICAgIHZvaWQgc2lsZW50
RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJl
c3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAg
ICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAg
ICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29y
ZD4gbV9jYWxsczsKQEAgLTk1Myw3ICsxMTk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBt
X2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNl
czsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAg
ICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVu
c2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsxMjM2LDc5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29k
ZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxs
b2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQg
YW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1l
IHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBt
ZXJnZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAg
ICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07
CisgICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAg
dm9pZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAg
ICB8fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8
IGlzQWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAq
dGhpcyA9IHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3Qg
TG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAg
ICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxv
Y2tTdGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5k
VG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAg
ICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisg
ICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVy
Lm9wZXJhbmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVy
YW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAg
ICAgIEFTU0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3Bl
Y3VsYXRpb25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6
ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVy
LnJlZ2lzdGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxv
Y2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2Nr
U3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFw
aDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIg
fTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVk
aWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1f
Y3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9n
OworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOwor
ICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAg
ICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9M
IHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29kZUluZGV4LCBKdW1w
TGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVy
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
c0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IElu
c3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2ln
bmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1
bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgaW5wdXRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
LCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
biwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0
ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgog
ICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8g
LSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBp
bW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJoc0dQUik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRp
c2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDI1ICsz
MjQsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNv
bmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRp
b24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcg
cmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUg
Zm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0
aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25z
dGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxv
YXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICszNTksNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdp
c3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzM4Myw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChz
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMSk7CkBAIC0zNTAsMTIgKzQwNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7
CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAg
IEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9
IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQz
MihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAg
ICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICs0MjMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAg
ICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAg
IGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBS
SFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgwLDExICs0MzUsNDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBi
eXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAg
IGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYg
cHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2Jz
ZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRk
RG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXRE
b3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRy
dXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNE
c3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIo
KTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAg
ICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBP
T1BTOiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0
R1BSKSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1
dEdQUiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMzkyLDExICs0ODMsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNv
bnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVjPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3Ny
Y0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hT
dWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3Zl
cmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlJlZyByZXN1bHRGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1w
RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShp
bnB1dEdQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IG9uZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9u
ZSksIHRlbXBGUFIpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBG
UFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0
RlBSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNE
b3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSks
IGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQ
UiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEu
MDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7
CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRH
UFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRH
UFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0
ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBK
U1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3Qs
IGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQg
fCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihP
dmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QpOworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDYs
NDEgKzUzOSw5MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSBy
ZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NF
UlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0
ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVj
eCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFT
U0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVj
eCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVt
cDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNs
b2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7
CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5l
bXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7
CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAg
ICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5n
cHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBl
ZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisg
ICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBs
YWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVuc3VyZVNsb3dD
YXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgICAg
ICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNHUFIgPSByZWdU
NDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIsIHJocywgZWN4
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsK
KyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0gYnJhbmNo
MzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDct
MSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZDb252ZXJ0
VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVtZXJhdG9y
UG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1t
MzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhh
bk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsK
LSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBi
b3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgZWF4IH0pOwogCi0gICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwot
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShsaHMpLCBTcGVjSW50MzJPbmx5KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKHJocyksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNl
bHNlIC8vIENQVShYODZfNjQpCkBAIC00NTEsNyArNjM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
CiB9CkBAIC00NjMsNyArNjQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00
NzMsNiArNjU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwx
NSArNzQ1LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKQEAgLTcyMywxMyArOTA1LDExIEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJ
bnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5l
Z0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAg
ICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFs
dWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRo
SUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRl
PihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03NDAsMTggKzkyMCw2IEBAIHZvaWQgSklUOjplbWl0
Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0KICAgICBTbmlw
cGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7
CiAKQEAgLTc1OSwzMyArOTI3LDEwNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBh
dGgoY29uc3QgCiAgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMSkpOwogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
CiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudElu
dChvcDIpKTsKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwg
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdo
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBh
dGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1w
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRl
bXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRl
bXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9
CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJpZ2h0UmVncyk7CisjZW5kaWYKIAotICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0
Y2hHUFIpOwogCisgICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3Bl
cmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFz
dFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7
CisKICAgICBpZiAocHJvZmlsaW5nUG9saWN5ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1p
dFByb2ZpbGluZykKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoYnl0ZWNvZGUpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MuZ3ByKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBw
cm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGJvb2wgcmVzdWx0SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7
CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIG5vdDMyKHJlc3VsdEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBpZiAocmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTgwMiw3ICsxMDQzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgbGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0OCwyMCArMTA4OSw2IEBAIHZvaWQgSklU
OjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlk
RlBSUmVnOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVn
VDI7Ci0jZW5kaWYKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKIApAQCAtODcyLDIxICsxMDk5LDc3IEBAIHZvaWQgSklU
OjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIg
PSBJbnZhbGlkRlBSUmVnOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAg
IE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlBSOworCisgICAgLy8gT09QUzogZ2V0IHNv
bWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlBSLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAt
PmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAt
PmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQUi0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOwor
CisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQ
UiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gZnBSZWdUMjsKKwogICAgIGlm
ICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAogICAg
IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIsIHNuaXBwZXRTaGlmdFR5cGUpOworICAgICAgICBzY3JhdGNoRlBSLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSMiwgc25pcHBldFNoaWZ0VHlwZSk7CiAKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSks
IFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShy
ZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgICAgIHNldEpTVmFsdWUo
cmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JzaGlmdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTAxLDE4ICsxMTg0LDU0IEBA
IHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
QWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOwor
ICAgICAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVz
dWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5t
X2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBtb3Zl
KGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91
YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0
RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+
KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2VfY2FzdDxK
SVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7
Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+
KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRp
bWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6
ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5j
dGlvbj4KQEAgLTkyMywxNSArMTI0MiwzNSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
VW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRz
IGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCi0gICAgLy8gU2lu
Y2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lz
dGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICBKU1ZhbHVlUmVn
cyBzcmNSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNyY1RlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcmNUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wZXJhbmQpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzcmNUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZy
b20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisgICAgICAgIC8vIFNp
bmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdp
c3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kLCBzcmNSZWdzKTsKKyAgICB9CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC05NDAsMTkgKzEyNzksMjIgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogCiAgICAgbWF0aElDLT5tX2dl
bmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBzY3JhdGNoR1BSKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7Ci0KICAgICBNYXRo
SUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25U
b01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9uLCBNYXRoSUNHZW5l
cmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxp
bmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0
YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJ
Qy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Mp
OwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChzcmNSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTk2Miw3ICsx
MzA0LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICB9
KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVz
dWx0UmVncy5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29k
ZU51bWJlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRG
dW5jdGlvbj4KQEAgLTk3MywxMiArMTMxOSwyOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBw
ZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwor
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5z
ZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAg
bGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Cisg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVM
RUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hG
UFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisKICNlbHNl
CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwog
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBA
IC05ODcsMjUgKzEzNTAsNDAgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7
Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAg
bGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdl
bmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAg
ICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAot
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5z
ZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJ
bnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5m
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOworICAgICAgICByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7
CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisgICAgICAg
IGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkp
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAg
ICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3Bl
cmFuZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVn
VDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwogICAgIAogICAgIEFTU0VSVCgh
KEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdl
bmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKICAg
ICAKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwot
ICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVy
YW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0K
ICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZVN0YXJ0ID0gbGFiZWwo
KTsKICNlbmRpZgpAQCAtMTAxNCwxNyArMTM5MiwzNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUQmluYXJ5TWF0aElDCiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRo
SUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlm
ICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25z
dCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
LSAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAg
ICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIHJpZ2h0
VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CisgICAgICAgIH0KKwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwotICAgIH0gZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdo
dFJlZ3MuZ3ByKCkpOworICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhKdW1wcywgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICB9CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0x
MDM0LDExICsxNDI5LDE4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRo
SUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJl
c3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNI
ZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0
aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7
CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAt
MTA0Nyw4ICsxNDQ5LDggQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTEwODQsNyArMTQ4Niw3IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmls
ZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjpl
bWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBw
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9u
LCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2lu
c3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24p
LT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVs
KCk7CkBAIC0xMDk1LDkgKzE0OTcsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmlu
YXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMTE0LDEwICsx
NTE2LDE3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKIAogICAg
IEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJh
bmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFu
ZCkpKTsKIAotICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxl
ZnRPcGVyYW5kKSkKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFu
dChsZWZ0T3BlcmFuZCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzIHsgcmVzdWx0UmVncy5ncHIoKSA9PSByZWdUMSA/IHJlZ1QzIDogcmVnVDEg
fTsKKyNlbmRpZgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3Mp
OwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJp
Z2h0T3BlcmFuZCkpCisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFs
aWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRSZWdzLmdwcigpID09IHJlZ1QyID8gcmVn
VDQgOiByZWdUMiB9OworI2VuZGlmCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1
dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMTU1LDIzICsxNTY0LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkK
LSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotCiAgICAgU25pcHBldE9wZXJh
bmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgp
KTsKIApAQCAtMTE4NywyNyArMTU3OSw5MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkK
ICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERv
dWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAg
IEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdo
dEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxG
UFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7
CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+
ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmln
aHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0
RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlm
ICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Cisg
ICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7
CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZw
UmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBu
dWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJh
bmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAg
ICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFy
aXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBp
ZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0
UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNT
RVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiAgICAgfQpAQCAtMTIxNSwzNCArMTY3MiwxMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgewor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1
bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxo
cy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgbXVsRG91Ymxl
KGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11
bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAg
ICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ay
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCks
IHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygm
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2lu
c3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRo
SUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUsIHNsb3dDYXNlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklD
KGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOwor
ICAgICAgICAgICAgICAgIHN1YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVz
dWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5t
X2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJm
bG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9u
VG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0
aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3Vi
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01V
TCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZp
cnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3Rp
bmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDgsOCBAQCBib29sIEpJVDo6
Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDAp
OwpAQCAtMjE2LDYgKzIxNyw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4K
ICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJu
LgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAg
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKQEAgLTI2NCwxMyArMjY4LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAg
ICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQg
IT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNiw0NCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2Fs
bDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4o
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAg
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nv
bnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4NiwzOSArMzg4LDU3IEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAgICAgfQogICAg
IH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxk
IGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hl
Y2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAv
LyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhlcmU/CisKKyAg
ICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25N
b2RlOjpHZW5lcmljKSkpOwogCiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yT3Blbj4oaW5z
dHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IpID0gU3BlY0hlYXBUb3A7CisKICAg
ICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0IChpdGVyYXRv
cikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJv
cGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5leHRDaGVj
a3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3Bv
aW50U2xvdyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJl
UmVnVDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRC
ZVJlZ1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJl
Z1QwKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
ZXh0LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JP
cGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAg
IEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAg
LTQ1Niw2ICs0NzYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8g
T09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNs
b3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhh
cyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJh
bmNoSWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwxOCArNTAxLDIxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVz
dWx0R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0
ZXJSZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOwor
ICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRl
clJlc3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJl
Z3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2
YWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAot
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
Zmllcih2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJl
c3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJl
Z2lzdGVycywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVS
ZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93
UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAg
ICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQpAQCAtNDk5LDExICs1MjcsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBjb25z
dCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAg
ICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFt
ZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAogICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTUxNSwxMCArNTQ2LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01
MjYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAg
ICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3OCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxp
bmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEs
NyArNTkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAg
fQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2Ug
aXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwg
dG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTgsNiArMTU5LDcg
QEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogewogICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0
aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAvLyBPT1BT
OiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0
IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTY2LDI1
ICsxNjgsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAg
cmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxS
ZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkK
LSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4m
IHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5l
bmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVy
ICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6
YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9i
eXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBo
b3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIp
OwpAQCAtMjA2LDI3ICsxODksMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hv
dEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBT
bG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dD
YXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRl
Y29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgp
OworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCku
c2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEh
ZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5y
ZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAg
ICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1w
JiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBE
b2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAo
Y29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1
bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVt
cChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTMwOSwxMSArMzAxLDEwIEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW4KICAgICByZXR1cm4gc3JjLmlz
Q29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3Ry
aW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYg
dmFsdWVQcm9maWxlKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSk7CiAKLSAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlID0gcmVn
VDA7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlVGFn
ID0gcmVnVDE7CiAjZW5kaWYKQEAgLTMzOCwxMSArMzI5LDExIEBAIGlubGluZSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
IG1ldGFkYXRhKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlZykKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQ
cm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLCByZWcpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5k
ZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKQEAgLTM5MywxMSArMzg0LDYg
QEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3Rv
cmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmly
dHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAt
MjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDgg
Kzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0
aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IElu
dmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkp
IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTExLDUzIEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2Nh
dGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCBy
ZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwot
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7
CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9j
YXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFs
bG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAg
ICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJl
ZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcg
PSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hS
ZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwog
ICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0
dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9j
YXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcs
IHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9k
c3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1f
ZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1
Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE2Nyw1MCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQ
UlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJh
bmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3Rh
bmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAu
ZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1w
bGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdw
cigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAg
ICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRv
bid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAg
ICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90
b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFu
Y2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1i
b2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9y
LCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBj
b25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0
IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJl
c3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQw
ICsyMjAsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBv
cGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVn
aXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJl
IGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVz
dWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhh
dCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNr
ZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAg
IHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMs
IHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9w
ZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90
b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVt
cCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAq
dGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAg
ICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAg
cmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBz
Y3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFs
dWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRl
bXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwu
ZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVt
cENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIo
KTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisg
ICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90
b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAg
ICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0
VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIs
CisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7Cisg
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIo
KSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVl
IHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBm
b3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2Ug
Y2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
dG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNl
bGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRf
YnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3Vs
dAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJv
dG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4p
OworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9
IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+
cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzIxLDI5IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0
eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
RW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1MSw3MiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAg
IAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qx
LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5v
dENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
aW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0
R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1
dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFs
LCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
cmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDAp
OworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDAp
OworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MjUsMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhl
cikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwx
MiArNDU5LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIp
OworICAgICAgICAgICAgdGVzdDY0KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDkwLDI3IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0
ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBp
bnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MjAsNTYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAg
ICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50
MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAg
IGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAg
ICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlz
KTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25z
dCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU4Niw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAg
ICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90
Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMs
MTggKzYzNSw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKwor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAg
ICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAg
ICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDAsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJu
IHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAt
MzY5LDE1ICs3MTksNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElu
cwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJ
bW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5
cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJ
bW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzg2LDUyICs3NjIsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShj
b25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3Bl
Y1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRT
cGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywg
dmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJh
bmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0
cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBh
dXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9u
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9
OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9m
dW5jdGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
Qm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Qz
MihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBp
bmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwg
ZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVy
dCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJv
b2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhl
IGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyBy
ZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwg
d2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDAp
OworCisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFs
dWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAg
ICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBm
b3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBp
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sg
aW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
Z1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRp
dGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVj
dWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29u
ZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRp
dGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDAp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRs
ZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRj
aDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAg
ICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQ
Uiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
Y29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsK
LSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRy
dWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkg
eworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3Jl
IGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNv
bmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
ZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
SWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2Ny
YXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
biwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NjcsMTI5IEBAIHZv
aWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAg
ICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisK
KyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8g
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQp
OworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0g
dW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAg
ICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
CisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gy
LmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7
CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVt
cCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAg
IC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMDk4LDI2IEBAIHZv
aWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAg
ICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMjYsMjYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC01MTUsNjUgKzExNTcsMzA1IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNv
bnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNw
ZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZt
ZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0
ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAg
ICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxo
cyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5t
X3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29u
c3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1
dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBh
cmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3Jk
ZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVu
VHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihp
c0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAg
Y29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAg
ICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxo
c1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAg
ICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0
aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElm
Tm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBk
c3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVu
YW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEplcT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNF
cSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91Ymxl
RXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICgh
dmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgewor
ICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsK
KyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIElu
dDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRh
cmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQ
UlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxo
c0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2Rl
Lm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQor
fQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAg
R1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAg
fQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29s
ZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
ZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
fQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BS
ID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAg
IHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9y
ZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdl
dCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdU
MTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0NzEsMTQ2IEBA
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICgh
dmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDog
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAg
SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3Vs
dEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwg
d2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBk
b25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290
byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAg
IC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxk
IGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVt
YmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25s
eSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdU
NSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBy
ZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0
IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAg
IGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQg
dG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmlj
dEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29s
ZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKwor
I2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1
bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAg
cmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwp
CisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVt
ZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBi
cmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYg
d2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmlj
ayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8g
aXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAg
ICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUg
aXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1Zh
bHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYg
Ym90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAot
ICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxl
ZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5s
aW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNv
dmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQo
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7
CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVz
dCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAg
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsK
KyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNjc0LDY4ICsxNjI4LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1w
KGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVF
cXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkg
eworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNG
UFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQg
PT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJp
Z2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwot
ICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhl
IDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQz
Mi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAv
LyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVF
cXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWws
IHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdU
MSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkg
ewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGlu
ayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElm
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xv
d1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2Vu
OworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAg
IGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAg
ICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQg
d291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNo
SWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFu
IEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxl
YXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAg
ICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMp
OworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2
NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1
YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7
CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
YXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisg
ICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBk
byBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ug
b25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAg
ICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAo
dG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
b3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAor
ICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzY5LDIxOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9w
U3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAg
ICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dD
YXNlKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
R1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAg
fQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51
bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVj
Qnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJl
ZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdU
MCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0Jp
Z0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsK
LQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShz
cmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIo
c3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNy
YywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBl
bHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
I2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElm
TnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Qmln
SW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAo
KTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsK
KworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3Ry
aW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNy
YykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlm
IChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICBy
ZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3
aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
QEAgLTg4OCw5ICsyMDM4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUo
Y29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdl
IGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywg
Y3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3Ro
ZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1Qw
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMDY5LDE3IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkg
KzIwOTQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFi
bGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjExOCwxNDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVt
cFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7Cisg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
dGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRy
VGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsKICAgICBsb2Fk
MzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBK
dW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51
bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBy
ZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0K
LSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0
ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAg
YXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwg
cmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAg
ICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFy
ZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFy
ZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
TnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQg
SklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0K
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8
T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUg
bm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMg
Y2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5p
dGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50
ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlm
ZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9j
b2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsg
KytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGop
KTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1
dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVU
cnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNP
dGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAt
MTAzNSw5ICsyMjY5LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0
cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNj
b3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVD
aGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BS
UmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0g
cmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2Nv
cGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90
aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMjkzLDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Ro
aXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0
YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5
dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2Rl
LmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxv
YWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhp
cykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMg
cmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90
Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5v
IG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAg
ICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09i
amVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHBy
b3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNT
dHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbG9h
ZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlz
KSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQo
KSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsg
Ly8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVk
U3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihj
YWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzNzQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5j
dGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJl
ZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgs
NyArMjM4NCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQg
c2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUs
IGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdw
clRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVPcGVy
YW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JS
ZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFy
ZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVS
ZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRS
ZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJl
ZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9m
RXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDI2LDMzIEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywg
U3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1p
dEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBU
aGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5n
IGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwpAQCAtMTE2Miw4ICsyNDcxLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1h
a2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0
YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0
dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8g
T09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRl
ci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3Vu
dGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBh
dXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0
KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3
LDEzICsyNDk5LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUg
c2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVP
cHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAg
IGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIw
NiwxMSArMjUxNiwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
CiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAg
ICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29y
a3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5z
dHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMz
LDEwICsyNTQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwog
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2
b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU1MiwxOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdl
eHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1Jl
Z2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8
UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJu
VmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTczLDQy
IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29w
ZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVj
ID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9w
Y29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjYz
Nyw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNv
ZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBz
Y29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVt
cGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIp
OwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwor
ICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYK
IAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rp
b25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29w
ZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0g
b3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNzA3LDE5IEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0
YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3MjgsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAg
ICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAu
ZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5n
cHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BS
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3NjEsNDIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBWYWx1ZU9w
ZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgR1BS
UmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAg
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgfQogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAg
IAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICsyODE2LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBt
X3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKQEAgLTE0MzYsNiArMjg0NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsg
Ly8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsyODcyLDE1IEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9
IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Cisg
ICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBM
aXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
bW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJh
eU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdU
MCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBl
SnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBMYWJlbCBkb25l
ID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4ODksMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwog
ICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25J
bmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUs
IG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2Rl
SW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUs
IG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5Pigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcgKzI5MjIsOTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVjayB0aGF0IGJhc2Ug
aXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVl
IHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIGluZGV4VmFsdWUg
eyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxs
OworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBH
UFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0K
LSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9y
J3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAg
IEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJl
Z1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJl
Z1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIC8vIENoZWNrIHRo
ZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBB
ZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRj
aEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3Mu
bGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9Q
dHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRleCBp
cyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4g
aXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkp
LCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBz
dGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNl
dCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsK
KyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAotICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMyKHJlZ1QxKTsK
LSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTUwLDIxICszMDE3LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3Vu
ZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BS
UmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAg
IGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1l
cmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1l
cmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
aW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVu
dW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwog
CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRp
bWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWln
aHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcg
fCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVy
aWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NzQs
MjEgKzMwNzEsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYQog
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJl
bG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRH
ZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGlu
ZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlu
ZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVt
cGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRl
eEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJh
dG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAg
IH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJv
cGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWdu
RXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRl
eChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAgIAog
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRp
b24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVU
b1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNwaWxs
Rm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwg
cmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszMTg3LDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkp
OworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdU
MiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9n
dWU+KCk7CkBAIC0xNjcyLDYgKzMyMDQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJl
Z1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhp
cyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICszMjM3LDIwIEBAIHZvaWQg
SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpT
VmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwotICAgIGJveElu
dDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxh
YmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNTgsNDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNv
ZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1YjMy
KEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBz
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVtcCB6ZXJvTGVu
Z3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMyKG51bVBhcmFt
c1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZXN1bHRH
UFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVyb0xlbmd0aC5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMy
KExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAg
ICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgYm94
SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHplcm9MZW5ndGgu
bGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDAp
KSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
Z1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNlbmRpZgogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMwNyw5OSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFu
Y2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Cisg
ICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMu
bGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRl
ZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJl
Z1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1l
bnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJ
bW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7
Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVn
cyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3Vu
ZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgp
KTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9m
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIp
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVH
UFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwor
ICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2Ny
YXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BS
KCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAg
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5
cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
c2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0TG9h
ZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3Mp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdz
KTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5
VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI3
OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAg
ICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFs
SW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
ICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAg
IC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdp
c3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2MjEsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyMiw4
ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMsOCArNzQ2LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsxMDI1LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAxLDggKzExODAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclBy
aW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTEs
NDkgKzUzLDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRl
eGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJv
cGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1
bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAg
aW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmll
cnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkp
IHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7
Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWws
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQor
ICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwg
cHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RD
ZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwg
cHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9s
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJh
c2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAg
ICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNw
ZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3Ry
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4Owot
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVn
VDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICAr
K21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTAyLDM5ICsxNzIsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZh
dGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAr
K21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTUyLDYgKzI1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHIKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1f
Ynl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8g
YmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
ICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3Rh
bnRJbnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkK
QEAgLTMxNCw4ICs0MjAsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZh
bFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJs
ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAg
ICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVy
dHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBw
cm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kLCBwcml2YXRlRmllbGRBY2Nl
c3NLaW5kKGJ5dGVjb2RlKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KQEAgLTMzNCw3ICs0NDMsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJ
VDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
OwpAQCAtMzQyLDcgKzQ1MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUg
PSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29k
ZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1MCwxMyArNDU5
LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9Owog
CiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5
VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CkBAIC0zNzIsNDkgKzQ4MCwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0
aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
YmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFj
Y2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nv
ci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGlu
dDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhp
cywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAg
ICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25z
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwg
cmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNl
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVy
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0
ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBpbnQzMl90
IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBn
ZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBhdHRy
aWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFj
Y2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBw
cm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdw
cigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQyNCwx
OCArNTg4LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
IHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0
Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAg
ICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNl
IHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDQ0LDI1ICs2NDIs
MjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVy
blZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOSAr
NjcyLDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFz
ZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0
eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJh
cnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJz
IHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00OTMsMjEzICs3NDQsMzY2IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVs
QnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlH
ZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRC
eUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJy
YXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVH
UFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFy
cmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Cisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0
ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAg
ICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBH
UFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNW
YWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
dGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAg
ICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
dGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBKSVRHZXRCeUlk
V2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0
aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChn
ZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0
aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwot
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNv
ZGUubV9mbGFncy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJ
biBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBv
YmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVy
IHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJl
Z2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVy
ZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCBy
ZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZh
bHVlKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1Qx
OworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1v
ZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QsIHByaXZh
dGVGaWVsZEFjY2Vzc0tpbmQoYnl0ZWNvZGUpKTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CkBAIC03MDksNzcgKzExMTMsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdp
dGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNl
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVk
dWNlIGNvZGUgc2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVy
QmFzZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhC
ZWdpbih0aGlzKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5
SWRzW21fcHV0QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKLQorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAg
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZElu
ZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OwogCisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRl
eCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlm
ICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xv
c3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0
aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTc5MSwxNyArMTIxMywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0
YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNj
b3BlRGVwdGg7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2Nv
cGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJl
c29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25z
dGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdU
MSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdU
MCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3Vs
dEdQUikpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtODExLDIxICsx
MjQxLDM2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNj
b3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1
bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2Fs
RW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9s
ZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04MzgsOSArMTI4Myw5IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
LCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0
R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtODUzLDI5ICsxMjk4LDI5IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BS
LCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtODg0LDE1ICsxMzI5LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBicmVh
azsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHNjcmF0Y2hHUFIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUikpOworICAgIGxvYWQz
MihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNj
b3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVn
IHJlZykKQEAgLTkwNiwxMiArMTM1Niw2IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRH
ZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKQEAgLTkyMiw1MSArMTM2Niw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBz
d2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
ICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8v
IFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNo
ZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25h
bGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9u
LgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZz
ZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJl
ZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAg
ICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZz
ZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2Nv
cGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUt
PmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QyOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAg
ICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQ
UiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8
SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAg
ICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKICAgICAgICAgICAgIGlmIChB
U1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMy
KEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNO
b3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQp
OwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBuZWczMihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0R1BSLCBvZmZzZXRHUFIpOworICAg
ICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsK
KyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRT
bG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBk
c3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTk4MCwxMCArMTQ1NywxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05OTYs
MjcgKzE0NzMsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAK
ICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTAyNiw0
MCArMTUwMywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0
aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQp
Ci17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJl
Z1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0
cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMDczLDIyICsxNTMyLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1
cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFs
dWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAg
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlv
bmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4g
YnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAg
ICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1w
bGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGJ1
dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZz
ZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0
cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAgIGppdEFz
c2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQ
dHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7
Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5
R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CisgICAg
ICAgICAgICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BS
LCBCYXNlSW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAg
ICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMTA5OCwyOCArMTU4Niw1NyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRp
YWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsK
ICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVz
ZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGlj
YWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNo
cG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2
YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAg
ICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2Nv
cGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAg
ICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAg
ICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CkBAIC0xMTM0LDEyICsxNjUxLDIxIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0
KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9t
IGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFu
eSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBl
CiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhp
Y2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNh
biBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxp
emVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhp
cyk7CkBAIC0xMTUzLDIzICsxNjc5LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBi
bG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVn
aXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0
IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
c2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBAIC0xMTg2LDEwICsxNzIxLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4o
KTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNv
ZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpA
QCAtMTIwNSw2MSArMTczOCwxNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1l
bnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
YXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMp
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1lbnRz
R1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpLCByZXN1bHRHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7Cisg
ICAgR1BSUmVnIHZhbHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVu
dHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFs
dWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9
IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1l
bnRzR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgIH0KKyAgICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQ
UiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJl
Z2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0
ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgICAgIGlm
ICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgaWYg
KCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
ICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG93bmVyVmFsdWUuZW1wbGFjZSgqdGhp
cywgb3duZXIpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IG93bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7
CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihvd25lciwgcmVnVDApOworICAgIH0KICAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93
bmVyKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwob3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BS
KTsKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7Cisg
ICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4K
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3Bp
bGxCZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJT
bG93UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNp
bGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisg
ICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChvd25lck5v
dENlbGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90
Q2VsbC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCB2YWx1
ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFs
dWU7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8
fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0
ZUJhcnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAor
ICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5r
KHRoaXMpOwogfQogCkBAIC0xMjcxLDExICsxODk0LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxk
KGluZGV4KSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtu
b3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDAp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjg1LDEwICsxOTIzLDIzIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAv
LyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNw
ZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkp
OworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAg
ICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0
ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC0xMzg1LDggKzIwMzYsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW47CisgICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJh
cnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlv
bmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCks
IG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwo
KnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKIH0KIApAQCAtMTQwNCw2ICsyMDcyLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElk
ZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNDY5LDYgKzIxMzksOCBAQCB0
ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQg
cHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VM
T0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBEaXJlY3QgJiYgT3A6Om9wY29k
ZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBOb3REaXJlY3QgJiYg
T3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3Rlck1hcC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcild
OwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgp
OyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAg
ICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07
IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51
bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAg
ICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90
IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5B
QkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1f
aml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYs
NiArMzk2LDEwIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBP
cHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VE
RkdKSVQoKSA9IDA7CisgICAgT3B0aW9uczo6Zm9yY2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6
dXNlTExJbnQoKSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFs
aWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1i
bHlTdHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2JhYmls
aXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0
dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51bSBP
cHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415658</attachid>
            <date>2020-12-08 11:46:07 -0800</date>
            <delta_ts>2020-12-08 13:30:47 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>443407</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTg3MDYwLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTg3MDYwLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rl
c3RzL3N0cmVzcy9yZWdyZXNzLTE4NzA2MC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8vIFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNoLgogCitmdW5jdGlvbiBmb28oKSB7CiBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKICAgICB2YXIgYXJyID0gW107CiAgICAg
YXJyLmNvbnN0cnVjdG9yID0gewpAQCAtNywzICs4LDUgQEAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgaSsrKSB7CiAgICAgfQogICAgIGFyci5jb25jYXQoWzFdKTsKIH0KK30KK2ZvbygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1w
ZXIuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAj
aW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAK
KyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lk
IEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpAQCAtMjY5LDcgKzI3MSw3IEBAIHZv
aWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIH0KIAogdGVtcGxhdGU8Y2xh
c3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBo
KEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0
ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBp
Y1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wR3Jh
cGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJ
Q1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVtcEhlYWRlcihibG9jaywgaW5zdHJ1
Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNv
ZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQucHJpbnQoImJiIyIsIGJsb2NrLmlu
ZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0aW9uc0F0SGVhZCkgeworICAgICAg
ICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFkOiBbIik7CisgICAgICAgICAgICBj
b25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9jay5pbmRl
eCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAg
ICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSks
ICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMu
YXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAgICAgICAgICBhdXRvJiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNl
dCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudEluc3RydWN0aW9u
LCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3
ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsK
LSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBj
b25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1w
R3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBP
cHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlv
bnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxl
KCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAgdm9pZCBkdW1w
SWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAogCiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9u
YWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQ
cmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKKyAgICB2b2lkIGR1bXAoQ29k
ZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rp
b25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gc3Bl
Y3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQog
ICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrVHlwZT46OmR1
bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRoaXMsIHNwZWN1bGF0aW9uQXRIZWFk
LCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0
dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0
ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJs
b2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9u
cygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6
bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBj
b25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNiAr
NTExLDcgQEAgcHVibGljOgogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rp
b25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5k
ZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQ
cm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3Qg
RnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFy
cmF5UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJv
ZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxz
ZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKK30KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgaWYgKGF1dG8qIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQg
OiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKQorICAgICAgICAgICAgZnVuYygqcHJvZmlsZUJ1
Y2tldCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
VmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEzNCw3ICsx
MzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YoCiAKIGVudW0g
T3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlID0gZmFsc2U+CiBjbGFzcyBP
cGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxf
dDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVu
c2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0NCwyMyBAQCBwdWJsaWM6CiAKICAg
ICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBu
dW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQorICAgIGV4cGxp
Y2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVf
dCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkKICAgICAgICAgOiBtX251bUFyZ3Vt
ZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAg
ICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIHNpemVf
dCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgc2l6
ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1U
bXBzICsgISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKICAgICAg
ICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKICAgICAg
ICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5k
cyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywg
Y29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1B
cmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29u
c3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMo
bnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAg
LCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBtX3ZhbHVlcy5n
cm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOworICAgICAgICBtX3ZhbHVl
cy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMg
KyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwog
ICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3Bl
cmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQm
IGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1i
ZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9j
YWxzKCkpCisgICAgICAgICwgbV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMo
KSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAg
bV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcyLDMzICsxNzYsNTEgQEAgcHVibGlj
OgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1B
cmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBt
X251bUxvY2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsg
fQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29u
c3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVt
YmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0KIAorICAgIHRlbXBsYXRlIDxib29s
IGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxs
ZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkp
OwotICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1
bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwg
bnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAog
ICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFy
Z3VtZW50cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3Qg
aWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRz
KCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBp
ZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAg
UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudElu
ZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKworICAgIHRlbXBsYXRl
IDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJh
Y2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgp
OyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29uc3RSZWZUeXBlIGNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAgIAogICAgIFJlZlR5cGUgbG9jYWwo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIENv
bnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2Nh
bEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIHsgcmV0
dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgY29u
c3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChp
ZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAg
IHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZU
bXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRz
KCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVl
ICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7
CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1f
dmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkwLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgp
OwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNr
Q2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKIAogICAgICAg
ICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUgQEAgcHVibGljOgogCiAgICAgc2l6
ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNB
cmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgp
ID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNh
bGxlZUluZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJ
bmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50SW5kZXgob3BlcmFu
ZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQu
dG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCArMzQ4LDE1IEBAIHB1YmxpYzoKICAg
ICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQo
KSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
YWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVy
YW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25z
dGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0K
IApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51bWJl
ck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25z
dApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaW5kZXgg
PCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4
IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgIGlmIChp
bmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAg
ICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVu
dHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2Nh
bHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKQor
ICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGluZGV4IC0gbnVt
YmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBpZiBjb25zdGV4
cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2FsbGVlSW5kZXgo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAt
IChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKQEAgLTM5MywxMCArNDM3
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAg
ICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVl
cyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhl
IHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFs
dWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIHRoZSBu
ZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4K
ICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9
OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtQ29u
c3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgaW5saW5lIHZvaWQgT3BlcmFuZDo6
ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyKCkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNr
Q2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNp
emVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0t
OykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQo
UHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkp
OwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChjYWxsZWUoKSwgY29udGV4dCkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4K
K3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJn
dW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAg
LTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRt
cEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRy
YWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGNhbGxl
ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9u
KFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkp
OwogfQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVj
b2RlRG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0lu
dDMyT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBz
dHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8g
VXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2Fs
bCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBj
b2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVi
bGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVy
SXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25z
dCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcklz
QXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFpc0NvbnN0YW50KCk7IH0KICAgICBib29s
IGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3Zp
cnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQogICAgIGJvb2wg
aXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChp
c0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBA
IC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2Fs
KGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9w
ZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1l
Ojp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0YXRpYyBpbnQgYXJndW1lbnRUb09wZXJh
bmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNvbnN0YW50VG9PcGVyYW5kKGludCBjb25z
dGFudEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50
SW5kZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdpc3RlcjsKIH07CkBAIC0xMzMsNCArMTM1
LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGbwogICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1
bWVudCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4KQoreworICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFudFRvT3BlcmFuZChjb25zdGFudEluZGV4
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3
ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXQKICAgICAs
IHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAs
IHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZh
bHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKLSAgICAsIGludGVy
c2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFs
dWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCAwLCBBYnN0cmFjdFZh
bHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBAIHB1YmxpYzoK
IAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
ID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAw
LCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8
QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7
IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1
bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MiArMzAsMTUgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGgu
aCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmls
aXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVs
ZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgpAQCAt
NjAsNiArNjMsODMxIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90
YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2
b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVj
dWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQo
cmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBi
eXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNv
ZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmls
ZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25s
eSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25z
dGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50Pigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iaXRub3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEJpdG5vdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5k
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BC
aXRhbmQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dERpcmVjdFBuYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFs
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZERpcmVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BD
b25zdHJ1Y3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3Bl
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwor
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1f
cHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0
b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRl
cmF0b3JPcGVuPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRh
ZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1fbmV4dCwgbWV0YWRhdGEubV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAg
ICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1f
cHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEu
bV92YWx1ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9tb3Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92
PigpLCB0eXBlRm9yKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9m
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldElu
dGVybmFsRmllbGQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmpl
Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cFRvT2JqZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVt
YmVyPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21Bcmd1bWVudHM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVy
aWM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cFRvTnVtZXJpYz4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAg
ICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
YXV0byYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFs
OworICAgICAgICAgICAgaWYgKCEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmln
aHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIEJpZ0ludDMyIGJldHRlcgorICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24obGVmdCkg
fHwgaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGhl
cmUKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IG9wX2RpdjoKKyAgICBjYXNlIG9wX3N1YjoKKyAgICBjYXNlIG9wX211bDogeworICAgICAgICBh
dXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQ
cm9maWxlOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
SW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3BfbXVsKQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICBi
b29sIG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0g
b3BfZGl2OworICAgICAgICAgICAgICAgIGlmIChtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiB8fCAh
IShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47Cisg
ICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBGSVhNRTogQ2FuIHByb2JhYmx5IGRvIGJldHRlciB3LyBiaWdpbnQzMgorICAg
ICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxh
dGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
QmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJ
bnQpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9zdWIpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsK
KyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAg
ICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2Ug
aWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRs
ZShpbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJl
dHRlciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9uICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0ludDMyT25seSB8IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBz
b21lIGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRiYWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1
bHQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3Bl
Y0ludDMyT25seSB8IFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBvcF91cnNoaWZ0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVy
c2hpZnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
aW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1
dG8gaGFuZGxlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
LCBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgaW5wdXQgPSB0eXBlRm9yKHNyYyk7CisgICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihp
bnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpID8gU3BlY0FueUludEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYg
U3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91
YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlw
ZShkc3QsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkp
IHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwg
U3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAg
aWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRs
ZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2Rl
Lm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9k
c3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0lu
dFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2Fz
ZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUp
IHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAg
ICAgICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAg
ICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNG
dWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoYnl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxP
cExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlv
bi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9w
X3RvX3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9zcmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9
IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wp
KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3Ry
aW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
Y2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNo
PigpOworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZl
ciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYg
KCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRo
aW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5l
dmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAg
YnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQg
Y2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxl
KSB7CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IG9wX2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRU
eXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBG
SVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYg
d2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwg
U3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQ
cm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNf
ZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4
cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5
bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVj
RnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhp
Y2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVy
ZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9w
ZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdl
dFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19m
dW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BS
ZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3Ap
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCks
IFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVu
dHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291
bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4o
KSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmpl
Y3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
cT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
cmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlw
ZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BU
eXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmln
SW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19m
dW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1
bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25z
dHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Vx
X251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90
b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5t
X2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVj
dWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJp
ZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
bnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVv
Zj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19j
ZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Nl
bGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNh
c2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bf
c3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAg
IGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9w
X3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0
aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNl
IG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0
X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBj
YXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgor
ICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6
CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNl
IG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6
CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9q
bmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNh
c2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0
ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNh
c2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9q
YmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAg
ICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNl
IG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBj
YXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93Ogor
ICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRl
cl9ieV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9y
X2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lk
ZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1
ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRf
bW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9n
dWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBj
YXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBs
bGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xv
d19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFt
cG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNl
IGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1
bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3Jf
ZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3Bf
aGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2Fs
bF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAg
IGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRv
cl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxs
aW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sK
KyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2Nr
LCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQu
cmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3By
ZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFk
W2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUp
OworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0g
KFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29k
ZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
LT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9y
IChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxl
ID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1f
cHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9u
OworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBh
cmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCks
IG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0u
Y2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8gewor
ICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRl
ci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBn
cmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMg
ZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1
dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBh
cyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1f
Z3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9u
c0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5
QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOwor
ICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3Jd
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGlj
dGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VT
cGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAg
ICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAo
bV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0
SGVhZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxs
ZWVGdW5jdGlvbikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2
ICs4OTUsMTIgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAg
ICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQog
Citib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAg
IHJldHVybiBtX3VzZUxPTDsKK30KKwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJ
bnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVy
cHJldGVyKQpAQCAtNzYsNiArOTEwLDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9s
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7Cisg
ICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAt
MTQwLDYgKzk3NSw4IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogI2Rl
ZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAg
ICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAg
ICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZvckNh
bGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOyBcCiAgICAgICAgIH0gXApAQCAtMTU2LDI2ICs5OTMsMzIgQEAgdm9p
ZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dD
QVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25h
bWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUo
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFt
ZSk7IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAog
ICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93
Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisg
ICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1
bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgp
OwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2Nv
ZGVCbG9jaywgIlxuIik7CiAgICAgCkBAIC0yMzEsNyArMTA3NCw2NyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5y
ZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1f
Z3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgewor
ICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2Nr
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3Vj
Y2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVu
ZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAg
IGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkg
eworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2Nr
LT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykg
eworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3Vy
cmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFtt
X2N1cnJlbnRCbG9jay0+aW5kZXgoKV0gPSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKwor
ICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tG
b3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1f
Y3VycmVudEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJv
bVByaW9yQmxvY2tzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3Nv
cnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29y
c1NldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRl
Y2Vzc29yIDogcHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
ICghbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxQcmVkZWNlc3NvcnNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJl
ZGVjZXNzb3JzU2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9t
UHJpb3JCbG9ja3MgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50U3RhdGUgPSAqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBw
cmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50U3RhdGUubWVyZ2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3Rh
dGVGcm9tUHJpb3JCbG9ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRC
bG9ja1N0YXRlKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVkIHByZXZp
b3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKICAgICAgICAgaWYgKG1fYnl0
ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9m
ZnNldCgpID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBp
bnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCkBAIC00NzcsNiArMTM4
MCwzNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1f
Ynl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICgh
bV9jaGVja2VkVXNlTE9MKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF90aHJvdzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2ptcDoKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW5k
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGly
ZWN0OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX25vcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZToK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBvcGNvZGVJ
RCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2No
ZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwog
ICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJB
dCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAg
ICB9CkBAIC01MTUsMTIgKzE0NDYsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2Fz
ZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNp
Z25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAh
PSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+
dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKQEAgLTU3
OSw3ICsxNTEyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVj
a190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25l
Z2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lcSkKQEAgLTU5Nyw2ICsxNTI5
LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9tb2QpCisjZW5kaWYKKwogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25l
ZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzMsMTUgKzE1NzEsMTggQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBt
X3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9
IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNl
IGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRv
Lm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlu
a2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAv
L1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8
IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBz
IGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQo
KSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2Nv
dW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQg
aXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwor
ICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAg
ICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAtNzc0LDYgKzE3MTUs
MjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4
aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAg
ICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgIGp1bXBzLmxpbmsodGhpcyk7
CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAg
YnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0cy4KKworICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKm1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQ
dHI8T1NSRXhpdFB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgLy9pZiAoYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIC8vICAgIGRlc3RpbmF0aW9uID0gTExJ
bnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9s
aW5lKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50
OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAg
ICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPm1ldGFkYXRh
VGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOworICAgICAgICBt
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAgICAgICBtb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7
CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworICAgIH0K
KwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
QEAgLTEwNTgsNiArMjAyMSw2ODMgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQog
ewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVU
aW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtp
bmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYg
KCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0
ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4
LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1
bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVB
bGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdo
ZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29t
cGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmln
YW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4u
LgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2Fs
bGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dl
ZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcp
OworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBh
bGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdo
ZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNv
bXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5p
Z2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0u
Li4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5
TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShv
bmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdz
PEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0
YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJl
dHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBm
b3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0
IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBz
b3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtl
eTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0
KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgLy8g
T09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmllci4gQnV0IGdlbmVyYWxs
eSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBmaWd1cmUgc29tZXRoaW5n
IG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxh
c3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAvLyAgICBDUkFTSCgp
OworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAg
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcu
Z3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7
CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAg
aWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVl
LmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3By
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAg
ICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAg
ICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJl
ckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxp
ZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYgKHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUub3Bl
cmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAo
cmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFu
ZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAg
ICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIGlzQWxsb2NhdGVkL2xv
Y2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAvLyBoYXZlIGNvZGUgdGhh
dCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vIC0gc3BpbGxG
b3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vCisgICAgICAg
IC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2UgdGhlIFZhbHVlT3BlcmFu
ZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxvY2F0aW5nIHRoZSByZWdp
c3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1wLgorICAgICAgICAvLyBP
dGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNhbGxzIHVubG9jaygpLCB3
ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuCisgICAgICAg
IHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IGZhbHNl
OworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVn
aXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
OworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3IgKGF1
dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJl
ZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRG
UFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8v
IE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0Owor
ICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYg
cmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNB
bGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgIH07
CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5l
ZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFw
cGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTaWxlbnRTcGls
bFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpCit7CisgICAgLy8gT09QUzogdGhp
cyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29yZCByZXN1bHQ7Cisg
ICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVn
IHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgaWYgKHJlZ1Zh
bHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5zYXZlUGxhbi5h
cHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkK
KyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2Vk
R1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmVzdWx0LnN0YWNr
U2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29uc3Qg
U2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3BpbGxl
ZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJlc3Rv
cmVGcm9tU2F2ZVBsYW4oUmVnKCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpy
ZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFu
KQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcg
PSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vj
b25kOworICAgICAgICBpZiAocmVnID09IHRvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQo
IWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHVuYm94RG91Ymxl
KHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dD
YXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2Fz
ZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBi
aXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9j
YXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVn
aXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBn
cHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBT
cGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisK
K3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAg
R1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKwor
ICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMp
OworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGFzc2lnblJl
ZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOworCisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNl
dEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIs
IGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQor
Cit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7
CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJl
ZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAg
ICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBH
UFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6Omdw
cihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDog
bV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBS
KCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJ
VDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJP
cGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fklu
dDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJ
VDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
YXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29w
ZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
Tm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
SW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNl
bGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFu
ZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlm
ICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwg
SGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNw
ZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFu
ZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90
Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxs
Q2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNl
bGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZh
bHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6
On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAg
ICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2pp
dC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFu
ZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
OiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVn
ID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJs
ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6
OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBt
X2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAg
cmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVl
T3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9
OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAg
IG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZl
VGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5i
cmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBH
UFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKwor
ICAgIHJldHVybiBtX2ZwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVkZWVkID0gWyZd
IChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgcmVzdWx0
LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQor
ICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BS
cygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0
cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N0cmlu
ZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
U3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7
CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkp
KSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAg
fQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2b2lkIEpJVDo6
c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUpKTsKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNr
KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVj
SW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SW50MzIo
dmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVt
YmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1i
ZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3Rl
eHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0
ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVl
LCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
aWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
aXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAg
aXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAg
ICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29k
ZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29u
c3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3Rh
bnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5U
eXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5j
b25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50U3RhdGUucmVn
aXN0ZXJzID0geyB9OworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJK
SVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAj
aW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAK
ICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFz
aWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5m
bzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpA
QCAtMTAxLDE1ICsxMDUsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xv
d0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAg
ICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxh
biA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVj
dCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAg
ICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFja1Np
emVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xv
d0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3Ig
dGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9m
IEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2
ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAg
ICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZl
Y3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9u
IHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hS
ZWNvcmQgewpAQCAtMTgzLDYgKzE5OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNT
X0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcg
QmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0
aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkwLDEyICsy
MDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9
IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJ
ZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9m
ZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0
aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVu
dCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsK
LQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDAp
KTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjYzLDYgKzI3NCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
cGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAg
ICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQg
c3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJl
ckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisK
ICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNl
cHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMDAsOSArMzI1LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0g
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
Y29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2
b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAs
IFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nh
c2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVt
cChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyAr
MzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9w
Y29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKQEAgLTMyNyw3ICszNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBi
b29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM2
NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21w
aWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7
IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFU
eXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVy
TW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3Vs
ZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTM1MCw4ICszNzcs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUg
dmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUg
Zm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYpOworICAgICAgICB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnIHZhbHVlID0gcmVnVDAp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOwogICAgICAgICB2b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLik7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVl
LCB2b2lkPgpAQCAtNDc1LDggKzUwMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBE
b3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTQ4NCwxMSArNTExLDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9u
LCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rp
b25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAg
IHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChj
b25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAg
LTUxMiw5ICs1NDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lk
ZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0Myw3NyArNjc5LDgxIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5
X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
Ym9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0
ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWcpOworI2Vsc2UKICAgICAgICAg
dm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAg
ICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVy
YW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzI4LDggKzc2OCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7
Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVy
YW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzggKzc4MCwxOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5j
dGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24p
OworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5j
dGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKLQotICAgICAgICBKdW1wIGdldFNsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBp
dGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNT
ZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmly
dHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0
KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIGJv
b2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYg
aXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Ns
b3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJB
TShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7
CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwg
bV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAor
ICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMg
Ym9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNv
bXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NTYsMjMxIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5
QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xh
c3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwg
R1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVn
IG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQ
UlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAg
ICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9m
cHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJP
cGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUg
aW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0
IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxP
cGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERv
dWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVy
YW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnBy
b3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZp
bHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikK
KyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7Cisg
ICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAg
IEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5k
KG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBh
bGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9w
ZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBS
ZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVn
VmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJl
Z1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAg
ICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hl
Y2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0
cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29sZWFu
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVB
bnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
QmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1i
b2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGlu
ZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52
YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lk
IHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmly
dHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0
IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAgIHZvaWQg
bG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBz
bG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVudFNwaWxs
QmVmb3JlQ2FsbCgpOworICAgICAgICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2ls
ZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBs
YW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJl
ZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJw
cmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyAr
MTE5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2pt
cFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAg
ICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZl
Y3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29w
aWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTIzNiw3OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAg
Ly8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAg
ICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BS
UmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZh
bGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5n
cHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0Fs
bG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFs
dWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9
IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVy
LmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7
CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAg
T3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVn
aXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShj
b25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVy
Lm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMu
c2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tp
XSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lz
dGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7
CisKKyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFz
aWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVy
YW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAg
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKwor
ICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8T3B0
aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1
bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxz
ZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8Qnl0ZWNvZGVJbmRleCwgSnVtcExpc3Q+PiBtX2V4aXRKdW1wczsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIg
KzQ2LDgyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3Vi
bGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91Ymxl
TGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEps
ZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFs
c2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
SmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxB
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVl
LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxP
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsMzIgKzE1MSw4NCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAg
ICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworCisgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgcmVzdWx0KTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AxKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwg
aW5wdXRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoaW5wdXRHUFIpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFu
LCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKGlucHV0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQs
IGlucHV0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7
CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworICAgIH0KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJs
ZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNv
bmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUg
dG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0
ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlh
dGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9u
LCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24s
IGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWco
KSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQ
Uik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxz
ZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwyNSArMzI0LDMzIEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52
ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRh
cmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwg
c2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAg
ICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBa
ZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29u
c3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBm
bG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBm
bG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEp
IHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50
R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEp
OwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0y
OTksOCArMzU5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
OwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNSw4
ICszODMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
fQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkp
IHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAg
ICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEyICs0
MDYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90
IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1w
IGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0g
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJ
bnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2
NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdp
c3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBA
IC0zNjgsOSArNDIzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwog
ICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAg
IH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
QEAgLTM4MCwxMSArNDM1LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVj
dGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZs
b3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKGlucHV0R1BSLCBmcHIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3Mo
Jm9uZSksIGZwcik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BS
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFk
ZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4u
LgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1
cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQz
MihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94
SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNE
c3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAg
ICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MiwxMSAr
NDgzLDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihz
cmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5m
cHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAg
ICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAg
ICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAg
ICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAg
ICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBS
VGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91
YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91Ymxl
KGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3Jj
RHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBk
byBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7
CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAK
IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA2LDQxICs1MzksOTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0
ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZv
ciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVy
czo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8gZWR4
ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsK
KyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAg
ICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9w
MSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQUjsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAgIGNs
b2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVtcGxh
Y2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAg
ICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAtPmdw
cigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxhY2Uo
KnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAgICAg
ICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLT5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShlYXgsIGRzdCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJ
bnQzMihsaHMsIGxoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChsaHNHUFIpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihyaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocmhzLCByaHNHUFIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKwor
ICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICAgICAgbW92ZShyaHNHUFIsIGVjeCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbGhzR1BSID0gcmVnVDQ7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGxocywgbGhzR1BSLCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
ZWN4KTsKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShyZWdU
NCwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAg
ICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0
ZWRJbW0zMigtMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1
YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JO
b3ROZWcxLmxpbmsodGhpcyk7CiAgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAg
eDg2RGl2MzIoZWN4KTsKLSAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBKdW1wIG51bWVy
YXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBsaHNHUFIsIFRydXN0
ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwog
ICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7Ci0gICAgYm94SW50MzIoZWR4LCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVn
cyB7IGVheCB9KTsKIAotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgZWF4KTsKKyAg
ICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0ludDMy
T25seSkgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjSW50MzJP
bmx5KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAg
ICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUobGhzKSwgU3BlY0JpZ0ludCkgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShyaHMpLCBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
aWdJbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgpOwogfQogCiAjZWxzZSAvLyBDUFUoWDg2XzY0KQpAQCAt
NDUxLDcgKzYzNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQog
ewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAtNDYzLDcgKzY0Niw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShK
U1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3Vi
bGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3Ax
OwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzY1Niw3IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBs
ZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzc0NSwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVy
YXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTMgKzkwNSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFy
aXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJ
VE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJl
IGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3Bl
cmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGlt
aXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpA
QCAtNzQwLDE4ICs5MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29u
c3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vs
c2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7
CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBAIC03NTksMzMgKzkyNywxMDYg
QEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgICAgICBsZWZ0
T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKICAgICBl
bHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQu
c2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KICAgICBSRUxFQVNF
X0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgp
KTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1w
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisK
KyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAg
ICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAg
ICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAK
LSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKIAorICAgIFNuaXBwZXRH
ZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRK
dW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
TGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAgICAgaWYgKHByb2ZpbGluZ1Bv
bGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9maWxpbmcpCi0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1bHRSZWdzLmdwcigp
KTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7
CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNC
eXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3VsdElz
SW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsK
KyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBP
T1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKwor
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1bHRH
UFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKHJl
c3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5
OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMy
T25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
ICNlbHNlCkBAIC04MDIsNyArMTA0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25z
dCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2Rl
KGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0UmVn
cyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC04NDgsMjAgKzEwODksNiBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0
aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qy
OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKLSNlbHNlCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlmCi0KICAgICBTbmlw
cGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7
CiAKQEAgLTg3MiwyMSArMTA5OSw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0
aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8
ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNj
cmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3Jh
dGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhl
cmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhp
cywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAg
IHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3Jh
dGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRj
aFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Cisg
ICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNl
CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJl
ZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBp
ZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
IGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmln
aHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0
U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIs
IHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
CiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0
KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVn
cy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYm
IGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVy
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkg
fCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIo
KSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTkwMSwxOCArMTE4NCw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNo
aWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJp
dGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKwor
ICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7
CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJl
c3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
bGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3Vi
bGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91
YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNo
QWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9u
VG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0
aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjMsMTUgKzEyNDIs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJl
Z2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEs
IHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBh
dGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVz
dWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lz
dGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIx
LCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBw
YXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAg
fQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lD
X1NUQVRTKQpAQCAtOTQwLDE5ICsxMjc5LDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVz
dWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9y
LT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJh
dGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0
ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3Mu
Z3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVn
cy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjIsNyArMTMwNCwxMSBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzMsMTIgKzEz
MTksMjkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50
MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9w
ZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2Ny
YXRjaEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworCiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtOTg3LDI1ICsxMzUwLDQwIEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJp
Z2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25z
dGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdw
cigpIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1w
LT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAg
ICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0g
ZnBSZWdUMjsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwg
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0
T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCiAgICAgbWF0aElD
LT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BS
LCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJh
bmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNS
aWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTQsMTcg
KzEzOTIsMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAg
ICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhp
cywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUp
IHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0
T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAo
bGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsg
bGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ay
KTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisK
ICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRo
UHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0
UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsZWZ0UmVncy5ncHIoKSk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmlnaHRSZWdzLmdwcigpKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMsIHJlc3VsdFJl
Z3MuZ3ByKCksIHJlc3VsdCk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAg
ICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNCwxMSArMTQyOSwxOCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgfSk7CiAjZW5kaWYKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkp
OworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEFkZD4pCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVn
cyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwg
dHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJl
cGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDcsOCArMTQ0OSw4IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsK
ICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7CkBAIC0xMDg0LDcgKzE0ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5j
dGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24s
IFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0
Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJh
dGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSw5ICsxNDk3LDkg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
IH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTExNCwxMCArMTUxNiwxNyBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6Omlz
TGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmln
aHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJh
dG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgaWYgKEdl
bmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFJl
Z3MuZ3ByKCkgPT0gcmVnVDEgPyByZWdUMyA6IHJlZ1QxIH07CisjZW5kaWYKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBlbHNlIGlmIChHZW5lcmF0
b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgIH0gZWxz
ZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5k
KSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmVzdWx0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1Q0IDogcmVnVDIgfTsKKyNlbmRpZgog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CiAK
ICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOwpAQCAtMTE1NSwyMyArMTU2NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QyOwotCi0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRy
OwotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExODcsMjcgKzE1Nzks
OTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5z
ZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQog
ICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAg
ICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsK
KyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IHJpZ2h0VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIp
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRU
ZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBS
ID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBz
Y3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAg
IHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7
CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0g
ZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAK
ICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJp
Z2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgo
KSkgewogICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3Mu
Z3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZXN1bHRSZWdzKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoZ2VuLmVu
ZEp1bXBMaXN0KCkuZW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChnZW4uc2xvd1BhdGhKdW1wTGlz
dCgpLmVtcHR5KCkpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9k
aXYpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0KQEAgLTEyMTUsMzQgKzE2
NzIsMTAzIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJv
ZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1w
IGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7
CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5m
cHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigp
LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11
bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBl
bWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
dWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKwor
ICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7
CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJl
c3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
bGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3Vi
bGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91
YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3By
KCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
c3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0
d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElD
U2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTAgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQog
ewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2Rl
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDAp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KQEAgLTE0NSwxMCArMTQ4LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFk
ZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNl
dFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTcsOSBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVy
IGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3Rv
cmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxG
b3JDYWxsKCk7CisKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChv
cGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRk
Q2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2
OCwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzYsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3Ry
dWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BU
YWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJn
cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCkBAIC0zODYsMzkgKzM4OCw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgLy8gT09QUzog
TG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2Fz
ZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMg
b3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBob3cg
dG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0
RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKIAogICAg
IGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29k
ZS5tX2l0ZXJhdG9yKSA9IFNwZWNIZWFwVG9wOworCiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QwCiAKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7Ci0gICAg
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgIEp1bXBMaXN0
IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbmV4dENoZWNrcG9pbnRTbG93
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAg
IHNsb3dDYXNlLmp1bXBzLmFwcGVuZChuZXh0Q2hlY2twb2ludFNsb3cpOworCisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMs
IHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0VGVtcC5ncHIo
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdUMCk7CisgICAg
ICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3ZlblR5
cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAgZmFz
dENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHNs
b3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBy
ZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc2LDExIEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7
CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVl
bHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMg
d2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4u
LgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBy
ZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOwog
CkBAIC00NzYsMTggKzUwMSwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0gICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAg
SnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRT
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAg
ICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVz
LT5uZXh0LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhk
b25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJv
cGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNW
YWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0
aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFw
cGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpOwogICAgIH0KQEAgLTQ5OSwxMSArNTI3LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9u
ZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2
YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xv
d1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBz
LmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CkBA
IC01MTUsMTAgKzU0Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1Niw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNs
b3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsK
ICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikp
OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRH
UFIpKTsKQEAgLTU0OCw3ICs1NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MSw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwg
dGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU4LDYgKzE1OSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjoKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhh
dCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdp
Y2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE2NiwyNSArMTY4LDYgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5
dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
LXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYg
aXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50
KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNiwyNyArMTg5LDM2IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtU
byhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xv
d0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nh
c2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9M
KQorICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZl
UGxhbigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1
bHQpOworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAg
ICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0
KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0IHsgfSk7CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dD
YXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBz
KCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0
ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5h
cHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1w
TGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFr
ZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVt
cHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1w
TGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRp
dmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmls
ZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwog
Ci0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwogI2VuZGlmCkBAIC0z
MzgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVj
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2Rl
KC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSkKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyBy
ZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
dmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwg
cmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgQXJyYXlQcm9maWxl
KiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NCw2IEBAIEFMV0FZU19JTkxJTkUgZG91Ymxl
IEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZp
bmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJp
Y3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDgg
KzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDI3IEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzcmMuaXNDb25z
dGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQpAQCAtOTAsMzIgKzExMSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0Zp
bmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAg
UmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JS
ZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1
bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2Nh
dG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9j
YXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAg
ICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIo
bnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxs
b2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVn
KTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNjcsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3Zl
cnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25D
ZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVj
dG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNl
VmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNv
bnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VH
UFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAg
ICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdU
MjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGlu
c3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hh
dCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90
RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghdXNl
TE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0
cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5v
ciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjIwLDkzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2Rl
Lm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3Rv
LCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2Ug
cmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwg
YW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90
bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNl
VmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9y
IFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3Rv
KTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAg
ICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQo
Z2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOwor
ICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAg
ICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsK
KworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAg
ICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJv
dG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigp
OworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOwor
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVl
KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJv
dG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAg
ICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFU
ZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBv
cGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVn
aXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2ls
bCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhl
IHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAor
ICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEg
Y2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5z
dGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKwor
ICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAv
LyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywg
cmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAK
ICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFu
Y2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1
YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMyMSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19l
bXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdU
MCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNTEsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlw
ZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVn
VDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlz
KTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
LQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsK
KyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZp
bmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRv
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1
bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJl
c3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0g
ICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCks
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAg
aXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMjQxLDEzICs0MjUsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVk
X29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDU5LDMwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
LSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVzdDY0KFpl
cm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAg
ICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDkwLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251
bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2
NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0
ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJ
R0lOVDMyKQpAQCAtMjgyLDIxICs1MjAsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2lu
dChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBi
cmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMy
VGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJl
c3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJh
bmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpC
aWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQz
MlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
IAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4g
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMs
MTggKzU4Niw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0
eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlu
cHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0g
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzYzNSw2MSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkp
CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3Bl
Y3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JF
cXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29t
cGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNv
bnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MTksNDEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIAot
ICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlm
IChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZP
YmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5saW5r
KHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1w
IGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAgICAg
ICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NjIsMjAzIEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9
IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmlu
ZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkg
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkg
eworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgewor
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFsdWVH
UFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZT
dHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1i
b2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5saW5r
KHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9s
KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsK
KworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rp
b25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBmdW5j
dGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVuY3Rp
b25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdw
cigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBP
T1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGludCwg
b2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYmVs
b3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2Up
OyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2ls
bCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUg
MCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8vIFRo
ZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBi
YWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkp
OwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVydCBh
Z2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xl
YW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRo
ZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMg
cmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRy
dWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0
LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwg
dmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlz
IH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBm
cFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3Jh
dGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gx
RlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9
Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0
aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29u
ZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFs
LCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gy
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
c2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0
Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5m
cHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBz
Y3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRK
dW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNDQwLDQ2ICs5NjcsMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxs
KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIo
c3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBz
cGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVx
dWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAg
ICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmpl
Y3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1l
ZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5k
bGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhl
IHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cg
aGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0
aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVt
cCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwot
Ci0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwot
fTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90
aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBh
dXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAg
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwot
ICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0
aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisg
ICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRK
dW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0
KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwor
ICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cg
aGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAg
ICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNDg4LDEwICsxMDk4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmlu
ZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRv
LgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01
MDAsMTAgKzExMjYsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChj
bwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNTcsMzA1
IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQo
c3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6
SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lh
bFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFs
LmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAg
ICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Cisg
ICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVhbCA9
IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIu
YXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIo
MSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRl
IDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwg
cmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFT
U0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6
aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVx
dWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxB
bmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJo
cykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxz
ZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BS
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAg
ICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhz
R1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmco
cmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykp
IHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3By
KCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQ
UlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsK
KyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNl
TE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9
IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0
YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7Cisg
ICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3Zl
blR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAg
Q2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qo
cmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVT
eW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhz
R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkg
eworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxo
c0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZw
cigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBt
b3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZh
bHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNv
bXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJo
c0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
dm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2Ug
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdU
MTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNs
b3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAor
CiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VGhyb3c+KCk7CkBAIC01ODksNzQgKzE0NzEsMTQ2IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJp
Y3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0g
aXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/
IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3Zl
blR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJo
cykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAg
ICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURv
dWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJs
ZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShC
SUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0
byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJs
ZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7
Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENl
bGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgot
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVt
ZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBi
cmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYg
d2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlz
IHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3
aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8g
SWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5
IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFs
IDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1
KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0g
ICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVn
VDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1
KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1
bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRv
IGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0g
ICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0
aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBi
b3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Cisg
ICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVz
dGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7
IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAg
ICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0
RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAg
ICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQp
OworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBp
ZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQ
YXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLwor
CisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwg
cmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0
aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2Jy
YW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBu
dW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Cisg
ICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAg
ICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJl
Z1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAg
IG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVP
ckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVy
bywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVt
cCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJp
Z0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTog
d2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmln
SW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmlu
Z3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVT
RShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVy
IHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUu
Ci0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBK
dW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93
IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdo
aWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4K
KyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhp
cyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxp
bmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAg
IGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjI4LDEzNSBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3Jo
czsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdU
MSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAg
ICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVO
b3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHBy
b3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0Vx
KQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJo
cykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9i
amVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wo
cmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBP
T1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIp
KTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMy
KQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0
cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAg
ICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0
YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290
byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZy
YWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdp
dGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5
IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8v
IFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcg
MTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMg
YXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2ls
bCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBh
Ym92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShy
ZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGln
aEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdU
NSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9y
NjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3Ry
aWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7
Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVz
cyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBp
ZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNF
KEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0
eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0
ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBD
ZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAg
IGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBp
bXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2lu
Z2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJl
ZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhl
IHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0
OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAw
CisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2ls
bCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJs
ZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAg
ICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVn
VDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisg
ICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAg
ICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAo
dG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNF
KEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIg
c3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1Qy
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4K
LSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVt
cCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAg
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91
YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGlu
ayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0
T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzY5LDIyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3Rl
cT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBs
aHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7Cisg
ICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBh
dXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
YykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBp
ZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dFZSZWcpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZS
ZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNW
UmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAg
SnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGlu
ayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRH
UFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55
QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBC
aWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9
IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2Vu
ZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAg
ICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0lu
dCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGlu
ayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJl
ZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1
dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Cisg
ICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhp
cy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9T
UiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRy
eUZyYW1lKTsKQEAgLTg4OCw5ICsyMDQ2LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJl
bnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCBy
ZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0Nl
bGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUg
eyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3Bl
LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
T2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMDc3LDE3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVz
LmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVD
VElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtOTIyLDkgKzIxMDIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3Qg
SW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAg
ICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsK
KyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
dGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRy
VGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjEyNiwxNDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBU
YWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJ
bmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwg
cmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsK
ICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1Qw
KTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0
PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3Rz
LmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQg
SklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
ICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFs
dWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAw
IDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRH
UFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2Ny
YXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
CisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVP
cCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BS
KTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIp
OwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAg
ICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3As
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9
CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RF
cXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsK
LQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVx
TnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0
IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNh
biBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhl
bSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0
YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBv
YmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNv
dW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGog
PCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7Cisg
ICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAg
ICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkp
OworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxl
KSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KTsKIApAQCAtMTAzNSw5ICsyMjc3LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShj
b25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7
CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdU
MDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2Nv
cGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzAxLDgwIEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJl
SUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
Y0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5t
X2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAg
ICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJy
aWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6
IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3Bl
Y3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50
aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3Qp
ICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAg
ICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxv
YWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8g
dXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAg
ICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJp
ZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENl
bGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJp
Y3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3Bl
Y09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2Fk
MzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzODIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBj
YWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklE
IGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsK
QEAgLTEwNjgsNyArMjM5MiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVP
cGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBj
YWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
Z3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBh
bGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdw
clRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAg
ICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0
aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+
Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVl
LCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9u
KGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDM0LDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVj
dHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFs
T2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
PigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
KyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRv
IGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsyNDc5LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRl
KCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBv
ciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVC
bG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAg
ICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlz
IE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVj
dXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwog
ICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1
c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7
CkBAIC0xMTg3LDEzICsyNTA3LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8g
RW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBp
ZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwpAQCAtMTIwNiwxMSArMjUyNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50
KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0g
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQg
c28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQog
CkBAIC0xMjMzLDEwICsyNTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9l
bmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdp
c2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCAr
MjU2MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIz
ICsyNTgxLDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNv
ZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
RXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAg
QVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMw
MSwyNCArMjY0NSw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IElu
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNj
b3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxp
ZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhp
cywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOwor
ICAgICAgICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
cmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNl
TE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
c2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7
CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9j
ay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsy
NzE1LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUu
bV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1Qw
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBz
aXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3MzYsMjYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5n
dGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
dGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIg
PSB0ZW1wLT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRl
eCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNp
emVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBh
cmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAot
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUg
KzI3NjksNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihl
bnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAg
ICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNl
bGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3By
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgfQogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7
CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICsyODI0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkK
IHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg1Myw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGlsbEZv
ckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsyODgwLDE1
IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJheU1v
ZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRz
LgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0Lgot
ICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExv
YWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAg
ICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2Fz
ZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBM
YWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4OTcsMTQgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBs
YWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29t
cGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCks
IGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBt
X2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2Zp
bGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcgKzI5
MzAsOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVjayB0
aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVy
YXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIGlu
ZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKwor
ICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0
cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBl
bnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFj
Y2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIC8v
IENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCByZWdUMik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0
R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVy
YXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MK
KyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGlu
ZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0
cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQ
Uiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxp
bmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5k
ZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJm
bHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUg
c3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3Ry
dWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJ
ZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3Jh
Z2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNj
ZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZM
aW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSks
IHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAotICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhp
cyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMy
KHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDI1LDUxIEBAIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1
bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7
CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9w
ZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7
CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAg
ICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAg
ICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDAp
OworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1
bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhp
cyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwg
cmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rv
ck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwg
c2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIs
IFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE1NzQsMjEgKzMwNzksNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJy
YW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4
R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9w
ZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0
b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIg
PSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAt
PmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JH
UFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhH
UFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRH
ZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1Zl
Y3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdU
MCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdU
MCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0
KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIp
OwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVy
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMzMsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRU
eXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAor
ICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRv
UHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICsz
MTk1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dD
aGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJh
bWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlj
a2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMyMTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdH
UFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxl
bXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICszMjQ1LDIw
IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDAp
OwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwot
ICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRo
VHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwg
cmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNjYsNDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lw
ID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwot
ICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOwor
ICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVt
cCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMy
KG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXAp
LCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVy
b0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9
IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkp
OworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHpl
cm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNl
bmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMxNSw5OSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3Vu
ZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGlu
ZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0
T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwor
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1
bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdz
KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxp
bmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50
T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7
CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBy
b3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwo
dmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAg
fSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BS
KCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJl
Z3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExv
YWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAg
ICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRS
ZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4
ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
ICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJl
ZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2
MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMs
OCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsx
MDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAx
LDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+
CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
IApAQCAtNTEsNDkgKzUzLDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVH
UFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVu
SWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50
aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwg
cHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNl
TE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxs
Q2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5n
VHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAg
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9w
ZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0
eSkpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9
IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQor
ICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9w
ZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAg
ICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZh
bEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBy
ZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTAyLDM5ICsxNzIsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJv
cGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRH
UFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1
YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBB
U1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTUyLDYgKzI1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlW
YWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzog
TWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJD
b25zdGFudCkKQEAgLTMxNCw4ICs0MjAsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVt
aXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1
bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgcHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kLCBwcml2YXRl
RmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2RlKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzNCw3ICs0NDMsNyBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlOwpAQCAtMzQyLDcgKzQ1MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUg
ZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0
byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewog
ICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1
MCwxMyArNDU5LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
ICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBs
b2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0
YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFi
ZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CkBAIC0zNzIsNDkgKzQ4MCwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIg
PSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Cisg
ICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNl
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNz
b3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdw
cigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJf
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
ZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRl
ciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1
dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVy
LmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAg
ICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIs
IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0
cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50
MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vz
c29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3Nv
ckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBh
Y2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFj
Y2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQyNCwxOCArNTg4LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNl
KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2gu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7
CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVRE
ZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBj
YW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlz
IGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9m
IHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDQ0
LDI1ICs2NDIsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ3MiwxOSArNjcyLDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0
eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFz
ZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBk
c3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BS
LCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNo
R1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0
IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVy
IGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3
aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00OTMsMjEzICs3NDQs
MzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJv
b2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NU
eXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJh
c2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
SnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRl
eGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0
YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAg
ICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNW
UmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNW
UmVnKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
IAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAg
ICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQ
UjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVn
VDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsK
KyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlz
LmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
IEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAgICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRC
eUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJl
ZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3Ro
IHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50
ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQg
aW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAg
Ly8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2Ft
ZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNl
VlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBH
UFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdmFs
dWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFs
dWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdp
c3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShi
eXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8g
RGlyZWN0IDogTm90RGlyZWN0LCBwcml2YXRlRmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2RlKSk7CiAg
ICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzA5LDc3ICsxMTE1LDk1
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBj
YW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlz
IGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJh
c2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFs
dWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
KHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BS
UmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAg
ICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgp
LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBk
ZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwg
cmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03OTEsMTcgKzEyMTUsMjUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBk
ZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKQEAgLTgxMSwyMSArMTI0MywzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBz
Y29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAg
IE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNj
b3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2Nv
cGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29wZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0
aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
LCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2Nh
bENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODM4LDkg
KzEyODUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAg
LTg1MywyOSArMTMwMCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwxNSArMTMzMSwyMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJ
VDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwg
R1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVj
dHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1
cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVy
KEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYsMTIgKzEzNTgsNiBAQCB2b2lk
IEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJl
Zyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCBy
ZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05MjIsNTEgKzEzNjgsODQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWlu
dHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFk
YXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdw
cigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVn
VDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJS
ZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwor
ICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2Nv
cGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29w
ZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAg
IG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRH
UFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Nj
b3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAg
ICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBi
cmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3Bl
cmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNl
dEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAg
ICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQs
IFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwg
VHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJv
cnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBp
c091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwot
ICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwg
b2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNj
b3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9m
ZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0
R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVW
YXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2Nv
cGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2Nv
cGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1p
YzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC05ODAs
MTAgKzE0NTksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0
R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBp
c05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDc1LDI3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwog
ICAgICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE1MDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworCisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xv
YmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVy
YW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVl
KiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEp
OwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVy
YW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUzNCw1MSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJh
bmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5k
KTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZh
bHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3Bl
LCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAg
IEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAg
ICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJm
bHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3Bl
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVn
VDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAg
YnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BS
KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0
IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0g
ICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJh
bmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAg
ICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0
R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAg
LTEwOTgsMjggKzE1ODgsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAg
ICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlh
bGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBk
byBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQg
dG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDAp
OworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAg
bG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9h
ZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93
YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOwor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhz
Y29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9w
ZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5
bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTEzNCwxMiArMTY1
MywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRo
ZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwg
c2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNj
cmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNo
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEg
dmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlz
R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTE1MywyMyArMTY4MSwzMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0
KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9t
IGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFu
eSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBl
CiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpA
QCAtMTE4NiwxMCArMTcyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3NDAsMTUxIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7Cisg
ICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7
Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFy
Z3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFy
Z3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAg
ICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRz
KTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFy
Z3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2
YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSBy
ZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1
ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICgh
dXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIC8vIHZhbHVl
IG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZh
bHVlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2
YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gb3duZXJWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVy
R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMsIG93bmVyKTsKKyAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CiAgICAg
SnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNl
TE9MKCkgfHwgISEocHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAg
b3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhp
cyk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNv
cmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBu
ZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxl
bnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJl
Y29yZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90
Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlz
U2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2Vs
bCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7Cisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Nl
bGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BS
KTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAog
ICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMTI3MSwxMSArMTg5Niwy
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5U
eXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BS
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpLCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOworICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI4NSwxMCAr
MTkyNSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0g
ICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAg
ICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBzdG9yZVB0cih2YWx1
ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJl
Z1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChp
bmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMTM4NSw4ICsyMDM4LDI1
IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7CisgICAg
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAgICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzY3JhdGNo
R1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3Bp
bGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9
IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisKICAgICBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0MDQsNiArMjA3NCw4
IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXMKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZh
bHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IApAQCAtMTQ2OSw2ICsyMTQxLDggQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBBU1NFUlQoKHB1dEtp
bmQgPT0gRGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwg
KHB1dEtpbmQgPT0gTm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7
CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2Vt
Ymxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkp
IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkg
IGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxU
LCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpD
YWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3
YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5z
cGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlm
IChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5t
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDYgKzM5NiwxMCBAQCBzdGF0aWMgdm9pZCBkaXNhYmxl
QWxsSklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cygpCiB7CisgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlvbnM6OmZvcmNl
TE9MKCkgPSAxOworICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmluZWQo
TkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9IHRy
dWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw3IEBAIGNvbnN0
ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVuc2lnbmVkLCBzZWVk
Rm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwg
YWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRp
b24sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415670</attachid>
            <date>2020-12-08 13:30:47 -0800</date>
            <delta_ts>2020-12-08 14:19:15 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>479702</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTg3MDYwLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTg3MDYwLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rl
c3RzL3N0cmVzcy9yZWdyZXNzLTE4NzA2MC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8vIFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNoLgogCitmdW5jdGlvbiBmb28oKSB7CiBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKICAgICB2YXIgYXJyID0gW107CiAgICAg
YXJyLmNvbnN0cnVjdG9yID0gewpAQCAtNywzICs4LDUgQEAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgaSsrKSB7CiAgICAgfQogICAgIGFyci5jb25jYXQoWzFdKTsKIH0KK30KK2ZvbygpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3Mvc3VwZXItcHJvcGVydHktYWNjZXNzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL3N1cGVyLXByb3BlcnR5LWFjY2Vzcy5qcwkocmV2aXNpb24gMjY3
NDM1KQorKysgSlNUZXN0cy9zdHJlc3Mvc3VwZXItcHJvcGVydHktYWNjZXNzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0xNiwzMjMgKzE2LDMyMyBAQCBmdW5jdGlvbiBmdW5jKHgpIHsKIH0KIG5vSW5s
aW5lKGZ1bmMpOwogCi10ZXN0KGZ1bmN0aW9uKCkgewotICAgIGNsYXNzIEEgewotICAgICAgICBj
b25zdHJ1Y3Rvcih4KQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHg7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzZXQgdmFsdWUoeCkgeyB0aGlzLl92YWx1ZSA9IHg7IH0KLSAg
ICAgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KLSAgICB9Ci0KLSAgICBj
bGFzcyBCIGV4dGVuZHMgQSB7Ci0gICAgICAgIHNldCB2YWx1ZSh4KSB7IHN1cGVyLnZhbHVlID0g
eDsgfQotICAgICAgICBnZXQgdmFsdWUoKSB7IHJldHVybiBzdXBlci52YWx1ZTsgfQotICAgIH0K
LQotICAgIGxldCBhcnIgPSBbXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykg
ewotICAgICAgICBhcnIucHVzaChuZXcgQigyMCkpOwotICAgIH0KLSAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSAyMCk7
Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFy
cltpXS52YWx1ZSA9IGk7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsr
KSB7Ci0gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkpOwotICAgIH0KLX0sIDIpOwot
Ci10ZXN0KGZ1bmN0aW9uKCkgewotICAgIGZ1bmN0aW9uIHZhbHVlKCkgeyByZXR1cm4gJ3ZhbHVl
JzsgfQotICAgIG5vSW5saW5lKHZhbHVlKTsKLQotICAgIGNsYXNzIEEgewotICAgICAgICBjb25z
dHJ1Y3Rvcih4LCBmID0gZnVuYykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5fdmFsdWUg
PSB4OwotICAgICAgICAgICAgdGhpcy5fZnVuYyA9IGY7Ci0gICAgICAgIH0KLQotICAgICAgICBz
ZXQgdmFsdWUoeCkgeyB0aGlzLl92YWx1ZSA9IHg7IH0KLSAgICAgICAgZ2V0IHZhbHVlKCkgeyBy
ZXR1cm4gdGhpcy5fdmFsdWU7IH0KLSAgICAgICAgZ2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9m
dW5jOyB9Ci0gICAgfQotCi0gICAgY2xhc3MgQiBleHRlbmRzIEEgewotICAgICAgICBzZXQgdmFs
dWUoeCkgeyBzdXBlclt2YWx1ZSgpXSA9IHg7IH0KLSAgICAgICAgZ2V0IHZhbHVlKCkgeyByZXR1
cm4gc3VwZXJbdmFsdWUoKV07IH0KLSAgICAgICAgaW5jKCkgeyByZXR1cm4gc3VwZXJbdmFsdWUo
KV0rKzsgfQotICAgICAgICBkZWMoKSB7IHJldHVybiBzdXBlclt2YWx1ZSgpXS0tOyB9Ci0gICAg
ICAgIHByZUluYygpIHsgcmV0dXJuICsrc3VwZXJbdmFsdWUoKV07IH0KLSAgICAgICAgcHJlRGVj
KCkgeyByZXR1cm4gLS1zdXBlclt2YWx1ZSgpXTsgfQotICAgICAgICBwbHVzRXEoeCkgeyBzdXBl
clt2YWx1ZSgpXSArPSB4OyB9Ci0gICAgICAgIG1pbnVzRXEoeCkgeyBzdXBlclt2YWx1ZSgpXSAt
PSB4OyB9Ci0gICAgICAgIHRpbWVzRXEoeCkgeyBzdXBlclt2YWx1ZSgpXSAqPSB4OyB9Ci0gICAg
ICAgIGRpdkVxKHgpIHsgc3VwZXJbdmFsdWUoKV0gLz0geDsgfQotCi0gICAgICAgIGZ1bmNEb3Qo
eCkgeyByZXR1cm4gc3VwZXIuZnVuYyh4KTsgfQotICAgICAgICBmdW5jQnJhY2tldCh4KSB7IHJl
dHVybiBzdXBlci5mdW5jKHgpOyB9Ci0gICAgfQotCi0gICAgbGV0IGFyciA9IFtdOwotICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFyci5wdXNoKG5ldyBCKDIw
KSk7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAg
IGxldCB0ID0gYXJyW2ldLnZhbHVlOwotICAgICAgICBhc3NlcnQodCA9PT0gMjApOwotICAgIH0K
LSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgICBhcnJbaV0udmFs
dWUgPSBpOwotICAgIH0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAg
ICAgICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSBpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgICBsZXQgdiA9IGFycltpXS5pbmMoKTsKLSAg
ICAgICAgYXNzZXJ0KHYgPT09IGkpOwotICAgIH0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEw
MDA7IGkrKykgewotICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSBpKzEpOwotICAgIH0K
LQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGxldCB2ID0g
YXJyW2ldLmRlYygpOwotICAgICAgICBhc3NlcnQodiA9PT0gaSsxKTsKLSAgICB9Ci0gICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgYXNzZXJ0KGFycltpXS52YWx1
ZSA9PT0gaSk7Ci0gICAgfQotCi0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsK
LSAgICAgICAgbGV0IHYgPSBhcnJbaV0ucHJlSW5jKCk7Ci0gICAgICAgIGFzc2VydCh2ID09PSBp
KzEpOwotICAgIH0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAg
ICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSBpKzEpOwotICAgIH0KLQotICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGxldCB2ID0gYXJyW2ldLnByZURlYygpOwot
ICAgICAgICBhc3NlcnQodiA9PT0gaSk7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MTAwMDsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkpOwotICAgIH0K
LQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFycltpXS5w
bHVzRXEoaSk7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0g
ICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkraSk7Ci0gICAgfQotCi0gICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgYXJyW2ldLm1pbnVzRXEoaSk7Ci0g
ICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFzc2Vy
dChhcnJbaV0udmFsdWUgPT09IGkpOwotICAgIH0KLQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MTAwMDsgaSsrKSB7Ci0gICAgICAgIGFycltpXS50aW1lc0VxKGkpOwotICAgIH0KLSAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVl
ID09PSBpKmkpOwotICAgIH0KLQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7
Ci0gICAgICAgIGlmIChpID09PSAwKQotICAgICAgICAgICAgYXJyW2ldLnZhbHVlID0gMDsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYXJyW2ldLmRpdkVxKGkpOwotICAgIH0KLSAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVl
ID09PSBpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewot
ICAgICAgICBhcnJbaV0gPSBuZXcgQigwLCBmdW5jdGlvbihhKSB7IHJldHVybiBpICsgYTsgfSk7
Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFz
c2VydChhcnJbaV0uZnVuY0RvdChpKSA9PT0gaSArIGkpOwotICAgICAgICBhc3NlcnQoYXJyW2ld
LmZ1bmNCcmFja2V0KGkqMikgPT09IGkgKyBpKjIpOwotICAgIH0KLQotfSwgMik7Ci0KLQotdGVz
dChmdW5jdGlvbigpIHsKLSAgICBjbGFzcyBBIHsKLSAgICAgICAgY29uc3RydWN0b3IoeCwgZiA9
IGZ1bmMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0geDsKLSAgICAgICAg
ICAgIHRoaXMuX2Z1bmMgPSBmOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0IHZhbHVlKHgpIHsg
dGhpcy5fdmFsdWUgPSB4OyB9Ci0gICAgICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3Zh
bHVlOyB9Ci0gICAgICAgIGdldCBmdW5jKCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQotICAgIH0K
LQotICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKLSAgICAgICAgc2V0IHZhbHVlKHgpIHsgKCgpID0+
IHN1cGVyLnZhbHVlID0geCkoKTsgfQotICAgICAgICBnZXQgdmFsdWUoKSB7IHJldHVybiAoKCkg
PT4gc3VwZXIudmFsdWUpKCk7IH0KLSAgICAgICAgaW5jKCkgeyByZXR1cm4gKCgpID0+IHN1cGVy
LnZhbHVlKyspKCk7IH0KLSAgICAgICAgZGVjKCkgeyByZXR1cm4gKCgpID0+IHN1cGVyLnZhbHVl
LS0pKCk7IH0KLSAgICAgICAgcHJlSW5jKCkgeyByZXR1cm4gKCgpID0+ICsrc3VwZXIudmFsdWUp
KCk7IH0KLSAgICAgICAgcHJlRGVjKCkgeyByZXR1cm4gKCgpID0+IC0tc3VwZXIudmFsdWUpKCk7
IH0KLSAgICAgICAgcGx1c0VxKHgpIHsgKCgpID0+IHN1cGVyLnZhbHVlICs9IHgpKCk7IH0KLSAg
ICAgICAgbWludXNFcSh4KSB7ICgoKSA9PiBzdXBlci52YWx1ZSAtPSB4KSgpOyB9Ci0gICAgICAg
IHRpbWVzRXEoeCkgeyAoKCkgPT4gc3VwZXIudmFsdWUgKj0geCkoKTsgfQotICAgICAgICBkaXZF
cSh4KSB7ICgoKSA9PiBzdXBlci52YWx1ZSAvPSB4KSgpOyB9Ci0KLSAgICAgICAgZnVuY0RvdCh4
KSB7IHJldHVybiAoKCkgPT4gc3VwZXIuZnVuYyh4KSkoKTsgfQotICAgICAgICBmdW5jQnJhY2tl
dCh4KSB7IHJldHVybiAoKCkgPT4gc3VwZXIuZnVuYyh4KSkoKTsgfQotICAgIH0KLQotICAgIGxl
dCBhcnIgPSBbXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAg
ICBhcnIucHVzaChuZXcgQigyMCkpOwotICAgIH0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEw
MDA7IGkrKykgewotICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSAyMCk7Ci0gICAgfQot
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFycltpXS52YWx1
ZSA9IGk7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAg
ICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkpOwotICAgIH0KLQotICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGxldCB2ID0gYXJyW2ldLmluYygpOwotICAg
ICAgICBhc3NlcnQodiA9PT0gaSk7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAw
MDsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkrMSk7Ci0gICAgfQot
Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgbGV0IHYgPSBh
cnJbaV0uZGVjKCk7Ci0gICAgICAgIGFzc2VydCh2ID09PSBpKzEpOwotICAgIH0KLSAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVl
ID09PSBpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewot
ICAgICAgICBsZXQgdiA9IGFycltpXS5wcmVJbmMoKTsKLSAgICAgICAgYXNzZXJ0KHYgPT09IGkr
MSk7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAg
IGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkrMSk7Ci0gICAgfQotCi0gICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgbGV0IHYgPSBhcnJbaV0ucHJlRGVjKCk7Ci0g
ICAgICAgIGFzc2VydCh2ID09PSBpKTsKLSAgICB9Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwOyBpKyspIHsKLSAgICAgICAgYXNzZXJ0KGFycltpXS52YWx1ZSA9PT0gaSk7Ci0gICAgfQot
Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgYXJyW2ldLnBs
dXNFcShpKTsKLSAgICB9Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAg
ICAgICAgYXNzZXJ0KGFycltpXS52YWx1ZSA9PT0gaStpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgICBhcnJbaV0ubWludXNFcShpKTsKLSAg
ICB9Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgYXNzZXJ0
KGFycltpXS52YWx1ZSA9PT0gaSk7Ci0gICAgfQotCi0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwOyBpKyspIHsKLSAgICAgICAgYXJyW2ldLnRpbWVzRXEoaSk7Ci0gICAgfQotICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUg
PT09IGkqaSk7Ci0gICAgfQotCi0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsK
LSAgICAgICAgaWYgKGkgPT09IDApCi0gICAgICAgICAgICBhcnJbaV0udmFsdWUgPSAwOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBhcnJbaV0uZGl2RXEoaSk7Ci0gICAgfQotICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUg
PT09IGkpOwotICAgIH0KLQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0g
ICAgICAgIGFycltpXSA9IG5ldyBCKDAsIGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGkgKyBhOyB9KTsK
LSAgICB9Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgYXNz
ZXJ0KGFycltpXS5mdW5jRG90KGkpID09PSBpICsgaSk7Ci0gICAgICAgIGFzc2VydChhcnJbaV0u
ZnVuY0JyYWNrZXQoaSoyKSA9PT0gaSArIGkqMik7Ci0gICAgfQotCi19LCAyKTsKLQotdGVzdChm
dW5jdGlvbigpIHsKLSAgICBmdW5jdGlvbiBmb28oKSB7IHJldHVybiAnZm9vJzsgfQotICAgIG5v
SW5saW5lKGZvbyk7Ci0gICAgY2xhc3MgQSB7IH0KLSAgICBsZXQgb2JqID0ge307Ci0gICAgQS5w
cm90b3R5cGUuZm9vID0gb2JqOwotICAgIEEucHJvdG90eXBlWzBdID0gb2JqOwotCi0KLSAgICBj
bGFzcyBCIGV4dGVuZHMgQSB7Ci0gICAgICAgIGJheigpIHsgcmV0dXJuIHN1cGVyW2ZvbygpXTsg
fQotICAgICAgICBqYXooKSB7IHJldHVybiBzdXBlci5mb287IH0KLSAgICAgICAgYmFyKCkgeyBy
ZXR1cm4gc3VwZXJbMF07IH0KLSAgICAgICAgCi0gICAgfQotCi0gICAgYXNzZXJ0KChuZXcgQiku
YmF6KCkgPT09IG9iaik7Ci0gICAgYXNzZXJ0KChuZXcgQikuamF6KCkgPT09IG9iaik7Ci0gICAg
YXNzZXJ0KChuZXcgQikuYmFyKCkgPT09IG9iaik7Ci19KTsKLQotdGVzdChmdW5jdGlvbigpIHsK
LSAgICBjbGFzcyBBIHsgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotICAg
ICAgICBBLnByb3RvdHlwZVtpXSA9IGk7Ci0KLQotICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKLSAg
ICAgICAgaW5kZXgoaSkgeyByZXR1cm4gc3VwZXJbaV07IH0KLSAgICB9Ci0KLSAgICBsZXQgYiA9
IG5ldyBCOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFz
c2VydChiLmluZGV4KGkpID09PSBpKTsKLSAgICB9Ci19LCAyKTsKLQotdGVzdChmdW5jdGlvbigp
IHsKLSAgICBsZXQgb2JqID0ge307Ci0gICAgY2xhc3MgQSB7IGNvbnN0cnVjdG9yKHIpIHsgdGhp
cy5fZm9vID0gcjsgfSB9Ci0gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCAn
MCcsIHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuX2ZvbzsgfSB9KTsKLQotICAgIGNs
YXNzIEIgZXh0ZW5kcyBBIHsKLSAgICAgICAgYmFyKCkgeyByZXR1cm4gc3VwZXJbMF07IH0KLSAg
ICB9Ci0KLSAgICBsZXQgcmFuZCA9IE1hdGgucmFuZG9tKCk7Ci0gICAgYXNzZXJ0KChuZXcgQihy
YW5kKSkuYmFyKCkgPT09IHJhbmQpOwotfSk7CisvL3Rlc3QoZnVuY3Rpb24oKSB7CisvLyAgICBj
bGFzcyBBIHsKKy8vICAgICAgICBjb25zdHJ1Y3Rvcih4KQorLy8gICAgICAgIHsKKy8vICAgICAg
ICAgICAgdGhpcy5fdmFsdWUgPSB4OworLy8gICAgICAgIH0KKy8vCisvLyAgICAgICAgc2V0IHZh
bHVlKHgpIHsgdGhpcy5fdmFsdWUgPSB4OyB9CisvLyAgICAgICAgZ2V0IHZhbHVlKCkgeyByZXR1
cm4gdGhpcy5fdmFsdWU7IH0KKy8vICAgIH0KKy8vCisvLyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7
CisvLyAgICAgICAgc2V0IHZhbHVlKHgpIHsgc3VwZXIudmFsdWUgPSB4OyB9CisvLyAgICAgICAg
Z2V0IHZhbHVlKCkgeyByZXR1cm4gc3VwZXIudmFsdWU7IH0KKy8vICAgIH0KKy8vCisvLyAgICBs
ZXQgYXJyID0gW107CisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8g
ICAgICAgIGFyci5wdXNoKG5ldyBCKDIwKSk7CisvLyAgICB9CisvLyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IDIw
KTsKKy8vICAgIH0KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAg
ICAgICAgYXJyW2ldLnZhbHVlID0gaTsKKy8vICAgIH0KKy8vICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwMDsgaSsrKSB7CisvLyAgICAgICAgYXNzZXJ0KGFycltpXS52YWx1ZSA9PT0gaSk7Cisv
LyAgICB9CisvL30sIDIpOworLy8KKy8vdGVzdChmdW5jdGlvbigpIHsKKy8vICAgIGZ1bmN0aW9u
IHZhbHVlKCkgeyByZXR1cm4gJ3ZhbHVlJzsgfQorLy8gICAgbm9JbmxpbmUodmFsdWUpOworLy8K
Ky8vICAgIGNsYXNzIEEgeworLy8gICAgICAgIGNvbnN0cnVjdG9yKHgsIGYgPSBmdW5jKQorLy8g
ICAgICAgIHsKKy8vICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB4OworLy8gICAgICAgICAgICB0
aGlzLl9mdW5jID0gZjsKKy8vICAgICAgICB9CisvLworLy8gICAgICAgIHNldCB2YWx1ZSh4KSB7
IHRoaXMuX3ZhbHVlID0geDsgfQorLy8gICAgICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMu
X3ZhbHVlOyB9CisvLyAgICAgICAgZ2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9mdW5jOyB9Cisv
LyAgICB9CisvLworLy8gICAgY2xhc3MgQiBleHRlbmRzIEEgeworLy8gICAgICAgIHNldCB2YWx1
ZSh4KSB7IHN1cGVyW3ZhbHVlKCldID0geDsgfQorLy8gICAgICAgIGdldCB2YWx1ZSgpIHsgcmV0
dXJuIHN1cGVyW3ZhbHVlKCldOyB9CisvLyAgICAgICAgaW5jKCkgeyByZXR1cm4gc3VwZXJbdmFs
dWUoKV0rKzsgfQorLy8gICAgICAgIGRlYygpIHsgcmV0dXJuIHN1cGVyW3ZhbHVlKCldLS07IH0K
Ky8vICAgICAgICBwcmVJbmMoKSB7IHJldHVybiArK3N1cGVyW3ZhbHVlKCldOyB9CisvLyAgICAg
ICAgcHJlRGVjKCkgeyByZXR1cm4gLS1zdXBlclt2YWx1ZSgpXTsgfQorLy8gICAgICAgIHBsdXNF
cSh4KSB7IHN1cGVyW3ZhbHVlKCldICs9IHg7IH0KKy8vICAgICAgICBtaW51c0VxKHgpIHsgc3Vw
ZXJbdmFsdWUoKV0gLT0geDsgfQorLy8gICAgICAgIHRpbWVzRXEoeCkgeyBzdXBlclt2YWx1ZSgp
XSAqPSB4OyB9CisvLyAgICAgICAgZGl2RXEoeCkgeyBzdXBlclt2YWx1ZSgpXSAvPSB4OyB9Cisv
LworLy8gICAgICAgIGZ1bmNEb3QoeCkgeyByZXR1cm4gc3VwZXIuZnVuYyh4KTsgfQorLy8gICAg
ICAgIGZ1bmNCcmFja2V0KHgpIHsgcmV0dXJuIHN1cGVyLmZ1bmMoeCk7IH0KKy8vICAgIH0KKy8v
CisvLyAgICBsZXQgYXJyID0gW107CisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkr
KykgeworLy8gICAgICAgIGFyci5wdXNoKG5ldyBCKDIwKSk7CisvLyAgICB9CisvLyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGxldCB0ID0gYXJyW2ldLnZh
bHVlOworLy8gICAgICAgIGFzc2VydCh0ID09PSAyMCk7CisvLyAgICB9CisvLyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFycltpXS52YWx1ZSA9IGk7Cisv
LyAgICB9CisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAg
IGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkpOworLy8gICAgfQorLy8KKy8vICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAgICAgICAgbGV0IHYgPSBhcnJbaV0uaW5jKCk7
CisvLyAgICAgICAgYXNzZXJ0KHYgPT09IGkpOworLy8gICAgfQorLy8gICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSBp
KzEpOworLy8gICAgfQorLy8KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7
CisvLyAgICAgICAgbGV0IHYgPSBhcnJbaV0uZGVjKCk7CisvLyAgICAgICAgYXNzZXJ0KHYgPT09
IGkrMSk7CisvLyAgICB9CisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewor
Ly8gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkpOworLy8gICAgfQorLy8KKy8vICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAgICAgICAgbGV0IHYgPSBhcnJb
aV0ucHJlSW5jKCk7CisvLyAgICAgICAgYXNzZXJ0KHYgPT09IGkrMSk7CisvLyAgICB9CisvLyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFzc2VydChhcnJb
aV0udmFsdWUgPT09IGkrMSk7CisvLyAgICB9CisvLworLy8gICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBsZXQgdiA9IGFycltpXS5wcmVEZWMoKTsKKy8vICAg
ICAgICBhc3NlcnQodiA9PT0gaSk7CisvLyAgICB9CisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkpOworLy8g
ICAgfQorLy8KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAgICAg
ICAgYXJyW2ldLnBsdXNFcShpKTsKKy8vICAgIH0KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MTAwMDsgaSsrKSB7CisvLyAgICAgICAgYXNzZXJ0KGFycltpXS52YWx1ZSA9PT0gaStpKTsKKy8v
ICAgIH0KKy8vCisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAg
ICAgIGFycltpXS5taW51c0VxKGkpOworLy8gICAgfQorLy8gICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSBpKTsKKy8v
ICAgIH0KKy8vCisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAg
ICAgIGFycltpXS50aW1lc0VxKGkpOworLy8gICAgfQorLy8gICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSBpKmkpOwor
Ly8gICAgfQorLy8KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAg
ICAgICAgaWYgKGkgPT09IDApCisvLyAgICAgICAgICAgIGFycltpXS52YWx1ZSA9IDA7CisvLyAg
ICAgICAgZWxzZQorLy8gICAgICAgICAgICBhcnJbaV0uZGl2RXEoaSk7CisvLyAgICB9CisvLyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFzc2VydChhcnJb
aV0udmFsdWUgPT09IGkpOworLy8gICAgfQorLy8KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MTAwMDsgaSsrKSB7CisvLyAgICAgICAgYXJyW2ldID0gbmV3IEIoMCwgZnVuY3Rpb24oYSkgeyBy
ZXR1cm4gaSArIGE7IH0pOworLy8gICAgfQorLy8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAw
OyBpKyspIHsKKy8vICAgICAgICBhc3NlcnQoYXJyW2ldLmZ1bmNEb3QoaSkgPT09IGkgKyBpKTsK
Ky8vICAgICAgICBhc3NlcnQoYXJyW2ldLmZ1bmNCcmFja2V0KGkqMikgPT09IGkgKyBpKjIpOwor
Ly8gICAgfQorLy8KKy8vfSwgMik7CisvLworLy8KKy8vdGVzdChmdW5jdGlvbigpIHsKKy8vICAg
IGNsYXNzIEEgeworLy8gICAgICAgIGNvbnN0cnVjdG9yKHgsIGYgPSBmdW5jKQorLy8gICAgICAg
IHsKKy8vICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB4OworLy8gICAgICAgICAgICB0aGlzLl9m
dW5jID0gZjsKKy8vICAgICAgICB9CisvLworLy8gICAgICAgIHNldCB2YWx1ZSh4KSB7IHRoaXMu
X3ZhbHVlID0geDsgfQorLy8gICAgICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVl
OyB9CisvLyAgICAgICAgZ2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9mdW5jOyB9CisvLyAgICB9
CisvLworLy8gICAgY2xhc3MgQiBleHRlbmRzIEEgeworLy8gICAgICAgIHNldCB2YWx1ZSh4KSB7
ICgoKSA9PiBzdXBlci52YWx1ZSA9IHgpKCk7IH0KKy8vICAgICAgICBnZXQgdmFsdWUoKSB7IHJl
dHVybiAoKCkgPT4gc3VwZXIudmFsdWUpKCk7IH0KKy8vICAgICAgICBpbmMoKSB7IHJldHVybiAo
KCkgPT4gc3VwZXIudmFsdWUrKykoKTsgfQorLy8gICAgICAgIGRlYygpIHsgcmV0dXJuICgoKSA9
PiBzdXBlci52YWx1ZS0tKSgpOyB9CisvLyAgICAgICAgcHJlSW5jKCkgeyByZXR1cm4gKCgpID0+
ICsrc3VwZXIudmFsdWUpKCk7IH0KKy8vICAgICAgICBwcmVEZWMoKSB7IHJldHVybiAoKCkgPT4g
LS1zdXBlci52YWx1ZSkoKTsgfQorLy8gICAgICAgIHBsdXNFcSh4KSB7ICgoKSA9PiBzdXBlci52
YWx1ZSArPSB4KSgpOyB9CisvLyAgICAgICAgbWludXNFcSh4KSB7ICgoKSA9PiBzdXBlci52YWx1
ZSAtPSB4KSgpOyB9CisvLyAgICAgICAgdGltZXNFcSh4KSB7ICgoKSA9PiBzdXBlci52YWx1ZSAq
PSB4KSgpOyB9CisvLyAgICAgICAgZGl2RXEoeCkgeyAoKCkgPT4gc3VwZXIudmFsdWUgLz0geCko
KTsgfQorLy8KKy8vICAgICAgICBmdW5jRG90KHgpIHsgcmV0dXJuICgoKSA9PiBzdXBlci5mdW5j
KHgpKSgpOyB9CisvLyAgICAgICAgZnVuY0JyYWNrZXQoeCkgeyByZXR1cm4gKCgpID0+IHN1cGVy
LmZ1bmMoeCkpKCk7IH0KKy8vICAgIH0KKy8vCisvLyAgICBsZXQgYXJyID0gW107CisvLyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFyci5wdXNoKG5ldyBC
KDIwKSk7CisvLyAgICB9CisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewor
Ly8gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IDIwKTsKKy8vICAgIH0KKy8vICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAgICAgICAgYXJyW2ldLnZhbHVlID0g
aTsKKy8vICAgIH0KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAg
ICAgICAgYXNzZXJ0KGFycltpXS52YWx1ZSA9PT0gaSk7CisvLyAgICB9CisvLworLy8gICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBsZXQgdiA9IGFycltpXS5p
bmMoKTsKKy8vICAgICAgICBhc3NlcnQodiA9PT0gaSk7CisvLyAgICB9CisvLyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUg
PT09IGkrMSk7CisvLyAgICB9CisvLworLy8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBp
KyspIHsKKy8vICAgICAgICBsZXQgdiA9IGFycltpXS5kZWMoKTsKKy8vICAgICAgICBhc3NlcnQo
diA9PT0gaSsxKTsKKy8vICAgIH0KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsr
KSB7CisvLyAgICAgICAgYXNzZXJ0KGFycltpXS52YWx1ZSA9PT0gaSk7CisvLyAgICB9CisvLwor
Ly8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBsZXQgdiA9
IGFycltpXS5wcmVJbmMoKTsKKy8vICAgICAgICBhc3NlcnQodiA9PT0gaSsxKTsKKy8vICAgIH0K
Ky8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAgICAgICAgYXNzZXJ0
KGFycltpXS52YWx1ZSA9PT0gaSsxKTsKKy8vICAgIH0KKy8vCisvLyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGxldCB2ID0gYXJyW2ldLnByZURlYygpOwor
Ly8gICAgICAgIGFzc2VydCh2ID09PSBpKTsKKy8vICAgIH0KKy8vICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMTAwMDsgaSsrKSB7CisvLyAgICAgICAgYXNzZXJ0KGFycltpXS52YWx1ZSA9PT0gaSk7
CisvLyAgICB9CisvLworLy8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8v
ICAgICAgICBhcnJbaV0ucGx1c0VxKGkpOworLy8gICAgfQorLy8gICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBhc3NlcnQoYXJyW2ldLnZhbHVlID09PSBpK2kp
OworLy8gICAgfQorLy8KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Cisv
LyAgICAgICAgYXJyW2ldLm1pbnVzRXEoaSk7CisvLyAgICB9CisvLyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkp
OworLy8gICAgfQorLy8KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Cisv
LyAgICAgICAgYXJyW2ldLnRpbWVzRXEoaSk7CisvLyAgICB9CisvLyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFzc2VydChhcnJbaV0udmFsdWUgPT09IGkq
aSk7CisvLyAgICB9CisvLworLy8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsK
Ky8vICAgICAgICBpZiAoaSA9PT0gMCkKKy8vICAgICAgICAgICAgYXJyW2ldLnZhbHVlID0gMDsK
Ky8vICAgICAgICBlbHNlCisvLyAgICAgICAgICAgIGFycltpXS5kaXZFcShpKTsKKy8vICAgIH0K
Ky8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisvLyAgICAgICAgYXNzZXJ0
KGFycltpXS52YWx1ZSA9PT0gaSk7CisvLyAgICB9CisvLworLy8gICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBhcnJbaV0gPSBuZXcgQigwLCBmdW5jdGlvbihh
KSB7IHJldHVybiBpICsgYTsgfSk7CisvLyAgICB9CisvLyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFzc2VydChhcnJbaV0uZnVuY0RvdChpKSA9PT0gaSAr
IGkpOworLy8gICAgICAgIGFzc2VydChhcnJbaV0uZnVuY0JyYWNrZXQoaSoyKSA9PT0gaSArIGkq
Mik7CisvLyAgICB9CisvLworLy99LCAyKTsKKy8vCisvL3Rlc3QoZnVuY3Rpb24oKSB7CisvLyAg
ICBmdW5jdGlvbiBmb28oKSB7IHJldHVybiAnZm9vJzsgfQorLy8gICAgbm9JbmxpbmUoZm9vKTsK
Ky8vICAgIGNsYXNzIEEgeyB9CisvLyAgICBsZXQgb2JqID0ge307CisvLyAgICBBLnByb3RvdHlw
ZS5mb28gPSBvYmo7CisvLyAgICBBLnByb3RvdHlwZVswXSA9IG9iajsKKy8vCisvLworLy8gICAg
Y2xhc3MgQiBleHRlbmRzIEEgeworLy8gICAgICAgIGJheigpIHsgcmV0dXJuIHN1cGVyW2Zvbygp
XTsgfQorLy8gICAgICAgIGpheigpIHsgcmV0dXJuIHN1cGVyLmZvbzsgfQorLy8gICAgICAgIGJh
cigpIHsgcmV0dXJuIHN1cGVyWzBdOyB9CisvLyAgICAgICAgCisvLyAgICB9CisvLworLy8gICAg
YXNzZXJ0KChuZXcgQikuYmF6KCkgPT09IG9iaik7CisvLyAgICBhc3NlcnQoKG5ldyBCKS5qYXoo
KSA9PT0gb2JqKTsKKy8vICAgIGFzc2VydCgobmV3IEIpLmJhcigpID09PSBvYmopOworLy99KTsK
Ky8vCisvL3Rlc3QoZnVuY3Rpb24oKSB7CisvLyAgICBjbGFzcyBBIHsgfQorLy8gICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspCisvLyAgICAgICAgQS5wcm90b3R5cGVbaV0gPSBpOwor
Ly8KKy8vCisvLyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CisvLyAgICAgICAgaW5kZXgoaSkgeyBy
ZXR1cm4gc3VwZXJbaV07IH0KKy8vICAgIH0KKy8vCisvLyAgICBsZXQgYiA9IG5ldyBCOworLy8g
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBhc3NlcnQoYi5p
bmRleChpKSA9PT0gaSk7CisvLyAgICB9CisvL30sIDIpOworLy8KKy8vdGVzdChmdW5jdGlvbigp
IHsKKy8vICAgIGxldCBvYmogPSB7fTsKKy8vICAgIGNsYXNzIEEgeyBjb25zdHJ1Y3RvcihyKSB7
IHRoaXMuX2ZvbyA9IHI7IH0gfQorLy8gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90
eXBlLCAnMCcsIHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuX2ZvbzsgfSB9KTsKKy8v
CisvLyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CisvLyAgICAgICAgYmFyKCkgeyByZXR1cm4gc3Vw
ZXJbMF07IH0KKy8vICAgIH0KKy8vCisvLyAgICBsZXQgcmFuZCA9IE1hdGgucmFuZG9tKCk7Cisv
LyAgICBhc3NlcnQoKG5ldyBCKHJhbmQpKS5iYXIoKSA9PT0gcmFuZCk7CisvL30pOwogCiB0ZXN0
KGZ1bmN0aW9uKCkgeyBjbGFzcyBBIHsKICAgICAgICAgY29uc3RydWN0b3IoKSB7IHRoaXMuX2Fy
cmF5ID0gW107IH0KQEAgLTM0NCw3ICszNDQsOCBAQCB0ZXN0KGZ1bmN0aW9uKCkgeyBjbGFzcyBB
IHsKIAogICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKICAgICAgICAgYmF6KGkpIHsKLSAgICAgICAg
ICAgIGxldCBvID0ge3g6MjAsIHk6MzAsIFtpXTppfTsKKyAgICAgICAgICAgIC8vbGV0IG8gPSB7
eDoyMCwgeTozMCwgW2ldOml9OworICAgICAgICAgICAgbGV0IG8gPSB7W2ldOml9OwogICAgICAg
ICAgICAgZm9yIChzdXBlci5mb28gaW4gbykgeyB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTcs
MjMyICszNTgsMjMyIEBAIHRlc3QoZnVuY3Rpb24oKSB7IGNsYXNzIEEgewogICAgIH0KICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewogICAgICAgICBsZXQgb2JqID0g
YXJyW2ldLmFycmF5OwotICAgICAgICBhc3NlcnQob2JqLmxlbmd0aCA9PT0gMykKLSAgICAgICAg
YXNzZXJ0KG9ialswXSA9PT0gJycgKyBpKTsKLSAgICAgICAgYXNzZXJ0KG9ialsxXSA9PT0gJ3gn
KQotICAgICAgICBhc3NlcnQob2JqWzJdID09PSAneScpCi0gICAgfQotfSwgMTAwKTsKLQotdGVz
dChmdW5jdGlvbigpIHsKLSAgICBmdW5jdGlvbiBmb28oKSB7IHJldHVybiAnZm9vJzsgfQotICAg
IG5vSW5saW5lKGZvbyk7Ci0gICAgY2xhc3MgQSB7Ci0gICAgICAgIGNvbnN0cnVjdG9yKCkgeyB0
aGlzLl9hcnJheSA9IFtdOyB9Ci0gICAgICAgIHNldCBmb28oeCkgewotICAgICAgICAgICAgdGhp
cy5fYXJyYXkucHVzaCh4KTsKLSAgICAgICAgfQotICAgICAgICBnZXQgYXJyYXkoKSB7IHJldHVy
biB0aGlzLl9hcnJheTsgfQotICAgIH0KLQotICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKLSAgICAg
ICAgYmF6KGkpIHsKLSAgICAgICAgICAgIGxldCBvID0ge3g6MjAsIHk6MzAsIFtpXTppfTsKLSAg
ICAgICAgICAgIGZvciAoc3VwZXJbZm9vKCldIGluIG8pIHsgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGxldCBhcnIgPSBbXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspCi0gICAg
ICAgIGFyci5wdXNoKG5ldyBCKTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7
IGkrKykgewotICAgICAgICBsZXQgb2JqID0gYXJyW2ldOwotICAgICAgICBvYmouYmF6KGkpOwot
ICAgIH0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewotICAgICAg
ICBsZXQgb2JqID0gYXJyW2ldLmFycmF5OwotICAgICAgICBhc3NlcnQob2JqLmxlbmd0aCA9PT0g
MykKLSAgICAgICAgYXNzZXJ0KG9ialswXSA9PT0gJycgKyBpKTsKLSAgICAgICAgYXNzZXJ0KG9i
alsxXSA9PT0gJ3gnKQotICAgICAgICBhc3NlcnQob2JqWzJdID09PSAneScpCisgICAgICAgIC8v
YXNzZXJ0KG9iai5sZW5ndGggPT09IDMpCisgICAgICAgIC8vYXNzZXJ0KG9ialswXSA9PT0gJycg
KyBpKTsKKyAgICAgICAgLy9hc3NlcnQob2JqWzFdID09PSAneCcpCisgICAgICAgIC8vYXNzZXJ0
KG9ialsyXSA9PT0gJ3knKQogICAgIH0KIH0sIDEwMCk7CiAKLXRlc3QoZnVuY3Rpb24oKSB7Ci0g
ICAgY2xhc3MgQSB7Ci0gICAgICAgIGNvbnN0cnVjdG9yKCkgeyB0aGlzLl9hcnJheSA9IFtdOyB9
Ci0gICAgICAgIHNldCBmb28oeCkgewotICAgICAgICAgICAgdGhpcy5fYXJyYXkucHVzaCh4KTsK
LSAgICAgICAgfQotICAgICAgICBnZXQgYXJyYXkoKSB7IHJldHVybiB0aGlzLl9hcnJheTsgfQot
ICAgIH0KLQotICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKLSAgICAgICAgYmF6KGkpIHsKLSAgICAg
ICAgICAgIGxldCBvID0gWycnICsgaSwgIngiLCAieSJdOwotICAgICAgICAgICAgZm9yIChzdXBl
ci5mb28gb2YgbykgeyB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbGV0IGFyciA9IFtdOwotICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykKLSAgICAgICAgYXJyLnB1c2gobmV3IEIpOwot
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGxldCBv
YmogPSBhcnJbaV07Ci0gICAgICAgIG9iai5iYXooaSk7Ci0gICAgfQotICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGxldCBvYmogPSBhcnJbaV0uYXJy
YXk7Ci0gICAgICAgIGFzc2VydChvYmoubGVuZ3RoID09PSAzKQotICAgICAgICBhc3NlcnQob2Jq
WzBdID09PSAnJyArIGkpOwotICAgICAgICBhc3NlcnQob2JqWzFdID09PSAneCcpCi0gICAgICAg
IGFzc2VydChvYmpbMl0gPT09ICd5JykKLSAgICB9Ci19LCAxMDApOwotCi10ZXN0KGZ1bmN0aW9u
KCkgewotICAgIGZ1bmN0aW9uIGZvbygpIHsgcmV0dXJuICdmb28nOyB9Ci0gICAgY2xhc3MgQSB7
Ci0gICAgICAgIGNvbnN0cnVjdG9yKCkgeyB0aGlzLl9hcnJheSA9IFtdOyB9Ci0gICAgICAgIHNl
dCBmb28oeCkgewotICAgICAgICAgICAgdGhpcy5fYXJyYXkucHVzaCh4KTsKLSAgICAgICAgfQot
ICAgICAgICBnZXQgYXJyYXkoKSB7IHJldHVybiB0aGlzLl9hcnJheTsgfQotICAgIH0KLQotICAg
IGNsYXNzIEIgZXh0ZW5kcyBBIHsKLSAgICAgICAgYmF6KGkpIHsKLSAgICAgICAgICAgIGxldCBv
ID0gWycnICsgaSwgIngiLCAieSJdOwotICAgICAgICAgICAgZm9yIChzdXBlcltmb28oKV0gb2Yg
bykgeyB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbGV0IGFyciA9IFtdOwotICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMjA7IGkrKykKLSAgICAgICAgYXJyLnB1c2gobmV3IEIpOwotICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGxldCBvYmogPSBhcnJb
aV07Ci0gICAgICAgIG9iai5iYXooaSk7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
YXJyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGxldCBvYmogPSBhcnJbaV0uYXJyYXk7Ci0gICAg
ICAgIGFzc2VydChvYmoubGVuZ3RoID09PSAzKQotICAgICAgICBhc3NlcnQob2JqWzBdID09PSAn
JyArIGkpOwotICAgICAgICBhc3NlcnQob2JqWzFdID09PSAneCcpCi0gICAgICAgIGFzc2VydChv
YmpbMl0gPT09ICd5JykKLSAgICB9Ci19LCAxMDApOwotCi10ZXN0KGZ1bmN0aW9uKCkgewotICAg
IGNsYXNzIEEgewotICAgICAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgICAgICAgIHRoaXMuX2Zv
byA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0IGZvbyh4KSB7Ci0gICAgICAgICAgICB0
aGlzLl9mb28gPSB4OwotICAgICAgICB9Ci0gICAgICAgIGdldCBmb28oKSB7IHJldHVybiB0aGlz
Ll9mb287IH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gb2JqKGkpIHsgcmV0dXJuIHtvOiBpfTsgfQot
ICAgIG5vSW5saW5lKG9iaik7Ci0KLSAgICBjbGFzcyBCIGV4dGVuZHMgQSB7Ci0gICAgICAgIGJh
eihpKSB7Ci0gICAgICAgICAgICA7KHtvOiBzdXBlci5mb299ID0gb2JqKGkpKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBsZXQgYXJyID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAw
OyBpKyspIHsKLSAgICAgICAgYXJyLnB1c2goKG5ldyBCKSk7Ci0gICAgfQotICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFycltpXS5iYXooaSk7Ci0gICAgfQot
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChhcnJb
aV0uZm9vID09PSBpKTsKLSAgICB9Ci19LCAxMCk7Ci0KLXRlc3QoZnVuY3Rpb24oKSB7Ci0gICAg
ZnVuY3Rpb24gZm9vKCkgeyByZXR1cm4gJ2Zvbyc7IH0KLSAgICBub0lubGluZShmb28pOwotICAg
IGNsYXNzIEEgewotICAgICAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgICAgICAgIHRoaXMuX2Zv
byA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0IGZvbyh4KSB7Ci0gICAgICAgICAgICB0
aGlzLl9mb28gPSB4OwotICAgICAgICB9Ci0gICAgICAgIGdldCBmb28oKSB7IHJldHVybiB0aGlz
Ll9mb287IH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gb2JqKGkpIHsgcmV0dXJuIHtvOiBpfTsgfQot
ICAgIG5vSW5saW5lKG9iaik7Ci0KLSAgICBjbGFzcyBCIGV4dGVuZHMgQSB7Ci0gICAgICAgIGJh
eihpKSB7Ci0gICAgICAgICAgICA7KHtvOiBzdXBlcltmb28oKV19ID0gb2JqKGkpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBsZXQgYXJyID0gW107Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwOyBpKyspIHsKLSAgICAgICAgYXJyLnB1c2goKG5ldyBCKSk7Ci0gICAgfQotICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFycltpXS5iYXooaSk7Ci0gICAg
fQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChh
cnJbaV0uZm9vID09PSBpKTsKLSAgICB9Ci19LCAxMCk7Ci0KLXRlc3QoZnVuY3Rpb24oKSB7Ci0g
ICAgY2xhc3MgQSB7Ci0gICAgICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgICAgICAgdGhpcy5f
Zm9vID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBnZXQgY2FsbCgpIHsKLSAgICAgICAgICAg
IGxldCByZXQgPSAoKSA9PiAnY2FsbCc7Ci0gICAgICAgICAgICBub0lubGluZShyZXQpOwotICAg
ICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotICAgICAgICBnZXQgYXBwbHkoKSB7IAot
ICAgICAgICAgICAgbGV0IHJldCA9ICgpID0+ICdhcHBseSc7Ci0gICAgICAgICAgICBub0lubGlu
ZShyZXQpOwotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGNsYXNzIEIgZXh0ZW5kcyBBIHsKLSAgICAgICAgZm9vKCkgewotICAgICAgICAgICAgcmV0dXJu
IHN1cGVyLmNhbGwoe30sIDIwLCAzMCk7Ci0gICAgICAgIH0KLSAgICAgICAgYmFyKCkgewotICAg
ICAgICAgICAgcmV0dXJuIHN1cGVyLmFwcGx5KHt9LCBbMTAsIDIwXSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgbGV0IGIg
PSBuZXcgQjsKLSAgICAgICAgYXNzZXJ0KGIuZm9vKCkgPT09ICdjYWxsJyk7Ci0gICAgICAgIGFz
c2VydChiLmJhcigpID09PSAnYXBwbHknKTsKLSAgICB9Ci19LCAyKTsKLQotdGVzdChmdW5jdGlv
bigpIHsKLSAgICBjbGFzcyBBIHsKLSAgICAgICAgY29uc3RydWN0b3IoaSkgeyB0aGlzLl9pID0g
aTsgfQotICAgICAgICBnZXQgZm9vKCkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0
cmluZ3MsIC4uLnZhbHVlcykgewotICAgICAgICAgICAgICAgIHJldHVybiBbc3RyaW5ncywgdmFs
dWVzXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBnZXQgaSgpIHsgcmV0dXJu
IHRoaXMuX2k7IH0KLSAgICB9Ci0KLSAgICBjbGFzcyBCIGV4dGVuZHMgQSB7Ci0gICAgICAgIGJh
eigpIHsKLSAgICAgICAgICAgIHJldHVybiBzdXBlci5mb29gaGVsbG8ke3N1cGVyLml9d29ybGRg
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGV0IGFyciA9IFtdOwotICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGxldCBiID0gbmV3IEIoaSk7Ci0gICAgICAg
IGFyci5wdXNoKGIpOwotICAgIH0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykg
ewotICAgICAgICBsZXQgciA9IGFycltpXS5iYXooKTsKLSAgICAgICAgYXNzZXJ0KHIubGVuZ3Ro
ID09PSAyKTsKLSAgICAgICAgYXNzZXJ0KHJbMF0ubGVuZ3RoID09PSAyKTsKLSAgICAgICAgYXNz
ZXJ0KHJbMF1bMF0gPT09ICdoZWxsbycpOwotICAgICAgICBhc3NlcnQoclswXVsxXSA9PT0gJ3dv
cmxkJyk7Ci0gICAgICAgIGFzc2VydChyWzFdLmxlbmd0aCA9PT0gMSk7Ci0gICAgICAgIGFzc2Vy
dChyWzFdWzBdID09PSBpKTsKLSAgICB9Ci19LCAxMCk7CisvL3Rlc3QoZnVuY3Rpb24oKSB7Cisv
LyAgICBmdW5jdGlvbiBmb28oKSB7IHJldHVybiAnZm9vJzsgfQorLy8gICAgbm9JbmxpbmUoZm9v
KTsKKy8vICAgIGNsYXNzIEEgeworLy8gICAgICAgIGNvbnN0cnVjdG9yKCkgeyB0aGlzLl9hcnJh
eSA9IFtdOyB9CisvLyAgICAgICAgc2V0IGZvbyh4KSB7CisvLyAgICAgICAgICAgIHRoaXMuX2Fy
cmF5LnB1c2goeCk7CisvLyAgICAgICAgfQorLy8gICAgICAgIGdldCBhcnJheSgpIHsgcmV0dXJu
IHRoaXMuX2FycmF5OyB9CisvLyAgICB9CisvLworLy8gICAgY2xhc3MgQiBleHRlbmRzIEEgewor
Ly8gICAgICAgIGJheihpKSB7CisvLyAgICAgICAgICAgIGxldCBvID0ge3g6MjAsIHk6MzAsIFtp
XTppfTsKKy8vICAgICAgICAgICAgZm9yIChzdXBlcltmb28oKV0gaW4gbykgeyB9CisvLyAgICAg
ICAgfQorLy8gICAgfQorLy8gICAgbGV0IGFyciA9IFtdOworLy8gICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyMDsgaSsrKQorLy8gICAgICAgIGFyci5wdXNoKG5ldyBCKTsKKy8vICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CisvLyAgICAgICAgbGV0IG9iaiA9IGFycltp
XTsKKy8vICAgICAgICBvYmouYmF6KGkpOworLy8gICAgfQorLy8gICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsKKy8vICAgICAgICBsZXQgb2JqID0gYXJyW2ldLmFycmF5
OworLy8gICAgICAgIGFzc2VydChvYmoubGVuZ3RoID09PSAzKQorLy8gICAgICAgIGFzc2VydChv
YmpbMF0gPT09ICcnICsgaSk7CisvLyAgICAgICAgYXNzZXJ0KG9ialsxXSA9PT0gJ3gnKQorLy8g
ICAgICAgIGFzc2VydChvYmpbMl0gPT09ICd5JykKKy8vICAgIH0KKy8vfSwgMTAwKTsKKy8vCisv
L3Rlc3QoZnVuY3Rpb24oKSB7CisvLyAgICBjbGFzcyBBIHsKKy8vICAgICAgICBjb25zdHJ1Y3Rv
cigpIHsgdGhpcy5fYXJyYXkgPSBbXTsgfQorLy8gICAgICAgIHNldCBmb28oeCkgeworLy8gICAg
ICAgICAgICB0aGlzLl9hcnJheS5wdXNoKHgpOworLy8gICAgICAgIH0KKy8vICAgICAgICBnZXQg
YXJyYXkoKSB7IHJldHVybiB0aGlzLl9hcnJheTsgfQorLy8gICAgfQorLy8KKy8vICAgIGNsYXNz
IEIgZXh0ZW5kcyBBIHsKKy8vICAgICAgICBiYXooaSkgeworLy8gICAgICAgICAgICBsZXQgbyA9
IFsnJyArIGksICJ4IiwgInkiXTsKKy8vICAgICAgICAgICAgZm9yIChzdXBlci5mb28gb2Ygbykg
eyB9CisvLyAgICAgICAgfQorLy8gICAgfQorLy8gICAgbGV0IGFyciA9IFtdOworLy8gICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKQorLy8gICAgICAgIGFyci5wdXNoKG5ldyBCKTsKKy8v
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CisvLyAgICAgICAgbGV0
IG9iaiA9IGFycltpXTsKKy8vICAgICAgICBvYmouYmF6KGkpOworLy8gICAgfQorLy8gICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsKKy8vICAgICAgICBsZXQgb2JqID0g
YXJyW2ldLmFycmF5OworLy8gICAgICAgIGFzc2VydChvYmoubGVuZ3RoID09PSAzKQorLy8gICAg
ICAgIGFzc2VydChvYmpbMF0gPT09ICcnICsgaSk7CisvLyAgICAgICAgYXNzZXJ0KG9ialsxXSA9
PT0gJ3gnKQorLy8gICAgICAgIGFzc2VydChvYmpbMl0gPT09ICd5JykKKy8vICAgIH0KKy8vfSwg
MTAwKTsKKy8vCisvL3Rlc3QoZnVuY3Rpb24oKSB7CisvLyAgICBmdW5jdGlvbiBmb28oKSB7IHJl
dHVybiAnZm9vJzsgfQorLy8gICAgY2xhc3MgQSB7CisvLyAgICAgICAgY29uc3RydWN0b3IoKSB7
IHRoaXMuX2FycmF5ID0gW107IH0KKy8vICAgICAgICBzZXQgZm9vKHgpIHsKKy8vICAgICAgICAg
ICAgdGhpcy5fYXJyYXkucHVzaCh4KTsKKy8vICAgICAgICB9CisvLyAgICAgICAgZ2V0IGFycmF5
KCkgeyByZXR1cm4gdGhpcy5fYXJyYXk7IH0KKy8vICAgIH0KKy8vCisvLyAgICBjbGFzcyBCIGV4
dGVuZHMgQSB7CisvLyAgICAgICAgYmF6KGkpIHsKKy8vICAgICAgICAgICAgbGV0IG8gPSBbJycg
KyBpLCAieCIsICJ5Il07CisvLyAgICAgICAgICAgIGZvciAoc3VwZXJbZm9vKCldIG9mIG8pIHsg
fQorLy8gICAgICAgIH0KKy8vICAgIH0KKy8vICAgIGxldCBhcnIgPSBbXTsKKy8vICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMjA7IGkrKykKKy8vICAgICAgICBhcnIucHVzaChuZXcgQik7CisvLyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeworLy8gICAgICAgIGxldCBv
YmogPSBhcnJbaV07CisvLyAgICAgICAgb2JqLmJheihpKTsKKy8vICAgIH0KKy8vICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CisvLyAgICAgICAgbGV0IG9iaiA9IGFy
cltpXS5hcnJheTsKKy8vICAgICAgICBhc3NlcnQob2JqLmxlbmd0aCA9PT0gMykKKy8vICAgICAg
ICBhc3NlcnQob2JqWzBdID09PSAnJyArIGkpOworLy8gICAgICAgIGFzc2VydChvYmpbMV0gPT09
ICd4JykKKy8vICAgICAgICBhc3NlcnQob2JqWzJdID09PSAneScpCisvLyAgICB9CisvL30sIDEw
MCk7CisvLworLy90ZXN0KGZ1bmN0aW9uKCkgeworLy8gICAgY2xhc3MgQSB7CisvLyAgICAgICAg
Y29uc3RydWN0b3IoKSB7CisvLyAgICAgICAgICAgIHRoaXMuX2ZvbyA9IG51bGw7CisvLyAgICAg
ICAgfQorLy8gICAgICAgIHNldCBmb28oeCkgeworLy8gICAgICAgICAgICB0aGlzLl9mb28gPSB4
OworLy8gICAgICAgIH0KKy8vICAgICAgICBnZXQgZm9vKCkgeyByZXR1cm4gdGhpcy5fZm9vOyB9
CisvLyAgICB9CisvLyAgICBmdW5jdGlvbiBvYmooaSkgeyByZXR1cm4ge286IGl9OyB9CisvLyAg
ICBub0lubGluZShvYmopOworLy8KKy8vICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKKy8vICAgICAg
ICBiYXooaSkgeworLy8gICAgICAgICAgICA7KHtvOiBzdXBlci5mb299ID0gb2JqKGkpKTsKKy8v
ICAgICAgICB9CisvLyAgICB9CisvLyAgICBsZXQgYXJyID0gW107CisvLyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDA7IGkrKykgeworLy8gICAgICAgIGFyci5wdXNoKChuZXcgQikpOworLy8g
ICAgfQorLy8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBh
cnJbaV0uYmF6KGkpOworLy8gICAgfQorLy8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBp
KyspIHsKKy8vICAgICAgICBhc3NlcnQoYXJyW2ldLmZvbyA9PT0gaSk7CisvLyAgICB9CisvL30s
IDEwKTsKKy8vCisvL3Rlc3QoZnVuY3Rpb24oKSB7CisvLyAgICBmdW5jdGlvbiBmb28oKSB7IHJl
dHVybiAnZm9vJzsgfQorLy8gICAgbm9JbmxpbmUoZm9vKTsKKy8vICAgIGNsYXNzIEEgeworLy8g
ICAgICAgIGNvbnN0cnVjdG9yKCkgeworLy8gICAgICAgICAgICB0aGlzLl9mb28gPSBudWxsOwor
Ly8gICAgICAgIH0KKy8vICAgICAgICBzZXQgZm9vKHgpIHsKKy8vICAgICAgICAgICAgdGhpcy5f
Zm9vID0geDsKKy8vICAgICAgICB9CisvLyAgICAgICAgZ2V0IGZvbygpIHsgcmV0dXJuIHRoaXMu
X2ZvbzsgfQorLy8gICAgfQorLy8gICAgZnVuY3Rpb24gb2JqKGkpIHsgcmV0dXJuIHtvOiBpfTsg
fQorLy8gICAgbm9JbmxpbmUob2JqKTsKKy8vCisvLyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7Cisv
LyAgICAgICAgYmF6KGkpIHsKKy8vICAgICAgICAgICAgOyh7bzogc3VwZXJbZm9vKCldfSA9IG9i
aihpKSk7CisvLyAgICAgICAgfQorLy8gICAgfQorLy8gICAgbGV0IGFyciA9IFtdOworLy8gICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBhcnIucHVzaCgobmV3
IEIpKTsKKy8vICAgIH0KKy8vICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Cisv
LyAgICAgICAgYXJyW2ldLmJheihpKTsKKy8vICAgIH0KKy8vICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwMDsgaSsrKSB7CisvLyAgICAgICAgYXNzZXJ0KGFycltpXS5mb28gPT09IGkpOworLy8g
ICAgfQorLy99LCAxMCk7CisvLworLy90ZXN0KGZ1bmN0aW9uKCkgeworLy8gICAgY2xhc3MgQSB7
CisvLyAgICAgICAgY29uc3RydWN0b3IoKSB7CisvLyAgICAgICAgICAgIHRoaXMuX2ZvbyA9IG51
bGw7CisvLyAgICAgICAgfQorLy8gICAgICAgIGdldCBjYWxsKCkgeworLy8gICAgICAgICAgICBs
ZXQgcmV0ID0gKCkgPT4gJ2NhbGwnOworLy8gICAgICAgICAgICBub0lubGluZShyZXQpOworLy8g
ICAgICAgICAgICByZXR1cm4gcmV0OworLy8gICAgICAgIH0KKy8vICAgICAgICBnZXQgYXBwbHko
KSB7IAorLy8gICAgICAgICAgICBsZXQgcmV0ID0gKCkgPT4gJ2FwcGx5JzsKKy8vICAgICAgICAg
ICAgbm9JbmxpbmUocmV0KTsKKy8vICAgICAgICAgICAgcmV0dXJuIHJldDsKKy8vICAgICAgICB9
CisvLyAgICB9CisvLworLy8gICAgY2xhc3MgQiBleHRlbmRzIEEgeworLy8gICAgICAgIGZvbygp
IHsKKy8vICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNhbGwoe30sIDIwLCAzMCk7CisvLyAgICAg
ICAgfQorLy8gICAgICAgIGJhcigpIHsKKy8vICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmFwcGx5
KHt9LCBbMTAsIDIwXSk7CisvLyAgICAgICAgfQorLy8gICAgfQorLy8gICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBsZXQgYiA9IG5ldyBCOworLy8gICAgICAg
IGFzc2VydChiLmZvbygpID09PSAnY2FsbCcpOworLy8gICAgICAgIGFzc2VydChiLmJhcigpID09
PSAnYXBwbHknKTsKKy8vICAgIH0KKy8vfSwgMik7CisvLworLy90ZXN0KGZ1bmN0aW9uKCkgewor
Ly8gICAgY2xhc3MgQSB7CisvLyAgICAgICAgY29uc3RydWN0b3IoaSkgeyB0aGlzLl9pID0gaTsg
fQorLy8gICAgICAgIGdldCBmb28oKSB7CisvLyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihz
dHJpbmdzLCAuLi52YWx1ZXMpIHsKKy8vICAgICAgICAgICAgICAgIHJldHVybiBbc3RyaW5ncywg
dmFsdWVzXTsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKy8vICAgICAgICBnZXQgaSgp
IHsgcmV0dXJuIHRoaXMuX2k7IH0KKy8vICAgIH0KKy8vCisvLyAgICBjbGFzcyBCIGV4dGVuZHMg
QSB7CisvLyAgICAgICAgYmF6KCkgeworLy8gICAgICAgICAgICByZXR1cm4gc3VwZXIuZm9vYGhl
bGxvJHtzdXBlci5pfXdvcmxkYDsKKy8vICAgICAgICB9CisvLyAgICB9CisvLworLy8gICAgbGV0
IGFyciA9IFtdOworLy8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAg
ICAgICBsZXQgYiA9IG5ldyBCKGkpOworLy8gICAgICAgIGFyci5wdXNoKGIpOworLy8gICAgfQor
Ly8gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKy8vICAgICAgICBsZXQgciA9
IGFycltpXS5iYXooKTsKKy8vICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIpOworLy8gICAg
ICAgIGFzc2VydChyWzBdLmxlbmd0aCA9PT0gMik7CisvLyAgICAgICAgYXNzZXJ0KHJbMF1bMF0g
PT09ICdoZWxsbycpOworLy8gICAgICAgIGFzc2VydChyWzBdWzFdID09PSAnd29ybGQnKTsKKy8v
ICAgICAgICBhc3NlcnQoclsxXS5sZW5ndGggPT09IDEpOworLy8gICAgICAgIGFzc2VydChyWzFd
WzBdID09PSBpKTsKKy8vICAgIH0KKy8vfSwgMTApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2lu
Y2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmlu
dGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJp
bnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0
IGNoYXIqIG9wKQpAQCAtMjY5LDcgKzI3MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1w
ZXI8QmxvY2s+OjpkdW0KIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9j
a0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJs
b2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0
aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25z
QXRIZWFkLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXAp
CiB7CiAgICAgZHVtcEhlYWRlcihibG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMs
NiArMjg1LDIzIEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAog
ICAgICAgICBvdXQucHJpbnQoImJiIyIsIGJsb2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAg
IGlmIChwcmVkaWN0aW9uc0F0SGVhZCkgeworICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0
aW9ucyBhdCBoZWFkOiBbIik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9
IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1h
UHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAg
ZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAi
PSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxv
Y2FsKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7Cisg
ICAgICAgIH0KKwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxM
ZW5ndGgoKTsgKSB7CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0
cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBl
ci5kdW1wQnl0ZWNvZGUoY3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2
aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
RHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFz
cyBCbG9jaz4KIGNsYXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5
dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2Nr
KEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3Jh
cGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmlu
dFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0
YXR1c01hcCgpKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQs
IFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9
IElDU3RhdHVzTWFwKCkpOwogCiAgICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lk
IGR1bXBDb25zdGFudHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUdyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR3JhcGguaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcg
KzEwMiw3IEBAIHB1YmxpYzoKIAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+Ci0gICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdU
Rjo6ZGF0YUZpbGUoKSkKKyAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3Ry
ZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2Nr
Qnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrVHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3Ry
dWN0aW9ucywgKnRoaXMsIHNwZWN1bGF0aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdl
dElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0
aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJs
b2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNN
YXApOworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0
aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXAp
OwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVz
TWFwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNiArNTExLDcgQEAgcHVibGljOgogICAgIFNw
ZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5jdG9y
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
SW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1NywxNSBA
QCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAgICBm
dW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0g
ICAKK30KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JF
YWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3Im
IGZ1bmMpCit7CisgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgewor
ICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2Zp
bGVzKQorICAgICAgICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNp
bmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNp
emVvZihPcGVyYW5kKSA9PSBzaXplb2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFu
ZHNMaWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBi
b29sIHRyYWNrQ2FsbGVlID0gZmFsc2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAg
dXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29s
PiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBA
IC0xNDMsMjEgKzE0NCwyMyBAQCBwdWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsK
IAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1M
b2NhbHMsIHNpemVfdCBudW1UbXBzKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1B
cmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29u
c3RhbnRzID0gMCkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAg
ICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51
bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsg
bnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMg
KyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0
czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgp
KTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBz
aXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQor
ICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2Nh
bHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAs
IG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25z
dGFudHMpCiAgICAgewotICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxv
Y2FscyArIG51bVRtcHMpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51
bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAg
ICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsx
NjgsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBj
b25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAg
ICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAg
ICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1D
b25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFs
dWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFs
dWUpOwpAQCAtMTcyLDMzICsxNzYsNTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51bWJlck9m
QXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3Qg
bnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAgIHNpemVf
dCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJP
ZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNv
bnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51
bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJn
dW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJh
Y2tDYWxsZWU7IH0KIAorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJ
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsK
KyAgICB9CiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBp
ZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29u
c3RhbnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAg
ICAgICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNp
emVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2Nh
bHMoKSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0K
KyAgICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAg
UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07
IH0KICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3Qg
aWR4KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RS
ZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3Vt
ZW50SW5kZXgoaWR4KV07IH0KKworICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUg
Y2FsbGVlKCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wg
Zm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxl
ZT4+CisgICAgQ29uc3RSZWZUeXBlIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxh
c3QoKTsgfQogICAgIAogICAgIFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92
YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBS
ZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5k
ZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBs
YXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QK
QEAgLTI0OCw3ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9m
TG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBz
aXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51
bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90
IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1U
bXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBA
IC0yNjgsNyArMjkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6
ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAg
bV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQo
KSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMw
NSw4ICszMjcsMTUgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAg
ICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJh
bmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGNvbnN0YW50SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAg
ICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAg
CkBAIC0zMTksOCArMzQ4LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAg
ICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0
dXJuIGNvbnN0YW50KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4g
bG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRl
eCgpKSA8IG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAg
IGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cyhpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51
bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkg
KyBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBP
cGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRz
KCkpKTsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlckZvckNvbnN0YW50KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJl
ck9mTG9jYWxzKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPT0gY2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2
b2lkIGZpbGwoVCB2YWx1ZSkKQEAgLTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRo
ZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4
dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8g
VGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBu
ZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBj
b25zdGFudHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwog
ICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9j
YWxzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDggKzM4LDggQEAgaW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAg
ICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJh
Y2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBDb21t
YVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVt
YmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBA
IHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBp
bkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4
cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIs
IGluQ29udGV4dChjYWxsZWUoKSwgY29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tD
YWxsZWU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVy
IGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJn
dW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVy
YW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRl
eCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEg
QEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2
YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5
dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0
dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5l
IGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAg
IHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBh
bmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAot
ICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBl
IGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRz
OyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVn
aXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmly
dHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGlu
dCk7CisgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFu
dChpbnQpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3Rl
ciA9IDB4M2ZmZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVh
bFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2Fs
KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0
ZXIpICYmICFpc0NvbnN0YW50KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAg
ICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFu
ZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAt
MSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVy
YW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsg
fQogICAgIHN0YXRpYyBpbnQgYXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVy
biBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0
aWMgaW50IGNvbnN0YW50VG9PcGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3Zp
cnR1YWxSZWdpc3RlcjsKIH07CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitp
bmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25z
dGFudEluZGV4KQoreworICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
Ojpjb25zdGFudFRvT3BlcmFuZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1
bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMs
IG51bUxvY2FscywgbnVtVG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVh
ZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRv
cCgpKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzLCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBl
eGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sg
QXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5
Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTUgQEAKICNpbmNsdWRlICJK
SVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0
aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0Fz
eW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgpAQCAtNjAsNiArNjMsODMzIEBAIFNlY29uZHMg
dG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNl
Y29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVj
dGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBl
ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAg
ICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKwor
ICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9Owor
CisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29k
ZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNp
bHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCBy
ZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1
dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRU
eXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5k
KSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQp
OworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAg
Y2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENh
bGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0
eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90Pigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAg
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
ICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9m
aWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRh
ZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAg
ICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3By
ZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1
Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJp
Z2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiBy
aWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0
YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2Zp
bGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAo
ISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJl
TmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0
dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
QmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlz
U3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5n
T2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0lu
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ug
b3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChh
dXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYg
cmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJp
dGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
U3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZy
b21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAg
ICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91Ymxl
UHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBD
YW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJ
bnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIH07CisK
KyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAg
ICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNlIGlmIChp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5kbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9w
Y29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxP
cERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAg
ICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUg
ZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJP
bmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
dW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNp
dGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0Fu
eUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9k
ZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxl
JiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Io
c3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAg
ICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgPyBT
cGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3Bl
Y3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91
YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVyZU5hTikK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2Rl
TnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAg
IHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5
dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9w
Y29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0
LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2Rl
Lm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUp
OworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX25lZ2F0
ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0
ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVy
YW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAg
ICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9wb3c6IHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAg
IGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlm
IChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDogeworICAg
ICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0
byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0
ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0Z1bGxO
dW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5T
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAg
ICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQp
CisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsK
KyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisKKyAgICAgICAg
aWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVj
T2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9f
cHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5t
X3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CisgICAgICAgIFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAg
ICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3Qg
bWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhl
eSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAgICBicmVhazsgLy8gVGhpcyBjYXRj
aCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRo
ZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHNl
dFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAg
fSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxv
Y2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9u
ZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+
KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1
ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZl
cj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlf
d2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3Jl
YXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVz
dD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlf
d2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJy
YXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3Vs
ZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1
bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1
bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fz
eW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25t
ZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9w
cm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9y
PigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9z
dHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwg
U3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9f
aW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5k
ZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRS
ZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNE
ZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRT
Y29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwg
U3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1By
b21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19n
ZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5
bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2Vx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxs
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVh
bjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0
cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJv
ZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2Fz
dDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19j
YXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBz
ZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
YWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgor
ICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgor
ICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBj
YXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2Fz
ZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3Bf
dGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1
ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9m
dW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBv
cF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9w
ZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ug
b3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAg
ICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2Fz
ZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3Rl
cToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9w
X2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoK
KyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dl
cToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAg
Y2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNl
IG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAg
IGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNh
c2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgor
ICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9l
dmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6Cisg
ICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoK
KyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0
aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5l
OgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2Ug
ZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1
Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9m
dW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6
cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5p
cXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytp
KQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVC
bG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9v
bCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
KTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxl
KGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZl
cikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisg
ICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsK
KyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmls
ZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1l
bnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7
CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1
bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJn
dW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisK
KyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBk
byBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lk
ZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRz
LgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRo
YXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAv
LyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUg
aWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChC
eXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3Vy
cmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKwor
ICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0Qmxv
Y2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50
b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChpICsg
YmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zl
ckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGkg
Kz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0g
bV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5k
c1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRh
Z2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAg
ICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30KKwogSklU
OjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2sp
CiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEyLDcgQEAg
SklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRF
bWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3Jj
ZUxPTCgpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTM3LDExICs5NzQsMTUgQEAgdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2
aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9T
TE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBc
CiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49
IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0
cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAg
ICAgICBpZiAodXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkgXAorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHR5cGU7IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RF
X0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArOTk3LDMyIEBAIHZvaWQg
SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FT
RV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1l
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUp
OyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAg
ICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nh
c2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAg
aWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAg
ICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5j
dGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklU
SW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2Rl
QmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDcgKzEwNzgsNjcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Ns
b3dDYXNlID0gMDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9j
ayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVz
aXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dy
YXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAg
ICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nl
c3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisg
ICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQo
YmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBm
b3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+
dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsK
KyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJl
bnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9j
dXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9y
Qnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1
cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVu
dEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21Q
cmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3Jz
LnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNT
ZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNl
c3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAo
IW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRl
Y2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVBy
aW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJl
ZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRl
RnJvbVByaW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRDdXJyZW50Qmxv
Y2tTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVu
dFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgo
KV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBwcmV2aW91
c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CiAgICAgICAgIGlmIChtX2J5dGVj
b2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5z
dHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgpAQCAtMjc4LDQ2ICsxMTg1
LDUzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogI2Vu
ZGlmCiAKKworICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVn
IGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAg
ICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAg
ICB9CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBERUZJTkVfU0xPV19P
UChpbl9ieV92YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3MpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGxlc3NlcSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19j
YWxsYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHR5cGVvZikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lz
X29iamVjdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1c2hf
d2l0aF9zY29wZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJv
bm1lbnQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVf
U0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVz
b2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChk
ZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hh
YmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AobmV3X2FycmF5X2J1ZmZlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGhhc19nZW5lcmljX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19P
UChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5k
ZXhfc3RyaW5nKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoY3JlYXRlX3Jlc3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNl
KQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoY3JlYXRlX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Fz
eW5jX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvcikKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AocG93KQorICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92
YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9vbGVh
bikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcywgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cExlc3M+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNz
ZXEsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR3JlYXRlcj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09Q
KGdyZWF0ZXJlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKS5tX2RzdCwg
U3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9T
TE9XX09QKHR5cGVvZiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKS5tX2RzdCwg
U3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCkubV9kc3QsIFNwZWNCb29s
ZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9vbGVhbikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3RyY2F0PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNo
X3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVy
KCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhp
cywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChy
ZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9k
c3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9w
ZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19P
UChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBT
cGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0
dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJh
eV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVh
ZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlf
YnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3Qs
IFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAgICAgICBE
RUZJTkVfU0xPV19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERF
RklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1l
bnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3Bl
Y09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZs
eT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVj
QXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3Qp
CisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAg
IERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0
ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAg
ICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC00NzcsNiArMTM5MSwzNiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+
PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9jaGVja2VkVXNlTE9M
KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAgICAgICAg
IGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90aHJvdzoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX2ptcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2luc3Rh
bmNlb2ZfY3VzdG9tOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZToKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBMT0w6ICIsIG9wY29kZUlE
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fY2hl
Y2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdXNlTE9MKQor
ICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAg
ICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0
ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAg
IH0KQEAgLTUxNSwxMiArMTQ1OSwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNl
UHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2ln
bmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9
IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50
bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAg
IG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGluayh0aGlzKTsKKworICAg
ICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNTc5
LDcgKzE1MjUsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNr
X3RyYXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVn
YXRlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk3LDYgKzE1NDIs
MTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9pdGVyYXRvcl9uZXh0KQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AobW9kKQorI2Vsc2UKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X21vZCkKKyNlbmRpZgorCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVk
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKGRlYykKQEAgLTYzMywxNSArMTU4NCwxOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1f
c2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhf
TUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0g
aXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2Ug
Y29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8u
b2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5r
ZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8v
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwg
Zmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMg
bGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJU
X1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgp
LCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291
bnRlcikpOwogCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzog
c29tZSBzbG93IHBhdGhzIGFscmVhZHkgZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBp
dC4KKyAgICAgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgICAgIH0KKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAg
ICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03NzQsNiArMTcyOCwy
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhp
dEp1bXBzKSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQuZmlyc3Q7CisgICAg
ICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAganVtcHMubGluayh0aGlzKTsK
KworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICBi
cmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVja3BvaW50IGV4aXRzLgorCisgICAgICAg
IGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0
cjxPU1JFeGl0UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAvL2lmIChieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTElu
dDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmUpOworICAgICAgICAvL2Vsc2UgCisgICAgICAgIC8vICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6
OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAg
ICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRhdGFU
YWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAgIG1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNS
YXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAgICAgZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRhZyk7CisgICAgfQor
CiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpA
QCAtMTA1OCw2ICsyMDM0LDcwNiBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7
CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRp
bWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2lu
ZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAo
IW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRl
Y29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgs
IEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVt
cCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFs
bG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hl
biB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21w
aWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdh
bnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4u
CisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
OworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIo
aSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2Vk
Q2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7
CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFs
bG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hl
biB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29t
cGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmln
YW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4u
LgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlO
ZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8
R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3Rh
dGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0
dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZv
ciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3Qg
bmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNv
cnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5
OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3Qo
Y29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1
bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBP
T1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5
IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcg
b3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFz
dCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7
Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5n
cHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVn
IDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAg
ICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVy
SW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlk
YXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxv
Y2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVy
YW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChy
ZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5k
KS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9j
a0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0
IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZv
ckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5k
LCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lz
dGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90
aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdl
J2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAg
cmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7
CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdp
c3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0
byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVn
KSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsK
KworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQ
UnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8g
T09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7Cisg
ICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsK
KworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVl
ZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBw
ZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxs
UmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlz
IGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsKKyAg
ICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcg
cmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAg
ICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVnVmFs
dWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFuLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycy5hZGQocmVnKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQor
ICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRH
UFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXN1bHQuc3RhY2tT
aXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJz
VG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLCAwKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBT
aWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKnRoaXMsIHJlY29yZC5zcGlsbGVk
UmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JTcGlsbCwgMCk7CisgICAgcmVzdG9y
ZUZyb21TYXZlUGxhbihSZWcoKSwgcmVjb3JkLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnJl
c3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4p
Cit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9
IHBhaXIuZmlyc3Q7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcGFpci5zZWNv
bmQ7CisgICAgICAgIGlmIChyZWcgPT0gdG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
YWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5ib3hEb3VibGUo
c2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNl
LnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJp
dHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2Nh
dGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdp
c3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdw
ckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNw
ZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwor
dm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBH
UFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisg
ICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7
CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgYXNzaWduUmVn
KGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0
SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwg
YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisK
K3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsK
KyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVn
KQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVn
VmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJl
Z1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAg
IHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQ
UlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3By
KEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOwor
CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBt
X2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYg
KG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIo
KTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklU
OjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52
YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9w
ZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcg
cmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50
MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklU
OjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNl
IHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5l
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5h
c3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dw
cik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3Bl
cmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZO
b3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJ
bnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2Vs
bE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQo
aml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQor
eworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5k
OjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1
cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcg
cmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1f
Z3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5k
ID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYg
KCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAg
ICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBI
YXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3Bl
Y0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5k
OjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
OiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVn
ID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RD
ZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJ
VDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBl
bHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2pp
dC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2pp
dC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayht
X2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxD
aGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2Vs
bChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29w
ZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFs
dWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6
flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVn
IEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAg
IG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0
LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5k
OjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6
IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcg
PSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
RlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91Ymxl
T3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6
RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykK
KyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1f
ZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICBy
ZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVP
cGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07
CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAg
bV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJy
YW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFn
UmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0
ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQ
UiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisg
ICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQu
c2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisg
ICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJz
KCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3Ry
aW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5n
OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNT
eW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsK
KyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9p
ZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkp
IHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9
CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpz
cGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sK
KyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0
ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAo
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2sp
KQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7Cisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6
c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sK
KyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNJ
bnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2
YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMyT25seTsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1i
ZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCeXRlY29kZU51bWJl
cjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UKKyAgICBjb25zdGV4
cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAgICAgc3BlY3VsYXRl
Q2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICByZXR1cm47CisgICAg
fQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihvcGVyYW5kKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90QmlnSW50MzIodmFsdWUs
IHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jp
Z0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBp
c0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUik7CisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBp
c0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKQoreworICAg
IGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFN0YXRlLnBy
b3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2Rl
QmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25z
dGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFu
dChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0
dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0YXRlLm9wZXJhbmRU
b1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNv
bnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5yZWdp
c3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIsICIsIGxvY2tDb3Vu
dCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkKK3sKKyAgICBkYXRh
TG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dl
ZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAi
LCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGF1dG8gcmVnIDog
YWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkg
eworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcs
ICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkYXRhTG9nTG4o
Il0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRT
aGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAi
UENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUg
IlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xh
c3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7
CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAg
Y2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwMSwx
NSArMTA1LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0
cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsK
LSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50
cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAg
OiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0
b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50
U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0
ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3Bp
bGw7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3
aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlz
dHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0
YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcg
cmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVn
PiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBo
ZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsK
QEAgLTE4Myw2ICsxOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1F
TlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBK
U0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiArMjA3LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsK
ICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQ
b2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0
T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fu
bm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFz
c2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3
ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBw
dWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
ICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNzQsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JD
YWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
ICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9y
Q2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJl
Zyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAgICAgICAg
IC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNo
ZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAwLDkgKzMyNSwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1
bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9pZCBhc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVz
dWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2b2lkIGFk
ZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNlKFJlZyBy
ZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAoSnVtcCwg
aW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKICAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzEwLDcgKzMzNyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICB2
b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAh
PSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdz
CkBAIC0zMjcsNyArMzU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21w
aWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTMzNyw3ICszNjQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVx
IH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CisgICAgICAg
IHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50
IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJW
YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC0zNTAsOCArMzc3LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRv
IHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAg
ICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsKKyAgICAgICAgdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShNZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5
cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4K
QEAgLTQ3NSw4ICs1MDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxV
RTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUxMSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERv
dWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwg
RG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVx
SW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01MTIsOSAr
NTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93
aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
YnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDMsNzcgKzY3OSw4MSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVu
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3Vi
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAg
ICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1
bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9v
bCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNV
bnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQ
UlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1p
dFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlm
CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWdu
ZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZv
aWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwg
R1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BS
UmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVl
Kiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTcyOCw4ICs3NjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwog
Ci0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAg
ICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmly
dHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIpOwpAQCAtNzQyLDM4ICs3ODAsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25z
dCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwog
CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwg
dHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAg
ICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0
IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24s
IFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0g
ICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNv
bnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsK
IAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRl
cjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93
Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAot
ICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9i
eXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2Vz
KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wg
aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93Q2FzZXMs
IGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXRlcik7
CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVlOworICAgICAg
ICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIC8vbGlu
a0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNv
ZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4pOwpAQCAtOTI1LDYgKzk0Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAg
dm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlcklu
c3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVw
b3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGlt
ZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTU2LDIzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRl
bXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYsIEdQUlJlZyBo
aW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAg
IH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52
YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBV
cHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUu
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
R1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOb3RDZWxs
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90
Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJ
bnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwor
ICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3By
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVy
YW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOwor
ICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBl
cy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBl
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9
CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFBy
ZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcm
IGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5k
KS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKwor
ICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJl
Z0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsK
KyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUm
IHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiBy
ZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYg
cmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3Np
Z25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdW
YWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBh
c3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICBy
ZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNw
ZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxh
dGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8g
T09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmls
ZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRHUFJS
ZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1
YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdp
c3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4g
dHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVn
KTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhT
YXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9yZUNh
bGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxs
UmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcgdG9JZ25v
cmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwog
CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcgKzExOTksNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsK
IAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9y
PFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xv
d0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRj
aGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1
dEluZm9zOwpAQCAtOTkwLDYgKzEyMzYsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBk
b3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAg
ICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJl
ZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAg
ICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlm
IChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBS
UmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1
ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAg
ICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQg
eyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5v
cGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291
bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0
ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAg
ICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVn
LCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4g
cmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHBy
b3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90
aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcu
c2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsK
KworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJv
dmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
c1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBl
c1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhl
ci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJz
W2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJl
c2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKworICAgICAgICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRl
KCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7Cisg
ICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07Cisg
ICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlv
bnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJl
bnRQcmVkaWN0aW9uczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKwor
ICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAg
ICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJv
b2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxPTCB7IGZh
bHNlIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Qnl0ZWNvZGVJbmRleCwgSnVtcExpc3Q+
PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFu
ZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBE
b3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3Jl
YXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxl
c3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFu
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JF
cXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NTEsMzIgKzE1MSw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVj
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoMCkpKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRU
ZW1wLmdwcigpOworCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgcmVzdWx0KTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworCisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKExlc3NUaGFuLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAg
IGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQsIGlucHV0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDAp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29u
ZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5s
aW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29u
c3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
aHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBkaXNhbGxv
d0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTI3MiwyNSArMzI0LDMz
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHUKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNp
emVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRp
b24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBv
cGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9u
IGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9u
IGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhz
R1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGlu
dmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0
aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1w
b2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQg
aW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5n
LXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSk7CkBAIC0yOTksOCArMzU5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKQEAgLTMyNSw4ICszODMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDEpOwpAQCAtMzUwLDEyICs0MDYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAg
ICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1w
IGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFu
Y2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShy
ZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArNDIzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBm
YWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWls
NC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlz
IG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTM4MCwxMSArNDM1LDQ3IEBAIHZvaWQgSklUOjplbWl0X29w
X2luYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2Zp
bGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJ
bnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOworICAgICAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGFkZERvdWJs
ZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICAgICAgc2V0RG91Ymxl
KHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVj
QW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVk
SW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBp
bnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7Cisg
ICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFk
ZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3Vi
bGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
ZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikp
OworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIg
fSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTM5MiwxMSArNDgzLDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJ
bnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIo
T3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcg
cmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9
IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRH
UFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUg
PSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0
ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCBy
ZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91Ymxl
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtp
bmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1
dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNE
c3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9
OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0
ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7Cisg
ICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAg
ICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAg
ICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBz
cmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1t
MzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1
ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZs
b3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
RHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJ
TjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA2LDQxICs1
MzksOTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBK
SVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0
ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJl
Z1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6
ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBY
ODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQo
cmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7Cisg
ICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjbG9iYmVy
KGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOworICAg
ICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFj
ZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisg
ICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAg
ZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkg
PT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAg
ICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgq
dGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShl
YXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykpCisgICAg
ICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMsIGxoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocmhz
LCByaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmhzR1BSKTsKKworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICAgICAgbW92
ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGhzR1BSID0gcmVnVDQ7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgbGhzR1BSLCByaHMsIGVjeCk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAg
fQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Qz
MihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7
CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAgeDg2Q29udmVydFRvRG91
YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4KTsKLSAgICBKdW1wIG51bWVyYXRvclBvc2l0
aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDAp
KTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7Ci0gICAg
Ym94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgYm94SW50
MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBz
bG93UGF0aENhbGwuY2FsbCgpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgZWF4KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUobGhzKSwgU3BlY0ludDMyT25seSkgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShyaHMpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUobGhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKHJocyksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0JpZ0ludCkgJiYgaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCaWdJbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgpOwogfQogCiAjZWxzZSAv
LyBDUFUoWDg2XzY0KQpAQCAtNDUxLDcgKzYzNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbioKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKQogewogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogfQpA
QCAtNDYzLDcgKzY0Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1
bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYg
KzY1Niw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwog
ICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzc0
NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChK
SVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5z
dHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC03MjMsMTMgKzkwNSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+
KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8g
RklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVn
YXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xv
dzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVn
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9w
dGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBT
bmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQwLDE4ICs5MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJp
bmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCiAgICAgU25pcHBldE9w
ZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBA
IC03NTksMzMgKzkyNywxMDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNv
bnN0IAogICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFu
dEludChvcDEpKTsKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQogICAg
ICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFRlbXA7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBp
biBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAt
PmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5n
cHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5n
cHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlmICghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vs
c2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOworI2VuZGlmCiAKLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwg
cmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BS
KTsKIAorICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQs
IHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRo
KCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAg
ICAgaWYgKHByb2ZpbGluZ1BvbGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9m
aWxpbmcpCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5
dGVjb2RlKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzLmdwcigpKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwg
cmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIH0KKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDIsNyArMTA0Myw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxl
ZnRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDgsMjAgKzEwODksNiBAQCB2b2lkIEpJVDo6ZW1p
dFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJl
ZzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwot
I2VuZGlmCi0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQ7CiAKQEAgLTg3MiwyMSArMTA5OSw3NyBAQCB2b2lkIEpJVDo6ZW1p
dFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52
YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkz
MiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdw
cigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIo
KSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIo
KSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAg
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRS
aWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAg
ICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0
KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMSwxOCArMTE4NCw1NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29w
X2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3Qp
ID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5k
OjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0Lmdwcigp
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShs
aHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJs
ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRk
SUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAg
IGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNs
b3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+
CkBAIC05MjMsMTUgKzEyNDIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5
TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9t
IHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJl
Z1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0
byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3Jj
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVy
YW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsg
c3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVz
dWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVz
aW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSBy
ZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIg
dG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQwLDE5ICsxMjc5LDIyIEBAIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0
b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRo
SUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlv
blN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29k
ZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7
CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAg
ICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjIsNyArMTMwNCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAj
ZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJl
Z3MuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1i
ZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rp
b24+CkBAIC05NzMsMTIgKzEzMTksMjkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJp
bmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25k
KCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRP
cGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVs
c2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5z
ZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
OworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0g
ZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
bGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworCiAjZWxzZQogICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtOTg3
LDI1ICsxMzUwLDQwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMK
ICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAg
IFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNv
bmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xl
ZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0
b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAg
ICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29u
c3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIo
Z2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Cisg
ICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAg
ICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3Bl
cmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAo
IUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAg
aWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQp
KQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Cisg
ICAgfQogCiAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwg
cmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5l
cmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0
b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0g
ICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAj
ZW5kaWYKQEAgLTEwMTQsMTcgKzEzOTIsMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5n
ZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdl
bmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAg
ICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAg
ICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAu
ZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25z
dCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVn
cy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsZWZ0
UmVncy5ncHIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmlnaHRSZWdz
LmdwcigpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoSnVtcHMsIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgfQogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNCwx
MSArMTQyOSwxOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAg
ICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQs
IHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PE9wLCBPcEFkZD4pCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSGVhcFRv
cDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUg
UHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVt
aXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwg
UmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNH
ZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDcs
OCArMTQ0OSw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg0LDcgKzE0ODYsNyBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAg
IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVj
dGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFs
dWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpA
QCAtMTA5NSw5ICsxNDk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1h
dGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KSB9OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTExNCwxMCArMTUxNiwx
NyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NF
UlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAm
JiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7
CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkpCisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVm
dE9wZXJhbmQpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IHJlc3VsdFJlZ3MuZ3ByKCkgPT0gcmVnVDEgPyByZWdUMyA6IHJlZ1QxIH07Cisj
ZW5kaWYKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAg
ICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9w
ZXJhbmQpKQorICAgIH0gZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29u
c3RhbnQocmlnaHRPcGVyYW5kKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1Q0IDog
cmVnVDIgfTsKKyNlbmRpZgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNs
b3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTE1NSwyMyArMTU2NCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotCi0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBudWxscHRyOwotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxl
ZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRP
cGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAK
QEAgLTExODcsMjcgKzE1NzksOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAg
ICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUo
b3AyKSk7CiAjZW5kaWYKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0
KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJS
ZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7
CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAg
IE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5l
bXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBG
UC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigp
OworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBS
ID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9
IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0K
KyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAg
IEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1Qx
OworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNl
bmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0
cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCBy
aWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZw
UmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFBy
b2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdl
bi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3Mu
Z3ByKCksIHJlc3VsdCk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExp
c3QoKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZShy
ZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCkuZW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
ICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9kaXYpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAg
IH0KQEAgLTEyMTUsMzQgKzE2NzIsMTAzIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2Zp
bGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAg
ICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
VGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBS
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3By
KCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
cmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNG
UFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihP
dmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAg
ICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigpLCByaHMu
ZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xv
dzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0
aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3Qp
ID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywg
bGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNl
dEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBK
SVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
U3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0
aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4o
c3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXpl
KTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9Q
X1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTAg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29u
c3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3Rp
bmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlv
bkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lz
dGVyKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ4LDggQEAgYm9vbCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKQEAg
LTIxNiw2ICsyMTcsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAg
ICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAg
ICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBu
dWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAgICAgIGluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSk7CkBAIC0yNjQsMTMgKzI2OCwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQor
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9w
X2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzYsNDQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVPcENhbGw8T3BD
b25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93
Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Rh
aWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxf
ZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBp
dGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4o
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYsMzkgKzM4OCw1NyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgp
OwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZl
IG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9p
bnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisgICAgLy8gT09Q
UzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPworCisgICAgc3Bp
bGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGlu
c3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAg
ICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6
R2VuZXJpYykpKTsKIAogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0
aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
cHJvdmVuVHlwZShieXRlY29kZS5tX2l0ZXJhdG9yKSA9IFNwZWNIZWFwVG9wOworCiAgICAgYWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlz
IGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5
TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
KTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2twb2lu
dFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAg
bmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25leHQpOworICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChuZXh0Q2hlY2twb2ludFNs
b3cpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHRUZW1wIHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1Qw
ID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdU
MCA9PSByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7
CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwg
cmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJS
ZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYs
NiArNDc2LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAg
ICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6
IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNh
c2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRz
IG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElm
Tm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMTggKzUwMSwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQ
Uik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVz
dWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAg
ICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1
bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFk
ZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVH
UFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
dm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRH
UFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVzZWRSZWdpc3Rl
cnMsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhp
dGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGgu
YXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgICAg
IHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBh
ZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KQEAgLTQ5OSwxMSArNTI3LDE0IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgY29uc3QgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAgSnVt
cExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAor
ICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52
YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
dmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAg
ICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAgICAg
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSk7CkBAIC01MTUsMTAgKzU0Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRl
cmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcg
KzU1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1
bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzgsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRo
aXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5
MSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNv
IHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRo
ZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU4LDYgKzE1OSw3IEBAIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIHsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgLy8gT09QUzogTWFr
ZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGls
bCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE2NiwyNSArMTY4
LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVy
biBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkg
JiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNs
b3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBz
bG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFu
Y2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNv
ZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAg
LTIwNiwyNyArMTg5LDM2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nh
c2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMu
c2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJ
bmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQ
bGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5p
c1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0
ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAg
ICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0IHsgfSk7CisgICAgfQor
ICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcg
aXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0
IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wc1sw
XS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVt
cCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC0zMDksMTEgKzMwMSwxMCBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFuCiAgICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVl
UHJvZmlsZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpOwogCi0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJl
Z1QxOwogI2VuZGlmCkBAIC0zMzgsMTEgKzMyOSwxMSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZf
dDxzdGQ6OmlzX3NhbWU8ZGVjCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRh
ZGF0YSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYg
bWV0YWRhdGEsIEdQUlJlZyByZWcpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmls
ZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSwgcmVnKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5n
VHlwZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC0zOTMsMTEgKzM4NCw2IEBAIEFM
V0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1
c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxS
ZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4
ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgs
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQ
cm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDYgKzUxLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzExMSw1MyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVh
bENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0
UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBS
ZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAg
IEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0
b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxs
b2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVn
VDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0g
cmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsK
ICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkg
PSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJl
KTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNjcsNTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcg
aW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBP
T1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBj
b25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxh
Y2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2Uo
KnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsK
KyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAg
aW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBq
dW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJ
bnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVu
Y3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3Ry
dWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBu
b3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNv
bnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjIw
LDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFu
ZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVy
cy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25l
IHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJv
dG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5
IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdU
MiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdU
NCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9p
bnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1w
Q2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVz
dWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQ
UlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3Vs
dFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2Vs
bC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxh
Y2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxs
LT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisK
KyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIg
PSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRU
ZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAg
ICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAu
Z3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAg
ICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBw
ZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNw
ZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJh
c2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0
aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBy
ZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4g
YmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lk
IGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAg
ICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisg
ICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAg
ICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2lu
c3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3Mu
cHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMyMSwyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNTEsNzIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDAp
OwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAg
ICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxs
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BS
VGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsK
KworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9u
ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1w
R1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDAp
OworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAg
ICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisg
ICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MjUsMzMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xl
YW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDU5
LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAg
ICAgICAgICAgdGVzdDY0KFplcm8sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDkwLDI3IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVs
bE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQ
UiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MjAsNTYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0
KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJl
Z1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklH
SU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0
cnVjdGlvbiopCkBAIC0zMTMsMTggKzU4Niw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxs
X3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAK
LSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlw
ZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzYz
NSw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFs
dWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0
VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVl
VGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDAsMTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSBy
ZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0
dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1
ICs3MTksNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGlu
ayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1v
dmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGlu
ayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3By
b3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2
LDUyICs3NjIsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmlu
ZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxh
dGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVH
UFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZT
dHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3Ry
aW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8
IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlz
U3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYg
KHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlm
IChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAg
ICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJv
LCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6
IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
Ly8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2Fp
bnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4s
IHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBi
aXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0
aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2gg
d2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisg
ICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2Fz
IHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBj
bGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFs
c2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFu
ZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsK
KyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNl
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9u
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3Jl
IGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNv
bmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
ZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2Ny
YXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0
aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJ
VDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihj
b25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2Vz
IGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3Jh
dGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9
OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2Ny
YXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gy
RlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJH
UFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFs
dWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NjcsMTI5IEBAIHZvaWQgSklU
OjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAg
ICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAg
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
KyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmpl
Y3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAg
ICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigp
OworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0g
ICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAot
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0Nl
bGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0
dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
KworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0
ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMDk4LDI2IEBAIHZvaWQgSklU
OjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAg
ICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMjYsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC01MTUsNjUgKzExNTcsMzA1IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IElu
c3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
ICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQ
b2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1Q
dHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVk
SW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFy
ZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHBy
IGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BD
b21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBp
c0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsK
KworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShs
aHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
SlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNl
bGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29tcGFy
ZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAu
ZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBj
b21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNh
c2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJo
c0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwor
CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4o
KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5t
X2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29u
c3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVx
dWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxB
bmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFsdWVz
Q291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAg
ICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxs
KHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxo
cywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0lu
dChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAg
ICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xv
d1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikp
OworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVl
PigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVx
SW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQogCi0g
ICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCks
IEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVn
IGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBs
PE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVn
VDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJ
bXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBy
ZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQ
UlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7
CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0NzEsMTQ2IEBAIHZvaWQg
SklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5t
X2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMx
LCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29s
IGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAg
IGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8g
ZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVz
Q291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhz
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgSnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMy
KHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwg
ZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8g
KGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQg
PSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwot
ICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93
UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRo
aXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5h
aXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0g
ICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFk
ZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2gg
Yml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0
OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3Vi
bGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBt
b3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0
T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0
KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0g
ICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JF
cXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdU
MSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7
Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0
IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0
KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3Jl
IHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8g
dGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQot
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJl
Z1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVT
RShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAn
dHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0
ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290
byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAg
ICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAo
bGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2gg
aW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNl
ZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0
aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2ls
bCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAv
LyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9u
bHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9y
IGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUo
cmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0
T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAg
ICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEp
LCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBi
cmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNv
dmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwor
ICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5s
ZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRo
IGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJl
Z1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVn
cyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUp
OwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBh
cmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAg
ICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qy
KSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8v
IGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5s
aW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRo
aXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0
cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAg
ICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBp
dCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8g
aWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAg
ICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwor
ICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Njc0LDY4ICsxNjI4LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0
IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
bGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBy
aHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEs
IHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wg
aXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFu
ZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAg
ICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAu
ZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwog
Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1p
bmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmln
aHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlz
IENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwotICAgICov
Ci0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhh
dCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFu
Y2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJ
bnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2
aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBh
bGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2
aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigx
KSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9
IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdl
dCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxl
YXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBt
b3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8g
ZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAK
LSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlz
KTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwg
d2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7
CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAg
ICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8g
c2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMy
LCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcg
YWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBh
bGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8g
TGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAg
ICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAg
ICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdU
MiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJl
Z1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwg
cmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVh
c3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAg
IGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9
CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFy
ZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAg
IG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3Qg
aWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8g
aWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxp
bmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhp
cyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCks
IHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292
ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAg
ICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwor
ICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAj
ZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzY5LDIyNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0
RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RF
cVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVn
VDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdw
cigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcg
bGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2Up
OworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJl
cj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmln
SW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2Rl
TnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
TnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAg
ICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIg
fCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAg
ICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAg
ICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0g
ZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qw
KSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVn
VDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBP
T1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1h
a2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0
YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRj
aD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDQ2LDIzIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJl
bnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAg
Q2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJl
ZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRH
UFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTkwNSw5ICsyMDc3LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5z
dHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAg
anVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaElt
bVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1
dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaElt
bVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJs
ZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwor
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIxMDIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0
R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkz
OCw5MyArMjEyNiwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJ
bgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAg
ICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBsb2FkMzIo
Y29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1w
IG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNv
ZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhw
ciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0
byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Y29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0
cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0
cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdElt
bWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklU
OjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAs
IHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05v
dEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BO
ZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRl
cihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8g
cmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2Fs
bHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlh
bGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJz
LCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRp
bWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2Rl
QmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytq
KQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsK
KyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8g
dmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhl
cjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAz
NSw5ICsyMjc3LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3Bl
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFp
bigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVn
IHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVz
dWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNo
YWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVy
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzAxLDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRh
dGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVj
b2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlz
U3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxvYWQz
MihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykp
LCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmln
aHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5l
ZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVj
dE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3Zl
blR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNTdHJp
Y3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbG9hZDMy
KGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSks
IHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkK
KyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8g
T09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIp
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzODIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlv
biA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9
IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyAr
MjM5MiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAg
UmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNh
bGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRl
bXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5k
LmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
IGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcg
PSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURh
dGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3By
VGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcp
OworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcs
IGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhl
Y3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFy
ZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDM0LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3Ry
dWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hl
Y2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZp
cnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlz
IHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4
Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwpAQCAtMTE2Miw4ICsyNDc5LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2Ug
aXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRl
LgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJu
RWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhp
bnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09Q
UzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRlci4K
ICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVy
KGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRv
IHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9w
dGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEz
ICsyNTA3LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAg
ICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xv
dyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRp
bWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNv
cHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwx
MSArMjUyNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAg
ICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3Mg
aW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEw
ICsyNTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU2MCwxOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAg
PSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVn
RXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFs
dWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTgxLDQyIEBA
IHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBz
Y29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7
CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwor
ICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0g
bV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAg
ICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjY0NSw0
NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUu
bV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzY29w
ZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxh
Y2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5n
cHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwog
I2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25F
eHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9w
OjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQ
UiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNzE1LDE5IEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0
ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEzNjAsMTQgKzI3MzYsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBH
UFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1w
bGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIo
KTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3NjksNDIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBWYWx1ZU9wZXJh
bmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgR1BSUmVn
IGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBi
YXNlR1BSOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7Cisg
ICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
fQogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkp
LCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICsyODI0LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3Vz
ZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
QEAgLTE0MzYsNiArMjg1Myw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsyODgwLDE1IEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
SW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNo
b29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAg
UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0
IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9k
ZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1v
ZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7
CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlSnVt
cCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBMYWJlbCBkb25lID0g
bGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4OTcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAg
IAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZv
KGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1v
ZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5k
ZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5l
eHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcgKzI5MzAsOTIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMg
YSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsg
KnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIGluZGV4VmFsdWUgeyAq
dGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAg
ICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4
LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3Mg
Y2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1
bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1Qx
KTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1Qw
KTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
Mik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOwor
CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hl
ZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQ
UiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAv
LyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGlu
ayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
c2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRleCBpcyBs
ZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQn
cyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCBy
ZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAg
Ly8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxp
bmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdU
MSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0
aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAg
ICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAotICAgIC8vIE90aGVyd2lzZSBp
dCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMyKHJlZ1QxKTsKLSAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmly
c3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xNTUwLDIxICszMDI1LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
c3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVn
IGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJ
bnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVu
dW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0
b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0
b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5k
ZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1l
cmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVs
b3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAg
ICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJv
cGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVz
RWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQp
LCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBT
cGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NzQsMjEg
KzMwNzksNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYQogICAg
IFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5l
cmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQ
UlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4
VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4
VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxh
Y2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQ
UiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9y
VGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0K
KworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVy
dHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwog
ICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgp
KSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0
ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChy
ZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAgIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMzMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24g
PSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1By
b2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVn
VDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszMTk1LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwor
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBz
dGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwg
IndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+
KCk7CkBAIC0xNjcyLDYgKzMyMTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2No
aWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBk
YXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1Qw
ICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBp
cyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICszMjQ1LDIwIEBAIHZvaWQgSklU
OjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFs
dWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwotICAgIGJveEludDMy
KHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxl
UmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNjYsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUu
bV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NU
aGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1YjMyKElt
bTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3Ro
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMyKG51bVBhcmFtc1Rv
U2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZXN1bHRHUFIp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVyb0xlbmd0aC5saW5r
KHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBz
dWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgYm94SW50
MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHplcm9MZW5ndGgubGlu
ayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSks
IHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMxNSw5OSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAg
ICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGlu
ayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1lbnRP
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0z
MihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0g
ICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7
CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMg
PSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsK
KyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwor
ICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90
b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRj
aEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkg
PT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RP
YmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xv
d0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0TG9hZFBy
b3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsK
KyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI3OSw4
ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAg
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5k
ZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAg
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpA
QCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8v
IFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3Rl
ciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzMiw4ICs2MjEsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4ICs2NjAsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyMiw4ICs3
MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NjMsOCArNzQ2LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0NCw4ICsxMDI1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjAxLDggKzExODAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
Y29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50
ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTEsNDkg
KzUzLDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFs
dWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRleGlu
Z1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHBy
b3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
YmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVy
dHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRH
UFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5k
ZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMu
Y291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsK
LSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0g
ICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAg
ICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJv
ZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxs
LmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJv
ZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJv
cGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVT
dHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2Up
LCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQog
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAg
ZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNT
dHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5n
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEp
OwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwot
ICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21f
Z2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTAyLDM5ICsxNzIsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25z
dAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFs
dWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVj
dWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVO
YW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55
U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21f
Z2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTUyLDYgKzI1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0
ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0
dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAg
ICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAg
LTMxNCw4ICs0MjAsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1
bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlO
YW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9w
ZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kLCBwcml2YXRlRmllbGRBY2Nlc3NL
aW5kKGJ5dGVjb2RlKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIC8v
IElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJh
c2UgaXMgY2VsbC4KQEAgLTMzNCw3ICs0NDMsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpA
QCAtMzQyLDcgKzQ1MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBF
Q01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkg
eworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1MCwxMyArNDU5LDEy
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAg
ICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGgg
PSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBA
IC0zNzIsNDkgKzQ4MCwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vz
c29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5n
cHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywg
Ynl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRH
ZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCBy
ZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVyIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0ZXIg
eyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOworICAg
ICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBnZXR0
ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1
dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vz
c29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0
ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJh
c2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9w
ZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigp
OworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWws
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQyNCwxOCAr
NTg4LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNlR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hH
UFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDQ0LDI1ICs2NDIsMjcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRE
ZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAg
ICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFz
ZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOSArNjcy
LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRH
UFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7
CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJp
ZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJl
Z2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00OTMsMjEzICs3NDQsMzY4IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlW
YWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXRC
eUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RBcnJh
eUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4o
R2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlM
ZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFIg
PSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5
TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5h
cHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5t
X3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJh
c2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1
ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhp
c0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVl
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAg
IHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhp
c1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlz
R1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4p
OwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJl
ZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJ
bmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRp
cmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1
cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8g
dG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3Rl
cnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBm
cm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAs
IHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVH
UFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0g
dmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFs
dWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWco
KSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsK
KyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0
Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gRGlyZWN0IDogTm90
RGlyZWN0LCBwcml2YXRlRmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2RlKSk7CiAgICAgCiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzA5LDc3ICsxMTE1LDk1IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAg
Ly8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVj
dGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcs
IFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmls
dGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFs
dWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJ
ZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRz
W21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0K
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0K
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQ
UikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRy
ZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBk
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03OTEsMTcgKzEyMTUsMjUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFk
YXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFs
dWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZv
ckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdF
cG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFu
dFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25z
dGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
QEAgLTgxMSwyMSArMTI0MywzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29w
ZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENl
bGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAg
ICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAg
ICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFk
YXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIs
IGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6
CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODM4LDkgKzEyODUsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTg1MywyOSArMTMw
MCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwxNSArMTMzMSwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
T2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3Bl
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJl
Z1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3Jh
dGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIp
KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9w
ZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYsMTIgKzEzNTgsNiBAQCB2b2lkIEpJVDo6ZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0K
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05MjIsNTEgKzEzNjgsODQgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVy
YW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFu
ZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0g
ZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
IHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0g
cmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAg
ICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAg
ICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9
IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJl
U2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFy
IGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBi
dXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMg
Y2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1
YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9m
ZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAg
ICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0
T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0z
MihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxp
bmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMy
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29u
KEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5s
aW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAg
bmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zm
c2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIo
b2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zm
c2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRH
UFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBU
RFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpv
cGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAg
ICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCks
IHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2Fs
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC05ODAsMTAgKzE0NTksMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAor
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKIApAQCAtOTk2LDI3ICsxNDc1LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0g
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBm
YWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0
R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVh
azsKQEAgLTEwMjYsNDAgKzE1MDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUo
SlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBz
ZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVt
aXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09m
T3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RX
YXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXRO
b3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7
Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEs
IEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUzNCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQ
UlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVT
bG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAg
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BS
OworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0
ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBz
Y29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAg
ICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BS
ID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBu
ZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdU
MCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZz
ZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9y
ZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEwOTgsMjggKzE1
ODgsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRj
aFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNo
R1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xv
YmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
Y29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0
Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0
KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VM
T0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9p
bnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAq
IHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTEzNCwxMiArMTY1MywyMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2Yg
ZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYg
d2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdh
aW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBE
eW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxy
ZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwpAQCAtMTE1MywyMyArMTY4MSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRv
bid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcg
dGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBw
YXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2Up
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTE4NiwxMCAr
MTcyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3NDAsMTc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1l
bnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhp
cywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50
c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0
KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1
bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJn
dW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJn
dW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAg
dmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9
IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVz
cyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwg
ISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28g
dGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9y
IG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVn
YWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQK
KyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBj
b2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJy
YW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIC8v
IHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNw
ZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2
YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3Bl
cmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BS
ID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BS
KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93
bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY3JhdGNoVmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdw
cigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAg
ICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIH0KKwogICAg
IEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVz
ZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAg
IG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAg
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdU
MCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2go
dm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVj
b3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8g
bmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2ls
ZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxS
ZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5v
dENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5p
c1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBL
bm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJy
YW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndp
c2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBv
cHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBl
eGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUg
Y29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoZ3By
Rm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAg
ICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAg
ICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVO
b3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEyNzEsMTEgKzE5MjMsMjYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
Ly8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBT
cGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyODUsMTAgKzE5NTIsMjMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
CisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUo
YmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3Mo
YmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZh
bD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTEzODUsOCArMjA2NSwyNSBAQCB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7CisgICAgfQor
CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJl
Zm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50Rmls
bEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0xNDA0LDYgKzIxMDEsOCBAQCB2b2lkIEpJVDo6
ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICAKQEAgLTE0NjksNiAr
MjE2OCw4IEBAIHRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmEKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsK
KyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgQVNTRVJUKChwdXRLaW5kID09IERpcmVjdCAm
JiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IE5v
dERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVy
SW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21h
cFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVy
biBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJs
ZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAg
ICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBv
biBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7
CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0
ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAg
ICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5Niw2ICszOTYsMTAgQEAgc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMo
KQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIE9w
dGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAgICBPcHRpb25zOjpmb3JjZUxPTCgpID0gMTsKKyAg
ICBPcHRpb25zOjp1c2VMTEludCgpID0gMTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBP
cHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFi
bGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJQ01GdXp6ZXIs
IDQyNDI0MiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdM
SUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBv
c2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415676</attachid>
            <date>2020-12-08 14:19:15 -0800</date>
            <delta_ts>2020-12-08 16:51:28 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>454310</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTg3MDYwLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTg3MDYwLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rl
c3RzL3N0cmVzcy9yZWdyZXNzLTE4NzA2MC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8vIFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNoLgogCitmdW5jdGlvbiBmb28oKSB7CiBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKICAgICB2YXIgYXJyID0gW107CiAgICAg
YXJyLmNvbnN0cnVjdG9yID0gewpAQCAtNywzICs4LDUgQEAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgaSsrKSB7CiAgICAgfQogICAgIGFyci5jb25jYXQoWzFdKTsKIH0KK30KK2ZvbygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1w
ZXIuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAj
aW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAK
KyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lk
IEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpAQCAtMjY5LDcgKzI3MSw3IEBAIHZv
aWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIH0KIAogdGVtcGxhdGU8Y2xh
c3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBo
KEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0
ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBp
Y1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wR3Jh
cGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJ
Q1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVtcEhlYWRlcihibG9jaywgaW5zdHJ1
Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNv
ZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQucHJpbnQoImJiIyIsIGJsb2NrLmlu
ZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0aW9uc0F0SGVhZCkgeworICAgICAg
ICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFkOiBbIik7CisgICAgICAgICAgICBj
b25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9jay5pbmRl
eCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAg
ICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSks
ICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMu
YXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAgICAgICAgICBhdXRvJiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNl
dCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudEluc3RydWN0aW9u
LCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3
ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsK
LSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBj
b25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1w
R3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBP
cHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlv
bnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxl
KCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAgdm9pZCBkdW1w
SWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAogCiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9u
YWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQ
cmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKKyAgICB2b2lkIGR1bXAoQ29k
ZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rp
b25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gc3Bl
Y3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQog
ICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrVHlwZT46OmR1
bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRoaXMsIHNwZWN1bGF0aW9uQXRIZWFk
LCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0
dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0
ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJs
b2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9u
cygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6
bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBj
b25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNiAr
NTExLDcgQEAgcHVibGljOgogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rp
b25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5k
ZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQ
cm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3Qg
RnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFy
cmF5UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJv
ZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxz
ZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKK30KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgaWYgKGF1dG8qIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQg
OiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKQorICAgICAgICAgICAgZnVuYygqcHJvZmlsZUJ1
Y2tldCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
VmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEzNCw3ICsx
MzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YoCiAKIGVudW0g
T3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlID0gZmFsc2U+CiBjbGFzcyBP
cGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxf
dDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVu
c2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0NCwyMyBAQCBwdWJsaWM6CiAKICAg
ICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBu
dW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQorICAgIGV4cGxp
Y2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVf
dCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkKICAgICAgICAgOiBtX251bUFyZ3Vt
ZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAg
ICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIHNpemVf
dCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgc2l6
ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1U
bXBzICsgISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKICAgICAg
ICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKICAgICAg
ICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5k
cyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywg
Y29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1B
cmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29u
c3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMo
bnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAg
LCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBtX3ZhbHVlcy5n
cm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOworICAgICAgICBtX3ZhbHVl
cy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMg
KyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwog
ICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3Bl
cmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQm
IGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1i
ZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9j
YWxzKCkpCisgICAgICAgICwgbV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMo
KSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAg
bV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcyLDMzICsxNzYsNTEgQEAgcHVibGlj
OgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1B
cmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBt
X251bUxvY2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsg
fQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29u
c3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVt
YmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0KIAorICAgIHRlbXBsYXRlIDxib29s
IGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxs
ZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkp
OwotICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1
bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwg
bnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAog
ICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFy
Z3VtZW50cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3Qg
aWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRz
KCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBp
ZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAg
UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudElu
ZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKworICAgIHRlbXBsYXRl
IDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJh
Y2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgp
OyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29uc3RSZWZUeXBlIGNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAgIAogICAgIFJlZlR5cGUgbG9jYWwo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIENv
bnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2Nh
bEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIHsgcmV0
dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgY29u
c3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChp
ZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAg
IHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZU
bXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRz
KCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVl
ICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7
CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1f
dmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkwLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgp
OwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNr
Q2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKIAogICAgICAg
ICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUgQEAgcHVibGljOgogCiAgICAgc2l6
ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNB
cmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgp
ID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNh
bGxlZUluZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJ
bmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50SW5kZXgob3BlcmFu
ZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQu
dG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCArMzQ4LDE1IEBAIHB1YmxpYzoKICAg
ICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewot
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQo
KSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
YWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVy
YW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25z
dGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50KG9wZXJhbmQudG9Db25zdGFudElu
ZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0K
IApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51bWJl
ck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25z
dApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaW5kZXgg
PCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4
IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgIGlmIChp
bmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAg
ICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVu
dHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2Nh
bHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKQor
ICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGluZGV4IC0gbnVt
YmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBpZiBjb25zdGV4
cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2FsbGVlSW5kZXgo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAt
IChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKQEAgLTM5MywxMCArNDM3
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAg
ICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVl
cyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhl
IHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFs
dWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIHRoZSBu
ZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4K
ICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9
OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtQ29u
c3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgaW5saW5lIHZvaWQgT3BlcmFuZDo6
ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyKCkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNr
Q2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNp
emVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0t
OykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQo
UHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkp
OwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChjYWxsZWUoKSwgY29udGV4dCkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4K
K3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJn
dW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAg
LTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRt
cEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRy
YWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGNhbGxl
ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9u
KFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkp
OwogfQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVj
b2RlRG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0lu
dDMyT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBz
dHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8g
VXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2Fs
bCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBj
b2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVi
bGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVy
SXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25z
dCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcklz
QXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFpc0NvbnN0YW50KCk7IH0KICAgICBib29s
IGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3Zp
cnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQogICAgIGJvb2wg
aXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChp
c0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBA
IC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2Fs
KGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9w
ZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1l
Ojp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0YXRpYyBpbnQgYXJndW1lbnRUb09wZXJh
bmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNvbnN0YW50VG9PcGVyYW5kKGludCBjb25z
dGFudEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50
SW5kZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdpc3RlcjsKIH07CkBAIC0xMzMsNCArMTM1
LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGbwogICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1
bWVudCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4KQoreworICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFudFRvT3BlcmFuZChjb25zdGFudEluZGV4
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3
ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXQKICAgICAs
IHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAs
IHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZh
bHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKLSAgICAsIGludGVy
c2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFs
dWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCAwLCBBYnN0cmFjdFZh
bHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBAIHB1YmxpYzoK
IAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
ID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAw
LCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8
QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7
IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1
bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MiArMzAsMTUgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGgu
aCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmls
aXRpZXMuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVs
ZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgpAQCAt
NjAsNiArNjMsODMzIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90
YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2
b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVj
dWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQo
cmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBi
eXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNv
ZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmls
ZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25s
eSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25z
dGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50Pigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9i
aXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9i
eV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
ZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25z
dHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21f
c2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190
aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+
KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9p
dGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3Is
IG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0Pigp
OworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRh
ZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6Cisg
ICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90
eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVs
ZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0
aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Rv
X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJl
cjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3Vt
ZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9f
bnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisK
KyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAg
ICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJs
ZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAh
IShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1
bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihs
ZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0
ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAg
ICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAg
ICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9h
cml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3Vi
bGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAg
ICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFO
IHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91Ymxl
UHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5h
TjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMy
CisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+
KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwp
CisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAg
ZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAg
aGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3Io
Ynl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3Io
Ynl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4g
ZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxk
IGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMy
IHJlc3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigp
LCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAg
ICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0
aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5w
dXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlu
cHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUo
ZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAg
aGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0
ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihi
eXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihi
eXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
QmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmln
SW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAg
ICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRl
Y29kZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7
CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAg
ICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAm
JiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3Ry
dWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRl
Y29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0
eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5
bWJvbCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciog
YnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRv
IGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2Un
dmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAg
ICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMg
bG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAg
ICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHBy
b2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUu
bV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAg
IHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmpl
Y3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAg
IC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlw
ZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlz
PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5
X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwg
U3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJp
bmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19m
dW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNG
dW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Nj
b3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCks
IFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3Ry
dWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJv
cGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1By
b3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3Ry
aW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5j
X2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNv
bHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNw
ZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNf
YnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFy
Z3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwg
U3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3Qp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BM
ZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVh
dGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Vt
cHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9m
X2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
c19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5j
dGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0
aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29u
c3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1
Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251
bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lk
ZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
c3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQ
cm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2Jv
dHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxh
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNf
aW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVz
SGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0
YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0
YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4o
KSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxs
X3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxX
aXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lu
X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ug
b3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3Vw
ZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNh
c2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3Vu
cmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNf
ZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9w
X3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3Nl
dHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNl
IG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAg
IGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6Cisg
ICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9w
X2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6Cisg
ICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVx
OgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ug
b3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJl
cToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVs
b3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBj
YXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9w
X3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNl
IG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAg
IGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ug
b3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBv
cF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBj
YXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9i
eV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2Zy
YW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2
OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9u
b190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9k
dWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9w
cm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6
CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGlu
dF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19w
YXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9m
cm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhp
dF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGlu
dDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9v
cGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAg
ICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVz
aXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRp
Y3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ld
ID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOwor
CisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJs
b2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5h
dCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChz
aXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0g
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJl
ZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOwor
CisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcs
ICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1f
cHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9n
TG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2Fs
bGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAg
ICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4K
KyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFw
aCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5v
dWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBv
cGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBh
IGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQg
PSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3Jh
cGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0
SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5Qmxv
Y2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAg
ICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlv
bnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVj
dWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBp
ZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9j
b2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4
OTcsMTIgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAg
ICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCiti
b29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJl
dHVybiBtX3VzZUxPTDsKK30KKwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRl
cmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJl
dGVyKQpAQCAtNzYsNiArOTEyLDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAg
bV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTM3
LDExICs5NzQsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAg
ICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShu
YW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NM
T1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAg
ICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAg
ICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwo
KTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQo
KSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisgICAgICAg
ICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAgICB9IFwKICAgICAgICAgfSBcCiAg
ICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1Niwy
NiArOTk5LDMyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVm
aW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAg
ICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAg
ZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAg
IE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93
Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAor
ICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMj
bmFtZSk7IFwKKyAgICAgICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1l
KTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBz
dHViKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9u
KCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNv
bXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDIwICsxMDgwLDg2
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5
dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlv
bkNvdW50OyApIHsKLSAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9z
bG93Q2FzZXMuc2l6ZSgpOwotICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0
ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7Ci0gICAgICAg
ICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBo
ZXJlIGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5
IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCi0gICAgICAgICAgICBicmVha3BvaW50KCk7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwor
ICAgICAgICAvLyBPT1BTCisKKyAgICAgICAgbV9zdGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5z
aXplKCkpOworICAgICAgICBtX3ByZWRlY2Vzc29ycy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsK
KyAgICAgICAgZm9yIChhdXRvJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBpZiAo
YmxvY2suaXNFbnRyeUJsb2NrKCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJs
b2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNb
c3VjY2Vzc29ySW5kZXhdLmNvbnRhaW5zKGJsb2NrLmluZGV4KCkpKQorICAgICAgICAgICAgICAg
ICAgICBtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkp
OworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5Q
YXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7Ci0gICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKLSAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKKyAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91
c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJl
bnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50
QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBhdCBlbmQgb2YgYmIjIiwgbV9jdXJyZW50
QmxvY2stPmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3Rh
dGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgp
XSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV0gPSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4
aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byYgcHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCld
OworICAgICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNz
b3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3By
ZWRlY2Vzc29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNl
c3NvcnNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVl
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0
ZUF0RW5kW3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRl
Y2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3Rh
dGUubWVyZ2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3Mp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBt
X3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9
IG1fc2xvd0Nhc2VzLnNpemUoKTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFy
dEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAg
ICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50
aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhh
dCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAg
bV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpLCBsYWJlbCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAg
ICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworCisgICAgICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpKTsKIAogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICht
X2J5dGVjb2RlSW5kZXggPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3Bf
ZW50ZXIgdHdpY2UuCkBAIC0yNzgsNDYgKzExOTMsNTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkg
eworICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29k
ZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xP
V19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAg
ICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xP
V19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9p
ZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlz
KQotICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5j
X2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVy
dHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KHRocm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dp
dGhfc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9l
bnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJv
cGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNf
YnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5l
d19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChs
ZXNzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4p
CisgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cExlc3NlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdy
ZWF0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR3JlYXRlcmVxPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoaXNfY2FsbGFibGUsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxl
PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3Ry
dWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBT
cGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mPigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVf
U0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNGdW5jdGlvbj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09Q
KHR5cGVvZl9pc19mdW5jdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVu
Y3Rpb24+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChzdHJj
YXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCkubV9kc3QsIFNwZWNTdHJpbmcp
CisgICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSwgVmlydHVhbFJlZ2lzdGVy
KCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZp
cm9ubWVudCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVu
dD4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRf
YnlfdmFsX3dpdGhfdGhpcywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRo
aXM+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlf
aWRfd2l0aF90aGlzLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklO
RV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05v
bmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1
bmNfZGVjbF9pbl9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9y
SG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERF
RklORV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3Bl
Y05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSwg
VmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUCh1bnJl
YWNoYWJsZSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xP
V19PUCh0aHJvd19zdGF0aWNfZXJyb3IsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAg
ICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVf
U0xPV19PUChzcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCkubV9kc3Qs
IFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xl
bmd0aCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCkubV9k
c3QsIFNwZWNJbnQzMk9ubHkpCisgICAgICAgIERFRklORV9TTE9XX09QKGhhc19nZW5lcmljX3By
b3BlcnR5LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLm1f
ZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+
KCkubV9kc3QsIFNwZWNDZWxsKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJp
bmcsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLm1fZHN0LCBTcGVj
U3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cywg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKS5tX2RzdCwg
U3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3Bl
ZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVu
dHM+KCkubV9kc3QsIFNwZWNTY29wZWRBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
Q2xvbmVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5LCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVJlc3Q+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoY3JlYXRlX3Byb21pc2UsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNl
PigpLm1fZHN0LCBTcGVjUHJvbWlzZU9iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3
X3Byb21pc2UsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLm1fZHN0LCBT
cGVjUHJvbWlzZU9iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRv
ciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKS5tX2RzdCwgU3Bl
Y09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJh
dG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCkubV9k
c3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVyYXRv
ciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09i
amVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChwb3csIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQb3c+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpCiAK
ICAgICAgICAgREVGSU5FX09QKG9wX2FkZCkKICAgICAgICAgREVGSU5FX09QKG9wX2JpdG5vdCkK
QEAgLTQ3Nyw2ICsxMzk5LDM2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeworICAg
ICAgICAgICAgaWYgKCFtX2NoZWNrZWRVc2VMT0wpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG9wY29kZUlEKSB7CisgICAgICAgICAgICAgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX3Rocm93OgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bfam1wOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaWRlbnRpdHlf
d2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
RGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE1LDEyICsxNDY3LDE0IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmls
ZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZp
bmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9
IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAg
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dD
YXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2Uu
Ynl0ZWNvZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2Fz
ZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRv
ID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC01NzksNyArMTUzMyw2IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0
cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9uZXEpCkBAIC01OTcsNiArMTU1MCwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3Bl
bikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBD
UFUoWDg2XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZWxzZQor
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQorI2VuZGlmCisKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjMz
LDE1ICsxNTkyLDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwg
Zmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0K
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMu
ZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91
Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5v
ZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsK
KyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
aXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRv
Lm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4u
Iik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0
KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFk
ZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0
aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlOwogICAgIH0KQEAgLTc3NCw2ICsxNzM2LDI4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91
dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1Bh
dGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwog
CisgICAgZm9yIChhdXRvJiBleGl0IDogbV9leGl0SnVtcHMpIHsKKyAgICAgICAgYXV0byBieXRl
Y29kZUluZGV4ID0gZXhpdC5maXJzdDsKKyAgICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25k
OworICAgICAgICBqdW1wcy5saW5rKHRoaXMpOworCisgICAgICAgIGlmIChieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxl
IGNoZWNrcG9pbnQgZXhpdHMuCisKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9ICptX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eCkucHRyKCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxPU1JFeGl0UHRyVGFnPiBk
ZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPE9TUkV4aXRQdHJUYWc+KGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSk7CisgICAgICAgIC8vZWxzZSAKKyAgICAg
ICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5tZXRhZGF0YVRhYmxlKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpt
ZXRhZGF0YVRhYmxlR1BSKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIExMSW50OjpSZWdpc3Rl
cnM6OnBiR1BSKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBt
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUkluZm86OnJl
Z1QyLCBPU1JFeGl0UHRyVGFnKTsKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhp
cyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC0xMDU4LDYgKzIwNDIsNzA4IEBAIFNlY29u
ZHMgSklUOjp0b3RhbENvbXBpbGVUaW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNv
bXBpbGVUaW1lICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9
Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgLy8gT09Q
UzogaGFuZGxlIEV4aXRLaW5kLgorICAgIGlmICghbV9leGl0SnVtcHMuc2l6ZSgpIHx8IG1fZXhp
dEp1bXBzLmxhc3QoKS5maXJzdCAhPSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fZXhpdEp1
bXBzLmFwcGVuZCh7IG1fYnl0ZWNvZGVJbmRleCwgSnVtcExpc3QoKSB9KTsKKyAgICBtX2V4aXRK
dW1wcy5sYXN0KCkuc2Vjb25kLmFwcGVuZChqdW1wKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJhbms+CitSZWdpc3RlclNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7
CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVl
U2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAg
IGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVT
YXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQor
ICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7
Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiBy
ZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQu
Y29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJz
KCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxv
Y2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0
aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2Ug
dGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtd
IHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4o
KSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFz
c2VydE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtzIGN1cnJlbnRseSB3
LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5pY2UgYXNzZXJ0LiBN
YXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8vaWYgKG1fc2xvd0Nh
c2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVj
b2RlSW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVH
UFIoR1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhp
bnQgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BS
cygpKSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNs
b2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVG
UFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBs
aWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMo
KSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09Q
UzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBv
ZiB0aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShy
ZWcpOworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAg
IGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFu
ZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBjYW4ndCBq
dXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJlY2F1c2Ugd2UgbWln
aHQKKyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAgLy8gLSBWYWx1ZU9w
ZXJhbmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAvLyAtIH5WYWx1ZU9w
ZXJhbmQoKQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBkZWFsbG9jYXRlIHNv
bWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVwIGZ1bGx5CisgICAg
ICAgIC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5IGRlZ3JhZGluZyBp
dCBpbnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5WYWx1ZU9wZXJhbmQo
KSBydW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAgICAgICAgLy8gYW4g
aW5jb25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5kID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQorICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwordm9pZCBKSVQ6OnNw
aWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAo
YXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAg
aWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJ
bXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJz
KCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpz
bG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZh
c3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZd
IChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQu
aXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcs
IHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9y
ZUNhbGwoKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAg
U2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1
dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVn
VmFsdWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVk
ZWQocmVnKTsKKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0
LnNwaWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklU
OjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7
CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNr
Rm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNr
U2l6ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCByZWNvcmQu
c2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgdG9JZ25v
cmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBz
YXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSB0b0ln
bm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdp
c3RlcigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0
Y2gpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRj
aCk7CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQ
bGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6
c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8g
T09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFk
ZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsK
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAgICByZWdWYWx1ZShn
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1Zh
bHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
R1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVn
cyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zv
cihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0
aGF0IGZvciBieXRlY29kZXMgKC9jaGVja3BvaW50cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBj
YWxsZWQuCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwg
b3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91Ymxl
OworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVk
KTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERlZihv
cGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6Omxv
Y2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFs
dWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291
bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50ICYmICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7
IH07Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisg
ICAgOiBtX2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgZ3ByKGhpbnQpOworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQp
Cit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dw
cjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoaGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9
CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sK
K30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0
LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5G
UFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsK
KyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJP
cGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGpp
dCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQor
eworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dw
ciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlm
ICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAg
ICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3By
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3Bl
cmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBt
X2dwcjsKKyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7
CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1
bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3Rl
cnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsK
KyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVy
YW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICBncHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyht
X2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmIChtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAg
ICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZl
VGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWND
ZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZh
bHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9w
ZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3Np
Z25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7
CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAg
ICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5k
OjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1
cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAg
ICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAg
IGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7Cisg
ICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2pp
dCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcg
Z3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIo
KTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1f
ZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykp
OworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3Vi
bGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisK
KyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9m
cHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkK
K3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
IChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAg
ICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZO
ZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAg
YWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6
c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0Nl
bGwpCit7CisgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkp
KQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0Nl
bGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQg
SklUOjpzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1
ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVy
KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVj
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNP
YmplY3RTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBTcGVjT2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7Cisg
ICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkp
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lk
IEpJVDo6c3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5k
KSkpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIg
Ym9vbCB1c2VCaWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJp
Z0ludDMyID0gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9w
ZXJhbmQpIHx8ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQs
IHZhbHVlKTsKKyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpLCBTcGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
YnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBi
cmFuY2hJZkJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGlu
ayh0aGlzKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAg
IH0KKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQor
Cit2b2lkIEpJVDo6cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7CisgICAgaWYgKCF1c2VMT0wo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRzKCkuc2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0YW50cygpOyArK2kp
CisgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3Vs
YXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZv
ckNvbnN0YW50KGkpKSk7CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY2FsbGVlKCkg
PSBTcGVjRnVuY3Rpb247CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFu
ZHM8QWxsb2NlZFJlZywgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6
ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVycyA9IHsgfTsK
K30KKwordm9pZCBKSVQ6OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0NvdW50LCAiKSIpOworfQor
Cit2b2lkIEpJVDo6ZHVtcFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRhdGFMb2dMbigiUmVnIGFs
bG9jIHN0YXRlID0gWyIpOworICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJl
ZykpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1Zh
bHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dMbigiXSIpOworfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdp
bk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRl
ci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9j
YXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBC
eXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxv
Y2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNl
RW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRl
Y29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAg
ICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8
UmVnLCBWaXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7
CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVk
UmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9Owor
CisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7
IC8vIFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2lu
dHMsIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBT
YXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3Rl
bSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsg
Ly8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZl
bmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYgKzE5
OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2Fs
bGVlRnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2
YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklU
OworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDcsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2lu
ZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwot
ICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVz
ZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAg
ICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUg
YWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAg
ICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpA
QCAtMjYzLDYgKzI3NCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JD
YWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOwor
CisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2Fs
bCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAg
IENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uKQogICAgICAgICB7CkBAIC0zMDAsOSArMzI1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAg
ICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29u
c3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7
IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVh
bFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAg
ICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzM3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3ICsz
NTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChj
b25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM2NCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwog
ICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAg
dm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxl
T3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7
CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTM1MCw4ICszNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBp
biByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0
Y2guCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmKTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYpOworICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwg
R1BSUmVnIHZhbHVlID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKC4uLik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRh
dGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDggKzUw
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9u
YWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNp
Z25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
QEAgLTQ4NCwxMSArNTExLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25k
aXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3Vi
bGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9u
LCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwog
ICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2
b2lkIGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOwor
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTUxMiw5ICs1NDgsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKQEAgLTY0Myw3NyArNjc5LDgxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlv
biopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2Fs
bGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVn
YXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAg
dm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAg
ICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAg
IHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQp
OwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAg
ICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhw
ckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQ
UiA9IEludmFsaWRHUFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9p
ZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0g
ICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lk
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAg
ICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBH
UFJSZWcpOwpAQCAtNzI4LDggKzc2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQg
ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9p
ZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIp
OwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7
CkBAIC03NDIsMzggKzc4MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBh
dGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
PEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRN
YXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24q
LCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0
aW9uLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBl
bWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rp
b24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uKTsKLQotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKyst
PmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0
ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlT
bG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICAr
K2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAg
ICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxp
bmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1
Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFz
QW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAg
ICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAg
IC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAg
ICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUs
NiArOTQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRp
Y3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGlt
ZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAg
ICAKQEAgLTkzNSw2ICs5NTYsMjUyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFy
aXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3By
KEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsK
KyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBn
cHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2Fu
IGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5k
OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3By
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgp
OworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAg
ICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcg
fTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisK
KyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBG
UFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxh
dGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAg
ICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJh
bmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVj
dCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisK
KyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVn
IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lz
dGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJl
ZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdp
c3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJS
ZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVn
aXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VMT0wpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
R1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlm
IChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShn
cHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZ3By
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5kKG9w
ZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykgeworICAg
ICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJl
ZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
KGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2ln
blJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5
dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0Jp
Z0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNp
ZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0Jp
Z0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNl
bmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJ
bnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFu
eUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAg
ICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BT
OiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4K
KyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7
CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZp
cnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJl
Z2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBl
IHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOwor
ICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQ
bGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgp
OworICAgICAgICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNv
cmQmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9yZSwg
Y29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAg
ICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyArMTIyMCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2Fz
ZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7
CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5m
b3M7CkBAIC05OTAsNiArMTI1Nyw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBt
X2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2Zp
bGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7
CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJs
ZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8v
IGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07
CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAg
ICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZw
ciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVp
bnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZh
bHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJh
bmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAor
ICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkK
KyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9OworCisgICAg
ICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAg
IHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRy
dWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdp
c3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVu
VHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXpl
KCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisg
ICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5U
eXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJv
dmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ld
ID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ld
KTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJl
Z2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNbaV0u
bWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwor
ICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHZvaWQgcmVzZXRD
dXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsK
KworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAg
ICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0
SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3VycmVudFBy
ZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisgICAg
ICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBW
ZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBt
X3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2Ug
fTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29kZUluZGV4LCBKdW1wTGlzdD4+IG1f
ZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklUOjplbWl0
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJs
ZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
QW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
T3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5v
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5P
ckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5vcmRl
cmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFs
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxz
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxz
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pn
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0
ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5s
ZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwg
c2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVx
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSwz
MiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJ
bW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAu
Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94
SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRK
U1ZhbHVlKHJlc3VsdCwgaW5wdXRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7Cisg
ICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVD
b25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRp
b24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRp
dGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91Ymxl
Q29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUg
Y29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0g
aW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFu
dCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUg
dG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRv
dWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
cy5ncHIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQ
Uik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxs
b2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjcyLDI1ICszMjQsMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwg
b3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50
IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQg
aW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9p
bnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxKTsKQEAgLTI5OSw4ICszNTksNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDApOwpAQCAtMzI1LDggKzM4Myw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
CkBAIC0zNTAsMTIgKzQwNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7
CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
IEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFp
bDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElm
SW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0
KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICs0MjMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwy
LmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0Lmxp
bmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90
IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQpAQCAtMzgwLDExICs0MzUsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5j
KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5t
X3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMy
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFi
c29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3Jj
RHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJ
bnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0z
MigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91
YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShz
cmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBz
b21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7Cisg
ICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMzkyLDExICs0ODMsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVj
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkg
eworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1
bHRGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEu
MDsKKyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBG
UFIpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBGUFIsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BS
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlu
cHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAu
ZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAg
ICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAg
ICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVn
cyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qp
OworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBP
UF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDYsNDEgKzUzOSw5
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMg
YXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAg
PT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7
CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJl
Z2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdU
NCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBH
UFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4
KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAg
IGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0
aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAg
ICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hU
ZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBl
YXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxo
c1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlz
LCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwg
ZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJo
c0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJo
c0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAK
LSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1
YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAg
ICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVX
b3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOwor
ICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJ
bnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBib3hJbnQzMihl
ZHgsIEpTVmFsdWVSZWdzIHsgZWF4IH0pOwogCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShs
aHMpLCBTcGVjSW50MzJPbmx5KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJo
cyksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0lu
dDMyT25seTsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbHNlIC8vIENQ
VShYODZfNjQpCkBAIC00NTEsNyArNjM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC00
NjMsNyArNjQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAog
I2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExp
c3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzMsNiArNjU2
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAg
Ly8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7
CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MSwxNSArNzQ1LDEz
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3Ax
LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcy
MywxMyArOTA1LDExIEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkK
ICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9p
bnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhN
RTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUs
IHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9w
TmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1p
emUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBw
ZXRHZW5lcmF0b3I+CkBAIC03NDAsMTggKzkyMCw2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5
T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0KICAgICBTbmlwcGV0T3BlcmFu
ZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CiAKQEAgLTc1
OSwzMyArOTI3LDEwNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3Qg
CiAgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMSkpOwogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCiAgICAgICAg
IHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsK
LQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBz
Y3JhdGNoVGVtcDsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhl
cmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhp
cywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAg
IHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigp
IH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigp
IH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q0OwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5k
LmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CisjZW5kaWYKIAotICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwog
CisgICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVz
dWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7
CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKICAgICBp
ZiAocHJvZmlsaW5nUG9saWN5ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1pdFByb2ZpbGlu
ZykKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNv
ZGUpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MuZ3ByKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3Qo
KSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1
bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBl
KHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEJpdG5vdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGJvb2wgcmVzdWx0SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AxKSkgeworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IG5vdDMyKHJlc3VsdEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBpZiAocmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNJbnQzMk9ubHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTgwMiw3ICsxMDQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIGxlZnRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJl
Z3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0OCwyMCArMTA4OSw2IEBAIHZvaWQgSklUOjplbWl0Umln
aHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwot
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5k
aWYKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZDsKIApAQCAtODcyLDIxICsxMDk5LDc3IEBAIHZvaWQgSklUOjplbWl0Umln
aHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBJbnZhbGlk
RlBSUmVnOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFs
PEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlBSOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZh
c3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywg
b3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlBSLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07
CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hGUFIgPSBzY3JhdGNoVGVtcEZQUi0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworCisgICAgICAg
IGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7
CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVn
VDA7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gZnBSZWdUMjsKKwogICAgIGlmICghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAogICAgIEpJVFJpZ2h0
U2hpZnRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIHNjcmF0Y2hHUFIsIHNjcmF0
Y2hGUFIsIHNuaXBwZXRTaGlmdFR5cGUpOworICAgICAgICBzY3JhdGNoRlBSLCBzY3JhdGNoR1BS
LCBzY3JhdGNoRlBSMiwgc25pcHBldFNoaWZ0VHlwZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBn
ZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlz
dCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRl
Y29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0lu
dDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0g
U3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBy
ZXN1bHRSZWdzLmdwcigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JzaGlmdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTAxLDE4ICsxMTg0LDU0IEBAIHZvaWQgSklU
OjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFk
ZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBT
cGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBtb3ZlKGxocy5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsK
KyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5m
cHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFk
ZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+
KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1p
dE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSwgc2xvd0Nh
c2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAg
LTkyMywxNSArMTI0MiwzNSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRo
SUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNp
bmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCi0gICAgLy8gU2luY2UgcmVnVDE9
PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNh
bGwgdGhlIHNsb3cgcGF0aC4KLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNyY1RlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzcmNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wZXJhbmQp
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzcmNU
ZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcg
dGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisgICAgICAgIC8vIFNpbmNlIHJlZ1Qx
PT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBj
YWxsIHRoZSBzbG93IHBhdGguCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBz
cmNSZWdzKTsKKyAgICB9CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC05NDAsMTkgKzEyNzksMjIgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogCiAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9
IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBzY3JhdGNoR1BSKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7Ci0KICAgICBNYXRoSUNHZW5lcmF0
aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9uLCBNYXRoSUNHZW5lcmF0aW9uU3Rh
dGUoKSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0g
bWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAg
ICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisK
ICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOwotICAgIH0g
ZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChzcmNSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTk2Miw3ICsxMzA0LDExIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICB9KTsKICNlbmRp
ZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5n
cHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4K
QEAgLTk3MywxMiArMTMxOSwyOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NF
UlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIEZQUlJlZyBzY3JhdGNoRlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0
VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1w
OworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisKICNlbHNlCiAgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC05ODcsMjUg
KzEzNTAsNDAgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAg
IEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJh
bmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgp
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAu
ZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6
aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAg
IHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdElu
dDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRP
cGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAg
IHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5k
LmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisgICAgICAgIGlmICghR2Vu
ZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAo
IUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9
CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVnVDAsIGZwUmVn
VDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwogICAgIAogICAgIEFTU0VSVCghKEdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6
aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKICAgICAKLSAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmICgh
R2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0KICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZVN0YXJ0ID0gbGFiZWwoKTsKICNlbmRp
ZgpAQCAtMTAxNCwxNyArMTM5MiwzNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmlu
YXJ5TWF0aElDCiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVy
YXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJh
dGVkSW5saW5lQ29kZSkgewotICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQotICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICAgICAg
ZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICBs
ZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBs
YWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7
CisgICAgICAgIH0KKwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwotICAgIH0gZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdw
cigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdz
LmdwcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3By
KCkpOworICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhK
dW1wcywgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM0LDExICsx
NDI5LDE4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9
KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVz
dWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3As
IE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNv
ZGVOdW1iZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9m
aWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBh
dGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9u
IHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElD
R2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA0Nyw4ICsx
NDQ5LDggQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSB9OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKQEAgLTEwODQsNyArMTQ4Niw3IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFt
ZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6
ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24g
cHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlv
biwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElD
U2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNo
RnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0
aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsK
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0x
MDk1LDkgKzE0OTcsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
LSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07
CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMTE0LDEwICsxNTE2LDE3IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKIAogICAgIEFTU0VSVCgh
KEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdl
bmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKIAot
ICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSkKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmVzdWx0UmVncy5ncHIoKSA9PSByZWdUMSA/IHJlZ1QzIDogcmVnVDEgfTsKKyNlbmRp
ZgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGVs
c2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFu
ZCkpCisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRSZWdzLmdwcigpID09IHJlZ1QyID8gcmVnVDQgOiByZWdU
MiB9OworI2VuZGlmCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMTU1LDIzICsxNTY0LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcg
c2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9w
ZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAt
MTE4NywyNyArMTU3OSw5MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAg
cmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIp
KTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8
fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBz
Y3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBz
Y3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0
aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7Cisg
ICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSBy
aWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBS
ZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vs
c2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBS
UmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisK
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlm
CisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwor
ICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0
T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdU
MCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmls
ZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRp
ZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIo
KSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgp
KTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5z
bG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAg
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX2Rpdik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQpA
QCAtMTIxNSwzNCArMTY3MiwxMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
TXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAg
IGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAg
ICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwg
bGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMu
Z3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUi5m
cHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJm
bG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
bXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9u
VG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9w
TXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0
aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJv
ZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+
KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHN1YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBT
cGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMu
Z3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50
MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZw
cigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMu
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwor
ICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9X
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBP
cCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRp
b25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdp
c3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5LDggQEAg
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNh
bGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBD
b2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFm
dGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
CiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJU
KG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICsz
MzcsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNv
bXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3Vt
ZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYsNiAr
Mzg5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAg
ICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ug
d2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVs
dGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhl
cmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJ
dGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0IChpdGVy
YXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCku
cHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5leHRD
aGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVj
a3BvaW50U2xvdyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3Vs
ZEJlUmVnVDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91
bGRCZVJlZ1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQs
IHJlZ1QwKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JPcGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAog
ICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsK
QEAgLTQ1Niw2ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAg
Ly8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxl
IHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNo
IGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0g
YnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNiArNDk5LDQzIEBAIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVy
UmVzdWx0R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRo
OworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZl
ZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFk
ZCh2YWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdz
LAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRl
clJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNl
ZFJlZ2lzdGVycywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFs
dWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRT
bG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOwor
CisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25zdCBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBK
dW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
ZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwog
CisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMt
PnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAg
ICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsKICAg
ICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgICAgICB3aWxsRGVmKGJ5dGVjb2Rl
Lm1fdmFsdWUpOwogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7
CiAKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0
R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJl
c3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQg
Y2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNl
LgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5n
cyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFj
ayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9
PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4m
IHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODks
MzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAu
bGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1
cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9i
eXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9z
bG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91
c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0
aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAh
IXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1f
c2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRk
U2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3Qu
anVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBz
WzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3Qm
IGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0
byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6
IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1w
KTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCBy
ZWxhdGl2ZU9mZnNldCkKQEAgLTMwOSwxMSArMzAxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW4KICAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlLCBHUFJSZWcgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7CiAKLSAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlID0gcmVnVDA7CiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7CiAjZW5kaWYK
QEAgLTMzOCwxMSArMzI5LDExIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxkZWMKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRP
cGNvZGUoLi4uKSB7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhKQoraW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BS
UmVnIHJlZykKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRh
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpLCByZWcpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSkKQEAgLTM5MywxMSArMzg0LDYgQEAgQUxXQVlTX0lOTElORSBk
b3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNV
bmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCAr
MTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEy
NDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBA
QAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rl
ci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI3IEBAIHZvaWQgSklUOjpl
bWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYm
IGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQpAQCAtOTAsMzIgKzExMyw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2Nh
dGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxs
b2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0
PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJ
RCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdU
MjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAg
R1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSBy
ZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9
IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFh
bGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
LCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBU
cnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
b3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTI1LDIzICsxNjksNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hh
c19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1f
Y29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJl
ZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFu
ZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAg
ICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOwor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9y
R1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJ
bnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29u
c3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BS
KTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wu
aGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsK
KyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGlu
c3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVu
Y3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BS
KTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFz
SW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5k
IGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFz
SW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjIyLDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90
eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFs
dWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9y
IGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNh
biB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEp
OwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3Qg
YmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5o
YXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVl
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAg
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0g
ICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
cmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEs
IC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAg
ICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBP
cHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJv
dG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0
Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3Rv
KSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3Rv
R1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNl
KHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2
YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVt
cGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAt
PmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAg
ICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAg
ICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQ
UiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigp
LCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAo
YmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgor
ICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25l
IHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4K
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAv
LyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRo
aXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBK
SVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwK
KyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQor
ICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAv
LyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAg
bV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJ
bnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4
KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+
YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biopCkBAIC0xOTksMTEgKzMyMywyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25z
dCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMjExLDI4ICszNTMsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3Vu
ZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVt
cCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDAp
OwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
dmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXND
ZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRl
bXBHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7
CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwg
cmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRl
ZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MjQxLDEzICs0MjcsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwo
YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVO
dWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDYxLDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0
NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
Qm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVzdDY0KFplcm8sIGlucHV0
R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0
KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTI2OCwxMSArNDkyLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25z
dCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJv
LCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAg
dGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpA
QCAtMjgyLDIxICs1MjIsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNl
bGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2Vs
bChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJp
Z0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6Qmln
SW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
SnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7
CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmln
SW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1h
c2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMp
OworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU4OCw0
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0
ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAg
ICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisK
KyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzYzNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
dmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmpl
Y3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21w
YXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENl
bGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRk
cmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
SnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJv
dmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTM1NSw3ICs3MDIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3Ry
dWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRl
Y29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZh
bHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MjEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAg
aXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
T2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0g
c3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNy
YykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENl
bGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFs
dWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmpl
Y3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0
ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NjQsMjAzIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElm
U3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92
ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFs
dWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1
bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0
aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBm
dW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRG
dW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
ZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29s
ZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBj
b3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0
aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAg
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUg
dmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAg
IC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZv
ciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0
IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBh
bmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhv
cjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpT
VmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4g
YWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0
ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2
ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGlj
aCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25k
aXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2
YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAg
ICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQ
UiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2Ny
YXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gx
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIo
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3Mg
eyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3Jh
dGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAg
ICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
IGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1
ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0g
Ynl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFu
KGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVl
IHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQ
UiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNj
cmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIu
Z3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1
ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQ
Uiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BS
UmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNDQwLDQ2ICs5NjksMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IElu
c3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVP
dGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
c3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihF
cXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0ds
b2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0ds
b2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRo
ZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAg
ICAgICAKKworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAg
ICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBK
dW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQg
SklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5l
cU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1t
ZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVx
dWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxl
IHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBh
ZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFy
Z2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRp
YXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAg
ICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisK
KyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRo
ZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNO
b3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNDg4LDEwICsxMTAwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVs
bChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAg
ICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzEx
MjgsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhl
cikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBO
b3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNTksMzA1IEBAIHZvaWQg
SklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBv
aW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVh
bCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIu
YXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNK
dW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhp
cyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAm
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0
cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkp
KTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1
bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQ
b2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRh
ZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VM
T0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxP
cCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90
RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVk
IDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2
YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wo
cmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJl
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KHJoc0dQUikpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAg
ICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNG
UFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhz
RlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BT
OiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZp
cnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNf
c2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwor
ICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBm
cENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxP
clVub3JkZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhz
KSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhz
KSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BS
KTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAg
ICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxo
c1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFy
Z2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1
bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgp
OworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQ
UiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJl
Z1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihU
cnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30K
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6
OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAg
R1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAg
fQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7
CkBAIC01ODksNzQgKzE0NzMsMTQ2IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25z
dCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVx
dWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhz
KSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEg
PyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFy
ZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQo
bGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMp
KSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJl
LgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikK
LSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJp
Y3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAg
ICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYg
KHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmln
aHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVm
dCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5z
dGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBi
cmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYg
YSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2Ug
aXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMg
bm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0
IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgot
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBh
ZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9
IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0
cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklY
TUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBh
IEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBz
dHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAg
ICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQo
MSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMs
IHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQg
YSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAg
ICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAg
Z290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBp
cyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAg
ICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAg
IC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxk
IGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVt
YmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQz
MiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5n
IGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQg
YWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8v
IExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAg
ICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAg
ICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVn
VDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCBy
ZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwg
cmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUp
OworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgor
ICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQg
ZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdl
IG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQz
MikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3Mp
LgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYg
ZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2gg
aXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVt
cCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhl
ciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZp
bmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAg
SnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAg
ICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7
CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAg
ICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2Vu
ZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjMwLDEzNSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBh
dXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZw
Q29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9y
VW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUo
bGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
cmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4g
ZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZT
dHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFw
QmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUlu
dDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhz
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91Ymxl
KGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJl
LgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8q
IEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToK
LSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8g
c2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAg
ICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0
aDsKLSAgICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGlt
cGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5n
bGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVk
IGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmlj
ayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8g
aXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAg
IC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMg
b25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBl
cXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVn
VDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCBy
ZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMp
OwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIs
IHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCBy
ZWdUNSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVn
VDEpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0g
ICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVy
IHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8g
RklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBp
cyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFy
ZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMy
KQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBi
ZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0
KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJp
Z2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90
VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRz
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5j
aCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1
c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlz
IHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3
aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAg
IC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMg
b25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUg
b3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92
ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dl
c3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAg
ICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1
bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFk
ZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIg
c3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3Mg
dGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYg
Ym90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RF
cSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBh
cmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMy
KQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncyku
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBl
aXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBp
cyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1w
IGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
ZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2gg
aXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAg
ICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsK
KyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0
aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRh
cmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzQ4LDg5ICsxNzcxLDIyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJp
Y3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSBy
ZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVn
IHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUg
PSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51
bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVj
Qnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJl
ZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdU
MCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0Jp
Z0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsK
LQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShz
cmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIo
c3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNy
YywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBl
bHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
I2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElm
TnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Qmln
SW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAo
KTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsK
KworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3Ry
aW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNy
YykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlm
IChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICBy
ZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3
aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
QEAgLTg4OCw5ICsyMDQ4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUo
Y29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdl
IGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywg
Y3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3Ro
ZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1Qw
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMDc5LDE3IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkg
KzIxMDQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFi
bGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjEyOCwxNDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVt
cFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7Cisg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
dGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRy
VGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzog
V2UgY2FuIGRvIGJldHRlci4KICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1Zywg
JnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAg
bm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2Vx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8
T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwg
OiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5v
dENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAg
ICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdh
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJl
UHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
anVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNo
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Y29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7
CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKwor
ICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNv
bXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxs
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQot
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwot
Ci0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0g
ICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7Cisg
ICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBl
bWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBD
VEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyBy
ZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHBy
b2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1
cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVy
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGog
PCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRk
cmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBw
cm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVC
YXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMjc5LDIzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzAzLDgw
IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJ
RCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNT
dHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJl
c3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3Ry
aWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNw
ZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNT
dHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNp
bmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEo
cHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3Qp
ICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOwor
ICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRH
UFIsIHNyY0RzdCk7CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50
aXR5LgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5v
dENlbGw7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVz
dWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAg
ICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAg
ICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVj
dFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3Vs
dEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEp
OworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmpl
Y3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMDU5LDYgKzIzODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyArMjM5NCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJl
ZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAx
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7Cisg
ICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRl
bXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQt
PmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAg
IHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdw
clRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7Cisg
ICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1
bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxs
ZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVE
YXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVn
LCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsy
NDM2LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBs
b2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2Vz
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdp
c3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3Jj
KSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNs
b3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsyNDgxLDExIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNl
dEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRo
b3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVy
ZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZt
KCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9h
ZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0
KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEzICsyNTA5LDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXph
dGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwog
CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVj
b2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwxMSArMjUyNiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRy
eS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNh
biBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShp
dGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsyNTUyLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJz
b2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CiB9CiAKQEAgLTEyNDUsOCArMjU2MiwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhw
KGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganND
YXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0
OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdF
eHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CkBAIC0xMjU2LDIzICsyNTgzLDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1v
bihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAg
ICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1w
bGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUt
PmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2Uo
KnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIo
KTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vs
c2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZt
KCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29w
ZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAg
ICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0
b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwog
ICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjY0Nyw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNF
eHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BS
ID0gc2NvcGUtPmdwcigpOworICAgICAgICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9u
KTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2Ugewog
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4
cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQ
UiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0K
IH0KIApAQCAtMTM0OSw5ICsyNzE3LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGlu
dCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVz
U3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BS
UmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxh
Y2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7
CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJh
eTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3MzgsMjYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4
ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRh
ZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwg
YXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFy
Z0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxz
ZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChz
aXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlm
CiB9CiAKQEAgLTEzODEsMTUgKzI3NzEsNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMs
IGVudW1lcmF0b3IgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9y
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworICAgICAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gYmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAg
ICAgICAgICBiYXNlQ2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VH
UFIgPSBiYXNlQ2VsbC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTQwOSw2ICsyODI2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3By
b3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6
CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
IAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg1NSw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/
CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4
ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBA
IC0xNDYxLDE1ICsyODgyLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KGMKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7
CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsK
IAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFy
cmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJy
YXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2Rl
LCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBl
KTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI4OTks
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFi
ZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4
LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQ
YXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlv
bkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlw
ZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTE1MTAsMzcgKzI5MzIsOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9w
bmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
CiAKLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAg
ICAgSW50MzJPcGVyYW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0
aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0
b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAg
YmFzZUNlbGwuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFz
ZUNlbGwtPmdwcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMg
YSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0g
ICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXgg
aXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVu
IGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxl
c3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdz
IGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAg
ICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGlu
ZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7
CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BS
KTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAg
ICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNl
IGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAg
ICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21w
dXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVn
VDEpOworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAg
IEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Cisg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAg
ICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsK
KyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJf
dCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1
dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
KyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OworICAgIH0KIAotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZM
aW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
cmVnVDEpOwotICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8
aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDI3LDUxIEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVy
dHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVt
ZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8g
T09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1l
cmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBs
YWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMs
IGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4
VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3Jh
dGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4
R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAg
ICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAg
IGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwg
cmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5k
MzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1
bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NzQsMjEgKzMwODEsNTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7
CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9w
ZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7
CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAg
ICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAg
ICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFu
Y2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIp
OwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAs
IFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRj
aEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVz
RWlnaHQpLCByZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
U3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMx
MzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlw
ZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZp
cnR1YWxSZWdpc3RlcjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRv
RW5kOwpAQCAtMTY1OCw2ICszMTk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBl
KGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3Vl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAg
ICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0g
cmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0
aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMyMTQsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKwor
ICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3Rh
dGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3
ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBA
IC0xNzAyLDExICszMjQ3LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNv
bnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFy
Z3VtZW50Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVn
cyhyZWdUMCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9
IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAg
ICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9s
ZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkg
KzMyNjgsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWdu
ZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1
bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51
bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1Qw
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7CisKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZXN1bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0z
MihudW1QYXJhbXNUb1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAg
ICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2Fk
MzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyks
IHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAg
IEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMy
KG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXAp
LCByZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CiAjZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKIAotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0
aC5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHJlZ1QxKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSwgcmVnVDEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTc0NCw0OSArMzMxNyw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3Qg
SW5zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1
bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1w
IGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisg
ICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVU
b3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsK
ICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NU
aGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBp
bmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1
bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCks
IHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAg
ICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSks
IHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJn
dW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmlu
ZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2
YWx1ZUdQUikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVt
aXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMs
IHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Qg
fCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
Mik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVS
ZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VS
VCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAg
ICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwo
dmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIo
KSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIo
KSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJ
bmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlW
YWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xv
d1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVs
b3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcs
OCArNTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAt
NTg2LDggKzU3Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTYzMiw4ICs2MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTY3Myw4ICs2NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC03NjMsOCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwpAQCAtMTA0NCw4ICsxMDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CkBAIC0xMjAxLDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwog
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSku
cmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3
dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTEsNDkgKzUzLDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VM
T0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBw
cm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBp
ZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFs
SUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7
CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxs
LmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAg
ICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmlu
Zyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwg
cHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSks
IFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9s
KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRy
dWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMo
aXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0g
ICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZh
bHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAyLDM5ICsxNzIsNzMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7Cisg
ICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBi
YXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZh
bHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUyLDYgKzI1Niw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZv
ckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdl
ckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlmIChwcm9w
ZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMxNCw4ICs0MjAsMTEgQEAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0
ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVn
VDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUp
LCBwdXRLaW5kLCBwcml2YXRlRmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2RlKSk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzNCw3ICs0NDMs
NyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJu
IGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0
ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzQ1MSw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBh
dXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0o
YXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAg
ICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTM1MCwxMyArNDU5LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBs
b2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAg
IGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAg
ICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4o
KSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4o
KSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0zNzIsNDkgKzQ4MCwxMDUgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJ
ZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2Ug
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNj
ZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBH
UFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJf
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3Nv
ckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJf
dCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIg
fTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcg
Z2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0
dGVyLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJl
Z1QwKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1Qx
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVn
VDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNv
ZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRl
Y29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlz
LCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5
R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdU
Mik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3By
b3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29k
ZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRy
aWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQyNCwxOCArNTg4LDUyIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBiYXNlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
ZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFy
cmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMg
cmVnaXN0ZXJzLgpAQCAtNDQ0LDI1ICs2NDIsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVy
QmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2Rl
bEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5n
cHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOSArNjcyLDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFs
dWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hW
YWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3Bl
cnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0
eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BS
KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVy
dHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJv
cGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Cisg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC00OTMsMjEzICs3NDQsMzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVs
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVy
blZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAg
IH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
QWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFw
VG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7Cisg
ICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsK
KyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7
Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAo
KmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkp
OwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAm
bWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7Cisg
ICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJl
Z1QxOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5k
ZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFy
cmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAg
IH0KIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsK
KyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7
CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNH
UFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhp
c1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRo
aXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAg
bV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNE
aXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUg
YWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwg
d2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRz
IGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBn
ZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJl
IGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2
YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBi
YXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwK
ICAgICAgICAgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0LCBwcml2YXRlRmllbGRBY2Nlc3NL
aW5kKGJ5dGVjb2RlKSk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpA
QCAtNzA5LDc3ICsxMTE1LDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0g
ICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJ
bmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklU
SW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVElu
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVh
bFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03OTEsMTcgKzEyMTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSArMTI0MywzNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVz
b2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAg
ICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+
IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50Lmdl
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25t
ZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgpAQCAtODM4LDkgKzEyODUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAKQEAgLTg1MywyOSArMTMwMCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVz
dWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwx
NSArMTMzMSwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsK
LSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cisg
ICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYs
MTIgKzEzNTgsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAg
ICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNp
emVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBA
IC05MjIsNTEgKzEzNjgsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVy
ZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAg
IEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7
Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29w
ZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAg
ICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBi
YXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIo
b3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwor
ICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAg
ICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsK
ICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsK
KyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3Bl
R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC05ODAsMTAgKzE0NTksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDc1LDI3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsK
KyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE1MDUsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0
b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0
Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9h
ZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1Qx
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUz
NCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9
CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9v
bCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBv
ZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNl
dEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAg
ICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQ
UiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBi
dXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7
CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQog
CisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBz
Y29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29w
ZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAg
ICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJh
bmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAg
c3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRy
KG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1
dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKQEAgLTEwOTgsMjggKzE1ODgsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAg
ICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3
YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVn
VDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsK
LSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5
V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0
KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50
U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgor
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNs
b3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2
YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwpAQCAtMTEzNCwxMiArMTY1MywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24n
dCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRo
aXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0
aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
SnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdl
IGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5k
aW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTE1Mywy
MyArMTY4MSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVy
cyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3
ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQ
UiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7
CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAv
LyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwpAQCAtMTE4NiwxMCArMTcyMyw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlw
ZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3
NDAsMTc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVu
dHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50
c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBp
bmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1
ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAg
CisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
Q2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQogeworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYg
d2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFy
b291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQg
bmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUg
cmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUg
aXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZv
ciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1
YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxk
RmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAg
IGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7Cisg
ICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7
CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JP
cGVyYW5kKG93bmVyKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBn
cHJGb3JPcGVyYW5kKG93bmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BS
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvd25lciwgcmVnVDApOworICAgIH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3du
ZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIp
OworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAg
ICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGls
bEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2ls
ZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90
Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RD
ZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBN
YWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91
bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVl
ZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwg
dG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNl
IHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBp
dCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxs
CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHZhbHVlVmFsdWU7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0g
cmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7
CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90
Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAg
LTEyNzEsMTEgKzE5MjMsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVu
c2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAq
dGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEK
KyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTEyODUsMTAgKzE5NTIsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFs
X2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBi
YXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2Vs
bE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAg
ICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRP
ZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAg
LTEzODUsOCArMjA2NSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAg
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25l
ciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7Cisg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qw
OworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCBvd25lciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxS
ZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2ls
ZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNv
cmQpOworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBA
IC0xNDA0LDYgKzIxMDEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJl
Z2lzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7Cisg
ICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICAKQEAgLTE0NjksNiArMjE2OCw4IEBAIHRlbXBsYXRlIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5VmEKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAg
ICAgQVNTRVJUKChwdXRLaW5kID09IERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IE5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0g
b3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVy
YXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJh
dG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgog
ICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMo
KT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xv
d1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1Ymxp
YzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAg
ICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAg
ICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBM
SU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3Ry
dWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVj
b2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw2ICszOTYsMTAgQEAgc3Rh
dGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0
ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIE9wdGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAg
ICBPcHRpb25zOjpmb3JjZUxPTCgpID0gMTsKKyAgICBPcHRpb25zOjp1c2VMTEludCgpID0gMTsK
KwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlv
bkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2
ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAg
dihVbnNpZ25lZCwgc2VlZEZvckxJQ01GdXp6ZXIsIDQyNDI0MiwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmpl
Y3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBmb3Jj
ZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNl
IHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415690</attachid>
            <date>2020-12-08 16:51:28 -0800</date>
            <delta_ts>2020-12-09 15:33:57 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>474191</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FyaXRoLWFicy10by1hcml0aC1uZWdhdGUtcmFuZ2Utb3B0
aW1pemF0b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvYXJpdGgtYWJzLXRvLWFy
aXRoLW5lZ2F0ZS1yYW5nZS1vcHRpbWl6YXRvbi5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgSlNU
ZXN0cy9zdHJlc3MvYXJpdGgtYWJzLXRvLWFyaXRoLW5lZ2F0ZS1yYW5nZS1vcHRpbWl6YXRvbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsMTAgQEAgZnVuY3Rpb24gdGVzdENoZWNrZWRC
ZXR3ZWVuSW50TWluQW5kWmVybwogICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tl
ZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCkgb24gLTIxNDc0ODM2NDciOwogICAgICAg
ICB9CiAgICAgfQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRCZXR3
ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSkgPiAxKSB7Ci0gICAgICAgIHRocm93ICJGYWlsZWQg
b3B0aW1pemluZyB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCkuIE5v
bmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKLSAgICB9CisgICAgLy8g
T09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdlZW5J
bnRNaW5BbmRaZXJvRXhjbHVzaXZlKSA+IDEpIHsKKyAgICAvLyAgICB0aHJvdyAiRmFpbGVkIG9w
dGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpLiBOb25l
IG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAgLy99CiB9CiB0ZXN0
Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCk7CiAKQEAgLTU0LDkgKzU1LDEw
IEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2kKICAgICAgICAgICAg
IHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0lu
Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobnVt
YmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFpl
cm9JbmNsdXNpdmUpID4gMSkgewotICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVz
dENoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZSgpLiBOb25lIG9m
IHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Ci0gICAgfQorICAgIC8vT09QUwor
ICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5F
eGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKSA+IDEpIHsKKyAgICAvLyAgICB0aHJvdyAiRmFpbGVk
IG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1
c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAg
Ly99CiB9CiB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZl
KCk7CiAKQEAgLTgyLDkgKzg0LDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkQmV0d2VlbkludE1p
bkluY2x1c2kKICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50
TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKICAgICAgICAg
fQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2Vl
bkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUpID4gMSkgewotICAgICAgICB0aHJvdyAi
RmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVy
b0V4Y2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7
Ci0gICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVl
Q2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKSA+IDEpIHsKKyAg
ICAvLyAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWlu
SW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVk
IHRvIE9TUiBFeGl0LiI7CisgICAgLy99CiAKICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsg
KytpKSB7CiAgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFu
ZFplcm9FeGNsdXNpdmUoLWkpICE9PSBpKSB7CkBAIC05Niw5ICs5OSwxMCBAQCBmdW5jdGlvbiB0
ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2
ZUFuZFplcm9FeGNsdXNpdmUpID4gMikgewotICAgICAgICB0aHJvdyAiTWF0aC5hYnMoKSBvbiBJ
bnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBzZXR0bGUgb24gZG91Ymxl
LiI7Ci0gICAgfQorICAgIC8vIE9PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9w
YXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSkgPiAyKSB7
CisgICAgLy8gICAgdGhyb3cgIk1hdGguYWJzKCkgb24gSW50TWluIGNhbiBPU1IgRXhpdCBidXQg
d2Ugc2hvdWxkIHF1aWNrbHkgc2V0dGxlIG9uIGRvdWJsZS4iOworICAgIC8vfQogfQogdGVzdENo
ZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpOwogCkBAIC0xMjcs
OSArMTMxLDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm8KICAg
ICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0lu
Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobnVt
YmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNp
dmUpID4gMSkgewotICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRC
ZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBu
ZWVkIHRvIE9TUiBFeGl0LiI7Ci0gICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9m
REZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKSA+
IDEpIHsKKyAgICAvLyAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3
ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVk
IHRvIE9TUiBFeGl0LiI7CisgICAgLy99CiAKICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsg
KytpKSB7CiAgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNs
dXNpdmUoLWkpICE9PSBpKSB7CkBAIC0xNDMsOSArMTQ4LDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVj
a2VkQmV0d2VlbkludE1pbkFuZFplcm8KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChudW1i
ZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2
ZSkgPiAyKSB7Ci0gICAgICAgIHRocm93ICJNYXRoLmFicygpIG9uIEludE1pbiBjYW4gT1NSIEV4
aXQgYnV0IHdlIHNob3VsZCBxdWlja2x5IHNldHRsZSBvbiBkb3VibGUuIjsKLSAgICB9CisgICAg
Ly9PT1BTCisgICAgLy9pZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2Vl
bkludE1pbkFuZFplcm9JbmNsdXNpdmUpID4gMikgeworICAgIC8vICAgIHRocm93ICJNYXRoLmFi
cygpIG9uIEludE1pbiBjYW4gT1NSIEV4aXQgYnV0IHdlIHNob3VsZCBxdWlja2x5IHNldHRsZSBv
biBkb3VibGUuIjsKKyAgICAvL30KIH0KIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9J
bmNsdXNpdmUoKTsKIApAQCAtMTcxLDkgKzE3NywxMCBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2Vk
QmV0d2VlbkludE1pbkFuZFplCiAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNr
ZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKICAgICAg
ICAgfQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNrZWRC
ZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSkgPiAxKSB7Ci0gICAgICAgIHRocm93ICJGYWls
ZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUo
KS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOwotICAgIH0KKyAg
ICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZEJl
dHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKSA+IDEpIHsKKyAgICAvLyAgICB0aHJvdyAiRmFp
bGVkIG9wdGltaXppbmcgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZl
KCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICAvL30K
IH0KIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpOwogCkBAIC0y
MDIsOSArMjA5LDEwIEBAIGZ1bmN0aW9uIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHUK
ICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5FeGNs
dXNpdmVBbmRaZXJvSW5jbHVzaXZlKCkgb24gLTIxNDc0ODM2NDciOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRN
aW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKSA+IDEpIHsKLSAgICAgICAgdGhyb3cgIkZhaWxl
ZCBvcHRpbWl6aW5nIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0lu
Y2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Ci0g
ICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlVW5j
aGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUpID4gMSkgeworICAg
IC8vICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1p
bkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVl
ZCB0byBPU1IgRXhpdC4iOworICAgIC8vfQogfQogdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5F
eGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKCk7CiAKQEAgLTIzMyw5ICsyNDEsMTAgQEAgZnVuY3Rp
b24gdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdQogICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUo
KSBvbiAtMjE0NzQ4MzY0OCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJlck9mREZH
Q29tcGlsZXMob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNs
dXNpdmUpID4gMSkgewotICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hl
Y2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKCkuIE5vbmUgb2YgdGhl
IHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKLSAgICB9CisgICAgLy9PT1BTCisgICAg
Ly9pZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5j
bHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSkgPiAxKSB7CisgICAgLy8gICAgdGhyb3cgIkZhaWxlZCBv
cHRpbWl6aW5nIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1
c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAg
Ly99CiB9CiB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNp
dmUoKTsKIApAQCAtMjY3LDkgKzI3NiwxMCBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2VkQmV0d2Vl
bkludE1pbkFuZFplCiAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3
ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ4IjsKICAg
ICAgICAgfQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNr
ZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSkgPiAxKSB7Ci0gICAgICAgIHRocm93ICJG
YWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNp
dmUoKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOwotICAgIH0K
KyAgICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tl
ZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKSA+IDEpIHsKKyAgICAvLyAgICB0aHJvdyAi
RmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVz
aXZlKCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICAv
L30KIH0KIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpOwogCkBA
IC0yOTMsOSArMzAzLDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkTGVzc1RoYW5aZXJvKCkKICAg
ICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRMZXNzVGhhblplcm8oKSBvbiAtMjE0
NzQ4MzY0NyI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMo
b3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybykgPiAxKSB7Ci0gICAgICAgIHRocm93ICJGYWlsZWQg
b3B0aW1pemluZyB0ZXN0Q2hlY2tlZExlc3NUaGFuWmVybygpLiBOb25lIG9mIHRoZSB0ZXN0ZWQg
Y2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Ci0gICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51
bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybykgPiAxKSB7CisgICAg
Ly8gICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RDaGVja2VkTGVzc1RoYW5aZXJvKCku
IE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICAvL30KIAog
ICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU1OyArK2kpIHsKICAgICAgICAgaWYgKG9wYXF1ZUNo
ZWNrZWRMZXNzVGhhblplcm8oLWkpICE9PSBpKSB7CkBAIC0zMDYsOSArMzE3LDEwIEBAIGZ1bmN0
aW9uIHRlc3RDaGVja2VkTGVzc1RoYW5aZXJvKCkKICAgICAgICAgICAgIHRocm93ICJGYWlsZWQg
dGVzdENoZWNrZWRMZXNzVGhhblplcm8oKSBvbiAtMjE0NzQ4MzY0OCwgZ290ICIgKyByZXN1bHQ7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hl
Y2tlZExlc3NUaGFuWmVybykgPiAyKSB7Ci0gICAgICAgIHRocm93ICJNYXRoLmFicygpIG9uIElu
dE1pbiBjYW4gT1NSIEV4aXQgYnV0IHdlIHNob3VsZCBxdWlja2x5IHNldHRsZSBvbiBkb3VibGUu
IjsKLSAgICB9CisgICAgLy9PT1BTCisgICAgLy9pZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFx
dWVDaGVja2VkTGVzc1RoYW5aZXJvKSA+IDIpIHsKKyAgICAvLyAgICB0aHJvdyAiTWF0aC5hYnMo
KSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBzZXR0bGUgb24g
ZG91YmxlLiI7CisgICAgLy99CiB9CiB0ZXN0Q2hlY2tlZExlc3NUaGFuWmVybygpOwogCkBAIC0z
MzUsOSArMzQ3LDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygK
ICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJv
KCkgb24gLTIxNDc0ODM2NDciOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChudW1iZXJPZkRG
R0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKSA+IDEpIHsKLSAgICAg
ICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RDaGVja2VkTGVzc1RoYW5PckVxdWFsWmVy
bygpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Ci0gICAgfQor
ICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZExl
c3NUaGFuT3JFcXVhbFplcm8pID4gMSkgeworICAgIC8vICAgIHRocm93ICJGYWlsZWQgb3B0aW1p
emluZyB0ZXN0Q2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKS4gTm9uZSBvZiB0aGUgdGVzdGVk
IGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOworICAgIC8vfQogCiAgICAgZm9yIChsZXQgaSA9IDE7
IGkgPCAxZTU7ICsraSkgewogICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZExlc3NUaGFuT3JFcXVh
bFplcm8oLWkpICE9PSBpKSB7CkBAIC0zNDcsOSArMzYwLDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVj
a2VkTGVzc1RoYW5PckVxdWFsWmVybygKICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENo
ZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkgb24gLTIxNDc0ODM2NDgiOwogICAgICAgICB9CiAg
ICAgfQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9y
RXF1YWxaZXJvKSA+IDIpIHsKLSAgICAgICAgdGhyb3cgIk1hdGguYWJzKCkgb24gSW50TWluIGNh
biBPU1IgRXhpdCBidXQgd2Ugc2hvdWxkIHF1aWNrbHkgc2V0dGxlIG9uIGRvdWJsZS4iOwotICAg
IH0KKyAgICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNr
ZWRMZXNzVGhhbk9yRXF1YWxaZXJvKSA+IDIpIHsKKyAgICAvLyAgICB0aHJvdyAiTWF0aC5hYnMo
KSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBzZXR0bGUgb24g
ZG91YmxlLiI7CisgICAgLy99CiB9CiB0ZXN0Q2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKTsK
IApAQCAtMzc2LDkgKzM5MCwxMCBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2VkTGVzc1RoYW5aZXJv
KCkKICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZExlc3NUaGFuT3JFcXVh
bFplcm8oKSBvbiAtMjE0NzQ4MzY0OCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJl
ck9mREZHQ29tcGlsZXMob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKSA+IDEpIHsKLSAgICAg
ICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RVbmNoZWNrZWRMZXNzVGhhblplcm8oKS4g
Tm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOwotICAgIH0KKyAgICAv
L09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZExlc3NU
aGFuWmVybykgPiAxKSB7CisgICAgLy8gICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RV
bmNoZWNrZWRMZXNzVGhhblplcm8oKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBP
U1IgRXhpdC4iOworICAgIC8vfQogCiAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkg
ewogICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKC1pKSAhPT0gaSkgewpA
QCAtMzg4LDkgKzQwMywxMCBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2VkTGVzc1RoYW5aZXJvKCkK
ICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZExlc3NUaGFuWmVybygpIG9u
IC0yMTQ3NDgzNjQ4IjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZERkdDb21w
aWxlcyhvcGFxdWVVbmNoZWNrZWRMZXNzVGhhblplcm8pID4gMikgewotICAgICAgICB0aHJvdyAi
TWF0aC5hYnMoKSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBz
ZXR0bGUgb24gZG91YmxlLiI7Ci0gICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9m
REZHQ29tcGlsZXMob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKSA+IDIpIHsKKyAgICAvLyAg
ICB0aHJvdyAiTWF0aC5hYnMoKSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQg
cXVpY2tseSBzZXR0bGUgb24gZG91YmxlLiI7CisgICAgLy99CiB9CiB0ZXN0VW5jaGVja2VkTGVz
c1RoYW5aZXJvKCk7CiAKQEAgLTQyMCw4ICs0MzYsOSBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2Vk
TGVzc1RoYW5PckVxdWFsWmVyCiAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNr
ZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkgb24gLTIxNDc0ODM2NDgiOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuT3JF
cXVhbFplcm8pID4gMSkgewotICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVu
Y2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVl
ZCB0byBPU1IgRXhpdC4iOwotICAgIH0KKyAgICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRG
R0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8pID4gMSkgeworICAg
IC8vICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVx
dWFsWmVybygpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Cisg
ICAgLy99CiB9CiB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygpOwpJbmRleDogSlNU
ZXN0cy9zdHJlc3MvYXJpdGgtbW9kdWxvLW5vZGUtYmVoYXZpb3JzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL2FyaXRoLW1vZHVsby1ub2RlLWJlaGF2aW9ycy5qcwkocmV2aXNpb24g
MjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvYXJpdGgtbW9kdWxvLW5vZGUtYmVoYXZpb3JzLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNCArMTAzLDQgQEAgZm9yICh2YXIgaSA9IDE7IGkgPCAx
ZTQ7ICsraSkgewogICAgIHZhciByZXN1bHQgPSBtb2R1bG9XaXRoTmVnYXRpdmVaZXJvRGl2aXNv
cigtaSwgMCwgMik7CiAgICAgaWYgKHJlc3VsdCA9PT0gcmVzdWx0KQogICAgICAgICB0aHJvdyAi
bW9kdWxvV2l0aE5lZ2F0aXZlWmVyb0Rpdmlzb3IoLWksIDAsIDIpIGZhaWxlZCwgcmV0dXJuZWQ6
ICIgKyByZXN1bHQ7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogSlNU
ZXN0cy9zdHJlc3MvYmlnLWludC1uZWdhdGUtaml0LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
c3RyZXNzL2JpZy1pbnQtbmVnYXRlLWppdC5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgSlNUZXN0
cy9zdHJlc3MvYmlnLWludC1uZWdhdGUtaml0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw4ICsx
Niw5IEBAIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKICAgICBhc3NlcnQobmVn
YXRlQmlnSW50KC0weDFmZmZmZmZmZmZmZmZmMDFuKSwgMHgxZmZmZmZmZmZmZmZmZjAxbik7CiB9
CiAKLWlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG5lZ2F0ZUJpZ0ludCkgPiAxKQotICAgIHRocm93
ICJGYWlsZWQgbmVnYXRlQmlnSW50KCkuIFdlIHNob3VsZCBoYXZlIGNvbXBpbGVkIGEgc2luZ2xl
IG5lZ2F0ZSBmb3IgdGhlIEJpZ0ludCB0eXBlLiI7CisvLyBPT1BTOgorLy9pZiAobnVtYmVyT2ZE
RkdDb21waWxlcyhuZWdhdGVCaWdJbnQpID4gMSkKKy8vICAgIHRocm93ICJGYWlsZWQgbmVnYXRl
QmlnSW50KCkuIFdlIHNob3VsZCBoYXZlIGNvbXBpbGVkIGEgc2luZ2xlIG5lZ2F0ZSBmb3IgdGhl
IEJpZ0ludCB0eXBlLiI7CiAKIGZ1bmN0aW9uIG5lZ2F0ZUJpZ0ludFNwZWNpYWxpemVkVG9JbnQo
bikgewogICAgIHJldHVybiAtbjsKQEAgLTQzLDYgKzQ0LDcgQEAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwMDA7IGkrKykgewogICAgICAgICBhc3NlcnQobWl4ZWRTcGVjdWxhdGlvbk5lZ2F0ZUJp
Z0ludCgtMHgxZmZmZmZmZmZmZmZmZjAxbiksIDB4MWZmZmZmZmZmZmZmZmYwMW4pOwogfQogCi1p
ZiAobnVtYmVyT2ZERkdDb21waWxlcyhtaXhlZFNwZWN1bGF0aW9uTmVnYXRlQmlnSW50KSA+IDEp
Ci0gICAgdGhyb3cgIkZhaWxlZCBtaXhlZFNwZWN1bGF0aW9uTmVnYXRlQmlnSW50KCkuIFdlIHNo
b3VsZCBoYXZlIGNvbXBpbGVkIGEgc2luZ2xlIG5lZ2F0ZSBmb3IgdGhlIEJpZ0ludCB0eXBlLiI7
CisvLyBPT1BTCisvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG1peGVkU3BlY3VsYXRpb25OZWdh
dGVCaWdJbnQpID4gMSkKKy8vICAgIHRocm93ICJGYWlsZWQgbWl4ZWRTcGVjdWxhdGlvbk5lZ2F0
ZUJpZ0ludCgpLiBXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBuZWdhdGUgZm9yIHRo
ZSBCaWdJbnQgdHlwZS4iOwogCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9iaXQtb3Atd2l0aC1vYmpl
Y3QtcmV0dXJuaW5nLWludDMyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2JpdC1v
cC13aXRoLW9iamVjdC1yZXR1cm5pbmctaW50MzIuanMJKHJldmlzaW9uIDI2NzQzNSkKKysrIEpT
VGVzdHMvc3RyZXNzL2JpdC1vcC13aXRoLW9iamVjdC1yZXR1cm5pbmctaW50MzIuanMJKHdvcmtp
bmcgY29weSkKQEAgLTE0LDcgKzE0LDggQEAgdmFyIG8gPSB7IHZhbHVlT2Y6ICgpID0+IDBiMTEw
MSB9OwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQogICAgIGFzc2VydChiaXRBbmQo
MGIxMSwgbyksIDBiMSk7CiAKLWFzc2VydChudW1iZXJPZkRGR0NvbXBpbGVzKGJpdEFuZCkgPD0g
MSwgdHJ1ZSk7CisvL09PUFMKKy8vYXNzZXJ0KG51bWJlck9mREZHQ29tcGlsZXMoYml0QW5kKSA8
PSAxLCB0cnVlKTsKIAogZnVuY3Rpb24gYml0T3IoYSwgYikgewogICAgIHJldHVybiBhIHwgYjsK
QEAgLTI0LDcgKzI1LDggQEAgbm9JbmxpbmUoYml0T3IpOwogZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgaSsrKQogICAgIGFzc2VydChiaXRPcigwYjExLCBvKSwgMGIxMTExKTsKIAotYXNzZXJ0
KG51bWJlck9mREZHQ29tcGlsZXMoYml0T3IpIDw9IDEsIHRydWUpOworLy9PT1BTCisvL2Fzc2Vy
dChudW1iZXJPZkRGR0NvbXBpbGVzKGJpdE9yKSA8PSAxLCB0cnVlKTsKIAogZnVuY3Rpb24gYml0
WG9yKGEsIGIpIHsKICAgICByZXR1cm4gYSBeIGI7CkBAIC0zNCw3ICszNiw4IEBAIG5vSW5saW5l
KGJpdFhvcik7CiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspCiAgICAgYXNzZXJ0KGJp
dFhvcigwYjAwMTEsIG8pLCAwYjExMTApOwogCi1hc3NlcnQobnVtYmVyT2ZERkdDb21waWxlcyhi
aXRYb3IpIDw9IDEsIHRydWUpOworLy9PT1BTCisvL2Fzc2VydChudW1iZXJPZkRGR0NvbXBpbGVz
KGJpdFhvcikgPD0gMSwgdHJ1ZSk7CiAKIGZ1bmN0aW9uIGJpdE5vdChhKSB7CiAgICAgcmV0dXJu
IH5hOwpAQCAtNDQsNyArNDcsOCBAQCBub0lubGluZShiaXROb3QpOwogZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgaSsrKQogICAgIGFzc2VydChiaXROb3QobyksIC0xNCk7CiAKLWFzc2VydChu
dW1iZXJPZkRGR0NvbXBpbGVzKGJpdE5vdCkgPD0gMSwgdHJ1ZSk7CisvL09PUFMKKy8vYXNzZXJ0
KG51bWJlck9mREZHQ29tcGlsZXMoYml0Tm90KSA8PSAxLCB0cnVlKTsKIAogZnVuY3Rpb24gYml0
TFNoaWZ0KGEsIGIpIHsKICAgICByZXR1cm4gYSA8PCBiOwpAQCAtNTQsNSArNTgsNiBAQCBub0lu
bGluZShiaXRMU2hpZnQpOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQogICAgIGFz
c2VydChiaXRMU2hpZnQobywgMyksIDBiMTEwMTAwMCk7CiAKLWFzc2VydChudW1iZXJPZkRGR0Nv
bXBpbGVzKGJpdExTaGlmdCkgPD0gMSwgdHJ1ZSk7CisvL09PUFMKKy8vYXNzZXJ0KG51bWJlck9m
REZHQ29tcGlsZXMoYml0TFNoaWZ0KSA8PSAxLCB0cnVlKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5o
IgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFz
ZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24s
IGNvbnN0IGNoYXIqIG9wKQpAQCAtMjY5LDcgKzI3MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNv
ZGVEdW1wZXI8QmxvY2s+OjpkdW0KIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgs
IFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQg
Q29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFw
aCwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRp
Y3Rpb25zQXRIZWFkLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0
dXNNYXApCiB7CiAgICAgZHVtcEhlYWRlcihibG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBA
IC0yODMsNiArMjg1LDIzIEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpk
dW0KIAogICAgICAgICBvdXQucHJpbnQoImJiIyIsIGJsb2NrLmluZGV4KCksICJcbiIpOwogCisg
ICAgICAgIGlmIChwcmVkaWN0aW9uc0F0SGVhZCkgeworICAgICAgICAgICAgb3V0LnByaW50KCJw
cmVkaWN0aW9ucyBhdCBoZWFkOiBbIik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0
aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAg
IENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rp
b25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChj
b21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rp
b25zLmxvY2FsKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxu
Iik7CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2su
dG90YWxMZW5ndGgoKTsgKSB7CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAg
IGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIu
aAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0
ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVi
bGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVt
cEJsb2NrKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBk
dW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgm
LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYg
PSBJQ1N0YXR1c01hcCgpKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51
bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVz
TWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAg
ICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+Ci0gICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRl
ciA9IFdURjo6ZGF0YUZpbGUoKSkKKyAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0
b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFBy
aW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQogICAgIHsKICAgICAgICAgQ29k
ZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrVHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ss
IGluc3RydWN0aW9ucywgKnRoaXMsIHNwZWN1bGF0aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwog
ICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0
aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8
Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBz
dGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBH
cmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0
dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYg
c3RhdHVzTWFwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNiArNTExLDcgQEAgcHVibGljOgog
ICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFBy
b2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBG
dW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVu
Y3RvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
NywxNSBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAg
ICAgICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwog
ICAgIH0gICAKK30KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2Nr
Ojpmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCit7CisgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQo
KSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRj
aFByb2ZpbGVzKQorICAgICAgICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgi
CiAKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsg
T3BlcmFuZHNMaWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBib29sIHRyYWNrQ2FsbGVlID0gZmFsc2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6
CiAgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxU
LCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
Pj47CkBAIC0xNDMsMjEgKzE0NCwyMyBAQCBwdWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVm
YXVsdDsKIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVf
dCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3Qg
bnVtQ29uc3RhbnRzID0gMCkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMp
CiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3Rh
bnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1l
bnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1
bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxl
ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3Rv
clRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZp
bGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1l
bnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZh
bHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBu
dW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBp
bml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAg
ICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhu
dW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyAr
IG51bUxvY2FscyArIG51bVRtcHMpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50
cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsK
ICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2
NSw2ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtl
VGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQo
KSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwpAQCAtMTcyLDMzICsxNzYsNTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6
ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAt
ICEhdHJhY2tDYWxsZWU7IH0KIAorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBj
YWxsZWVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgp
IC0gMTsKKyAgICB9CiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4g
aWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJl
dHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJl
ck9mQ29uc3RhbnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBp
ZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMo
KSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbElu
ZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVy
T2ZMb2NhbHMoKSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4Owog
ICAgIH0KKyAgICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1
cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQog
CiAgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgo
aWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChz
aXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAg
Q29uc3RSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKworICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJl
ZlR5cGUgY2FsbGVlKCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUg
PGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFj
a0NhbGxlZT4+CisgICAgQ29uc3RSZWZUeXBlIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLmxhc3QoKTsgfQogICAgIAogICAgIFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1
cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisK
KyAgICBSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0
YW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAg
IHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkg
Y29uc3QKQEAgLTI0OCw3ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51
bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMo
KSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAg
c2l6ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBv
bGROdW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6
ZSk7CkBAIC0yNjgsNyArMjkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsK
KyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZM
b2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVl
ICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsK
QEAgLTMwNSw4ICszMjcsMTUgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAg
ICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJn
dW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgo
KSk7CiAgICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9
CiAgICAgCkBAIC0zMTksOCArMzQ4LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAg
ICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0YW50KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICBy
ZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3Rh
bnRJbmRleCgpKSA8IG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAg
fQogICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwx
NSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50
cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVk
aW5nVGhpcyhpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJl
dHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJn
dW1lbnRzKCkpKTsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAt
IG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7
CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2Fscygp
ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAK
ICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKQEAgLTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAg
IC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0
aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisg
ICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMs
IHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRz
IGFyZSBjb25zdGFudHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFs
dWVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1f
bnVtTG9jYWxzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDggKzM4LDggQEAgaW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYg
bwogICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJv
b2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAg
ICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4
ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3
LDEyIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwg
IjoiLCBpbkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBj
b25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUi
LCAiOiIsIGluQ29udGV4dChjYWxsZWUoKSwgY29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwg
dHJhY2tDYWxsZWU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQ
cmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJl
ck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9p
ZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0
bXBJbmRleCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICsz
NjQsMTEgQEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJl
dHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9v
bCBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwog
aW5saW5lIGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQog
ewogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lv
biAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxl
QmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGlj
dGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRo
cmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0
ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZC
dWNrZXRzOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0
dWFsUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsNyBAQCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
bnQsIGludCk7CisgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JD
b25zdGFudChpbnQpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxS
ZWdpc3RlciA9IDB4M2ZmZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcg
KzcwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1f
dmlydHVhbFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBp
c0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxS
ZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFs
UmVnaXN0ZXIpICYmICFpc0NvbnN0YW50KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4g
b3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJl
dHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGlu
dCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKTsgfQogICAgIHN0YXRpYyBpbnQgYXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7
IHJldHVybiBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAg
ICBzdGF0aWMgaW50IGNvbnN0YW50VG9PcGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVy
biBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGlu
dCBtX3ZpcnR1YWxSZWdpc3RlcjsKIH07CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwog
fQogCitpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGlu
dCBjb25zdGFudEluZGV4KQoreworICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyOjpjb25zdGFudFRvT3BlcmFuZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxv
Y2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChu
dW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1
bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVl
c0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6
ZnVsbFRvcCgpKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAg
ICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8g
Q2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsK
LSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxh
YmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTUgQEAKICNpbmNs
dWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2su
aCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgpAQCAtNjAsNiArNjMsODMzIEBAIFNl
Y29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGlt
ZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJ
bnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBz
ZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7
CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAg
ICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBi
eXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgm
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBX
ZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBl
cyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKwor
ICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1
bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChv
cGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7
CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0
bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7
CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0
b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0
LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlw
ZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsK
KyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21v
djoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3Io
aW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2Nh
bGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50
cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVm
dCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxl
ID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYg
KHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAg
ICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3Vi
bGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50
MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmln
SW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09y
U3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAg
IGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0g
WyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxl
ZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0
aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVE
b3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVj
ZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAg
ICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVj
RG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNl
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5k
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9u
LT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9t
b2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsK
KyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOwor
CisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHBy
b2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
SW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBl
eGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwg
U3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hp
ZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2Fz
ZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQ
cm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5
cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAg
ICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBT
cGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVy
ZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOwor
ICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5
dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAg
ICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50IHwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1f
c3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUp
OworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9wb3c6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7Cisg
ICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDog
eworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAg
ICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBhdXRv
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBpZiAoIShsZWZ0
ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChp
c0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJv
b2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7
CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9s
c2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlm
dD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZl
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2
ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisKKyAg
ICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHR5cGUg
JiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJp
bWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRl
Y29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3lt
Ym9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRjaDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CisgICAgICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1ZmZlcikgewor
ICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcgd2hlcmUgd2Ug
ZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQg
c28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAgICBicmVhazsgLy8gVGhp
cyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3
aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBidWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZW50ZXI6Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9j
b2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3
ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmpl
Y3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3Qp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVy
YXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1l
bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVu
dmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNP
d25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVt
ZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFt
ZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGlu
Z0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50
cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4o
KSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21p
c2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwg
U3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9h
c3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVx
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
cz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9i
ZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9v
cl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVk
T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Ym9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmls
ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlX
aXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0
aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0
YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAg
ICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90
aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2Zp
ZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoK
KyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19j
aGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6Cisg
ICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNh
c2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBv
cF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9w
X3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAg
Y2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nv
cl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAg
IGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVs
bDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVs
bDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6Cisg
ICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5z
dHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBj
YXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pu
bGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAg
IGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9q
YmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06
CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToK
KyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90
eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAg
ICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lk
OgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50Ogor
ICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lk
ZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBs
bGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9n
dWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9w
b2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1
Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFt
cG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90
cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAg
IGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIGhhbmRs
ZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92
YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFy
Z3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
d2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lk
IEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjpt
YWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUo
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUo
KTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBt
X2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmls
ZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQ
cm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIm
IGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlC
bG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDAp
OworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJn
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKyth
cmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVl
UHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0u
YXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRb
MF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2FsbGVlKCkgPSBTcGVjRnVuY3Rp
b247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBs
ZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzog
Q29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyBy
ZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNv
ZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAg
ICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFj
aGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAg
Zm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAg
IG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgp
XTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNF
eGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
bG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBz
dGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJs
b2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJh
bmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JP
cGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4OTcsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCitib29sIEpJVDo6dXNlTE9MKCkK
K3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30K
KwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQpAQCAtNzYsNiArOTEy
LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV91c2VMT0wgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTM3LDExICs5NzQsMTcgQEAgdm9p
ZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNv
dW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERF
RklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0
eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUlu
ZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VM
T0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisg
ICAgICAgICAgICBpZiAodXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihk
c3QpOyBcCisgICAgICAgICAgICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RF
X0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArOTk5LDMyIEBAIHZvaWQg
SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FT
RV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1l
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUp
OyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAg
ICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nh
c2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAg
aWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAg
ICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5j
dGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklU
SW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2Rl
QmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDIwICsxMDgwLDg2IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdT
bG93Q2FzZSA9IDA7Ci0gICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDAp
OyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAg
ICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwot
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFy
dEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBwcm92
ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJs
ZS4KLSAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3Mg
ZXZlciBoaXQuCi0gICAgICAgICAgICBicmVha3BvaW50KCk7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICAvLyBPT1BTCisK
KyAgICAgICAgbV9zdGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBt
X3ByZWRlY2Vzc29ycy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRv
JiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJsb2Nr
KCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGZvciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkg
eworICAgICAgICAgICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmNv
bnRhaW5zKGJsb2NrLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICBtX3ByZWRlY2Vzc29y
c1tzdWNjZXNzb3JJbmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSwgbGFiZWwoKSk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAg
ICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICBmb3IgKG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8
IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
ICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49ICht
X2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5n
dGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIlJlZyBhbGxvYyBhdCBlbmQgb2YgYmIjIiwgbV9jdXJyZW50QmxvY2stPmluZGV4KCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0gPSBXVEZNb3ZlKG1f
Y3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9n
cmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+
aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJlZGVjZXNzb3JzID0g
bV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgICAg
ICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNlc3NvcnNTZXQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVlOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29y
cy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUubWVyZ2UoKm1fc3RhdGVB
dEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUo
KTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYg
c3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAgICAgICAgICAgLy8gV2UndmUg
cHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFj
aGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBp
dCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsK
KyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0
aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBBU1NFUlQoY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpOworCisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAogI2lm
IEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPiAw
KSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCkBAIC0y
NzgsNDYgKzExOTMsNTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0
YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7
CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xu
KCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERF
RklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVh
dGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3Rv
cikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19P
UCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVu
Y3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRo
X3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVf
U0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJv
cikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19P
UChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xP
V19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJl
Y3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3Vt
ZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19P
UChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2Vu
ZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9X
X09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3Qs
IFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9T
TE9XX09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwg
U3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVx
PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFi
bGUsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNf
b2JqZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKS5tX2Rz
dCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlv
biwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTdHJjYXQ+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9T
TE9XX09QKHB1c2hfd2l0aF9zY29wZSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKS5tX2RzdCwgU3BlY09i
amVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfYnlfdmFsX3dpdGhfdGhpcywg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkubV9kc3QsIFNwZWNI
ZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRfd2l0aF90aGlzLCBWaXJ0
dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92
YWxfd2l0aF90aGlzLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklO
RV9TTE9XX09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbElu
RXZhbD4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKGRlZmlu
ZV9kYXRhX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERF
RklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCks
IFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUCh1bnJlYWNoYWJsZSwgVmlydHVhbFJl
Z2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19zdGF0aWNf
ZXJyb3IsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AobmV3X2FycmF5X3dpdGhfc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJy
YXlXaXRoU3ByZWFkPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09Q
KG5ld19hcnJheV9idWZmZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZl
cj4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCkubV9kc3QsIFNwZWNJbnQzMk9ubHkp
CisgICAgICAgIERFRklORV9TTE9XX09QKGhhc19nZW5lcmljX3Byb3BlcnR5LCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLm1fZHN0LCBTcGVjQm9vbGVhbikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCkubV9kc3QsIFNwZWNDZWxs
KQorICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY0RpcmVjdEFyZ3VtZW50
cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNT
Y29wZWRBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJn
dW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigp
Lm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9h
cmd1bWVudHNfYnV0dGVyZmx5LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1l
bnRzQnV0dGVyZmx5PigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfcmVzdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCku
bV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2Us
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLm1fZHN0LCBTcGVjUHJv
bWlzZU9iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X3Byb21pc2UsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLm1fZHN0LCBTcGVjUHJvbWlzZU9iamVjdCkK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhl
cikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChwb3csIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQb3c+KCkubV9k
c3QsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpCiAKICAgICAgICAgREVGSU5FX09Q
KG9wX2FkZCkKICAgICAgICAgREVGSU5FX09QKG9wX2JpdG5vdCkKQEAgLTM5OCw3ICsxMzIwLDEx
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09Q
KG9wX3N1cGVyX3NhbXBsZXJfYmVnaW4pCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1w
bGVyX2VuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2xzaGlmdCkKKyNpZiBDUFUoWDg2XzY0KQog
ICAgICAgICBERUZJTkVfT1Aob3BfbW9kKQorI2Vsc2UKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bW9kLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50KQorI2VuZGlmCiAgICAgICAgIERFRklORV9PUChvcF9tb3YpCiAg
ICAgICAgIERFRklORV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9PUChvcF9uZWdhdGUpCkBA
IC00NzcsNiArMTQwMywzOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgIGlmICghbV9jaGVja2VkVXNlTE9MKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgeworICAgICAgICAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF90aHJvdzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2ptcDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAgICAgICAg
IGNhc2Ugb3BfZW5kOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1
dF9ieV92YWxfZGlyZWN0OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHk6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dp
dGhfcHJvZmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWw6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNr
IExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAg
ICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNp
emUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE1LDEyICsxNDczLDE0IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3Vu
dGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7
CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAg
ICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2Vz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93
Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRl
eDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRl
eCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5s
aW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29k
ZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsK
ICAgICAgICAgCkBAIC01NzksNyArMTUzOSw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9t
b2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEp
CkBAIC01OTcsNiArMTU1Niw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzMs
MTUgKzE1OTUsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBm
aXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5l
bmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3Vn
aCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9m
ZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwor
ICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShp
dGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8u
b2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4i
KTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQo
KSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBz
bG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRk
cmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRo
aXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNs
b3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2U7CiAgICAgfQpAQCAtNzc0LDYgKzE3MzksMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0
TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0
aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxh
YmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAK
KyAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVj
b2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7
CisgICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKQorICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUg
Y2hlY2twb2ludCBleGl0cy4KKworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudElu
c3RydWN0aW9uID0gKm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KS5wdHIoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRl
c3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8T1NSRXhpdFB0clRhZz4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICAgICAgLy9pZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAg
ICAgIC8vICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4o
Y2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAg
ICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1l
dGFkYXRhVGFibGVHUFIpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVy
czo6cGJHUFIpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVn
VDIsIE9TUkV4aXRQdHJUYWcpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlz
KTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMjA0NSw3MDggQEAgU2Vjb25k
cyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29t
cGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0K
K3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBPT1BT
OiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0
SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0SnVt
cHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhpdEp1
bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJs
eSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRo
aXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsK
KyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAg
YXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNh
dmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisg
ICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsK
K30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzog
Z2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29k
ZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBU
aGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJl
c3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5j
b25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJl
dHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMo
KQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9j
YXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRo
ZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0
aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNz
ZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgLy8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcv
IHdyaXRlQmFycmllci4gQnV0IGdlbmVyYWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1h
eWJlIHdlIGNhbiBmaWd1cmUgc29tZXRoaW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2Fz
ZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNv
ZGVJbmRleCkKKyAgICAvLyAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQ
UihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGlu
dCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJz
KCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgewor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShy
ZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xv
YmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQ
UigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxp
Y2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNB
bGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcu
ZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BT
OiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9m
IHRoZSBtYXAgYWdyZWUuCisKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gcmVnVmFsdWUub3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAg
YWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5k
KS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1
c3QgY2xlYXIgdGhlIGlzQWxsb2NhdGVkL2xvY2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdo
dAorICAgICAgICAvLyBoYXZlIGNvZGUgdGhhdCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3Bl
cmFuZCgpCisgICAgICAgIC8vIC0gc3BpbGxGb3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3Bl
cmFuZCgpCisgICAgICAgIC8vCisgICAgICAgIC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29t
ZXRoaW5nIGxpa2UgdGhlIFZhbHVlT3BlcmFuZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAg
ICAgLy8gZGVhbGxvY2F0aW5nIHRoZSByZWdpc3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0
IGludG8gYSB0ZW1wLgorICAgICAgICAvLyBPdGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgp
IHJ1bnMgYW5kIGNhbGxzIHVubG9jaygpLCB3ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBp
bmNvbnNpc3RlbnQgc3RhdGUuCisgICAgICAgIHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IGZhbHNlOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3Bp
bGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChh
dXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBp
ZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlcklt
cGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMo
KSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNs
b3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFz
dGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywg
cmVnVmFsdWUub3BlcmFuZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2Vk
RlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3Jl
Q2FsbCgpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBT
aWxlbnRTcGlsbFJlY29yZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgICAgIHJlc3VsdC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdW
YWx1ZS5vcGVyYW5kKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0
LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRl
ZChyZWcpOworCisgICAgcmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQu
c3BpbGxlZFJlZ2lzdGVycywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6
OnNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sK
KyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tG
b3JDYWxsKCp0aGlzLCByZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tT
aXplRm9yU3BpbGwsIDApOworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCksIHJlY29yZC5z
YXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyB0b0lnbm9y
ZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNh
dmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHRvSWdu
b3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lz
dGVyKCk7CisgICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRj
aCkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNo
KTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2
ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBs
YW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpz
ZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBP
T1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9B
U1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1Zh
bHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRk
cmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdw
cikub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFs
dWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBH
UFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdz
IHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9y
KG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7IC8vIE9PUFM6IFZhbGlkYXRlIHRo
YXQgZm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykgdGhhdCBkZWYsIHdpbGxEZWYgd2FzIGNh
bGxlZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZnByLCBv
cGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7
Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQp
OworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICB3aWxsRGVmKG9w
ZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6bG9j
ayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1
ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVn
VmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3Vu
dCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291
bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICByZWdWYWx1ZSA9IHsg
fTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAg
ICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQorewor
fQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZh
bGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQu
bG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQ
UlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOwor
ICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9w
ZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0
KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5k
OjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1
cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcg
cmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1f
Z3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3By
LCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYg
KCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIp
KTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAg
ICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYg
aml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIo
KTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1f
Z3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3Vs
YXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVy
cykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQor
eworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1f
Z3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAg
aWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAg
IG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVU
YWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0Nl
bGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFs
dWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQo
KQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIG1faml0LmFzc2ln
blJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFu
ZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQorewor
ICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6
OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAg
ICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAg
aWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAg
ICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOwor
ICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0
LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBn
cHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9m
cHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9q
aXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJs
ZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOwor
ICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKwor
ICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2Zw
cjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQor
eworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7Cisg
ICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYg
KHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAg
IH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5l
ZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBh
ZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpz
cGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2Vs
bCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkp
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2Vs
bCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
QXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVl
QXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlm
ICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIo
SlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09i
amVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVj
dWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7Cisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQg
SklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
KSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBi
b29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmln
SW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3Bl
cmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwg
dmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShC
SUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJy
YW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5r
KHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAg
fQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisK
K3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFu
dHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkK
KyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxh
dGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9y
Q29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9
IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5k
czxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXpl
KCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9Owor
fQorCit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoIigiLCBvcGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisK
K3ZvaWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxs
b2Mgc3RhdGUgPSBbIik7CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAg
ICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFM
b2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVn
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkp
IHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAg
IGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFs
dWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2lu
TWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVy
LmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2Nh
dGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5
dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9j
azsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwyNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VF
bnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVj
b2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAg
ICAgICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxS
ZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisgICAgc3RydWN0IFNpbGVudFNwaWxsUmVjb3JkIHsK
KyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgICAgIFJlZ2lzdGVyU2V0IHNwaWxsZWRS
ZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZUZvclNwaWxsOworICAgIH07CisK
KyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkK
ICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0LCAxPiBqdW1wczsg
Ly8gVXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZvciB0aGluZ3Mgd2l0aCBjaGVja3BvaW50
cywgd2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgSnVtcExpc3RzCisgICAgICAgIFNh
dmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVt
IGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAv
LyBTb21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVu
aWVuY2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMsNiArMTk4
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxs
ZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZh
dGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7
CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwNyw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5n
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRw
dHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0g
ICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNl
bnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAg
ICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBh
YmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgogICAgICAg
ICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBA
IC0yNjMsNiArMjc0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNh
bGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisK
KyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9
CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxs
IG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAg
Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMjUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAg
ICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgp
OworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25z
dCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsg
fSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAg
IHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BD
YWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM1
NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25z
dCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNv
bnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2Fs
bFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0
cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAg
ICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2
b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVP
cEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsK
ICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwog
ICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdy
aXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZp
bHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3Nyw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGlu
IHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRj
aC4KLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYpOwot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBH
UFJSZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0
YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUsOCArNTAy
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2ln
bmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpA
QCAtNDg0LDExICs1MTEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRp
dGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJl
bGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJs
ZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZv
aWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisK
ICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0OCw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0
cnVjdGlvbiopOwpAQCAtNTc2LDcgKzYxMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIENQ
VShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjQzLDc3ICs2ODEsODAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
Ym9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0
ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWcpOworI2Vsc2UKICAgICAgICAg
dm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAg
ICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVy
YW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzI4LDggKzc2OSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7
Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVy
YW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzggKzc4MSwxOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5j
dGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24p
OworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5j
dGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93
Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNl
JiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlz
U2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAg
ICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlu
a0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nh
c2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBp
dGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlT
bG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAg
ICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Ns
b3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJB
TShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7
CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwg
bV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQ0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAor
ICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMg
Ym9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNv
bXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NTcsMjUyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5
QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xh
c3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwg
R1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVn
IG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQ
UlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAg
ICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9m
cHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJP
cGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUg
aW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0
IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxP
cGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERv
dWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVy
YW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnBy
b3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZp
bHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikK
KyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7Cisg
ICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAg
IEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5k
KG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBh
bGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9w
ZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBS
ZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVn
VmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJl
Z1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICghbV91c2VMT0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQp
OworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAg
ICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBm
cHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0g
SW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJh
bmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxp
ZEZQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZw
cjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNw
ZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVT
dHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFu
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZv
ciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBo
aW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAg
ICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpT
VmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0
aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAg
ICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBT
YXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxsUmVjb3JkIHNp
bGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwo
Y29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQ
YXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNh
dmVQbGFuKFJlZyB0b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJT
ZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIq
IG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBA
IC05NTMsNyArMTIyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRh
YmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4
OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNl
Z21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0
Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTI1OCw4MyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBi
b29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAg
ICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFy
aWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAg
ICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxs
b2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAh
PSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7Cisg
ICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAg
IGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
IHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAg
Ym9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29u
c3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChv
cGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50
ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAh
PSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0Owor
ICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9w
ZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lz
dGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29u
c3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7Cisg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5v
cGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNp
emUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0s
IG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3Rl
cnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOwor
CisgICAgICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQg
ZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVH
cmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9j
ayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0
cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRy
eT4gbV9leGl0TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9z
dGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3Nv
cnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9j
aGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29k
ZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91Ymxl
TGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2ps
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2Us
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2ln
bmVkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFVuc2lnbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNz
VGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCByZXN1bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
KQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1t
MzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgaW5wdXRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
TGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEs
IG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAv
LyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUg
ZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRp
YXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAg
ICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigp
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ay
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkp
LCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0
aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpA
QCAtMjI5LDE3ICsyODEsNDMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BS
UmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBb
Jl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmlt
bSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsK
ICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAg
ICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1t
KSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24p
LCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAt
MjU1LDQyICszMzMsODggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElu
cwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJo
c0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7
CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0gewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhp
cywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMy
X3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUz
Mihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9
IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGlu
dDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBh
cmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1t
KSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlv
biwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRS
SFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CiAgICAgfQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5z
dHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0
aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVj
dGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVj
dGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgYXV0byBmYWxs
dGhyb3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFs
dWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGZhbGx0
aHJvdWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBXZSBn
ZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBw
YXRoOgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1l
ZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQg
bnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQg
bnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRD
b25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMjk5LDggKzQyMyw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjUsOCArNDQ3LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAg
ICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRk
NjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MCwxMiArNDcwLDExIEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwor
ICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAg
ZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVn
aXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsK
ICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY4LDkgKzQ4Nyw5
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFp
bDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMu
bGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC0zODAsMTEgKzQ5
OSw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3Jj
RHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0g
dGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQ
UiwgZnByKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsK
KyAgICAgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOwor
ICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAg
ICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBS
UmVnIGZwciA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBv
bmUgPSAxLjA7CisgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBm
cHIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5w
dXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5w
dXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRy
dXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BS
LCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNE
c3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJ
bnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQz
MihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTIsMTEgKzU0Nyw1MyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
Y0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAg
ICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGxvYWREb3Vi
bGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICAgICAgc3ViRG91
YmxlKHJlc3VsdEZQUiwgdGVtcEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXRE
b3VibGUoc3JjRHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3Jj
RHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZs
b3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQz
MihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAg
ICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVt
cEZQUiwgaW5wdXRGUFIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQz
Mi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBl
bnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hT
dWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAg
Ym94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShz
cmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Cisg
ICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiAvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KQEAgLTQwNiw1NCArNjAzLDg5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhj
b25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwog
CiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElESVYgaW5z
dHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7CisgICAg
YXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBhdXRvIGVkeCA9IFg4NlJlZ2lzdGVy
czo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAgQVNTRVJUKHJl
Z1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7CiAgICAgQVNTRVJUKHJlZ1Q0
ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1Q0LCBvcDIs
IGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlYXhUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWN4
VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNHUFI7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAgICBjbG9iYmVyKGVkeCk7Cisg
ICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5lbXBsYWNlKCp0aGlzLCBlYXgp
OworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7CisgICAgICAgIGVjeFRlbXAu
ZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1wLT5ncHIoKTsKKyAgICAgICAg
ZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigpOworCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVjeFRlbXAt
PmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBsaHMpOwor
ICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7CisgICAgICAgIGxoc0dQUiA9IGxo
c1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisK
KyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBsaHNH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
bGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92ZShs
aHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhs
aHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
bGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgICAg
IG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5vbWlu
YXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0
NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRydXN0
ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5rKHRo
aXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVjeCk7
Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVh
bCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQ
b3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7Ci19Ci0KLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9k
KTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQorICAgIGJveEludDMyKGVkeCwgSlNWYWx1
ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlmIC8v
IENQVShYODZfNjQpCkBAIC00NjMsNyArNjk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRp
b24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJP
cDI7CkBAIC00NzMsNiArNzA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsK
QEAgLTU2MSwxNSArNzk0LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25z
dCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6
ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVn
VDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKQEAgLTcyMywxMyArOTU0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0
aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9j
YXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3Bl
cmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAg
IGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93
PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlv
bkFyaXRoTmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03NDAsMTggKzk2OSw2IEBAIHZvaWQg
SklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0K
ICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQ7CiAKQEAgLTc1OSwzMyArOTc2LDEwNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFy
eU9wRmFzdFBhdGgoY29uc3QgCiAgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0
T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRD
b25zdGFudEludChvcDIpKTsKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkz
MiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAg
ICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25z
dCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAg
IGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAotICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2Vu
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIHNjcmF0Y2hHUFIpOwogCisgICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQs
IHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQ
Uik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5k
aWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKKwor
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCks
IHJlc3VsdCk7CisKICAgICBpZiAocHJvZmlsaW5nUG9saWN5ID09IFByb2ZpbGluZ1BvbGljeTo6
U2hvdWxkRW1pdFByb2ZpbGluZykKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRP
cGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MuZ3ByKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5OworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0Jp
Z0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAgICAgcmVzdWx0SXNJbnQz
MiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0lu
dDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3VsdEdQUik7CisgICAgICAgIGJveEludDMyKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAocmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7IAorICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTgwMiw3ICsxMDkyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0OCwyMCArMTEzOCw2IEBA
IHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIg
PSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQ
UiA9IGZwUmVnVDI7Ci0jZW5kaWYKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwog
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKIApAQCAtODcyLDIxICsxMTQ4LDc3IEBA
IHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKIAogICAgIFJFTEVBU0Vf
QVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
OwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgc2Ny
YXRjaEZQUjIgPSBJbnZhbGlkRlBSUmVnOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBs
ZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hU
ZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlBSOworCisgICAgLy8gT09Q
UzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRl
bXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hU
ZW1wRlBSLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBy
aWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJl
c3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3By
KCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQUi0+ZnByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QwOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcg
c2NyYXRjaEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gZnBSZWdUMjsK
KwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5k
aWYKIAogICAgIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIHNuaXBwZXRTaGlmdFR5cGUpOworICAgICAgICBzY3Jh
dGNoRlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSMiwgc25pcHBldFNoaWZ0VHlwZSk7CiAKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRG
YXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJv
dmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgICAgIHNl
dEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogCi0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jz
aGlmdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTAxLDE4ICsx
MjMzLDU0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJv
ZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+
KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1w
IGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7
CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5m
cHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShi
eXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBtb3ZlKGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigp
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMs
IG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAg
ICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Fk
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdp
c2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3Ry
dWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVB
ZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Ns
b3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVB
ZGRPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJv
ZmlsZWRGdW5jdGlvbj4KQEAgLTkyMywxNSArMTI5MSwzNSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIEFyaXRoTmVnYXRl
IGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCi0g
ICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZs
aW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KLSAgICBKU1ZhbHVlUmVncyBzcmNS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICBK
U1ZhbHVlUmVncyBzcmNSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNyY1RlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBz
Y3JhdGNoVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcmNUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wZXJhbmQpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBzcmNSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzcmNUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyaXRoTmVnYXRlIGJl
bmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisgICAg
ICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZm
bGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCisgICAgICAgIHNyY1JlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKKyAgICB9CiAjZWxzZQogICAgIEpTVmFsdWVSZWdz
IHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdz
KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC05NDAsMTkgKzEzMjgs
MjIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogCiAgICAgbWF0
aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBzY3JhdGNo
R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7Ci0K
ICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9uLCBN
YXRoSUNHZW5lcmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgYm9vbCBnZW5l
cmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChzcmNSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAg
LTk2Miw3ICsxMzUzLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJ
QzwKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJl
c3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNCeXRlY29kZU51bWJlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9u
UHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3MywxMiArMTM2OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAor
ICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZp
cnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJh
bmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkK
KyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAg
cmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwor
CisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVy
YW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVn
IHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworCisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7
CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwpAQCAtOTg3LDI1ICsxMzk4LDQwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRC
aW5hcnlNYXRoSUMKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAot
ICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZp
cnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJh
bmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghR2Vu
ZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAg
ICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQp
KSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAg
ICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAg
ICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNl
dENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworICAgICAgICByZXN1bHRU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNo
R1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRl
bXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKIAotICAgIFJFTEVBU0VfQVNT
RVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwor
ICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdz
KTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CisgICAgfQogCiAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihs
ZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBB
U1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQp
KSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJp
Z2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9
IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTQsMTcgKzE0NDAsMzQgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2Rl
ID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsK
ICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5k
LmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0
UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7Cisg
ICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAg
ICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJp
dGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVs
c2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
ICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM0LDExICsxNDc3LDE4IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIo
KSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24g
cmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2Zp
bGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5j
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYg
bWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0
YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA0Nyw4ICsxNDk3LDggQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9
OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKQEAgLTEwODQsNyArMTUzNCw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzwKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Ns
b3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVw
YXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlv
blN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5l
cmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDk0LDE2ICsxNTQ0
LDYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7Ci0jZW5kaWYKLSAgICAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTE0LDE1ICsxNTU0
LDM2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKIAogICAgIEFT
U0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQp
ICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
KTsKIAotICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
LSAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdo
dE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OworICAgIGlmIChHZW5lcmF0b3I6Omlz
TGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAgICAg
ICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRSZWdzLmdwcigpID09IHJlZ1QyID8gcmVn
VDMgOiByZWdUMiB9OworICAgIH0gZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZh
bGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzIHsgbGVmdFJlZ3MuZ3ByKCkgPT0gcmVnVDAgPyByZWdUMSA6IHJlZ1QwIH07
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworI2VuZGlmCisgICAgCiAjaWYgRU5BQkxFKE1BVEhf
SUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgogCisg
ICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQp
KQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgIGVs
c2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFu
ZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCiAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQpA
QCAtMTE1NSwyMyArMTYxNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0j
ZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1Qy
OwotCi0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwotICAg
IGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRl
Y29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExODcsMjcgKzE2MzEsOTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25z
dERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJF
TEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJS
ZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0
VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVm
dFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0
RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAg
IGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAg
RlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdU
MDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBK
SVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewog
ICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCByZXN1bHRSZWdzKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBM
aXN0KCkuZW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVt
cHR5KCkpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9kaXYpOwog
ICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0KQEAgLTEyMTUsMzQgKzE3MjQsMTA0
IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7Cisg
ICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwgYXJpdGhQcm9maWxlLmRpZE9ic2VydmVOZWdaZXJv
RG91YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIG11bERvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5m
cHIoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJv
LCBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJ
VE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRN
dWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPiht
dWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1p
emUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUp
OworICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7Cisg
ICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAg
IHN1YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsK
KyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIo
KSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55
SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCks
IHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2lu
c3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVt
aXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3Vi
SUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVt
aXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0
ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3Io
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rlcigp
LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0aW9uRm9yKGJ5dGVj
b2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5LDggQEAgYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxv
Y2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJl
dHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAg
ICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7
CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29k
ZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzcsNDQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVP
cENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWls
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWls
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
ICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYsNiArMzg5LDEz
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAgICAgfQog
ICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hv
dWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUg
Y2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAg
ICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhlcmU/CisK
KyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRp
b25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0IChpdGVyYXRvcikg
aXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVy
dHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5leHRDaGVja3Bv
aW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdp
c3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCk7CisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50
U2xvdyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVn
VDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJl
Z1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1Qw
KTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0
LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVu
PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1
Niw2ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgog
ICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09Q
UzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cg
Y2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBp
dHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNo
SWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNiArNDk5LDQzIEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0
R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJS
ZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAg
ICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJl
c3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3Mu
YWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1
ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3Vs
dEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lz
dGVycywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdz
KGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0
aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisgICAg
ICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7
CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25zdCBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlz
dCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQ
UiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAg
ICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVl
LmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICB2YWx1
ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
c2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsKICAgICAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFs
dWUpOwogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKQEAg
LTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BS
ID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xv
d0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0Owog
ICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7
CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQ
UikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcg
aXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9u
IDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0
aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKICNlbHNlCkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0
IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2lj
ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQot
ewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRl
Y29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dD
YXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBp
dGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODksMzYgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1Rv
KGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93
Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29k
ZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2Fz
ZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wp
CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQ
bGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3Vs
dCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAg
IG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3Qo
KS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nh
c2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29u
c3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMo
KSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRl
Y29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFw
cGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBM
aXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtl
IFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1w
dHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBM
aXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2
ZU9mZnNldCkKQEAgLTMwOSwxMSArMzAxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omlz
T3BlcmFuZENvbnN0YW4KICAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxl
LCBHUFJSZWcgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CiAK
LSAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlID0gcmVnVDA7CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7CiAjZW5kaWYKQEAgLTMz
OCwxMSArMzI5LDExIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
Li4uKSB7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhKQoraW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJl
ZykKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2
YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCBy
ZWcpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSkKQEAgLTM5MywxMSArMzg0LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUg
SklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5h
c0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmlu
ZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdp
c3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9j
dXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0
IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmlj
dGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCAr
MTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgog
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0Mgewog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI3IEBAIHZvaWQgSklUOjplbWl0X29w
X21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZv
ck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlm
IChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAt
OTAsMzIgKzExMyw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNp
emUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92
bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
IAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxv
Y2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAg
ICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVn
IHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRU
ZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7
CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1Qx
OworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0
b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFu
dChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0
dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1
bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJv
dmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJp
ZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTI1LDIzICsxNjksNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3Ry
dWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5t
X2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25z
dHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAg
IE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAg
aGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAg
ICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0g
Y29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5j
ZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0
b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAg
ICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5z
dGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNo
UHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBK
dW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNl
R1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Q
cm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAog
ICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0
aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwg
cmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFu
Y2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE1MSw0MCArMjIyLDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwog
Ci0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVz
cGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VW
YWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVu
IHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAg
IAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBj
ZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0
YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAs
IC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHBy
b3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25h
bDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1w
OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAg
eyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVt
cC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgewor
ICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAg
dmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0g
cHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRl
bXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2Uo
KnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigp
OworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAg
ICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9
CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAg
ICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3Jh
dGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Cisg
ICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZh
bCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVj
ayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMg
Y2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
ICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAg
ICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3Jh
dGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQ
UiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBA
IC0xOTksMTEgKzMyMywyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0
cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlw
ZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMjExLDI4ICszNTMsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0Nl
bGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAg
IEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIo
RXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUp
KSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAg
IGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVV
bmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0g
YnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBp
bnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0Nl
bGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEz
ICs0MjcsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51
bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTI1NSwxMiArNDYxLDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xl
YW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVy
bywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVh
bikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Jv
b2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgaW5wdXRHUFIpOworICAgICAgICAgICAgdGVzdDY0KFplcm8sIGlucHV0R1BSLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTI2OCwxMSArNDkyLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0
cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVy
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdU
MCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0
KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgy
LDIxICs1MjIsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMy
TWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJN
YXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAg
ICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlw
ZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBy
ZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU4OCw0NyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUu
bV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgfQogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzYzNyw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmpl
Y3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmpl
Y3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQor
ICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFs
dWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1w
LmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2
YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2
YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmpl
Y3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
IAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAg
ICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTM1NSw3ICs3MDIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9u
KgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5t
X3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BS
KTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MjEsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0g
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+
U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFs
dWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1p
dGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVn
VDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNy
YykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NjQsMjAzIEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9s
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1
ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAg
ICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAg
bW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9u
TmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24s
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBi
eXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlv
bi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlv
bk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rp
b25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZh
bHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAg
bW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0z
MigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
Mih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBo
YW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFy
ZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAg
ICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUg
d2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNs
ZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxz
ZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWlu
c3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxp
cCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUo
ZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJp
dHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGlj
aCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4K
KyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxs
IGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBj
b25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24g
PSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQ
UiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNj
cmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIu
Z3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1
ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQ
Uiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BS
UmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFs
dWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgfQorfQogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHBy
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNv
ZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRp
dGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1
c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJU
ZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gx
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7
CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9
LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZh
bHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQw
LDQ2ICs5NjksMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAg
ICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAg
ICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3Jh
dGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwg
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2Ny
YXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAg
ICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGlu
ayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2Vz
IC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAg
ICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1l
ZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAK
KworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9
CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
Ci0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3Ro
ZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90
Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3Jh
dGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1w
KGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1l
ZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4
LDEwICsxMTAwLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMjgsMjYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisg
ICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5n
IHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNTksMzE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIu
aXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJy
YW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxs
KCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQp
OwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVh
bCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAg
ICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFs
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1
YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVy
LmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5t
X2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
K3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BF
cT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7
CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91
YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXND
b3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxo
c0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQ
UikpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50
MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNv
bXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSBy
aHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCBy
aHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3Vs
ZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxP
cCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1
dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBh
cmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3Jk
ZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJv
dmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAu
ZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRK
dW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNH
UFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhz
R1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMs
IHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB4b3IzMihUcnVzdGVk
SW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRf
b3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUlt
cGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVn
IGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBp
ZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1
dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJl
c3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90
aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQg
KzE0ODIsMTQ2IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1
YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJl
ZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlw
ZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpW
YWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhz
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAg
ICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOwor
ICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNU
ZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKwor
ICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBh
IGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAg
SWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93
UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkK
LSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUg
NCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMy
L2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlz
IGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3cs
IGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVy
IGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8v
IExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwg
cmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2
NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVt
cCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJp
Z0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxk
IGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3
ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQog
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsK
LSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMs
IHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVs
IHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVm
dCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0
aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0
KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJp
Z2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJh
Z21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0
aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkg
cmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAg
IC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRp
bmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJp
dHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8
PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25s
eSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVn
VDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUp
KTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAg
ICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9u
ZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2
NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5n
IG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0
byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFu
KHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBK
dW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEg
ZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5k
IHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElm
SW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0g
ICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUg
Y2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Cisg
ICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJs
ZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVu
IHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sg
PSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmln
aHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFy
ZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5v
dEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjM5LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
U3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpT
dHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFy
ZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlz
RXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOwor
CisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVu
VHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxo
cywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIp
OworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVT
eW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWco
KSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0
dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhz
R1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BS
KSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQ
UikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNH
UFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVn
IGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwg
bGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVn
KCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhz
R1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBs
ZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVm
dCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0g
ICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBp
cyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3Rv
IG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxl
ZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGlu
c3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQg
YnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlm
IGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtl
IGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlz
IG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJp
dCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4K
LSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAg
YWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlm
dDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0g
ICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlm
ICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1
bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8g
SnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5k
IEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNv
dWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMy
LCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdU
MCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAg
YXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAv
KiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6
CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAg
ICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAg
ICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwp
CisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAg
ICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERv
dWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9m
IHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElm
SW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBK
U1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQg
b3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlz
IG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJp
dCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8
NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVn
VDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRz
KSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChy
ZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsK
KyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2
NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwg
PSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1
YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBK
dW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQg
QmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1F
OiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBC
aWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3Ry
aW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5r
KHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1
bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBk
b3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQg
dGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qw
KSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAg
ICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJl
Z1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3Ro
IGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEg
ZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5k
IHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxl
ZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVt
cCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5
ICsxNzgwLDIyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAg
ICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9u
LCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBH
UFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8g
ZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3Rv
cmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJl
Z1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRo
U2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAg
IAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1i
ZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVn
KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0g
ZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAo
KTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBp
ZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmln
SW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJ
bnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAg
ICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJ
R0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRH
UFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5s
aW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBC
aWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Cisg
ICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkp
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1Qw
KSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
T2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0
KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRC
bG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSBy
ZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsy
MDU3LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3Bl
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
LSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBh
IGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3Bl
IH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1Qw
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMDg4LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIxMTMsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNU
SVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFi
bGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjEzNywxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJl
dHRlci4KICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCks
IHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRp
Y19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJl
cXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
K3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51
bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxs
Pjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNv
bXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVz
dWx0R1BSKTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1
bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsK
KyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAg
ICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21w
YXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwog
Ci0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0
cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFy
ZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
Z1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzog
YXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJy
aWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1
c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8g
emFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAg
ICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6
ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytq
KSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsK
KyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJp
YWJsZSkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZh
cmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMjg4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9z
Y29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUg
PSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzEyLDgwIEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3Ry
dWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRl
Y29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3Jj
RHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8v
IE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hv
dWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFu
IGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShz
cmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwp
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAg
ICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7
CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5l
ZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOwor
ICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNE
c3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYg
KG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAo
aXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAg
ICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsK
KworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Cisg
ICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYg
KzIzOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0Nl
bGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdp
c3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSBy
ZWdUNDsKQEAgLTEwNjgsNyArMjQwMywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0Owog
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBj
YWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRl
bXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAg
ICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJl
ZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIo
KTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hl
ZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJU
ZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVT
bG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1
bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVu
Y3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDQ1LDMzIEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNz
KHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRj
aFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRj
aFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0
eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vz
bid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsyNDkwLDExIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9j
a1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdh
bGxvYyBvciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBt
X2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkp
IHsKKyAgICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4g
YWx3YXlzIE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhp
bnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVn
VDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdU
MCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1p
dCgpKSk7CkBAIC0xMTg3LDEzICsyNTE4LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoK
ICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNC
aXRzKCkpOwpAQCAtMTIwNiwxMSArMjUzNSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9v
cF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMp
OwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJl
bW92ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRp
ZgogfQogCkBAIC0xMjMzLDEwICsyNTYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2Ft
cGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNz
KGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEy
NDUsOCArMjU3MSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3Ry
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxz
ZSB7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0x
MjU2LDIzICsyNTkyLDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0
cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywg
Ynl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1
bmN0aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4
ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVu
Y0V4ZWMpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApA
QCAtMTMwMSwyNCArMjY1Niw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNv
bnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BS
UmVnIHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
SW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFj
ZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdw
cigpOworICAgICAgICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlm
ICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29w
ZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNv
ZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNl
IGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24p
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0
OSw5ICsyNzI2LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0
ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9
IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJn
R1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3NDcsMjYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUu
bV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBh
cmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNp
emVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRM
b2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJl
Z1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEz
ODEsMTUgKzI3ODAsNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3Ig
fTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBiYXNlR1BSOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4g
YmFzZUNlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKSB7CisgICAgICAgICAgICBiYXNl
Q2VsbC5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VHUFIgPSBiYXNlQ2Vs
bC0+Z3ByKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgfQogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2
ICsyODM1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNo
YWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg2NCw4IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBz
cGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsy
ODkxLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVt
cCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAK
ICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI5MDgsMTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAs
MzcgKzI5NDEsOTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9w
ZXJhbmQ+IGJhc2VDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogCi0gICAgLy8gQ2hlY2sg
dGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
YmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBv
dXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1v
dmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0Vp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAg
ICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5l
IHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJz
dE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAot
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxp
bmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAg
IG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAg
IGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9m
ZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDM2LDUxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwot
ICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNl
dCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVt
cDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25J
bnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBp
bmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3Ip
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7
CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7
CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91
bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgp
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
LCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxp
bmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1l
c1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRl
eEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE1NzQsMjEgKzMwOTAsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5k
cyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVn
IGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJ
bnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVu
dW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0
b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0
b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5k
ZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1l
cmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywg
aW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qw
LCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQp
LCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAg
bG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1
bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxNDQsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBj
YWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rl
cjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1
OCw2ICszMjA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwog
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5z
aGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BD
YWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9u
QXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUu
Iik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMyMjMsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICsz
MjU2LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVn
VDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdz
Ojp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihy
ZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNzcsNDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1z
VG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDAp
OwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0
aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tp
cCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRH
UFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIs
IEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNU
b1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMy
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xl
bmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1Rv
U2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYK
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAot
ICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vs
c2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMy
Niw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0
T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBl
bHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwot
ICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1
bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91
bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3Mp
OwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFy
Z3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3Mp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJv
dW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0
UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90
eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BS
LCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwg
ZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7
CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3Mu
dGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdU
Mik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2
YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwor
ICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAg
LTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAg
IAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJl
bCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2Vu
IHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYz
Miw4ICs2MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4
ICs2NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBA
IC03NjMsOCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0
NCw4ICsxMDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBA
IC0xMjAxLDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUo
KTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFt
YmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKIApAQCAtNTEsNDkgKzUzLDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0
eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHBy
b3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGlu
Z1R5cGVHUFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEu
bV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJP
ZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlm
ICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGlu
ZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisg
ICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhw
cm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAK
ICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJ
bnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9u
bHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0
cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAg
IH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4o
KTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9n
ZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAg
ICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTAyLDM5ICsxNzIsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0
eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTUyLDYgKzI1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0g
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0lu
dGVnZXJDb25zdGFudCkKQEAgLTMxNCw4ICs0MjAsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAg
YXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kLCBw
cml2YXRlRmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2RlKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzNCw3ICs0NDMsNyBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzQ1MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29k
ZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
QEAgLTM1MCwxMyArNDU5LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAg
ICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAg
IGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CkBAIC0zNzIsNDkgKzQ4MCwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNz
b3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
YWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vz
c29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
clNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0g
Z2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3Bl
cnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5t
X2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBh
Y2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1
dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29y
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQ
UiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nl
c3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTQyNCwxOCArNTg4LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAg
ICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUg
ZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpA
QCAtNDQ0LDI1ICs2NDIsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVs
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ3MiwxOSArNjcyLDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBw
cm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJv
cGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJh
c2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
Y3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00OTMsMjEz
ICs3NDQsMzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
ICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFw
VG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0g
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQ
UiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJl
ZyBpbmRleGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BS
LCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7
CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHRoaXNWUmVnKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1f
Z2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRo
aXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNW
UmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dp
dGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAg
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNb
bV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRj
aCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25l
IHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBs
b2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2Rl
Ci0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0
aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1
ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21h
TW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGly
ZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0LCBwcml2YXRlRmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2Rl
KSk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzA5LDc3ICsx
MTE1LDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
IGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAg
ICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJS
ZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQ
UiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRz
dCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9u
V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03OTEsMTcgKzEy
MTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNp
Z25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSArMTI0MywzNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUo
ZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7
CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisgICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShz
Y29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIs
IEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDAp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAt
ODM4LDkgKzEyODUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAKQEAgLTg1MywyOSArMTMwMCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg4NCwxNSArMTMzMSwyMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2
b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRy
KHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihz
dHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Q
b2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05MDYsMTIgKzEzNTgsNiBA
QCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihy
ZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05MjIsNTEgKzEz
NjgsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAg
ICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4o
Jm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNl
ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAg
ICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJl
Z1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJS
ZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2Fk
MzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3Qs
IG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAg
ICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBv
ZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAg
ICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNl
dEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAg
ICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAg
ICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2Ny
YXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENs
b3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhp
cywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ug
RHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBA
IC05ODAsMTAgKzE0NTksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywg
cmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAg
SnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2LDI3ICsxNDc1LDI3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYsNDAgKzE1MDUsMjIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworCisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1Qw
LCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwg
cmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNz
T2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0g
ICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA3MywyMiArMTUzNCw1MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsK
KyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAg
ICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAg
ICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BS
ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7CisgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zm
c2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdl
IGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0
LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZh
ciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9p
ZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsK
IAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdU
MSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVn
VDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRy
KG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7
CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwg
b2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKQEAgLTEwOTgsMjggKzE1ODgsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlz
SW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdl
IG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVl
LCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBt
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdw
cigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJl
Z1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFk
YXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRk
cmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBj
YXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTEzNCwx
MiArMTY1MywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJs
b2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdp
c3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3Qg
dXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hH
UFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBz
Y3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFy
KSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8g
cHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAg
ICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTE1MywyMyArMTY4MSwzMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFs
dWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29k
ZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBk
b3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29s
dmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAg
ICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
LCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwpAQCAtMTE4NiwxMCArMTcyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlm
IChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3NDAsMTc4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9
IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRz
VmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQ
Uik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1Qw
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRy
ZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3Vt
ZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1
ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNH
UFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2
NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAg
IGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8v
IE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJh
bmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0
IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUg
Y2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3Rh
dGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8g
LSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2ls
ZW50IGZpbGwKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBp
ZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4K
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZv
ck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0g
cmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3du
ZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVn
IG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVy
KSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5k
KG93bmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVn
VDApOworICAgIH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAg
ICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkg
eworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWND
ZWxsKSkKKyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQ
Uik7CisgICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlv
bmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFs
dWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwo
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0o
KSwgb3duZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVy
Q2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgp
KQogICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAg
aWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhp
cyk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRo
YXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBu
b3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2Fs
bG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0Cisg
ICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29k
ZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFu
Y2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAg
ICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFs
dWU7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1
ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgp
KSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEyNzEsMTEgKzE5
MjMsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJv
dmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQo
aW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJu
YWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyODUs
MTAgKzE5NTIsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbgog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEp
OwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmpl
Y3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisg
ICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgc3RvcmVQdHIo
dmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+Ojpv
ZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTEzODUsOCArMjA2
NSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOwor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7Cisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2Ny
YXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVu
dFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNv
cmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0xNDA0LDYgKzIx
MDEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wg
PSBmYWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5w
dHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICAKQEAgLTE0NjksNiArMjE2OCw4IEBAIHRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmEKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgQVNTRVJUKChw
dXRLaW5kID09IERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Qp
IHx8IChwdXRLaW5kID09IE5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3Zh
bCkpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9B
c3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJy
YXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7
IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhD
YWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJ
VDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1
c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2pp
dC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAg
ICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2pp
dC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwg
dHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw2ICszOTYsMTAgQEAgc3RhdGljIHZvaWQgZGlz
YWJsZUFsbEpJVE9wdGlvbnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9w
dGlvbnMoKQogeworICAgIE9wdGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAgICBPcHRpb25zOjpm
b3JjZUxPTCgpID0gMTsKKyAgICBPcHRpb25zOjp1c2VMTEludCgpID0gMTsKKwogI2lmICFkZWZp
bmVkKE5ERUJVRykKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkg
PSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBj
b25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwg
c2VlZEZvckxJQ01GdXp6ZXIsIDQyNDI0MiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3Vi
bGUsIGFsbG93SG9pc3RpbmdMSUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihCb29sLCBleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5n
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1l
T3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415803</attachid>
            <date>2020-12-09 15:33:57 -0800</date>
            <delta_ts>2020-12-09 17:44:43 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>481355</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FyaXRoLWFicy10by1hcml0aC1uZWdhdGUtcmFuZ2Utb3B0
aW1pemF0b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvYXJpdGgtYWJzLXRvLWFy
aXRoLW5lZ2F0ZS1yYW5nZS1vcHRpbWl6YXRvbi5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgSlNU
ZXN0cy9zdHJlc3MvYXJpdGgtYWJzLXRvLWFyaXRoLW5lZ2F0ZS1yYW5nZS1vcHRpbWl6YXRvbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsMTAgQEAgZnVuY3Rpb24gdGVzdENoZWNrZWRC
ZXR3ZWVuSW50TWluQW5kWmVybwogICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tl
ZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCkgb24gLTIxNDc0ODM2NDciOwogICAgICAg
ICB9CiAgICAgfQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRCZXR3
ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSkgPiAxKSB7Ci0gICAgICAgIHRocm93ICJGYWlsZWQg
b3B0aW1pemluZyB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCkuIE5v
bmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKLSAgICB9CisgICAgLy8g
T09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdlZW5J
bnRNaW5BbmRaZXJvRXhjbHVzaXZlKSA+IDEpIHsKKyAgICAvLyAgICB0aHJvdyAiRmFpbGVkIG9w
dGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpLiBOb25l
IG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAgLy99CiB9CiB0ZXN0
Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCk7CiAKQEAgLTU0LDkgKzU1LDEw
IEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2kKICAgICAgICAgICAg
IHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0lu
Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobnVt
YmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFpl
cm9JbmNsdXNpdmUpID4gMSkgewotICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVz
dENoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZSgpLiBOb25lIG9m
IHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Ci0gICAgfQorICAgIC8vT09QUwor
ICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5F
eGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKSA+IDEpIHsKKyAgICAvLyAgICB0aHJvdyAiRmFpbGVk
IG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1
c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAg
Ly99CiB9CiB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZl
KCk7CiAKQEAgLTgyLDkgKzg0LDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkQmV0d2VlbkludE1p
bkluY2x1c2kKICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50
TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKICAgICAgICAg
fQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2Vl
bkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUpID4gMSkgewotICAgICAgICB0aHJvdyAi
RmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVy
b0V4Y2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7
Ci0gICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVl
Q2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKSA+IDEpIHsKKyAg
ICAvLyAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWlu
SW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVk
IHRvIE9TUiBFeGl0LiI7CisgICAgLy99CiAKICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsg
KytpKSB7CiAgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFu
ZFplcm9FeGNsdXNpdmUoLWkpICE9PSBpKSB7CkBAIC05Niw5ICs5OSwxMCBAQCBmdW5jdGlvbiB0
ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2
ZUFuZFplcm9FeGNsdXNpdmUpID4gMikgewotICAgICAgICB0aHJvdyAiTWF0aC5hYnMoKSBvbiBJ
bnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBzZXR0bGUgb24gZG91Ymxl
LiI7Ci0gICAgfQorICAgIC8vIE9PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9w
YXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSkgPiAyKSB7
CisgICAgLy8gICAgdGhyb3cgIk1hdGguYWJzKCkgb24gSW50TWluIGNhbiBPU1IgRXhpdCBidXQg
d2Ugc2hvdWxkIHF1aWNrbHkgc2V0dGxlIG9uIGRvdWJsZS4iOworICAgIC8vfQogfQogdGVzdENo
ZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpOwogCkBAIC0xMjcs
OSArMTMxLDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm8KICAg
ICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0lu
Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobnVt
YmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNp
dmUpID4gMSkgewotICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRC
ZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBu
ZWVkIHRvIE9TUiBFeGl0LiI7Ci0gICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9m
REZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKSA+
IDEpIHsKKyAgICAvLyAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3
ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVk
IHRvIE9TUiBFeGl0LiI7CisgICAgLy99CiAKICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsg
KytpKSB7CiAgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNs
dXNpdmUoLWkpICE9PSBpKSB7CkBAIC0xNDMsOSArMTQ4LDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVj
a2VkQmV0d2VlbkludE1pbkFuZFplcm8KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChudW1i
ZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2
ZSkgPiAyKSB7Ci0gICAgICAgIHRocm93ICJNYXRoLmFicygpIG9uIEludE1pbiBjYW4gT1NSIEV4
aXQgYnV0IHdlIHNob3VsZCBxdWlja2x5IHNldHRsZSBvbiBkb3VibGUuIjsKLSAgICB9CisgICAg
Ly9PT1BTCisgICAgLy9pZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2Vl
bkludE1pbkFuZFplcm9JbmNsdXNpdmUpID4gMikgeworICAgIC8vICAgIHRocm93ICJNYXRoLmFi
cygpIG9uIEludE1pbiBjYW4gT1NSIEV4aXQgYnV0IHdlIHNob3VsZCBxdWlja2x5IHNldHRsZSBv
biBkb3VibGUuIjsKKyAgICAvL30KIH0KIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9J
bmNsdXNpdmUoKTsKIApAQCAtMTcxLDkgKzE3NywxMCBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2Vk
QmV0d2VlbkludE1pbkFuZFplCiAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNr
ZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKICAgICAg
ICAgfQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNrZWRC
ZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSkgPiAxKSB7Ci0gICAgICAgIHRocm93ICJGYWls
ZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUo
KS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOwotICAgIH0KKyAg
ICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZEJl
dHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKSA+IDEpIHsKKyAgICAvLyAgICB0aHJvdyAiRmFp
bGVkIG9wdGltaXppbmcgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZl
KCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICAvL30K
IH0KIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpOwogCkBAIC0y
MDIsOSArMjA5LDEwIEBAIGZ1bmN0aW9uIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHUK
ICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5FeGNs
dXNpdmVBbmRaZXJvSW5jbHVzaXZlKCkgb24gLTIxNDc0ODM2NDciOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRN
aW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKSA+IDEpIHsKLSAgICAgICAgdGhyb3cgIkZhaWxl
ZCBvcHRpbWl6aW5nIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0lu
Y2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Ci0g
ICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlVW5j
aGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUpID4gMSkgeworICAg
IC8vICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1p
bkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVl
ZCB0byBPU1IgRXhpdC4iOworICAgIC8vfQogfQogdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5F
eGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKCk7CiAKQEAgLTIzMyw5ICsyNDEsMTAgQEAgZnVuY3Rp
b24gdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdQogICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUo
KSBvbiAtMjE0NzQ4MzY0OCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJlck9mREZH
Q29tcGlsZXMob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNs
dXNpdmUpID4gMSkgewotICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hl
Y2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKCkuIE5vbmUgb2YgdGhl
IHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKLSAgICB9CisgICAgLy9PT1BTCisgICAg
Ly9pZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5j
bHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSkgPiAxKSB7CisgICAgLy8gICAgdGhyb3cgIkZhaWxlZCBv
cHRpbWl6aW5nIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1
c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAg
Ly99CiB9CiB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNp
dmUoKTsKIApAQCAtMjY3LDkgKzI3NiwxMCBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2VkQmV0d2Vl
bkludE1pbkFuZFplCiAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3
ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ4IjsKICAg
ICAgICAgfQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNr
ZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSkgPiAxKSB7Ci0gICAgICAgIHRocm93ICJG
YWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNp
dmUoKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOwotICAgIH0K
KyAgICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tl
ZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKSA+IDEpIHsKKyAgICAvLyAgICB0aHJvdyAi
RmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVz
aXZlKCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICAv
L30KIH0KIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpOwogCkBA
IC0yOTMsOSArMzAzLDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkTGVzc1RoYW5aZXJvKCkKICAg
ICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRMZXNzVGhhblplcm8oKSBvbiAtMjE0
NzQ4MzY0NyI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMo
b3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybykgPiAxKSB7Ci0gICAgICAgIHRocm93ICJGYWlsZWQg
b3B0aW1pemluZyB0ZXN0Q2hlY2tlZExlc3NUaGFuWmVybygpLiBOb25lIG9mIHRoZSB0ZXN0ZWQg
Y2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Ci0gICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51
bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybykgPiAxKSB7CisgICAg
Ly8gICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RDaGVja2VkTGVzc1RoYW5aZXJvKCku
IE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICAvL30KIAog
ICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU1OyArK2kpIHsKICAgICAgICAgaWYgKG9wYXF1ZUNo
ZWNrZWRMZXNzVGhhblplcm8oLWkpICE9PSBpKSB7CkBAIC0zMDYsOSArMzE3LDEwIEBAIGZ1bmN0
aW9uIHRlc3RDaGVja2VkTGVzc1RoYW5aZXJvKCkKICAgICAgICAgICAgIHRocm93ICJGYWlsZWQg
dGVzdENoZWNrZWRMZXNzVGhhblplcm8oKSBvbiAtMjE0NzQ4MzY0OCwgZ290ICIgKyByZXN1bHQ7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hl
Y2tlZExlc3NUaGFuWmVybykgPiAyKSB7Ci0gICAgICAgIHRocm93ICJNYXRoLmFicygpIG9uIElu
dE1pbiBjYW4gT1NSIEV4aXQgYnV0IHdlIHNob3VsZCBxdWlja2x5IHNldHRsZSBvbiBkb3VibGUu
IjsKLSAgICB9CisgICAgLy9PT1BTCisgICAgLy9pZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFx
dWVDaGVja2VkTGVzc1RoYW5aZXJvKSA+IDIpIHsKKyAgICAvLyAgICB0aHJvdyAiTWF0aC5hYnMo
KSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBzZXR0bGUgb24g
ZG91YmxlLiI7CisgICAgLy99CiB9CiB0ZXN0Q2hlY2tlZExlc3NUaGFuWmVybygpOwogCkBAIC0z
MzUsOSArMzQ3LDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygK
ICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJv
KCkgb24gLTIxNDc0ODM2NDciOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChudW1iZXJPZkRG
R0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKSA+IDEpIHsKLSAgICAg
ICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RDaGVja2VkTGVzc1RoYW5PckVxdWFsWmVy
bygpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Ci0gICAgfQor
ICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZExl
c3NUaGFuT3JFcXVhbFplcm8pID4gMSkgeworICAgIC8vICAgIHRocm93ICJGYWlsZWQgb3B0aW1p
emluZyB0ZXN0Q2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKS4gTm9uZSBvZiB0aGUgdGVzdGVk
IGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOworICAgIC8vfQogCiAgICAgZm9yIChsZXQgaSA9IDE7
IGkgPCAxZTU7ICsraSkgewogICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZExlc3NUaGFuT3JFcXVh
bFplcm8oLWkpICE9PSBpKSB7CkBAIC0zNDcsOSArMzYwLDEwIEBAIGZ1bmN0aW9uIHRlc3RDaGVj
a2VkTGVzc1RoYW5PckVxdWFsWmVybygKICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENo
ZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkgb24gLTIxNDc0ODM2NDgiOwogICAgICAgICB9CiAg
ICAgfQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9y
RXF1YWxaZXJvKSA+IDIpIHsKLSAgICAgICAgdGhyb3cgIk1hdGguYWJzKCkgb24gSW50TWluIGNh
biBPU1IgRXhpdCBidXQgd2Ugc2hvdWxkIHF1aWNrbHkgc2V0dGxlIG9uIGRvdWJsZS4iOwotICAg
IH0KKyAgICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNr
ZWRMZXNzVGhhbk9yRXF1YWxaZXJvKSA+IDIpIHsKKyAgICAvLyAgICB0aHJvdyAiTWF0aC5hYnMo
KSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBzZXR0bGUgb24g
ZG91YmxlLiI7CisgICAgLy99CiB9CiB0ZXN0Q2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKTsK
IApAQCAtMzc2LDkgKzM5MCwxMCBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2VkTGVzc1RoYW5aZXJv
KCkKICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZExlc3NUaGFuT3JFcXVh
bFplcm8oKSBvbiAtMjE0NzQ4MzY0OCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJl
ck9mREZHQ29tcGlsZXMob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKSA+IDEpIHsKLSAgICAg
ICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RVbmNoZWNrZWRMZXNzVGhhblplcm8oKS4g
Tm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOwotICAgIH0KKyAgICAv
L09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZExlc3NU
aGFuWmVybykgPiAxKSB7CisgICAgLy8gICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RV
bmNoZWNrZWRMZXNzVGhhblplcm8oKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBP
U1IgRXhpdC4iOworICAgIC8vfQogCiAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkg
ewogICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKC1pKSAhPT0gaSkgewpA
QCAtMzg4LDkgKzQwMywxMCBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2VkTGVzc1RoYW5aZXJvKCkK
ICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZExlc3NUaGFuWmVybygpIG9u
IC0yMTQ3NDgzNjQ4IjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZERkdDb21w
aWxlcyhvcGFxdWVVbmNoZWNrZWRMZXNzVGhhblplcm8pID4gMikgewotICAgICAgICB0aHJvdyAi
TWF0aC5hYnMoKSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBz
ZXR0bGUgb24gZG91YmxlLiI7Ci0gICAgfQorICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9m
REZHQ29tcGlsZXMob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKSA+IDIpIHsKKyAgICAvLyAg
ICB0aHJvdyAiTWF0aC5hYnMoKSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQg
cXVpY2tseSBzZXR0bGUgb24gZG91YmxlLiI7CisgICAgLy99CiB9CiB0ZXN0VW5jaGVja2VkTGVz
c1RoYW5aZXJvKCk7CiAKQEAgLTQyMCw4ICs0MzYsOSBAQCBmdW5jdGlvbiB0ZXN0VW5jaGVja2Vk
TGVzc1RoYW5PckVxdWFsWmVyCiAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNr
ZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkgb24gLTIxNDc0ODM2NDgiOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuT3JF
cXVhbFplcm8pID4gMSkgewotICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVu
Y2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVl
ZCB0byBPU1IgRXhpdC4iOwotICAgIH0KKyAgICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRG
R0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8pID4gMSkgeworICAg
IC8vICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVx
dWFsWmVybygpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Cisg
ICAgLy99CiB9CiB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygpOwpJbmRleDogSlNU
ZXN0cy9zdHJlc3MvYXJpdGgtYXNpbi1vbi12YXJpb3VzLXR5cGVzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL2FyaXRoLWFzaW4tb24tdmFyaW91cy10eXBlcy5qcwkocmV2aXNpb24g
MjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvYXJpdGgtYXNpbi1vbi12YXJpb3VzLXR5cGVzLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw5IEBAIGZ1bmN0aW9uIHRlc3ROb0FyZ3VtZW50
KCkgewogICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVBU2luTm9Bcmd1bWVudCI7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQVNpbk5v
QXJndW1lbnQpID4gMSkKLSAgICAgICAgdGhyb3cgIlRoZSBjYWxsIHdpdGhvdXQgYXJndW1lbnRz
IHNob3VsZCBuZXZlciBleGl0LiI7CisgICAgLy9PT1BTCisgICAgLy9pZiAobnVtYmVyT2ZERkdD
b21waWxlcyhvcGFxdWVBU2luTm9Bcmd1bWVudCkgPiAxKQorICAgIC8vICAgIHRocm93ICJUaGUg
Y2FsbCB3aXRob3V0IGFyZ3VtZW50cyBzaG91bGQgbmV2ZXIgZXhpdC4iOwogfQogdGVzdE5vQXJn
dW1lbnQoKTsKIApAQCAtNzIsOCArNzMsOSBAQCBmdW5jdGlvbiB0ZXN0QWxsVHlwZXNDYWxsKCkg
ewogICAgICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEFsbFR5cGVzQ2FsbCBmb3IgaW5w
dXQgIiArIHRlc3RDYXNlSW5wdXRbMF0gKyAiIGV4cGVjdGVkICIgKyB0ZXN0Q2FzZUlucHV0WzFd
ICsgIiBnb3QgIiArIG91dHB1dDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobnVtYmVyT2ZE
RkdDb21waWxlcyhvcGFxdWVBbGxUeXBlc0FTaW4pID4gMikKLSAgICAgICAgdGhyb3cgIldlIHNo
b3VsZCBoYXZlIGRldGVjdGVkIGFzaW4oKSB3YXMgcG9seW1vcnBoaWMgYW5kIGdlbmVyYXRlZCBh
IGdlbmVyaWMgdmVyc2lvbi4iOworICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29t
cGlsZXMob3BhcXVlQWxsVHlwZXNBU2luKSA+IDIpCisgICAgLy8gICAgdGhyb3cgIldlIHNob3Vs
ZCBoYXZlIGRldGVjdGVkIGFzaW4oKSB3YXMgcG9seW1vcnBoaWMgYW5kIGdlbmVyYXRlZCBhIGdl
bmVyaWMgdmVyc2lvbi4iOwogfQogdGVzdEFsbFR5cGVzQ2FsbCgpOwogCkBAIC05Myw4ICs5NSw5
IEBAIGZ1bmN0aW9uIHRlc3RTaW5nbGVUeXBlQ2FsbCgpIHsKICAgICAgICAgICAgICAgICAgICAg
dGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlwZUNhbGwoKSI7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVl
QVNpbikgPiAxKQotICAgICAgICAgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21waWxl
ZCBhIHNpbmdsZSBhc2luIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4iOworICAgICAgICAgICAgLy9P
T1BTCisgICAgICAgICAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUFTaW4pID4g
MSkKKyAgICAgICAgICAgIC8vICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNp
bmdsZSBhc2luIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4iOwogICAgICAgICBgKTsKICAgICB9CiB9
CkBAIC0xMTYsOCArMTE5LDkgQEAgZnVuY3Rpb24gdGVzdENvbnN0YW50KCkgewogICAgICAgICAg
ICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDb25zdGFudCgpIjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhv
cGFxdWVBU2luT25Db25zdGFudCkgPiAxKQotICAgICAgICAgICAgICAgIHRocm93ICJXZSBzaG91
bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBhc2luIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4iOwor
ICAgICAgICAgICAgLy9PT1BTCisgICAgICAgICAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVz
KG9wYXF1ZUFTaW5PbkNvbnN0YW50KSA+IDEpCisgICAgICAgICAgICAvLyAgICB0aHJvdyAiV2Ug
c2hvdWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUgYXNpbiBmb3IgdGhlIGV4cGVjdGVkIHR5cGUu
IjsKICAgICAgICAgYCk7CiAgICAgfQogfQpAQCAtMTQzLDggKzE0Nyw5IEBAIGZ1bmN0aW9uIHRl
c3RTaWRlRWZmZWN0KCkgewogICAgIH0KICAgICBpZiAodGVzdE9iamVjdC5jb3VudGVyICE9PSAx
ZTQpCiAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFNpZGVFZmZlY3QoKSI7Ci0gICAgaWYgKG51
bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQVNpbkZvclNpZGVFZmZlY3RzKSA+IDEpCi0gICAgICAg
IHRocm93ICJvcGFxdWVBU2luRm9yU2lkZUVmZmVjdHMoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hv
dWxkIG9ubHkgYmUgY29tcGlsZWQgb25jZS4iOworICAgIC8vT09QUworICAgIC8vaWYgKG51bWJl
ck9mREZHQ29tcGlsZXMob3BhcXVlQVNpbkZvclNpZGVFZmZlY3RzKSA+IDEpCisgICAgLy8gICAg
dGhyb3cgIm9wYXF1ZUFTaW5Gb3JTaWRlRWZmZWN0cygpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91
bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7CiB9CiB0ZXN0U2lkZUVmZmVjdCgpOwogCkBAIC0x
NjksOCArMTc0LDkgQEAgZnVuY3Rpb24gdGVzdENTRSgpIHsKICAgICB9CiAgICAgaWYgKHRlc3RP
YmplY3QuY291bnRlciAhPT0gM2U0KQogICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDU0UoKSI7
Ci0gICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQVNpbkZvckNTRSkgPiAxKQotICAg
ICAgICB0aHJvdyAib3BhcXVlQVNpbkZvckNTRSgpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQg
b25seSBiZSBjb21waWxlZCBvbmNlLiI7CisgICAgLy9PT1BTCisgICAgLy9pZiAobnVtYmVyT2ZE
RkdDb21waWxlcyhvcGFxdWVBU2luRm9yQ1NFKSA+IDEpCisgICAgLy8gICAgdGhyb3cgIm9wYXF1
ZUFTaW5Gb3JDU0UoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGlsZWQg
b25jZS4iOwogfQogdGVzdENTRSgpOwogCkBAIC0xOTIsOCArMTk4LDkgQEAgZnVuY3Rpb24gdGVz
dERDRSgpIHsKICAgICB9CiAgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gMWU0KQogICAg
ICAgICB0aHJvdyAiRmFpbGVkIHRlc3REQ0UoKSI7Ci0gICAgaWYgKG51bWJlck9mREZHQ29tcGls
ZXMob3BhcXVlQVNpbkZvckRDRSkgPiAxKQotICAgICAgICB0aHJvdyAib3BhcXVlQVNpbkZvckRD
RSgpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7Cisg
ICAgLy9PT1BTCisgICAgLy9pZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVBU2luRm9yRENF
KSA+IDEpCisgICAgLy8gICAgdGhyb3cgIm9wYXF1ZUFTaW5Gb3JEQ0UoKSBpcyBwcmVkaWN0YWJs
ZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGlsZWQgb25jZS4iOwogfQogdGVzdERDRSgpOwogCklu
ZGV4OiBKU1Rlc3RzL3N0cmVzcy9hcml0aC1jb3Mtb24tdmFyaW91cy10eXBlcy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9hcml0aC1jb3Mtb24tdmFyaW91cy10eXBlcy5qcwkocmV2
aXNpb24gMjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvYXJpdGgtY29zLW9uLXZhcmlvdXMtdHlw
ZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDkgQEAgZnVuY3Rpb24gdGVzdE5vQXJn
dW1lbnQoKSB7CiAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIG9wYXF1ZUNvc05vQXJndW1lbnQi
OwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNv
c05vQXJndW1lbnQpID4gMSkKLSAgICAgICAgdGhyb3cgIlRoZSBjYWxsIHdpdGhvdXQgYXJndW1l
bnRzIHNob3VsZCBuZXZlciBleGl0LiI7CisgICAgLy9PT1BTCisgICAgLy9pZiAobnVtYmVyT2ZE
RkdDb21waWxlcyhvcGFxdWVDb3NOb0FyZ3VtZW50KSA+IDEpCisgICAgLy8gICAgdGhyb3cgIlRo
ZSBjYWxsIHdpdGhvdXQgYXJndW1lbnRzIHNob3VsZCBuZXZlciBleGl0LiI7CiB9CiB0ZXN0Tm9B
cmd1bWVudCgpOwogCkBAIC03MSw4ICs3Miw5IEBAIGZ1bmN0aW9uIHRlc3RBbGxUeXBlc0NhbGwo
KSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0QWxsVHlwZXNDYWxsIGZvciBp
bnB1dCAiICsgdGVzdENhc2VJbnB1dFswXSArICIgZXhwZWN0ZWQgIiArIHRlc3RDYXNlSW5wdXRb
MV0gKyAiIGdvdCAiICsgb3V0cHV0OwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChudW1iZXJP
ZkRGR0NvbXBpbGVzKG9wYXF1ZUFsbFR5cGVzQ29zKSA+IDIpCi0gICAgICAgIHRocm93ICJXZSBz
aG91bGQgaGF2ZSBkZXRlY3RlZCBjb3MoKSB3YXMgcG9seW1vcnBoaWMgYW5kIGdlbmVyYXRlZCBh
IGdlbmVyaWMgdmVyc2lvbi4iOworICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29t
cGlsZXMob3BhcXVlQWxsVHlwZXNDb3MpID4gMikKKyAgICAvLyAgICB0aHJvdyAiV2Ugc2hvdWxk
IGhhdmUgZGV0ZWN0ZWQgY29zKCkgd2FzIHBvbHltb3JwaGljIGFuZCBnZW5lcmF0ZWQgYSBnZW5l
cmljIHZlcnNpb24uIjsKIH0KIHRlc3RBbGxUeXBlc0NhbGwoKTsKIApAQCAtOTIsOCArOTQsOSBA
QCBmdW5jdGlvbiB0ZXN0U2luZ2xlVHlwZUNhbGwoKSB7CiAgICAgICAgICAgICAgICAgICAgIHRo
cm93ICJGYWlsZWQgdGVzdFNpbmdsZVR5cGVDYWxsKCkiOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNv
cykgPiAxKQotICAgICAgICAgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBh
IHNpbmdsZSBjb3MgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7CisgICAgICAgICAgICAvL09PUFMK
KyAgICAgICAgICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ29zKSA+IDEpCisg
ICAgICAgICAgICAvLyAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUg
Y29zIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4iOwogICAgICAgICBgKTsKICAgICB9CiB9CkBAIC0x
MTUsOCArMTE4LDkgQEAgZnVuY3Rpb24gdGVzdENvbnN0YW50KCkgewogICAgICAgICAgICAgICAg
ICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDb25zdGFudCgpIjsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVD
b3NPbkNvbnN0YW50KSA+IDEpCi0gICAgICAgICAgICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZl
IGNvbXBpbGVkIGEgc2luZ2xlIGNvcyBmb3IgdGhlIGV4cGVjdGVkIHR5cGUuIjsKKyAgICAgICAg
ICAgIC8vT09QUworICAgICAgICAgICAgLy9pZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVD
b3NPbkNvbnN0YW50KSA+IDEpCisgICAgICAgICAgICAvLyAgICB0aHJvdyAiV2Ugc2hvdWxkIGhh
dmUgY29tcGlsZWQgYSBzaW5nbGUgY29zIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4iOwogICAgICAg
ICBgKTsKICAgICB9CiB9CkBAIC0xNDIsOCArMTQ2LDkgQEAgZnVuY3Rpb24gdGVzdFNpZGVFZmZl
Y3QoKSB7CiAgICAgfQogICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09IDFlNCkKICAgICAg
ICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2lkZUVmZmVjdCgpIjsKLSAgICBpZiAobnVtYmVyT2ZERkdD
b21waWxlcyhvcGFxdWVDb3NGb3JTaWRlRWZmZWN0cykgPiAxKQotICAgICAgICB0aHJvdyAib3Bh
cXVlQ29zRm9yU2lkZUVmZmVjdHMoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUg
Y29tcGlsZWQgb25jZS4iOworICAgIC8vT09QUworICAgIC8vaWYgKG51bWJlck9mREZHQ29tcGls
ZXMob3BhcXVlQ29zRm9yU2lkZUVmZmVjdHMpID4gMSkKKyAgICAvLyAgICB0aHJvdyAib3BhcXVl
Q29zRm9yU2lkZUVmZmVjdHMoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29t
cGlsZWQgb25jZS4iOwogfQogdGVzdFNpZGVFZmZlY3QoKTsKIApAQCAtMTY4LDggKzE3Myw5IEBA
IGZ1bmN0aW9uIHRlc3RDU0UoKSB7CiAgICAgfQogICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIg
IT09IDNlNCkKICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q1NFKCkiOwotICAgIGlmIChudW1i
ZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNvc0ZvckNTRSkgPiAxKQotICAgICAgICB0aHJvdyAib3Bh
cXVlQ29zRm9yQ1NFKCkgaXMgcHJlZGljdGFibGUsIGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVk
IG9uY2UuIjsKKyAgICAvL09PUFMKKyAgICAvL2lmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1
ZUNvc0ZvckNTRSkgPiAxKQorICAgIC8vICAgIHRocm93ICJvcGFxdWVDb3NGb3JDU0UoKSBpcyBw
cmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGlsZWQgb25jZS4iOwogfQogdGVzdENT
RSgpOwogCkBAIC0xOTEsOCArMTk3LDkgQEAgZnVuY3Rpb24gdGVzdERDRSgpIHsKICAgICB9CiAg
ICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gMWU0KQogICAgICAgICB0aHJvdyAiRmFpbGVk
IHRlc3REQ0UoKSI7Ci0gICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ29zRm9yRENF
KSA+IDEpCi0gICAgICAgIHRocm93ICJvcGFxdWVDb3NGb3JEQ0UoKSBpcyBwcmVkaWN0YWJsZSwg
aXQgc2hvdWxkIG9ubHkgYmUgY29tcGlsZWQgb25jZS4iOworICAgIC8vT09QUworICAgIC8vaWYg
KG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ29zRm9yRENFKSA+IDEpCisgICAgLy8gICAgdGhy
b3cgIm9wYXF1ZUNvc0ZvckRDRSgpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQgb25seSBiZSBj
b21waWxlZCBvbmNlLiI7CiB9CiB0ZXN0RENFKCk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2Fy
aXRoLW1vZHVsby1ub2RlLWJlaGF2aW9ycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9hcml0aC1tb2R1bG8tbm9kZS1iZWhhdmlvcnMuanMJKHJldmlzaW9uIDI2NzQzNSkKKysrIEpT
VGVzdHMvc3RyZXNzL2FyaXRoLW1vZHVsby1ub2RlLWJlaGF2aW9ycy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDQgKzEwMyw0IEBAIGZvciAodmFyIGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKICAg
ICB2YXIgcmVzdWx0ID0gbW9kdWxvV2l0aE5lZ2F0aXZlWmVyb0Rpdmlzb3IoLWksIDAsIDIpOwog
ICAgIGlmIChyZXN1bHQgPT09IHJlc3VsdCkKICAgICAgICAgdGhyb3cgIm1vZHVsb1dpdGhOZWdh
dGl2ZVplcm9EaXZpc29yKC1pLCAwLCAyKSBmYWlsZWQsIHJldHVybmVkOiAiICsgcmVzdWx0Owot
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2Jp
Zy1pbnQtbmVnYXRlLWppdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9iaWctaW50
LW5lZ2F0ZS1qaXQuanMJKHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL2JpZy1p
bnQtbmVnYXRlLWppdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTYsOCArMTYsOSBAQCBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CiAgICAgYXNzZXJ0KG5lZ2F0ZUJpZ0ludCgtMHgx
ZmZmZmZmZmZmZmZmZjAxbiksIDB4MWZmZmZmZmZmZmZmZmYwMW4pOwogfQogCi1pZiAobnVtYmVy
T2ZERkdDb21waWxlcyhuZWdhdGVCaWdJbnQpID4gMSkKLSAgICB0aHJvdyAiRmFpbGVkIG5lZ2F0
ZUJpZ0ludCgpLiBXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBuZWdhdGUgZm9yIHRo
ZSBCaWdJbnQgdHlwZS4iOworLy8gT09QUzoKKy8vaWYgKG51bWJlck9mREZHQ29tcGlsZXMobmVn
YXRlQmlnSW50KSA+IDEpCisvLyAgICB0aHJvdyAiRmFpbGVkIG5lZ2F0ZUJpZ0ludCgpLiBXZSBz
aG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBuZWdhdGUgZm9yIHRoZSBCaWdJbnQgdHlwZS4i
OwogCiBmdW5jdGlvbiBuZWdhdGVCaWdJbnRTcGVjaWFsaXplZFRvSW50KG4pIHsKICAgICByZXR1
cm4gLW47CkBAIC00Myw2ICs0NCw3IEBAIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKysp
IHsKICAgICAgICAgYXNzZXJ0KG1peGVkU3BlY3VsYXRpb25OZWdhdGVCaWdJbnQoLTB4MWZmZmZm
ZmZmZmZmZmYwMW4pLCAweDFmZmZmZmZmZmZmZmZmMDFuKTsKIH0KIAotaWYgKG51bWJlck9mREZH
Q29tcGlsZXMobWl4ZWRTcGVjdWxhdGlvbk5lZ2F0ZUJpZ0ludCkgPiAxKQotICAgIHRocm93ICJG
YWlsZWQgbWl4ZWRTcGVjdWxhdGlvbk5lZ2F0ZUJpZ0ludCgpLiBXZSBzaG91bGQgaGF2ZSBjb21w
aWxlZCBhIHNpbmdsZSBuZWdhdGUgZm9yIHRoZSBCaWdJbnQgdHlwZS4iOworLy8gT09QUworLy9p
ZiAobnVtYmVyT2ZERkdDb21waWxlcyhtaXhlZFNwZWN1bGF0aW9uTmVnYXRlQmlnSW50KSA+IDEp
CisvLyAgICB0aHJvdyAiRmFpbGVkIG1peGVkU3BlY3VsYXRpb25OZWdhdGVCaWdJbnQoKS4gV2Ug
c2hvdWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUgbmVnYXRlIGZvciB0aGUgQmlnSW50IHR5cGUu
IjsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvYml0LW9wLXdpdGgtb2JqZWN0LXJldHVybmluZy1p
bnQzMi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9iaXQtb3Atd2l0aC1vYmplY3Qt
cmV0dXJuaW5nLWludDMyLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9i
aXQtb3Atd2l0aC1vYmplY3QtcmV0dXJuaW5nLWludDMyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0x
NCw3ICsxNCw4IEBAIHZhciBvID0geyB2YWx1ZU9mOiAoKSA9PiAwYjExMDEgfTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKICAgICBhc3NlcnQoYml0QW5kKDBiMTEsIG8pLCAwYjEp
OwogCi1hc3NlcnQobnVtYmVyT2ZERkdDb21waWxlcyhiaXRBbmQpIDw9IDEsIHRydWUpOworLy9P
T1BTCisvL2Fzc2VydChudW1iZXJPZkRGR0NvbXBpbGVzKGJpdEFuZCkgPD0gMSwgdHJ1ZSk7CiAK
IGZ1bmN0aW9uIGJpdE9yKGEsIGIpIHsKICAgICByZXR1cm4gYSB8IGI7CkBAIC0yNCw3ICsyNSw4
IEBAIG5vSW5saW5lKGJpdE9yKTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKICAg
ICBhc3NlcnQoYml0T3IoMGIxMSwgbyksIDBiMTExMSk7CiAKLWFzc2VydChudW1iZXJPZkRGR0Nv
bXBpbGVzKGJpdE9yKSA8PSAxLCB0cnVlKTsKKy8vT09QUworLy9hc3NlcnQobnVtYmVyT2ZERkdD
b21waWxlcyhiaXRPcikgPD0gMSwgdHJ1ZSk7CiAKIGZ1bmN0aW9uIGJpdFhvcihhLCBiKSB7CiAg
ICAgcmV0dXJuIGEgXiBiOwpAQCAtMzQsNyArMzYsOCBAQCBub0lubGluZShiaXRYb3IpOwogZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQogICAgIGFzc2VydChiaXRYb3IoMGIwMDExLCBv
KSwgMGIxMTEwKTsKIAotYXNzZXJ0KG51bWJlck9mREZHQ29tcGlsZXMoYml0WG9yKSA8PSAxLCB0
cnVlKTsKKy8vT09QUworLy9hc3NlcnQobnVtYmVyT2ZERkdDb21waWxlcyhiaXRYb3IpIDw9IDEs
IHRydWUpOwogCiBmdW5jdGlvbiBiaXROb3QoYSkgewogICAgIHJldHVybiB+YTsKQEAgLTQ0LDcg
KzQ3LDggQEAgbm9JbmxpbmUoYml0Tm90KTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkr
KykKICAgICBhc3NlcnQoYml0Tm90KG8pLCAtMTQpOwogCi1hc3NlcnQobnVtYmVyT2ZERkdDb21w
aWxlcyhiaXROb3QpIDw9IDEsIHRydWUpOworLy9PT1BTCisvL2Fzc2VydChudW1iZXJPZkRGR0Nv
bXBpbGVzKGJpdE5vdCkgPD0gMSwgdHJ1ZSk7CiAKIGZ1bmN0aW9uIGJpdExTaGlmdChhLCBiKSB7
CiAgICAgcmV0dXJuIGEgPDwgYjsKQEAgLTU0LDUgKzU4LDYgQEAgbm9JbmxpbmUoYml0TFNoaWZ0
KTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKICAgICBhc3NlcnQoYml0TFNoaWZ0
KG8sIDMpLCAwYjExMDEwMDApOwogCi1hc3NlcnQobnVtYmVyT2ZERkdDb21waWxlcyhiaXRMU2hp
ZnQpIDw9IDEsIHRydWUpOworLy9PT1BTCisvL2Fzc2VydChudW1iZXJPZkRGR0NvbXBpbGVzKGJp
dExTaGlmdCkgPD0gMSwgdHJ1ZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJX
YXNtU2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRp
b25BbmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBv
cCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29k
ZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZl
Y3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwg
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAg
IGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwy
MyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAg
b3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJl
ZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQg
aGVhZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0
aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIg
Y29tbWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGlj
dGlvbnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVj
dWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxv
Y2FscygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAg
ICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAg
ICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9
CisKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7
ICkgewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
LmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5
dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+
CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1
bXBlcjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayos
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0
dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2Nr
KiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0m
IG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAo
KSk7CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0
cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1
c01hcCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29u
c3RhbnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUdyYXBoLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBA
QCBwdWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAg
IHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFG
aWxlKCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJp
bnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMs
ICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29k
ZShQcmludFN0cmVhbQogICAgIElDU3RhdHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1
c01hcChzdGF0dXNNYXApOwogICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5z
dHJ1Y3Rpb25zKCkpOwotICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1
bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAg
ICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5z
dHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAog
dm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNTExLDYgKzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVk
VHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMu
aAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBD
b2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRh
ZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNo
UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQor
eworICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAg
ICAgICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kcy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8
dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3Bl
cmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFj
a0NhbGxlZSA9IGZhbHNlPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0
b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RC
aXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIx
ICsxNDQsMjMgQEAgcHVibGljOgogCiAgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBl
eHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBz
aXplX3QgbnVtVG1wcykKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRz
LCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9
IDApCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1f
bnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFu
dHMpCiAgICAgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2Fs
cyArIG51bVRtcHM7CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9j
YWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1f
dmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5l
ZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAg
fQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXpl
X3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQog
ICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxv
Y2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQog
ICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBu
dW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMg
KyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFs
dWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAg
cHVibGljOgogICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3Bl
cmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDog
bV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251
bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRz
KG90aGVyLm51bWJlck9mQ29uc3RhbnRzKCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93
KG90aGVyLnNpemUoKSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAg
LTE3MiwzMyArMTc2LDUxIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9m
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVy
T2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVu
dHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMo
KSBjb25zdCB7IHJldHVybiBtX251bUNvbnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRt
cHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygp
IC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVl
OyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5h
YmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQog
ICAgIHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGlkeCA8IG51bWJlck9mVG1wcygpKTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9m
QXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
OwogICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBy
ZXR1cm4gaWR4OwogICAgIH0KLSAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwog
ICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6
ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpZHggPCBudW1iZXJPZkNvbnN0YW50cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJn
dW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUg
dG1wKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAg
Q29uc3RSZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJ
bmRleChpZHgpXTsgfQogICAgIAogICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyBy
ZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBh
cmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4
KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgp
IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRy
dWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAg
IENvbnN0UmVmVHlwZSBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0K
ICAgICAKICAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xv
Y2FsSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBj
b25zdGFudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCld
OyB9CisgICAgQ29uc3RSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgs
NyArMjcwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2Fscygp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNv
bnN0YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1M
b2NhbHMgPSBudW1iZXJPZkxvY2FscygpOwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51
bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcg
KzI5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qg
b2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1i
ZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVf
dCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1i
ZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVz
Lmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdU
Rjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3
LDE1IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkp
CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29u
c3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVh
ZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjb25zdGFudEluZGV4KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICBy
ZXR1cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5
LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNv
bnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hl
YWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25z
dGFudChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9w
ZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBu
dW1iZXJPZkNvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90Pihv
cGVyYW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhh
c09wZXJhbmQoT3BlcmFuZCBvcCkgY29uc3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgp
OwotICAgICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFy
Z3VtZW50cygpKQorICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6
dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7Cisg
ICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fscygp
ICsgbnVtYmVyT2ZDb25zdGFudHMoKSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JDb25zdGFudChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2Fs
cygpKTsKKyAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAg
aWYgKGluZGV4ID09IGNhbGxlZUluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJn
dW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxs
KFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQzNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3Qg
bV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1M
b2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJz
dCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251
bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRz
LCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNp
Z25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kc0lubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4
IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0
LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZv
aWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVl
Pgordm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVy
IGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJn
dW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9w
ZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0
KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFj
a0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRl
eHQoY2FsbGVlKCksIGNvbnRleHQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQg
T3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgi
ICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygp
OyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAg
ICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxsZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGlu
ZSBib29sIGlzSW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYg
ISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1
ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlz
Tm90SW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4g
dmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTgsOCArMTE4LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVy
bnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0
aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdp
c3Rlci5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xh
c3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAg
IGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNm
ZmZmZmZmOwogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3Rl
ciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0
IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0g
ICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1
bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAh
aXNDb25zdGFudCgpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
cnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0
b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2Fs
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVy
YW5kOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyBy
ZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBz
dGF0aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1l
bnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBj
b25zdGFudFRvT3BlcmFuZChpbnQgY29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVn
aXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyRm8KICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
cjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRl
eCkKK3sKKyAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3Rh
bnRUb09wZXJhbmQoY29uc3RhbnRJbmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KEJ5dGVjb2RlSW5kZXggYnl0CiAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBu
dW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMsIG51bVRtcHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJn
dW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAg
ICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcywgMCwgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9u
Q291bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1Miw3ICszNTIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50
cy4KICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxh
YmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBB
dmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE1IEBACiAjaW5jbHVkZSAiSklULmgiCiAK
ICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBl
LmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVy
YXRvci5oIgorI2luY2x1ZGUgIkpTR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisj
aW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
UENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTYwLDYgKzYzLDgzMyBAQCBTZWNvbmRzIHRvdGFsRlRM
Q29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRv
dGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBhdXRv
IHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsK
KyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAgIGF1
dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAg
ICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJlYWQg
dGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVzZW50
cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5cGVG
b3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVj
dWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAg
ICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICB9
OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3Bf
Z2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2Fs
bD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJn
cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0
cnVjdFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWxf
d2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0eG9y
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5t
X3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0
VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZS5tX3By
ZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fbmV4dCwgbWV0YWRhdGEubV9u
ZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9k
b25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUubV9wcmVkaWN0aW9u
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb3Y6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBlRm9yKGluc3RydWN0aW9uLT5h
czxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6Cisg
ICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3By
aXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKSk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IG1ldGFkYXRhLm1f
YXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
SW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgaWYgKCEhKGxlZnQg
JiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisg
ICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJpZ0ludDMyIGJldHRlcgorICAg
ICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0cmluZ09y
U3RyaW5nT2JqZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJpbmdPclN0cmluZ09iamVjdFNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJ
WE1FOiBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX3N1YjoK
KyAgICBjYXNlIG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRl
Y29kZSkgeworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihi
eXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworCisgICAgICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9k
aXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRl
Y29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFO
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2OworICAgICAgICAgICAgICAgIGlm
IChtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4p
IHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIHByb2Jh
Ymx5IGRvIGJldHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICB9OworCisgICAgICAg
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9zdWIpCisgICAgICAgICAgICBoYW5k
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9u
LT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAo
IShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRlciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9u
ICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSB8IFNw
ZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNw
ZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVk
OgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21lIGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRi
YWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRBc0Rv
dWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAg
IGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmls
ZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBlRm9yKHNyYyk7Cisg
ICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpID8gU3BlY0FueUlu
dEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7
CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAg
ICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5w
dXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBl
KGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51
bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNv
ZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVj
KSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0Rz
dCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7Cisg
ICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShs
ZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJ
bnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
CisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0
byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9
IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JC
b29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9Owor
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAg
IGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlw
ZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5
X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9Qcmlt
aXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOwor
ICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlw
ZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcv
IGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBw
cm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHll
dCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0
aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHBy
b2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1W
YXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVj
QXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3By
ZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNw
cmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJ
bmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0
dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5j
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5j
X2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0
b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0
b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50
X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNj
b3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJv
cGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3Bl
Y0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JT
dHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCksIFNwZWNTdHJp
bmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0
cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5n
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9s
ZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0
aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2
ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZh
bD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
c2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Rp
cmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29w
ZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRf
YXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNs
b25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3Ro
ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9y
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJh
dG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVn
ZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9l
cToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3Ry
aWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNz
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
cU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19z
dHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCks
IFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3Vs
YXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVj
dWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2Nh
bGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9p
ZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNl
IG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNl
IG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9z
dXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1
ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hl
Y2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93Ogor
ICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAg
Y2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25f
bmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5l
X2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVl
OgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBv
cF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBv
cF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0
cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAg
Y2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRl
cjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2Fz
ZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3Jl
YXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAg
Y2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bf
c3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0
X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9w
cm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNl
IG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRf
dG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9w
X3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoK
KyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lp
ZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNl
IHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9s
b2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2Ug
bGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlv
bl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2Fy
aXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2Fz
ZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
dGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxs
X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6
CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBj
YXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9y
ZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2Vw
dGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29u
c3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25f
cHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9wcm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRp
Y3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRl
Y29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAg
ICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAg
ICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVl
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZv
ckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAg
ICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAg
ICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIs
IFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAg
ICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0
PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAg
IFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1
bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykg
PSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3Vs
YXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFy
ZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBt
X3ByZWRpY3Rpb25zQXRIZWFkWzBdLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9v
bCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBN
YXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFj
dCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAg
ICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBk
ZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzog
SG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRv
IERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVC
YXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAg
ICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5n
dGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1f
Y3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0g
d2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQor
ICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKApAQCAtNjcsNiArODk3LDEyIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKTsKIH0KIAorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVj
a2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQogICAgICwg
bV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKQEAgLTc2LDYgKzkxMiw3IEBAIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNlTE9MID0gT3B0aW9uczo6Zm9yY2VMT0woKTsK
IH0KIAogSklUOjp+SklUKCkKQEAgLTEzNywxMSArOTc0LDE3IEBAIHZvaWQgSklUOjphc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKQogICAgICAgICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlOyBcCiAgICAgTkVYVF9PUENPREUobmFtZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChu
YW1lKSBcCisjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNh
c2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5
dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsgXAor
ICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1l
KTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgaWYg
KHVzZUxPTCgpICYmIGRzdC5pc1ZhbGlkKCkpIHtcCisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gdHlwZTsgXAorICAgICAgICAgICAgICAgIHdpbGxEZWYoZHN0KTsgXAorICAgICAg
ICAgICAgfSBcCiAgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9wXyMj
bmFtZSk7IFwKICAgICB9CkBAIC0xNTYsMjYgKzk5OSwzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAog
ICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAog
I2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25h
bWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAm
JiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nh
c2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2Fz
ZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
bG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3Zv
aWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsK
ICAgICAKQEAgLTIzMSwyMCArMTA4MCw4NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwot
ICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHBy
ZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1f
Ynl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4
Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29k
ZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAg
ICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAg
ICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3Rh
dGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMu
cmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9n
cmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlz
RXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3Ig
KGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5p
bmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5k
ZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
IH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxh
YmVsKCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIEFTU0VSVChj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNv
dW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3Vy
cmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2st
PmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mg
YXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVu
ZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
QXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7
IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNp
Y0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygp
ICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3Jz
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRT
dGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJl
ZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVk
ZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0
YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAo
IXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRD
dXJyZW50QmxvY2tTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9j
ay0+aW5kZXgoKV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25l
ZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlm
IChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSA+IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0
ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAg
ICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4K
KyAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rp
c2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1h
aW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CisgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRl
Y29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpKTsKKworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxh
YmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKICNpZiBFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKQogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID4gMCkgLy8gQXZvaWQgdGhl
IG92ZXJoZWFkIG9mIHNhbXBsaW5nIG9wX2VudGVyIHR3aWNlLgpAQCAtMjc4LDQ2ICsxMTkzLDUz
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogI2VuZGlm
CiAKKworICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFs
bG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAg
ZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9
CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBERUZJTkVfU0xPV19PUChp
bl9ieV92YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3MpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGxlc3NlcSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jYWxs
YWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAgIERF
RklORV9TTE9XX09QKHR5cGVvZikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX29i
amVjdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChzdHJjYXQpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0
aF9zY29wZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1l
bnQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2
ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZp
bmVfYWNjZXNzb3JfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxl
KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAgIERF
RklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobmV3X2FycmF5X2J1ZmZlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGhhc19nZW5lcmljX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChn
ZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhf
c3RyaW5nKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoY3JlYXRlX3Jlc3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoY3JlYXRlX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5j
X2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AocG93KQorICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWws
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9vbGVhbikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExl
c3M+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCkubV9kc3QsIFNwZWNCb29sZWFuKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R3JlYXRlcj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdy
ZWF0ZXJlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKS5tX2RzdCwgU3Bl
Y0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAg
IERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKHR5cGVvZiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKS5tX2RzdCwgU3Bl
Y1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLm1fZHN0LCBTcGVjQm9vbGVhbikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN0cmNh
dD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRo
X3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisgICAgICAg
IERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBT
cGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMsIFZp
cnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2
ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLm1fZHN0LCBT
cGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHks
IFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVm
aW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAg
ICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05v
bmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvciwgVmlydHVhbFJl
Z2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0
aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCku
bV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZl
ciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLm1fZHN0LCBTcGVj
QXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RW51bWVyYWJsZUxlbmd0aD4oKS5tX2RzdCwgU3BlY0ludDMyT25seSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNHZW5lcmljUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVf
U0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0NlbGwpCisgICAgICAgIERFRklO
RV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvSW5k
ZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGly
ZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1lbnRzKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY1Njb3BlZEFyZ3VtZW50cykK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNPYmpl
Y3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJm
bHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCku
bV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKS5tX2RzdCwgU3BlY0FycmF5
KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAg
ICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09Q
KHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5tX2RzdCwgU3BlY0J5dGVjb2Rl
TnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAg
ICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzMjAsMTEgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxl
cl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJfZW5kKQogICAgICAg
ICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQpCiAgICAgICAgIERFRklORV9P
UChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19PUChtb2QsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJ
bnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikKICAgICAgICAgREVGSU5FX09Q
KG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkKQEAgLTQ3Nyw2ICsxNDAzLDM4
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobV9ieXRl
Y29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeworICAgICAgICAgICAgaWYgKCFtX2No
ZWNrZWRVc2VMT0wpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICAgICAgICAgICAgICBjYXNlIG9w
X3Rocm93OgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bfam1wOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgICAgICAgICAgY2FzZSBvcF9lbmQ6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9wdXRfYnlfdmFsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6
CisgICAgICAgICAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
bm9wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgICAgICAgICAgICAgIGNhc2Ug
b3BfZGVidWc6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBvcGNvZGVJ
RCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2No
ZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwog
ICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJB
dCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAg
ICB9CkBAIC01MTUsMTIgKzE0NzMsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2Fz
ZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNp
Z25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAh
PSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+
dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKQEAgLTU3
OSw3ICsxNTM5LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVj
a190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25l
Z2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lcSkKQEAgLTU5Nyw2ICsxNTU2
LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9pdGVyYXRvcl9uZXh0KQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AobW9kKQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKHVuc2lnbmVkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGRlYykKQEAgLTYzMywxNSArMTU5NSwxOCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzog
IiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8u
b2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBp
biBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6
CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2Fz
ZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBl
bm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JF
TEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSkt
PnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2Vu
LiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVBy
b2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFscmVhZHkgZG8gdGhpcywgc28gd2Ugc2hvdWxk
bid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihz
bG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCks
IDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03
NzQsNiArMTczOSwyOCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBp
CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAg
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIGZvciAoYXV0byYg
ZXhpdCA6IG1fZXhpdEp1bXBzKSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQu
Zmlyc3Q7CisgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAganVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisg
ICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVja3BvaW50IGV4aXRz
LgorCisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTElu
dDo6Z2V0Q29kZVB0cjxPU1JFeGl0UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAg
ICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGlu
YXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9l
eGl0X3RyYW1wb2xpbmUpOworICAgICAgICAvL2Vsc2UgCisgICAgICAgIC8vICAgIGRlc3RpbmF0
aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9u
KTsKKworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7
CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAg
ICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRh
Zyk7CisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsyMDQ1LDcxMyBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21w
aWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFs
REZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1
bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0S2lu
ZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmly
c3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5
dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNlY29u
ZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0ZXJT
ZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rv
cnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRoaXMK
KyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8g
ZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tl
eSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0
IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
QmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6
OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVn
KSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93
ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVn
aXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rv
cnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlz
CisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRv
IGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9r
ZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRl
QWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQo
KTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09Q
UzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQg
Y29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJv
YmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BT
OiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+
IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3Vs
dC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAg
IHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkK
K3sKKyAgICAvLyBPT1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBC
dXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3Vy
ZSBzb21ldGhpbmcgb3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9z
bG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8v
ICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQor
eworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAg
ICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAg
ICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdW
YWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
ICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOwor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2Nh
dGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7
CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNB
bGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
SklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNp
c3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4K
KworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVn
VmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBy
ZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3Bl
cmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRG
UFJSZWc7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNB
bGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhh
dmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAg
Ly8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUg
VmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRp
bmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisg
ICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMg
dW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0
ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAg
ICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkID0gZmFsc2U7CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkK
K3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAg
ICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMu
Y29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2Ji
ZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigp
Cit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxh
biByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAg
ICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5k
KSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAg
IGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkK
KyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKCkKK3sKKyAgICAv
LyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3Jk
IHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVk
ID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAg
ICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0
LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVy
cy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICBy
ZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNl
cnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJz
LCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50RmlsbEFmdGVy
Q2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKnRoaXMsIHJl
Y29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JTcGlsbCwgMCk7
CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCksIHJlY29y
ZC5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdU
b0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4m
IHNhdmVQbGFuKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFuKSB7CisgICAgICAg
IFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHJlZ1RvSWdub3JlKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChvcGVyYW5kID09IG9wZXJhbmRUb0lnbm9yZSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVnLmlzRlBSKCkpOworICAgICAgICAgICAgbm9w
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAg
ICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAg
ICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAg
ICAgbm9wKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNs
b3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIHJlc3RvcmVG
cm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnNhdmVQ
bGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJl
IHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsK
KyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMp
OworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9w
ZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQz
Mk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBK
SVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1w
IHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94
RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5k
KTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3IgYnl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0
aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgorICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQp
OworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVn
VmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFu
ZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9j
ayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAg
ICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkp
CisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklU
JiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAgIGlmIChoaW50ICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BS
VGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1w
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQp
CisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7
CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxs
b2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsK
K30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9m
cHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklU
OjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAg
ICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVy
YW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitH
UFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsK
KyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAg
ICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQu
bG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQu
YnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3Bl
cmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9w
ZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNl
bGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAg
ICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7Cisg
ICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3By
KS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
CisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkp
KQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxs
KG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3Bl
cmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENl
bGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJh
bmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKwor
R1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJl
ZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAg
ICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9q
aXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYg
U3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJy
YW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisK
K0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7
CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBp
ZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVl
T3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9
IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7
CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7
CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKwor
ICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3Vi
bGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQ
UlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5k
Ojp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBS
UmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAg
ICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAg
ICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJh
bmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7
IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJS
ZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBS
KCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0
LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3By
IH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9
LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5k
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdw
ciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJh
bmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRl
ZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAg
ICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRG
UFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
YnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0
Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsK
K30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIp
KTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5k
KSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkp
OworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sK
KyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWND
ZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZh
bHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMyT25s
eTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCeXRl
Y29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQklH
SU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UKKyAg
ICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAgICAg
c3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAg
ICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICByZXR1
cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihvcGVy
YW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90QmlnSW50
MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3RhdGUo
KQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwg
MCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVt
YmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBl
cy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0YXRl
LnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2Rl
QmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJlbnRT
dGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIsICIs
IGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkKK3sK
KyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8gcmVn
IDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihy
ZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGF1
dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0Fs
bG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBk
YXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAi
SklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgog
I2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwog
CiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJh
c2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0lu
Zm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsK
QEAgLTEwMSwxNSArMTA1LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsK
IAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNs
b3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAg
ICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBs
YW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1
Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAg
ICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tT
aXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNs
b3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9y
IHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBv
ZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhh
dmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAg
ICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBW
ZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlv
biBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNo
UmVjb3JkIHsKQEAgLTE4Myw2ICsxOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFT
U19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5n
IEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1Bh
dGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTE5MCwxMiAr
MjA3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUg
PSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5
SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBv
ZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3Ig
dGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1l
bnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7
Ci0KICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTI2Myw2ICsyNzQsMjAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lk
IHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2Ji
ZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOwor
CiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhj
ZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzAwLDkgKzMyNSwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAot
ICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNl
KGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
dm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1w
LCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dD
YXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1
bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50
KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzEwLDcg
KzMzNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwor
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpv
cGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVj
dF92YXJhcmdzCkBAIC0zMjcsNyArMzU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
Ym9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTMzNyw3ICsz
NjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29t
cGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUg
eyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7
CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVx
VHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91
YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmll
ck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91
bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC0zNTAsOCArMzc3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhl
IHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxl
IGZvcgogICAgICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsKKyAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwKTsKICAgICAgICAgdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1
ZSwgdm9pZD4KQEAgLTQ3NSw4ICs1MDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
UmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC00ODQsMTEgKzUxMSwyMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlv
blNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlv
biwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlv
bikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29s
IGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAg
ICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBA
IC01MTIsOSArNTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9p
ZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NzYsNyArNjEyLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2Vu
ZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0
IEluc3RydWN0aW9uKik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
Kik7CkBAIC02NDMsNzcgKzY4MSw4MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
dHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNs
b3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBl
bWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0Umln
aHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZv
aWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVt
aXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wg
aXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluc3RydWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQ
UlJlZyk7CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZl
Q2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNj
cmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZy
b21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03
MjgsOCArNzY5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAg
SlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc0MiwzOCAr
NzgxLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1
bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4K
LSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPios
IGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklU
QmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNl
Jik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93
KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAg
ICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25z
dCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9u
LCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2Fz
ZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxp
bmtBbGxTbG93Q2FzZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2Uo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9t
LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0g
ICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lz
dGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAg
ICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwor
ICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAg
ICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUlu
ZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTkyNSw2ICs5NDQsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0
aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlv
biopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAg
ICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTM1LDYg
Kzk1NywyNTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJp
bmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJp
bmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAg
ICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVnIGhpbnQg
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAg
RlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5
IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcu
IE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3Bl
cmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOwor
ICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92
ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
U3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQp
OworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAg
ICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJh
bmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7
CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUu
b3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1
Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9
IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9
IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcmIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAg
ICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5k
ID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBm
cHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVy
YW5kID0gb3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc090aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAg
ICAgYm9vbCB1c2VMT0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNl
bGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQg
c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0Nl
bGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAg
ICB2b2lkIHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5
IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJS
ZWcgYWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBS
UmVnIGFsbG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJl
Zyk7CisgICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8v
IE9PUFM6IE1ha2UgdGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3Qg
Zm9yZ2V0IHRvIHNldCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQg
dW5sb2NrKFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAg
ICAgU2lsZW50U3BpbGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgICAgIHZv
aWQgc2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAg
ICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3Rl
clNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRl
ciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsK
QEAgLTk1Myw3ICsxMjIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1w
VGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5k
ZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3
aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNp
Z25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTk5MCw2ICsxMjU4LDgzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAg
IGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7Cisg
ICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2
YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAg
ICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVn
IGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBB
bGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3By
ICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAg
ICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAg
ICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAg
ICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShj
b25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291
bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVk
ICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7
CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAg
T3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVn
aXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShj
b25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVy
Lm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMu
c2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tp
XSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lz
dGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7
CisKKyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAgICAgICAgdm9p
ZCBkdW1wUmVnYWxsb2NTdGF0ZSgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29k
ZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJs
b2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUs
IHRydWU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAgVmVjdG9yPExvZ0Vu
dHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBt
X3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vz
c29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBt
X2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVj
b2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgyICs0Niw4MiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4s
IERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5v
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwg
IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxz
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNz
LCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5k
T3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2Up
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTUxLDMyICsxNTEsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5z
aWduZWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExl
c3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBpbnB1dEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
b3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAg
IC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRo
ZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1l
ZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQog
ICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMuZ3By
KCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShv
cDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIo
KSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBW
YWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25k
aXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CkBAIC0yMjksMTcgKzI4MSw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRK
dW1wKGNvCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBH
UFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0gewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhp
cywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9
IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBs
YWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3Ay
aW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQp
OwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAg
ICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFp
bW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlv
biksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwor
ICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBA
IC0yNTUsNDIgKzMzMyw4OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3Qg
SW5zCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcg
cmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3Ax
KTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisK
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50
MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFy
ZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29t
cGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAg
IH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAg
aW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29t
cGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsK
KyAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFp
bW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0
aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdl
dFJIUygpOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKICAgICB9Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBp
bnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1
Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZh
bGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFs
bHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdl
IGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93
IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGlt
bWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2lu
dCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2lu
dCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0yOTksOCArNDIzLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAg
ICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAg
ICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNSw4ICs0NDcsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAg
ICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUwLDEyICs0NzAsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEp
OwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArNDg3
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBm
YWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWls
My5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8g
WmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTM4MCwxMSAr
NDk5LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihz
cmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0
R1BSLCBmcHIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4w
OworICAgICAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7
CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAg
ICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJy
YW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAg
ICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBG
UFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSks
IGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShp
bnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChp
bnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRH
UFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNy
Y0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0Jp
Z0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFk
ZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMy
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MiwxMSArNTQ3LDUzIEBAIHZv
aWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAg
ICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAg
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERv
dWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJE
b3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNl
dERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShz
cmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldElu
dDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJ
bW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0
ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQ
Uik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0lu
dDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAg
ICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsK
KyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwpAQCAtNDA2LDU0ICs2MDMsODkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVj
KGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBp
bnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAg
ICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0
ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQo
cmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVn
VDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9w
MiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBl
Y3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsK
KyAgICAgICAgY2xvYmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVh
eCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVt
cC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAg
ICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVt
cC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7
CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0g
bGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsK
KworICAgICAgICBlbnN1cmVTbG93Q2FzZShlYXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGxocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMsIGxo
c0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChsaHNHUFIpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIocmhzLCByaHNHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKworICAgICAgICBtb3Zl
KGxoc0dQUiwgZWF4KTsKKyAgICAgICAgbW92ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbGhzR1BSID0gcmVnVDQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGxocywgbGhzR1BSLCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICAg
ICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9t
aW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0y
MTQ3NDgzNjQ3LTEpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1
c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmso
dGhpcyk7CiAgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4
KTsKLSAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZl
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRv
clBvc2l0aXZlLmxpbmsodGhpcyk7Ci0gICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9t
b2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1Zh
bHVlUmVncyB7IGVheCB9KTsKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgZWF4KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUobGhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKHJocyksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0JpZ0ludCkgJiYgaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCaWdJbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgpOwogfQogCiAjZW5kaWYg
Ly8gQ1BVKFg4Nl82NCkKQEAgLTQ2Myw3ICs2OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRp
dGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQz
Mk9wMjsKQEAgLTQ3Myw2ICs3MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDAp
OwpAQCAtNTYxLDE1ICs3OTQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNv
bnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCBy
ZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwpAQCAtNzIzLDEzICs5NTQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVn
YXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNl
X2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBv
cGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50Ci0g
ICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQ
cm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Ns
b3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0
aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MCwxOCArOTY5LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYK
LQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJp
Z2h0T3BlcmFuZDsKIApAQCAtNzU5LDMzICs5NzYsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0Qmlu
YXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUg
aTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
ZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAg
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBn
ZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFu
ZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNo
R1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2Vu
LmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwor
CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIo
KSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5
OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQ
cm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxl
ZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVj
QmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
b3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmln
SW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIo
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAyLDcgKzEwOTIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ4LDIwICsxMTM4LDYg
QEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQ
UiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKLSNlbmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7
CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBAIC04NzIsMjEgKzExNDgsNzcg
QEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFT
RV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBz
Y3JhdGNoRlBSMiA9IEludmFsaWRGUFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBP
T1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0
VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXBGUFIuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9
IGZwUmVnVDA7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAo
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1Qy
OworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNl
bmRpZgogCiAgICAgSklUUmlnaHRTaGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0
T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdU
MCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNj
cmF0Y2hGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1p
dEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBw
cm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDEsMTgg
KzEyMzMsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFk
ZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRl
bXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBS
LmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3By
KCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0
d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElD
U2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Q
cm9maWxlZEZ1bmN0aW9uPgpAQCAtOTIzLDE1ICsxMjkxLDM1IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhOZWdh
dGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4K
LSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVm
ZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdzIHNy
Y1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3JjVGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1RlbXAuZW1w
bGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhOZWdhdGUg
YmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KKyAg
ICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1
ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3JjUmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1Jl
Z3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MCwxOSArMTMy
OCwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAgICBt
YXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0
Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsK
LQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9p
bnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBib29sIGdl
bmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xv
d0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRT
bG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpA
QCAtOTYyLDcgKzEzNTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0
aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
cmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0g
U3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBO
b25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTczLDEyICsxMzY4LDI4IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
CisgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMu
Zmlyc3QoKSk7CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLnNlY29uZCgpKTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KQorICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudElu
dChvcDEpKTsKKyAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQorICAgICAg
ICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7
CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBGUFJS
ZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmln
aHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBG
UDsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7CkBAIC05ODcsMjUgKzEzOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VEJpbmFyeU1hdGhJQwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgog
Ci0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMu
Zmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFH
ZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAg
ICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFu
ZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAg
ICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0
T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBl
bHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQu
c2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3Vs
dFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNo
VGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOworICAg
ICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogCi0gICAgUkVMRUFTRV9B
U1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7
CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50
KHJpZ2h0T3BlcmFuZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKKyAgICB9CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9y
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwogICAgIAogICAg
IEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJh
bmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFu
ZCkpKTsKICAgICAKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOwotICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
cmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7Ci0KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZVN0YXJ0
ID0gbGFiZWwoKTsKICNlbmRpZgpAQCAtMTAxNCwxNyArMTQ0MCwzNCBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNv
ZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUp
OwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAgICBpZiAobGVmdE9wZXJh
bmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKLSAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpIHsK
KyAgICAgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAg
ICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0
T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIH0KKwogICAgICAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBh
cml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwotICAgIH0g
ZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsZWZ0UmVncy5ncHIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmlnaHRSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzQsMTEgKzE0NzcsMTggQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIH0pOwogI2VuZGlm
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdw
cigpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQor
ICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
biByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJv
ZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1
bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRl
JiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ3LDggKzE0OTcsOCBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBK
U1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVn
cyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
IH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpOwpAQCAtMTA4NCw3ICsxNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElD
U2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNo
RnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJp
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiBy
ZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0
aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTQsMTYgKzE1
NDQsNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTQsMTUgKzE1
NTQsMzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAg
QVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFu
ZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5k
KSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVm
dE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3Mp
OwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJp
Z2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6
aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAg
ICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyBy
ZWdUMyA6IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAg
fTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
IHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAK
KyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFu
ZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAg
ZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVy
YW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisK
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
ICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gp
CkBAIC0xMTU1LDIzICsxNjE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsK
LSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVn
VDI7Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0g
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9v
cGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5
dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4NywyNyArMTYzMSw5MiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAg
UkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQ
UlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAg
IE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmln
aHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAt
PmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5n
cHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5n
cHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAg
ICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBs
ZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0
Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmln
aHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJl
Z1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAg
IEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRG
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7
CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIo
KSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVt
cExpc3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCku
ZW1wdHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7
CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQpAQCAtMTIxNSwzNCArMTcyNCwx
MDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsK
KyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZU5lZ1pl
cm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgbXVsRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnBy
KCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBS
LmZwcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3Zl
cmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVpl
cm8sIGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBz
ZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCBy
ZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
SklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJ
VE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRp
bWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6
ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxl
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsK
KyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhz
RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIo
KSk7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigp
LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5t
X2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVj
b2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMu
Z3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50
MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZw
cigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMu
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOwor
ICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9X
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBP
cCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRp
b25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdp
c3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5LDggQEAg
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNh
bGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBD
b2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFm
dGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
CiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJU
KG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICsz
MzcsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNv
bXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3Vt
ZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYsNiAr
Mzg5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAg
ICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ug
d2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVs
dGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhl
cmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJ
dGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0IChpdGVy
YXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCku
cHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5leHRD
aGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVj
a3BvaW50U2xvdyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3Vs
ZEJlUmVnVDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91
bGRCZVJlZ1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQs
IHJlZ1QwKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JPcGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAog
ICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsK
QEAgLTQ1Niw2ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAg
Ly8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxl
IHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNo
IGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0g
YnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNiArNDk5LDQzIEBAIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVy
UmVzdWx0R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRo
OworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZl
ZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFk
ZCh2YWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdz
LAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRl
clJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNl
ZFJlZ2lzdGVycywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFs
dWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRT
bG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOwor
CisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25zdCBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBK
dW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
ZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwog
CisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMt
PnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAg
ICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsKICAg
ICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgICAgICB3aWxsRGVmKGJ5dGVjb2Rl
Lm1fdmFsdWUpOwogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7
CiAKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAg
ICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0
R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJl
c3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQg
Y2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNl
LgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5n
cyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFj
ayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9
PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4m
IHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODks
MzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAu
bGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1
cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9i
eXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9z
bG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91
c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0
aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAh
IXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1f
c2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRk
U2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3Qu
anVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBz
WzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3Qm
IGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0
byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6
IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1w
KTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCBy
ZWxhdGl2ZU9mZnNldCkKQEAgLTMwOSwxMSArMzAxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW4KICAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlLCBHUFJSZWcgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7CiAKLSAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlID0gcmVnVDA7CiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7CiAjZW5kaWYK
QEAgLTMzOCwxMSArMzI5LDExIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxkZWMKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRP
cGNvZGUoLi4uKSB7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhKQoraW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BS
UmVnIHJlZykKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRh
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpLCByZWcpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSkKQEAgLTM5MywxMSArMzg0LDYgQEAgQUxXQVlTX0lOTElORSBk
b3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNV
bmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCAr
MTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEy
NDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBA
QAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rl
ci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklUOjpl
bWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSBy
ZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2Ug
Y2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29u
Y3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcg
PSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lz
dGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BS
UmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0
b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0
Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsK
KyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdU
MjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2Ug
ewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0g
VHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVz
dWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywg
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNl
cyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNw
ZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRh
Lm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNv
bnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0
YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6
IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0
cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgq
dGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhp
cywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAg
ICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0
YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAg
aWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1
c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3Rh
bmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlv
bigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7
CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25z
dHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3Rv
ciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBh
IEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1w
bGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3Ry
dWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKElt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAo
YmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgot
ICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0
aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBh
cmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhl
IGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAv
LyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsg
Ly8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3Rh
bmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZh
bHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxs
OworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRU
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVn
IHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVt
cC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRl
bXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNo
b3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVt
cGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgq
dGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdw
cigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAg
ICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHBy
b3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAu
Z3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2
YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIo
KSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAg
ICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQo
Z2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3Rp
dmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZh
bCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4g
dXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1Qx
KTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNl
VmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9y
IFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAg
ICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAg
ICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAg
ICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFu
Y2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90
b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVV
bmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlz
Q2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1w
IHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0g
anVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIs
IHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisK
KyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAg
IEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAg
ICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIsMzAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICB0ZXN0NjQoWmVybywgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0OTMsMjcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVt
YmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
RnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUyMyw1NiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVn
VDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBp
c0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlu
cHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBC
aWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEs
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBC
aWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQz
MikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0
aW9uKikKQEAgLTMxMywxOCArNTg5LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0
aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFs
LCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0g
anVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAg
IGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjM4LDYx
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1w
LmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAgY29t
cGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBp
c05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwor
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzcwMywxMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3Vs
dCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcy
Miw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRo
aXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2
YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgSnVt
cCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
CisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5rKHRo
aXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIg
Kzc2NSwyMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0g
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChz
cmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmlu
Zyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1i
b2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJpbmcu
bGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3Bl
Y1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJp
bmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNT
eW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAoc3Jj
ICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25lID0g
YnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNy
YyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAgICAg
IEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcgbmFt
ZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBy
ZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
b3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZh
bHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIE9PUFM6IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTogc3Ry
aW5ncywgYml0aW50LCBvYmplY3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAvLyBT
ZWUgY29tbWVudCBiZWxvdy4KKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8s
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3Qg
SlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhl
biBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAo
d2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVs
eSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxs
IGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAg
ICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFn
Z2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFy
IG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBv
ciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBhZ2Fp
bnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZs
aXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblpl
cm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsK
LSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBi
eXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
Y29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNv
bmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVl
IHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBG
UFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0
Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3By
KCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVn
IHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZw
UmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRp
dGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5s
aW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gx
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNo
MUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIg
PSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwg
c2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk3MCwxMjkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBh
dXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAg
ICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisg
ICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAg
Ly8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAg
ICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisg
ICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5v
dENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisK
KyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAg
ICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3Qs
IGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBv
biB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAv
LyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisg
ICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzExMDEsMjYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8v
IE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTUwMCwxMCArMTEyOSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhl
cikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUx
NSw2NSArMTE2MCwzMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1
YwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50
ZXIpKSkgeworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBhdXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihz
cGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9v
bCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENvbXBh
cmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEg
PyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyks
IHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1Zh
bHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChy
aHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMs
IGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAg
ICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0
cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIo
KTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBh
cmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMg
aGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBM
aXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihs
aHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BS
KSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAg
ICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICB9CisKKyAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2
b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwor
ICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4
cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwg
OiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9y
ZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgaWYgKCF2YWx1ZXNDb3Vs
ZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgIGlm
ICghaXNFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhz
KSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3By
KCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJo
c0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFy
ZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9P
UFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0
aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7Cisg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAg
ICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjpl
bWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7
Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBs
PE9wRXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJl
Z1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOworICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAKLSAgICBH
UFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhz
R1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
ICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BO
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKKyAgICAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBh
cmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNH
UFIsIHJoc0dQUik7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBi
b3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0p
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1w
bDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVn
VDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Cisg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxo
c0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzogV2Ug
Y2FuIG1ha2UgdGhpcyBhIHNpbmdsZSBicmFuY2ggaWYgdGhlIHJlc3RvcmUgZG9lc24ndCBjbG9i
YmVyIHJldHVyblZhbHVlR1BSLgorICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
c2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhz
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDgzLDE0NiBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAs
IHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0g
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdw
Q29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFy
ZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVF
cXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAg
ICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7Cisg
ICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGNv
bXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3Bl
Y3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BS
KSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAK
LSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWlu
ZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQg
PT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAo
bGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0g
ICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdt
ZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGgg
YSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJl
cXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRo
ZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8
NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQg
MAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBi
ZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92
ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdU
MSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJp
dHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwg
cmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQo
cmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJl
Z1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1
KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAg
bW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMg
YSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwg
cmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChy
ZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNW
YWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRv
IGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0
ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsK
KyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAg
Z290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQg
b2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNo
SWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBh
IEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBp
dCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQg
aXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2gg
Yml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAx
PDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCBy
ZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJp
dHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0
KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUp
OworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJp
bmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
Ly8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVy
ZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3Ro
IGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwor
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQo
MSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdU
NSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNl
IC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxz
ICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChy
ZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0g
ICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdz
IGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdz
IGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlz
KTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAg
ICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4K
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8v
IEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBp
bnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3Mg
YSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRP
Sy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAg
cmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCAr
MTY0MCwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGlu
dCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0
ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwg
c3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVh
bDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVk
IDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAg
IGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAg
ICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3Bl
Y3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBM
aXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVT
RShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAg
ICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQot
ICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRo
ZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwg
aGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5
IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAg
YWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1
KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJv
dmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUg
aXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdU
MSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVj
aXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBz
bG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAg
fQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAg
ICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYg
KGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRo
OworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMg
ZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwg
d2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZl
bHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAg
ICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBh
ZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdo
IGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcg
b25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQo
cmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1Qz
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVn
VDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0
RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBp
cyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1v
cmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBk
byB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2Ug
Ly8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMg
KHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJl
Z1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAg
ICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3Mg
YW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3Mg
YSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMp
OwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAg
IGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQp
OworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmlu
Z3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdz
IGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYg
aXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAg
bGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAg
ICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc4MSwyMjYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxP
cEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpO
U3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAg
ICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAg
ICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAg
ICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251
bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdU
MCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlz
QmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikp
IHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8g
aXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludDsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1
bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlz
QmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9T
dHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdU
MCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVh
bCB3aXRoIHRoaXMuCisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNv
IHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAK
ICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjA1OCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29k
ZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUp
ICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVy
YW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVH
UFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSAr
MjA4OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJs
ZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRp
bmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0g
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTkyMiw5ICsyMTE0LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFj
dGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFi
bGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIx
MzgsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBT
dHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChq
dW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRH
UFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxG
b3JDYWxsKCk7IC8vIE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVCbG9j
aygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVn
Z2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVi
dWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
ICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFs
dWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAw
IDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRH
UFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2Ny
YXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
CisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVP
cCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BS
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1w
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAK
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFy
ZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9v
cF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
ZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4o
Y3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVy
IHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAg
ICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3Vy
IGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAg
ICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxl
ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVl
KGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAg
fQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI4
OSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJl
Z1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3By
KCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwg
c2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBz
Y29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA0NSwxMyArMjMxMyw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1Ro
aXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2Fj
aGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ny
Y0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3Ny
Y0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVk
U3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0
R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAg
ICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVw
ZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNl
IGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYg
KHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJl
SUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBz
aW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAg
ICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRH
UFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAg
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlz
IHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpT
VmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5
cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0
YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI0MDQsMzEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVy
SUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcg
PSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJU
ZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNl
KCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVS
ZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVt
cDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOwor
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVP
clJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSkpOwpAQCAtMTA4Niw2NCArMjQ0NiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6Pigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19
Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
ICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5w
dXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBm
b3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVt
cCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTEx
NjIsOCArMjQ5MSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
CiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdl
IGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJv
bUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVs
aWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFy
IHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAg
IHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVj
dGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFy
bHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjpl
YXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjUxOSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBm
b3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGlt
aXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1MzYs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAg
ICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1p
dEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9P
UFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0
b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjU2Miw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1
cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NzIsMTggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNv
ZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjU5Myw0MiBAQCB2b2lkIEpJ
VDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAg
ICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAo
IXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVH
UFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJs
b2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2NTcsNDYgQEAgdm9p
ZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUp
OworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVzZXQo
KTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlz
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7Cisg
ICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2Rl
SUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0
aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjcyNywxOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVj
b2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVn
VDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFy
Z0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVl
c1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBh
cmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMzYwLDE0ICsyNzQ4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3Np
emUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFy
Z0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRo
aXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAg
fQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
QXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdU
MCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzgxLDQyIEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1l
cmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEdQUlJlZyBlbnVtZXJh
dG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGJhc2VDZWxsOworICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkgeworICAgICAgICAgICAgYmFzZUNlbGwuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgICAgICBiYXNlR1BSID0gYmFzZUNlbGwtPmdwcigpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KIAotICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0
R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdU
MCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgzNiw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBm
YWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2
LDYgKzI4NjUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAK
IHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1h
eWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMjg5MiwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5n
U2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJh
eU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJs
ZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVy
IHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5
cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAg
YWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7
CkBAIC0xNDc4LDEzICsyOTA5LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGMKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbElu
Zm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9m
aWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRj
aGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0
aCkpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTQyLDkyIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBl
bnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGlu
ZGV4IH07CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBiYXNlQ2VsbDsKKyAgICAgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisKKyAgICAgICAgR1BSUmVnIGVudW1l
cmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQ
UiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFI7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpIHsKKyAgICAgICAgICAgIGJhc2VDZWxsLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICAgICAgYmFzZUdQUiA9IGJhc2VDZWxsLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
Q2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29t
cHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEp
OwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9m
TGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAg
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworCisg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5l
IHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVz
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7
CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwor
ICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVy
d2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdU
MSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8
aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQg
b2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1
YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdU
MCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTU1MCwyMSArMzAzNyw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVy
ZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQ
UjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVy
YW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9y
VGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0g
ZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0g
cmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BS
KTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRl
eEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwg
cmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxv
YWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0
R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVy
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDkxLDUx
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3Bl
cnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51
bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8v
IE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVt
ZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1w
bGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlz
LCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRl
eFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRl
eEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhP
ZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJv
dW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9Q
dHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BS
LCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTU5OCw2ICszMTQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBl
KGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRh
dGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0g
Ynl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsK
KwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAog
ICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzIwNyw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFk
b3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fz
c2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxs
IGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAt
MTY3Miw2ICszMjI0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3By
bwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNo
YWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENh
bGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25B
cmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4i
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRv
d0NoaWNrZW5UYWlsPigpOwpAQCAtMTcwMiwxMSArMzI1NywyMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6
d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwg
cmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVn
VDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjc4LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0
X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFy
YW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1
YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1Q
YXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5j
aDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsK
KyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1t
MzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94
SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1Qw
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7
CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkp
LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzMzMjcsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1Ro
YW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2Fk
VmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVz
dWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDAp
OwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3Vu
ZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgp
KTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0g
anVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVW
YWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNo
MzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAg
IGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAg
bW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmpl
Y3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVH
UFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAg
ICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwog
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwor
ICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0
Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZh
bHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xv
d0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVs
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCArMjc1LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTUwOSw3
ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVn
aXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBp
bmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdl
dFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJp
bmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisK
IG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKQEAgLTUxLDQ5ICs1MywxMTcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVy
dHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BS
OworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7
CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIg
PSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVzdWx0R1BSOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGluZGV4aW5nVHlw
ZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkg
PiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAg
IGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgICAgICBu
b3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAg
IG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwor
ICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRo
aXMpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBt
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BS
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHBy
b3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1
c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0Nl
bGxDaGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BS
LCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNl
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkK
KyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7
CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHBy
b3BlcnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlm
ICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBp
ZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFs
SW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMiwzOSAr
MTcyLDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgq
dGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAg
cHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigK
ICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAg
ICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNl
cyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFs
SW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Miw2ICsy
NTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5k
ZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJl
PworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBw
cm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3Bl
cnR5KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTQsOCAr
NDIwLDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAv
LyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNl
LCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFpbGFi
bGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlOYW1l
LAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIs
IGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRl
Y29kZSkpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCkBAIC0zMzQsNyArNDQzLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRC
eVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Miw3
ICs0NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6
OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBh
dXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
ICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzQ1OSwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxE
aXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzcyLDQ5
ICs0ODAsMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhp
cywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0
aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7Cisg
ICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BS
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9w
dGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0
dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5t
X2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJf
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNz
b3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0
dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBi
eXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBi
eXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBz
ZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBi
YXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJv
cGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHBy
b3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIo
KTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5
VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdU
MSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdU
Mik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAq
dGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNz
b3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdw
cigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEp
OworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjQsMTggKzU4OCw1MiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1
c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNo
b3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0
ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ0NCwyNSArNjQyLDI3IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTkgKzY3Miw3MCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVy
dHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRj
aEdQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVy
dHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDM7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0K
KwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRo
ZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMu
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDkzLDIxMyArNzQ0LDM2OCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBT
aG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2Rl
bEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BS
LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Cisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhN
b2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVN
ZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRN
b2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9k
ZS5hcnJheVByb2ZpbGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNlTE9M
KCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
LmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1v
ZGUubGluayh0aGlzKTsKICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgR1BSUmVnIGJh
c2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdl
bik7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNH
UFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0
aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BS
ID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0
aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOwor
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107
CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVl
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBi
eXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQg
dGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3Qg
YWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQ
YXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3Ry
dWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlz
LgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZS
ZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhp
cywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFs
dWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0g
cmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BS
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBl
Y21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCwg
cHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29kZSkpOwogICAgIAogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTcwOSw3NyArMTExNSw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1F
OiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0
byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRG
aWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
cHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xv
d1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBi
YXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
aW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5C
eUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJ
ZEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAg
ICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29s
dmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNzkxLDE3ICsxMjE1LDI1IEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1l
dGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xv
Y2FsU2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3By
KCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAg
SlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxv
Y2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSks
IHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwg
cmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIApAQCAtODExLDIxICsxMjQzLDM2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25z
dGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3Bl
LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0
aW9uYWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNjb3BlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyAr
K2kpCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJl
c3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04MzgsOSArMTI4
NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtODUz
LDI5ICsxMzAwLDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlz
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtODg0LDE1ICsxMzMxLDIwIEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjpl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJS
ZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJl
U2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNs
b3QsIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2Ny
YXRjaEdQUikpOworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNW
YWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAgLTkwNiwxMiArMTM1OCw2IEBAIHZvaWQgSklU
OjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1Qw
KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTkyMiw1MSArMTM2OCw4NCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEu
bV9vcGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0
Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29w
ZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsK
LSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBv
ZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAg
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQ
UjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAg
ICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zm
c2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9
IHJlZ1QyOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
dHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGpp
dEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5k
U2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BS
KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1
c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBp
c091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVz
dGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAg
ICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZz
ZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBuZWczMihvZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
R1BSLCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIs
IG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
aWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBy
ZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihz
Y29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZh
bHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTk4MCwxMCAr
MTQ1OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIp
OworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1
bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogCkBAIC05OTYsMjcgKzE0NzUsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVU
eXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
LSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
LCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTAyNiw0MCArMTUwNSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQp
OwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBp
bmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQs
IHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0
cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDczLDIxICsxNTM0LDQ5IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwog
CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVW
YWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0
cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1
ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcg
c2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgR1BS
UmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAg
IG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseVZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsK
KyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBidXR0
ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRHUFIpOyAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgp
IC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7Cisg
ICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAg
bmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUlu
ZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEwOTgsMjggKzE1
ODcsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRj
aFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNo
R1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xv
YmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
Y29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0
Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0
KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VM
T0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9p
bnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAq
IHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTEzNCwxMiArMTY1MiwyMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2Yg
ZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYg
d2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdh
aW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBE
eW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxy
ZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwpAQCAtMTE1MywyMyArMTY4MCwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRv
bid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcg
dGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBw
YXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2Up
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTE4NiwxMCAr
MTcyMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3MzksMTc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1l
bnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhp
cywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50
c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0
KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1
bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJn
dW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJn
dW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAg
dmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9
IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVz
cyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwg
ISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28g
dGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9y
IG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVn
YWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQK
KyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBj
b2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJy
YW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIC8v
IHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNw
ZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2
YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3Bl
cmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BS
ID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BS
KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93
bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY3JhdGNoVmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdw
cigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAg
ICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIH0KKwogICAg
IEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVz
ZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAg
IG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAg
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdU
MCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2go
dm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVj
b3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8g
bmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2ls
ZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxS
ZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5v
dENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5p
c1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBL
bm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJy
YW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndp
c2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBv
cHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBl
eGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUg
Y29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoZ3By
Rm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAg
ICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAg
ICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVO
b3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEyNzEsMTEgKzE5MjIsMjYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
Ly8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBT
cGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyODUsMTAgKzE5NTEsMjMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
CisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUo
YmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3Mo
YmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZh
bD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTEzODUsOCArMjA2NCwyNSBAQCB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7CisgICAgfQor
CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJl
Zm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50Rmls
bEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0xNDA0LDYgKzIxMDAsOCBAQCB2b2lkIEpJVDo6
ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICAKQEAgLTE0NjksNiAr
MjE2Nyw4IEBAIHRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmEKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsK
KyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgQVNTRVJUKChwdXRLaW5kID09IERpcmVjdCAm
JiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IE5v
dERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVy
SW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21h
cFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVy
biBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJs
ZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAg
ICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBv
biBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7
CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0
ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAg
ICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjY3NDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5Niw2ICszOTYsMTAgQEAgc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMo
KQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIE9w
dGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAgICBPcHRpb25zOjpmb3JjZUxPTCgpID0gMTsKKyAg
ICBPcHRpb25zOjp1c2VMTEludCgpID0gMTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBP
cHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFi
bGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJQ01GdXp6ZXIs
IDQyNDI0MiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdM
SUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBv
c2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415817</attachid>
            <date>2020-12-09 17:44:43 -0800</date>
            <delta_ts>2020-12-10 12:48:21 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>460502</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFw
aChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5
dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYg
aWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdy
YXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3Ry
dWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5p
bmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAg
ICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAg
Y29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5k
ZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkp
LCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25z
LmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3Vs
YXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewogICAgICAgICAgICAgYXV0byYg
Y3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkgKyBibG9jay5sZWFkZXJPZmZz
ZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlv
biwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NyArMTA2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29k
ZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxCbG9jaz4gewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVt
cEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
T3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rp
b25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmls
ZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKIAogICAgIHZvaWQgZHVt
cElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlv
bmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwg
UHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCisgICAgdm9pZCBkdW1wKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNw
ZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkK
ICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9ja1R5cGU+Ojpk
dW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVh
ZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMz
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElDU3Rh
dHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAgIEJ5
dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENvZGVC
bG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlv
bnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6
Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwg
Y29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKQEAgLTI0NDgsNiArMjQ0OCw4IEBAIHVuc2ln
bmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygKIHsKICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAgaWYgKE9wdGlvbnM6OnRlc3RUaGVG
VEwoKSkgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21waWxhdGlvbikKICAgICAgICAg
ICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0
aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNjc0MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBAIHZvaWQgQ29kZUJsb2Nr
Ojpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92
YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAorfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hDYXRjaFByb2ZpbGUo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBp
ZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CisgICAgICAgIGZvciAoYXV0
byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpCisgICAgICAgICAg
ICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJh
aXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09
IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUg
PSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0g
c3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9y
LCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIz
IEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQg
T3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51
bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90
IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fs
cyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAg
IHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1U
bXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51
bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5n
cm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRp
YWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAg
IGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMs
IHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAg
OiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVt
TG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0g
ICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7
CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29u
c3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxs
KGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApAQCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoK
ICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+
JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJn
dW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMo
b3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5u
dW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5z
aXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMg
KzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQogICAgIHNpemVfdCBudW1iZXJPZkxvY2Fscygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBu
dW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJl
ck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisg
ICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90
PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSAxOworICAgIH0KICAgICBzaXpl
X3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHgg
PCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJn
dW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9
CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlk
eDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKICAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25z
dGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwg
bnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAgICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXpl
X3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4
KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1f
dmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQo
c2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsg
fQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVy
biBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJl
ZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAg
ICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4
KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQorICAg
IENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
c1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQg
b3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMo
KSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0g
bnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRt
cHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUg
PSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6
ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25z
dGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5l
d1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3Rv
clRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBw
dWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAg
ICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAo
dHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYm
IG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29u
c3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxv
Y2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgs
MTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIg
KHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAm
JiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQob3Bl
cmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRv
TG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzc0LDggQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZD
b25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50
b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5k
KE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArNDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAg
ICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMo
KSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1l
bnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXgg
LSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRl
eCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOworICAgICAgICBp
ZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJl
ck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29u
c3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7Cisg
ICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRl
eCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT3Bl
cmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAgIH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVl
KQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJn
dW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFy
ZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1B
cmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMg
YXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25zdGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRo
ZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9u
dW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAg
dW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxp
bmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxp
bmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3RyZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2
aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJh
bmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQg
T3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgi
ICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygp
OyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01NywxMCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxU
Pjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1w
SW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxl
ZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRz
PFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBi
b29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAg
ICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1l
bnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAg
IGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNh
bGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRl
ZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBp
c0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUg
JiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2
YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMy
U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYm
ICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBu
ZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24n
dCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1
YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsK
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52
YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wg
aXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92
aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4g
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3Rh
bnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdp
c3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVn
aXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgp
IGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBp
bnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQog
ICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9w
ZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGlu
dCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRU
b09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgpIHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQogCiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwog
fTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3Vt
ZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9mZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7Cisg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVy
YW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI2NzQz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29k
ZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1U
bXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRl
cnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4
ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTIsNyAr
MzUyLDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCksIDAsIDApOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCksIDAsIDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1h
cCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmls
aXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDEyICszMCwxNSBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNv
ZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2lu
Y2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
IkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgi
CiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2Rl
T3JpZ2luTWFwLmgiCkBAIC02MCw2ICs2Myw4MzMgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVU
aW1lOwogU2Vjb25kcyB0b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIz
Q29tcGlsZVRpbWU7CiAKK3ZvaWQgSklUOjpzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIHNldFR5cGUgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9jdXJyZW50UHJl
ZGljdGlvbnMub3BlcmFuZChyZWcpID0gdHlwZTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RU
eXBlID0gWyZdIChhdXRvIGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV9kc3QsIHR5cGUpOworICAgIH07CisKKyAgICBhdXRvIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgIC8v
c2V0RHN0VHlwZShieXRlY29kZSwgcHJvZmlsZXMuZ2V0KCZieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9wcm9maWxlKSk7CisgICAgICAgIC8vIFdlIHJhY2lseSByZWFkIHRoaXMsIHNp
bmNlIGl0IHNob3VsZCBvbmx5IGdyb3cgaW4gdGhlIHR5cGVzIGl0IHJlcHJlc2VudHMuCisgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICB9OworCisgICAgYXV0byB0eXBlRm9yID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgLT4gU3BlY3VsYXRlZFR5cGUgeworICAgICAgICBp
ZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25G
cm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgfTsKKworICAg
IHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2dldF9hcmd1
bWVudDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QXJndW1lbnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfZXZh
bDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2FsbEV2YWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGw6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGw+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJh
cmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhp
czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJp
dG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3Qs
IG1ldGFkYXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9u
KTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9p
dGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0
YWRhdGEubV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fdmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+
KCkubV9zcmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ug
b3BfdGFpbF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25h
bWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0
X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJv
dG90eXBlX29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X2ludGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5
dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5
dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50
MzJPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNB
bnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0Rv
dWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAg
ICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYg
KGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09i
amVjdFNwZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5
YmUgd2UgY2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2Fz
ZSBvcF9tdWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsK
KyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fcmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2Zp
bGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3Vi
bGU7CisgICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJv
ZHVjZU5hTkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShy
aWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9
IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBi
ZXR0ZXIgdy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0
ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3Ry
dWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BN
dWw+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9k
aXYpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAm
JiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
IC8vIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91Ymxl
UHVyZU5hTik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAg
ICAgLy8gTWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Ig
c3BlY3VsYXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9w
X25lZ2F0ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAg
ICAgaWYgKCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShk
c3QsIHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNBbnlJbnRBc0RvdWJs
ZSA6IFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAg
ICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlw
ZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgewor
ICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmln
SW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwor
ICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9p
bmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+
KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3Jj
RHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAg
ICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAg
ICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAg
ICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYg
cmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29k
ZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNh
c2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxl
ID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAg
aWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhh
bmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5
cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigp
OworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAg
aWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNw
ZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBN
YXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3Mg
YWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHBy
b2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhl
Y3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgor
ICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1f
b3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsg
KytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3Bl
Y090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3Bl
Y0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCks
IFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2
ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNl
ZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0
cmNhdD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1
bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1
bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dl
bmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVy
YWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51
bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJl
X3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0
dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3Bl
Y1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVf
Zm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJn
dW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVj
dEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1l
bnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50
czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1
bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2Vu
ZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVy
YXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BB
cmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFk
PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVn
ZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwg
U3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3Ry
aWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3Ry
aWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVy
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90
eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5
cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3Ry
aW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBl
PihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5
cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUu
bV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5
SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlf
dmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90
aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVj
a190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6
CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2Ft
cGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAg
Y2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBz
OgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNl
IG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3Bf
ZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6Cisg
ICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3By
b3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ug
b3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBj
YXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9u
dWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRl
ZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToK
KyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bf
amxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAg
Y2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5s
ZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToK
KyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3Bf
bG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9j
aGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxf
ZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRf
YnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3Vt
ZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0
dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisg
ICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1
bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6Cisg
ICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1
bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2Nv
bnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVj
azoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRf
dGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1
cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNh
c2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVj
a3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBj
aGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vh
cmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246Cisg
ICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9n
ZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0
b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3Vl
OgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJv
cGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFw
aD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVk
aWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJl
ZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAw
LCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFs
dWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAg
ICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAg
ICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xu
KCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVBy
b2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJn
KTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmls
ZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRh
dGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdU
Rjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0
aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdl
ZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2
ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93
IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElz
IGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50
IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBj
YXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4K
KyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9j
ayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMg
PSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAo
IWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZz
ZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRI
ZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2N1cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQ
cmVkaWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChj
aGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAg
bV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBt
X3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q2FsbCgKQEAgLTY3LDYgKzg5NywxMiBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0
clRhZz4oKSk7CiB9CiAKK2Jvb2wgSklUOjp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxP
TCA9IHRydWU7CisgICAgcmV0dXJuIG1fdXNlTE9MOworfQorCiBKSVQ6OkpJVChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJw
cmV0ZXIodm0uaW50ZXJwcmV0ZXIpCkBAIC03Niw2ICs5MTIsNyBAQCBKSVQ6OkpJVChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFs
c2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKIHsKKyAgICBtX3VzZUxPTCA9IE9wdGlvbnM6OmZvcmNlTE9MKCk7CiB9CiAKIEpJ
VDo6fkpJVCgpCkBAIC0xMzcsMTEgKzk3NCwxNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCkKICAgICAgICAgKyttX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsgXAog
ICAgIE5FWFRfT1BDT0RFKG5hbWUpCiAKLSNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAor
I2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lLCBkc3QsIHR5cGUpIFwKICAgICBjYXNlIG9wXyMj
bmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUlu
ZGV4KSB7IFwKKyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7IFwKKyAgICAgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOyBcCiAgICAgICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7IFwKKyAgICAgICAgICAgIGlmICh1c2VMT0wo
KSAmJiBkc3QuaXNWYWxpZCgpKSB7XAorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHR5cGU7IFwKKyAgICAgICAgICAgICAgICB3aWxsRGVmKGRzdCk7IFwKKyAgICAgICAgICAgIH0g
XAogICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREVfSU5fTUFJTihvcF8jI25hbWUpOyBc
CiAgICAgfQpAQCAtMTU2LDI2ICs5OTksMzIgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRl
ck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNl
IG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBp
dGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBzbG93
Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZpbmUg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwK
LSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3df
cGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nh
c2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJlc3Vs
dC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0Lmlz
VmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2Uu
ZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBORVhU
X09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBydW5QcmVk
aWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCkBA
IC0yMzEsMjAgKzEwODAsODYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Ns
b3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7Ci0gICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA+IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1
Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gTGV0
J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KLSAgICAgICAgICAg
IGJyZWFrcG9pbnQoKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRC
bG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQu
cmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZSht
X2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsK
KyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9j
aygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1
Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkp
CisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBl
bmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKLSAg
ICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsK
LSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0
aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgICAgICBBU1NFUlQoY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpOworICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7
CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9j
ayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFkZXJP
ZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAgICAg
ICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGF0IGVuZCBv
ZiBiYiMiLCBtX2N1cnJlbnRCbG9jay0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21f
Y3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0Zv
ckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9j
dXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJl
bnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9t
UHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29y
cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3Jz
U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVj
ZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAg
KCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVk
ZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21Q
cmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBy
ZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0
ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJs
b2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4
KCldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcHJldmlv
dXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAgICBpZiAobV9ieXRl
Y29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGlu
c3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAgICAgICAgICAgIC8v
IExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCisgICAgICAg
ICAgICBicmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kaXNhc3NlbWJs
ZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRl
eCkucHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisK
KyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElO
RykKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+IDApIC8vIEF2b2lkIHRoZSBvdmVyaGVh
ZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KQEAgLTI3OCw0NiArMTE5Myw1MyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICNlbmRpZgogCisKKyAg
ICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBiZWZv
cmUgYmMjIiwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGR1bXBSZWdh
bGxvY1N0YXRlKCk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFs
KQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQotICAgICAgICBERUZJTkVfU0xPV19PUChs
ZXNzZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGdyZWF0ZXJlcSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yKQotICAgICAgICBERUZJTkVfU0xP
V19PUCh0eXBlb2YpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikKLSAgICAgICAgREVGSU5F
X1NMT1dfT1Aoc3RyY2F0KQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQotICAg
ICAgICBERUZJTkVfU0xPV19PUChnZXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0
X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVf
Zm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChk
ZWZpbmVfZGF0YV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vz
c29yX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUCh1bnJlYWNoYWJsZSkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yKQotICAgICAgICBERUZJTkVfU0xP
V19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19h
cnJheV9idWZmZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQotICAgICAgICBERUZJTkVfU0xPV19P
UChoYXNfZ2VuZXJpY19wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3Bl
cnR5X2VudW1lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZykK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0
ZV9yZXN0KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AobmV3X3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0
ZV9nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0
b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKHBvdykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAg
IERFRklORV9TTE9XX09QKGxlc3MsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLm1f
ZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoZ3JlYXRlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+
KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChpc19jYWxsYWJsZSwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzQ2FsbGFibGU+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVf
U0xPV19PUChpc19jb25zdHJ1Y3RvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ29uc3Ry
dWN0b3I+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBl
b2YsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCkubV9kc3QsIFNwZWNTdHJpbmcp
CisgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAg
IERFRklORV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFR5cGVvZklzRnVuY3Rpb24+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChzdHJjYXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCkubV9k
c3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSwg
VmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfbGV4aWNhbF9lbnZpcm9ubWVudCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxl
eGljYWxFbnZpcm9ubWVudD4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChnZXRfYnlfdmFsX3dpdGhfdGhpcywgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsV2l0aFRoaXM+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVf
U0xPV19PUChwdXRfYnlfaWRfd2l0aF90aGlzLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVf
Zm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKS5tX2RzdCwgU3BlY0hlYXBU
b3ApCisgICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5LCBWaXJ0dWFs
UmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nl
c3Nvcl9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJ
TkVfU0xPV19PUCh1bnJlYWNoYWJsZSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAg
ICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19zdGF0aWNfZXJyb3IsIFZpcnR1YWxSZWdpc3Rlcigp
LCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFk
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLm1fZHN0LCBT
cGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKS5tX2RzdCwgU3BlY0FycmF5KQor
ICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
cHJlYWQ+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdl
dF9lbnVtZXJhYmxlX2xlbmd0aCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFi
bGVMZW5ndGg+KCkubV9kc3QsIFNwZWNJbnQzMk9ubHkpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGhhc19nZW5lcmljX3Byb3BlcnR5LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJp
Y1Byb3BlcnR5PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCkubV9kc3QsIFNwZWNDZWxsKQorICAgICAgICBERUZJTkVfU0xPV19P
UCh0b19pbmRleF9zdHJpbmcsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5n
PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGly
ZWN0X2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3Vt
ZW50cz4oKS5tX2RzdCwgU3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVTY29wZWRBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNTY29wZWRBcmd1bWVudHMpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIp
CisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5LCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLm1fZHN0LCBT
cGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVQcm9taXNlPigpLm1fZHN0LCBTcGVjUHJvbWlzZU9iamVjdCkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AobmV3X3Byb21pc2UsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9t
aXNlPigpLm1fZHN0LCBTcGVjUHJvbWlzZU9iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRv
cj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfYXN5bmNfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNH
ZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1df
T1AobmV3X2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4o
KS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChwb3csIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQb3c+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJlciB8
IFNwZWNCaWdJbnQpCiAKICAgICAgICAgREVGSU5FX09QKG9wX2FkZCkKICAgICAgICAgREVGSU5F
X09QKG9wX2JpdG5vdCkKQEAgLTM5OCw3ICsxMzIwLDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJfYmVnaW4p
CiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2VuZCkKICAgICAgICAgREVGSU5F
X09QKG9wX2xzaGlmdCkKKyNpZiBDUFUoWDg2XzY0KQogICAgICAgICBERUZJTkVfT1Aob3BfbW9k
KQorI2Vsc2UKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobW9kLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTW9kPigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQorI2Vu
ZGlmCiAgICAgICAgIERFRklORV9PUChvcF9tb3YpCiAgICAgICAgIERFRklORV9PUChvcF9tdWwp
CiAgICAgICAgIERFRklORV9PUChvcF9uZWdhdGUpCkBAIC00NzcsNiArMTQwMywzOCBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9jaGVja2VkVXNl
TE9MKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90aHJvdzoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2ptcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lu
c3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX25vcDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZToKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2RlYnVn
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNl
TE9MID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAg
ICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0
ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAt
NTE1LDEyICsxNDczLDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAg
ICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxl
PihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93
Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAg
IGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRl
Y29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisgICAgICAgIC8v
Qnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC01NzksNyArMTUz
OSw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMp
Ci0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTcsNiArMTU1Niw5IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRl
cmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNp
Z25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzMsMTUgKzE1OTUsMTggQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIg
LSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9X
SVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgp
ICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJz
dFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMg
bGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAg
ICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgp
IHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZz
ZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5t
X2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBl
YXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2Up
OworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAg
ICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAtNzc0LDYgKzE3
MzksMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBmb3IgKGF1dG8mIGV4aXQgOiBt
X2V4aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0Owor
ICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgIGp1bXBzLmxpbmsodGhp
cyk7CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAg
ICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0cy4KKworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKm1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENv
ZGVQdHI8T1NSRXhpdFB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgLy9pZiAo
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIC8vICAgIGRlc3RpbmF0aW9uID0g
TExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhpdF90cmFt
cG9saW5lKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExM
SW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAg
ICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPm1ldGFk
YXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOworICAgICAg
ICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAgICAgICBtb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworICAg
IH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKQEAgLTEwNTgsNiArMjA0NSw3MTMgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUo
KQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBp
bGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhp
dEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAg
aWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1f
Ynl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUlu
ZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5k
KGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1
dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUu
IFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8g
Y29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5h
bmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFy
bS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2Vk
Q2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51
bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lz
dGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxs
b3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFkZChy
ZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0
JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUu
IFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8v
IGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVu
YW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBh
cm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRS
ZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisK
K3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBh
IGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9j
ayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRv
bid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBp
cyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3Ry
dWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
cmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAg
Ly8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmllci4gQnV0IGdlbmVy
YWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBmaWd1cmUgc29tZXRo
aW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAvLyAgICBDUkFT
SCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBh
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7Cisg
ICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChy
ZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3By
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNB
bGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcu
Z3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAg
ICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xv
YmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2
YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBh
dXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYgKHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUu
b3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBp
ZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3Bl
cmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOwor
ICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIGlzQWxsb2NhdGVk
L2xvY2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAvLyBoYXZlIGNvZGUg
dGhhdCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vIC0gc3Bp
bGxGb3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vCisgICAg
ICAgIC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2UgdGhlIFZhbHVlT3Bl
cmFuZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxvY2F0aW5nIHRoZSBy
ZWdpc3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1wLgorICAgICAgICAv
LyBPdGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNhbGxzIHVubG9jaygp
LCB3ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuCisgICAg
ICAgIHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IGZh
bHNlOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAg
UmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3Ig
KGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5z
KHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93
ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAg
IC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0
OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUu
aXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAg
IH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJ
Zk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAg
IGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTaWxlbnRT
cGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29yZCByZXN1bHQ7
CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAo
UmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgaWYgKHJl
Z1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5zYXZlUGxh
bi5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJl
Zyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmVzdWx0LnN0
YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lz
dGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29u
c3QgU2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3Bp
bGxlZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJl
c3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpLCByZWNvcmQuc2F2ZVBs
YW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxh
bikKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzYXZlUGxhbikgeworICAgICAgICBSZWcgcmVn
ID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNl
Y29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAgIG5vcCgpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAg
IEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5i
b3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgIG5vcCgp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQ
bGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9
CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdw
cikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAor
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94
SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBz
dG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9w
ZXJhbmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5Owor
ICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsg
KnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShm
cHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7IC8vIE9P
UFM6IFZhbGlkYXRlIHRoYXQgZm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykgdGhhdCBkZWYs
IHdpbGxEZWYgd2FzIGNhbGxlZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBh
c3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVj
Qnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdw
cikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsK
KyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQor
Cit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7
CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJl
ZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAg
ICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBH
UFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6Omdw
cihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDog
bV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBS
KCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJ
VDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJP
cGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fklu
dDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJ
VDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
YXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29w
ZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
Tm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
SW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNl
bGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFu
ZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlm
ICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwg
SGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNw
ZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFu
ZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90
Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxs
Q2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNl
bGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZh
bHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6
On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAg
ICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2pp
dC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFu
ZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
OiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVn
ID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJs
ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6
OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBt
X2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAg
cmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVl
T3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9
OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAg
IG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZl
VGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5i
cmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBH
UFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKwor
ICAgIHJldHVybiBtX2ZwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVkZWVkID0gWyZd
IChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgcmVzdWx0
LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQor
ICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BS
cygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0
cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N0cmlu
ZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
U3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7
CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkp
KSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAg
fQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2b2lkIEpJVDo6
c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUpKTsKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNr
KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVj
SW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SW50MzIo
dmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVt
YmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1i
ZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3Rl
eHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0
ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVl
LCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
aWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
aXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAg
aXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAg
ICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29k
ZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29u
c3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3Rh
bnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5U
eXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5j
b25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50U3RhdGUucmVn
aXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBvcGVyYW5kLCAiLCAiLCBsb2NrQ291
bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0ZSgpCit7CisgICAgZGF0
YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93
ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAg
ICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0g
IiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChhdXRvIHJlZyA6
IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVn
LCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xu
KCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0
U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUg
IlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRl
ICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNs
YXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2Nr
OworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAg
IGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDEs
MTUgKzEwNSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBz
dHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVu
dHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAg
IDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVj
dG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisgICAgc3RydWN0IFNpbGVu
dFNwaWxsUmVjb3JkIHsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgICAgIFJlZ2lz
dGVyU2V0IHNwaWxsZWRSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZUZvclNw
aWxsOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0LCAxPiBqdW1wczsgLy8gVXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZvciB0aGluZ3Mg
d2l0aCBjaGVja3BvaW50cywgd2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgSnVtcExp
c3RzCisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVs
dGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVn
IHJlc3VsdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJl
Zz4gYXJndW1lbnRzOyAvLyBTb21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUg
aGVyZSBmb3IgY29udmVuaWVuY2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7
CkBAIC0xODMsNiArMTk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05N
RU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0g
SlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwNyw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7
CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2Vk
UG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVs
dE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNh
bm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZB
c3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQg
d2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0
aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAg
cHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAg
ICAgICB+SklUKCk7CkBAIC0yNjMsNiArMjc0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9y
Q2FsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAg
ICAgICBzcGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZv
ckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChy
ZWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAg
ICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBj
aGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMjUsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAg
dm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJl
c3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcg
cmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAs
IGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAg
dm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQg
IT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cwpAQCAtMzI3LDcgKzM1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29t
cGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzY0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0
cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5F
cSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAg
ICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGlu
dCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsg
VW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVy
VmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3Nyw4IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0
byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAg
ICAgICAgLy8gc2NyYXRjaC4KLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoTWV0YWRhdGEmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0
eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+
CkBAIC00NzUsOCArNTAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFM
VUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNv
bmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9u
YWxDb25kaXRpb24pOwpAQCAtNDg0LDExICs1MTEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwg
UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBE
b3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVf
dCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUs
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBl
cUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IElu
c3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkg
KzU0OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlf
d2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9k
ZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTc2LDcgKzYxMiw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0cnVj
dGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAt
NjQzLDc3ICs2ODEsODAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1
bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9t
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0
X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
U2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRS
aWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRT
aGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWdu
ZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRO
ZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWcpOwor
I2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1
Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BS
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRl
cihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9t
SW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzI4LDggKzc2
OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUg
Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzggKzc4MSwxOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwg
Tm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAg
IHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJ
bnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1
Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xv
d0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRl
cisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRo
aXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1
bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAg
ICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0g
ICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dD
YXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9p
ZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4
KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0Fu
eVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
ICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAg
IGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Ns
b3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQ0LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNl
OyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOwor
ICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwog
ICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NTcsMjUy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4K
ICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7
CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAg
IH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxp
ZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJU
ZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50
MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5J
bnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAz
MiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBi
ZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNl
bGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52
YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAg
ICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVn
IGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVP
cGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1f
ZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0
ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJh
bmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJl
ZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJh
bmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAg
ICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRU
b1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1Zh
bHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9
CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VMT0wpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JP
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdW
YWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJh
bmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFu
ZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9w
ZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2wo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhl
clNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wg
dXNlTE9MKCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhl
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0
S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1v
cmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9j
YXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxv
Y2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVn
KTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAg
ICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBN
YWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0
byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhS
ZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVu
dFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2b2lkIHNpbGVu
dEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9pZCBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50
ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMs
NyArMTIyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBt
X2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAg
ICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNv
cmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1f
Y29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTI1OCw4MyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAg
ICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMK
KyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAg
R1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJ
bnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJl
ZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhl
ci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
ICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9
IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3Ry
dWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsK
KyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBp
c0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVn
VmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
ICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90
aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhl
ci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
ICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRz
PEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFw
PFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxv
Y2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9w
ZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5k
VG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9
PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVy
LnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6
ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAg
ICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAg
ICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJl
Z2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4g
bV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51
bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4g
bV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRy
dWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9l
eGl0TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0
RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisK
KyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2Vk
VXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29kZUluZGV4
LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVz
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVx
dWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVy
ZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3Nl
cT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVH
cmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1
YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVM
ZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2Us
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2Us
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNv
bnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFVuc2lnbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwg
cmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIG9wMSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCByZXN1bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkp
KTsKKyAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NU
aGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVnVDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIs
IHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3Qg
cGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQog
ICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8g
LSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRh
cmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Ym9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTIy
OSwxNyArMjgxLDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY28K
IAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyBy
aHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEp
OworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25k
aXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAg
fSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBp
bnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0
YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhz
R1BSLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRk
SnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgICAg
IGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihj
b25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKICAgICB9CiB9CiAKQEAgLTI1NSw0
MiArMzMzLDg4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIAog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAg
ICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxo
c0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxo
c0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
Mik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHQ7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQt
PmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKwogICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9w
MmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBjb21wYXJlMzIoY29u
ZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJlMzIo
Y29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQzMl90
IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBjb21wYXJlMzIo
Y29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOworICAgICAg
ICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSksIHJl
c3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
b3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJl
Z1QwLCByZWdUMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7
CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OwogICAgIH0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRp
dGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0
aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+
c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9w
ZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9w
ZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91
Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3Vn
aC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJh
dGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoK
ICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJl
cgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJl
ci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICs0MjMsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAg
IEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2
NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzQ0Nyw2IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVt
cCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzQ3MCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAg
ICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0
ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAg
ICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICs0ODcsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxp
bmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmso
dGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDog
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgwLDExICs0OTksNDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYg
KHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAu
ZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZw
cik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAg
ICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAg
ICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRk
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAg
ICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MS4wOworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BS
LCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVk
SW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNW
YWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBp
bnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwg
U3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3Zl
cmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzkyLDExICs1NDcsNTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwot
ICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0
byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAg
ICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShpbnB1dEdQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRy
dXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShy
ZXN1bHRGUFIsIHRlbXBGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91Ymxl
KHNyY0RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkg
PSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3Jj
RHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9
OworICAgICAgICAgICAgRlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAg
ICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
b25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIs
IGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4K
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJl
U2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIo
T3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveElu
dDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0
KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAg
ICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCkBAIC00MDYsNTQgKzYwMyw4OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE1vZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAg
IC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0
aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8g
ZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVk
eDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9
PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBl
Y3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAg
ICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAg
ICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxh
Y2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRl
bXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FT
U0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhU
ZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIo
KSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAg
ICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1w
LT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQ
Uik7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BS
LCBlYXgpOworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsaHNHUFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBs
aHNHUFIsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQ
Uik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3Zl
KGxoc0dQUiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JO
b3ROZWcxID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2
NDctMSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1t
MzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsK
ICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAg
IEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJl
Z1Q0LCBUcnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRp
dmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwot
fQotCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0g
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KKyAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdz
IHsgZWF4IH0pOwogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShs
aHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUo
WDg2XzY0KQpAQCAtNDYzLDcgKzY5NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQog
ewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpA
QCAtNDczLDYgKzcwNSw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01
NjEsMTUgKzc5NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5z
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC03MjMsMTMgKzk1NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29u
c3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxK
SVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7
CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlv
blZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0
TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5l
Z2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQwLDE4ICs5NjksNiBAQCB2b2lkIEpJVDo6
ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCiAgICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kOwogCkBAIC03NTksMzMgKzk3NiwxMDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZh
c3RQYXRoKGNvbnN0IAogICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJh
bmRDb25zdGFudEludChvcDEpKTsKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgp
IHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFz
dCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBv
cDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsg
bGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmln
aHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1
bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlm
ICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Cisg
ICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAo
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0
T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBz
Y3JhdGNoR1BSKTsKIAorICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1p
dEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1
bHQpOworCiAgICAgaWYgKHByb2ZpbGluZ1BvbGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3Vs
ZEVtaXRQcm9maWxpbmcpCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKGJ5dGVjb2RlKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2Rl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzLmdwcigpKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXBMaXN0KCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0
cnVlOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4K
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDIsNyArMTA5Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIGxlZnRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDgsMjAgKzExMzgsNiBAQCB2b2lk
IEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52
YWxpZEZQUlJlZzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QyOwotI2VuZGlmCi0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CiAKQEAgLTg3MiwyMSArMTE0OCw3NyBAQCB2b2lk
IEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VS
VCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hG
UFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsK
KyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdl
dCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQ
Ui5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVm
dFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdU
MDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0
Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAg
ICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAK
ICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5k
LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBh
dGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVz
dWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmln
SW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdz
KTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTkwMSwxOCArMTIzMyw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0
IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigp
LCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJo
cy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBS
LmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
c2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3Zl
cmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50
MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZw
cigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFk
ZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJ
QyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMu
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOwor
ICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjMsMTUgKzEyOTEsMzUgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFz
IHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJl
Z1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAg
SlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNy
YyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyBy
ZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAg
ICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UK
ICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpA
QCAtOTQwLDE5ICsxMzI4LDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1h
dGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywg
c3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJl
bnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsK
IAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUo
KnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVD
b2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxl
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9u
UHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJl
c3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7
CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBz
KTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVu
ZCA9IGxhYmVsKCk7CkBAIC05NjIsNyArMTM1MywxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBwcm92ZW5U
eXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzMsMTIgKzEzNjgsMjggQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25z
dGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0
KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsK
KworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1w
PiBzY3JhdGNoVGVtcEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTk4NywyNSArMTM5OCw0MCBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOwogI2VuZGlmCiAKLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpKSB7CisgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAg
ICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAg
ICAgICB9CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkgeworICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMik7CisgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgfQogCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
Ci0gICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMSkpOwotICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAg
IHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsK
KyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAK
LSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxp
ZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0
b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQ
Uik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25z
dGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1
dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE0LDE3ICsxNDQwLDM0IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2Vu
ZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAg
IGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXND
b25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5k
LmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
MSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7
CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAg
ICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAgICAg
ZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0
UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZSht
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNCwx
MSArMTQ3NywxOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAg
ICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQs
IHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PE9wLCBPcEFkZD4pCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSGVhcFRv
cDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUg
UHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVt
aXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwg
UmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNH
ZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDcs
OCArMTQ5Nyw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg0LDcgKzE1MzQsNyBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAg
IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVj
dGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFs
dWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpA
QCAtMTA5NCwxNiArMTU0NCw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVm
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9w
ZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApA
QCAtMTExNCwxNSArMTU1NCwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0
YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFs
aWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZh
bGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBp
ZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsK
KyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIo
KSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6
aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8g
cmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9Cisj
ZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVs
KCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0
YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25z
dGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNs
b3dQYXRoUmVwYXRjaCkKQEAgLTExNTUsMjMgKzE2MTYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
aXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg3
LDI3ICsxNjMxLDkyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioK
ICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKQogICAgICAgICByaWdo
dE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpOwog
I2VuZGlmCi0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFy
aWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0
Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7CisgICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0
Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiByaWdodFRlbXBGUDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
ZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGxlZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJp
Z2h0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAg
ICAgbGVmdEZQUiA9IGxlZnRUZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0
VGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAg
ICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsK
KyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1Qw
OworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBGUFJSZWcg
bGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKKwogICAg
IGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKKyAg
ICAKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CisgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwogCiAgICAgSklURGl2R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBm
cFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOworICAgICAgICBs
ZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsK
IAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGlmIChnZW4uZGlkRW1p
dEZhc3RQYXRoKCkpIHsKICAgICAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCBy
ZXN1bHQpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBy
ZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNT
RVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQ
YXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CkBAIC0x
MjE1LDM0ICsxNzI0LDEwNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5k
aWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNG
UFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCks
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhz
LmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtp
bmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdC5ncHIoKSkpOworICAg
ICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBG
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigp
LCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMo
JmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9p
bnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0
aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRp
b25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhz
RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNG
UFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIo
KSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigp
LCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91
YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIo
T3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAg
ICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhz
LmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Ns
b3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJv
ZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVT
dWJPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQog
CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwg
T1BfTVVMLCBPUF9QT1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxs
UmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
ZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZp
cnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1
LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZh
bD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6
ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsK
KwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9
IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
CkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwg
aXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRl
Y29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQs
IGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9j
IHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihO
b3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwz
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2Fs
bCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNs
b3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBzbG93Q2FzZS5qdW1wcy5h
cHBlbmQobmV4dENoZWNrcG9pbnRTbG93KTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzLCByZWdUMCB9OworICAgICAg
ICBHUFJSZWcgc2hvdWxkQmVSZWdUMCA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNob3VsZEJlUmVnVDAgPT0gcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGJ5
dGVjb2RlLm1fbmV4dCwgcmVnVDApOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsK
IAotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5s
aW5rKHRoaXMpOwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwpAQCAtNDU2LDYgKzQ3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JD
YWxsKCk7CisKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxk
IGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hl
Y2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAg
Z2VuZXJpY0Nhc2UgPSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDM2ICs0OTks
NDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUo
dmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVj
a3BvaW50U2xvd1BhdGg7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGJy
YW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgUmVnaXN0ZXJTZXQgcHJl
c2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAg
ICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzID0gdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisgICAgICAgIHVz
ZWRSZWdpc3RlcnMuYWRkKHZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+bmV4dC5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIp
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBk
b25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoZG9uZUNoZWNrcG9p
bnRTbG93UGF0aCk7CisKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX2RvbmUpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBh
ZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewogICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CiAg
ICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFs
c2U7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSk7CiAKKyAgICAgICAgSnVtcExpc3QgdmFsdWVDaGVja3BvaW50U2xvd1BhdGg7
CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCku
cHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQodmFsdWVDaGVja3BvaW50
U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgICAgIHdp
bGxEZWYoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHZhbHVlR1BSKTsKIApAQCAtNTE1LDEwICs1NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0
ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3
ICs1NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAg
R1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwogICAgICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTc3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAKLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMl0ubGluayh0
aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKQEAgLTU2MSw3ICs1
OTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAKICAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9Ci0K
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBz
byB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0
aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1OCw2ICsxNTksNyBAQCBB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24p
OwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworICAgIC8vIE9PUFM6IE1h
a2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3Bp
bGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNjYsMjUgKzE2
OCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1
cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lz
dGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xv
d0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgp
ICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxT
bG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0g
c2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZh
bmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVj
b2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBA
IC0yMDYsMjcgKzE4OSwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dD
YXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2Vz
LnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2Rl
SW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZl
UGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3Qu
aXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3Vs
dCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAg
ICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IH0pOworICAgIH0K
KyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1
bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShj
b25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5n
IGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25z
dCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNb
MF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1
bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5LDExICszMDEsMTAgQEAgQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmco
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1
ZVByb2ZpbGUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxk
RW1pdFByb2ZpbGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWUgPSByZWdUMDsK
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWVUYWcgPSBy
ZWdUMTsKICNlbmRpZgpAQCAtMzM4LDExICszMjksMTEgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0
YWRhdGEpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBHUFJSZWcgcmVnKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygp
KQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2Zp
bGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGlu
Z1R5cGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpAQCAtMzkzLDExICszODQsNiBAQCBB
TFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRy
dXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAs
OCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAi
VmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIK
KwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTEsNiArNTMsMjgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzog
SWYgd2UgY2hhbmdlIHJlZ2FsbG9jIHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUgTiByZWdpc3RlcnMg
cGVyIGxvY2FsLCB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIHR3byBy
ZWdzLgorICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNyYykg
PT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMTQsNTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
ck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3Rl
cklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVn
VDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3Vs
dFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
YWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3Jh
dGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3Vs
dFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2Ny
YXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJl
Zyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0
byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwg
YWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRj
aFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJl
c3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29k
ZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNv
ZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSks
IHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTcw
LDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZp
cnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZh
bHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdU
MCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7Cisg
ICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxs
T3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFz
SW5zdGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9y
VGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVt
cC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVt
cC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7
CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8g
V2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRv
LgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJ
bnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5j
ZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0
aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBv
YmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywg
QWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7Cisg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0
aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7
CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
IAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NTEsNDAgKzIyMyw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQg
dGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50
byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdp
bGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRo
ZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVj
ayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMg
Y2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAg
ICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICBy
ZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1w
OworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBH
UFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVt
cCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKwor
ICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAg
ICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAg
ICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZh
bHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1w
Q2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFs
dWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwt
PmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBk
c3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRo
aXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7
CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAg
IHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nh
c2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAor
ICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBy
ZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90
b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigp
KTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3Rh
bmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1w
LmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQg
dmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJl
Z1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFu
ZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBh
cmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhl
IGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8g
cmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAv
LyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5k
KGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYg
Z2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5m
bygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMjQs
MjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzU0
LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZD
ZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAg
ICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChp
bnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1
dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BS
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihF
cXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZD
ZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
CisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJl
Z1QwKTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI4LDMzIEBAIHZv
aWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0y
NTUsMTIgKzQ2MiwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3Ry
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5Mywy
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVy
bywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdU
MCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTIzLDU2IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJp
Z0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsK
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmso
dGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAg
ICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBp
ZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1ODksNDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBp
c05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MzMzLDE4ICs2MzgsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3Ry
dQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisg
ICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21w
YXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENl
bGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzAzLDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJl
dHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
QEAgLTM2OSwxNSArNzIyLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25z
dCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAg
IGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUp
KSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChz
cmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAg
IGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTM4Niw1MiArNzY1LDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+
KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChz
cmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9
IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
ICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNw
ZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVj
U3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAg
ICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5j
dGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25h
bWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRG
dW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0
ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1
ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFk
ZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJ
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMg
YSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFu
IHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1
dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1
ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQu
Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJl
Z1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhl
IHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAg
ICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9y
IDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRo
ZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBi
YWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2Ny
YXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gy
LmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIs
IHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9u
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlv
bikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24g
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUg
bW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJU
ZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gy
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAg
RlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTcwLDEyOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisK
KyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBh
dXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisg
ICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0g
dW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRH
UFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgewor
ICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAg
ICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3Jh
dGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9
IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAK
LSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0g
dW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNO
b3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwMSwyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgewor
ICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTI5LDI2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNTE1LDY1ICsxMTYwLDMxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0
cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1
ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEp
LCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwor
ICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwor
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlz
KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBD
b21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHBy
b3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRH
UFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVj
dWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9
IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERv
dWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBp
ZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkp
IHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
cmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMp
KSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgor
CisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhz
R1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
IH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxo
c0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwg
cmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2Ugewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
KyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9y
ZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRv
bmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0ODMsMTQ2IEBA
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICgh
dmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDog
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAg
SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3Vs
dEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwg
d2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBk
b25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290
byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAg
IC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxk
IGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVt
YmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25s
eSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdU
NSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBy
ZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0
IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAg
IGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQg
dG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmlj
dEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29s
ZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKwor
I2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1
bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAg
cmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwp
CisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVt
ZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBi
cmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYg
d2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmlj
ayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8g
aXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAg
ICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUg
aXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1Zh
bHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYg
Ym90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAot
ICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxl
ZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5s
aW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNv
dmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQo
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7
CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVz
dCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAg
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsK
KyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNjc0LDY4ICsxNjQwLDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1w
KGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVF
cXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkg
eworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNG
UFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQg
PT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJp
Z2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwot
ICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhl
IDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQz
Mi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAv
LyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVF
cXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWws
IHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdU
MSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkg
ewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGlu
ayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElm
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xv
d1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2Vu
OworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAg
IGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAg
ICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQg
d291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNo
SWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFu
IEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxl
YXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAg
ICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMp
OworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2
NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1
YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7
CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
YXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisg
ICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBk
byBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ug
b25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAg
ICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAo
dG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
b3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAor
ICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzgxLDIyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9w
U3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1l
cmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1
dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOwor
I2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDAp
KTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChz
cmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJl
Z1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJp
bmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
ICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAg
ICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7
IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0
eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDU4LDIzIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3Rv
cmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBl
KGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAg
IEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
KyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTkwNSw5ICsyMDg5LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7
CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BS
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1t
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIxMTQsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0g
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTkzOCw5MyArMjEzOCwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhj
b25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGlu
ZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmlu
Z1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4o
KTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBs
b2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAg
ICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4o
Ynl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmso
dGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpl
cU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMx
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwg
T3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5v
dEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAg
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIo
Y29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21w
YXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51
bGwpLCByZXN1bHRHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQot
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29t
cGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3Zv
aWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAg
IHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbElt
cGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhh
dmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtl
IEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2Ug
aW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBv
aW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3Qg
bGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0g
bV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3Vu
dDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAg
IGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3Rv
cmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAg
ICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNw
ZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApA
QCAtMTAzNSw5ICsyMjg5LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2Nv
cGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAg
R1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3Bl
ID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKwor
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwg
c2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZT
Y29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVj
dE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzEzLDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAm
bWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9
IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFN
b2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1Rv
VGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRo
aXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8v
IE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5Lgor
ICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3Bl
Y09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihj
YWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAg
ICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRl
IHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAo
aXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
bG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9U
aGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNT
ZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVj
dDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2Fj
aGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQz
MihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzOTQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRG
dW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxl
ZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEw
NjgsNyArMjQwNCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0
CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxs
ZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5k
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVP
cGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVt
cDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0
b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAy
LT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAg
cmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVn
ID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxs
ZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxl
ZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDQ2LDMzIEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJl
ZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAg
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rh
cmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAv
LyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRo
aW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMTE2Miw4ICsyNDkxLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8v
IE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBl
IHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAg
Ly8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBl
bnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAg
ICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZElt
bTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0x
MTg3LDEzICsyNTE5LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0
aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAt
MTIwNiwxMSArMjUzNiwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwor
ICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQg
d29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0x
MjMzLDEwICsyNTYyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29u
cwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU3Miwx
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nh
c3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0
dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTkz
LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9z
Y29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNF
eGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7
CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7
CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
KG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCAr
MjY1Nyw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0
ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAg
ICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVH
UFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5k
aWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHAp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNzI3LDE5
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
c1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdj
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3NDgsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisK
KyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRl
bXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1w
LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJn
R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9m
aWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRl
eCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAg
ICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3ODEs
MzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJh
dG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JW
YWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFs
dWUgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2
ICsyODMwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNo
YWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg1OSw4IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBz
cGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsy
ODg2LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVt
cCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAK
ICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI5MDMsMTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAs
MzcgKzI5MzYsODIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJh
c2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
LQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0g
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0
KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5l
CisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIp
OworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90
PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAg
ICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2Ug
aXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1
dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MSk7CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGlu
ZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAg
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOwor
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0
dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwor
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgfQogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxp
bmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMwMjEsNTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdp
c3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1l
cmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBP
T1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVy
YXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxh
Y2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywg
ZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhU
ZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhH
UFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAg
IEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUlu
ZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAg
aW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQz
MlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3Vs
dEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzA3NSw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsK
KyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BS
UmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAg
IE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3Bl
cmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsK
KyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAg
ICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7
CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwg
VGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNF
aWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNT
dHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzEy
OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBl
TG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9F
bmQ7CkBAIC0xNjU4LDYgKzMxOTEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAg
IHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSBy
ZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRo
aXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzIwOCw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisg
ICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0
aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndl
IHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAg
LTE3MDIsMTEgKzMyNDEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29u
c3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJn
dW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdz
KHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1
bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0g
SlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xl
bmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSAr
MzI2Miw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25l
ZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVt
cCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVt
UGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDAp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMy
KG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAg
ICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIo
bnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCks
IHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3Ro
LmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
cmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NzQ0LDQ5ICszMzExLDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJ
bnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3Vt
ZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAg
YXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwog
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1Ro
YW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwg
cmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAg
ICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwg
cmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1
bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5l
ZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwodmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0s
IHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8
IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qy
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJU
KHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAg
ICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2
YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbElu
ZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZh
bEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93
UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxv
dyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4
ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01
ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5y
ZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgPHd0
Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAor
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01MSw0OSArNTMsMTE3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHBy
b3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZWdUMjsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAogICAgIGlm
IChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJ
Q01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2VsbDsK
KyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
YmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwu
aXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBw
cm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwg
U3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wp
KQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDIsMzkgKzE3Miw3MyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTIsNiArMjU2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2Vy
Q29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE0LDggKzQyMCwxMSBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3Rl
cnMuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdU
MSk7CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSks
IHB1dEtpbmQsIHByaXZhdGVGaWVsZEFjY2Vzc0tpbmQoYnl0ZWNvZGUpKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM0LDcgKzQ0Myw3
IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4g
Z2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArNDUxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1
dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICs0NTksMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxv
YWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAg
Z2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAg
ICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
KTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
KTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM3Miw0OSArNDgwLDEwNSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlk
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nl
c3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29y
R1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBn
ZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0
ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29k
ZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVj
b2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2Ug
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJv
cGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJp
YnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDI0LDE4ICs1ODgsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9k
ZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJy
aWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyBy
ZWdpc3RlcnMuCkBAIC00NDQsMjUgKzY0MiwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVs
QnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0Lmdw
cigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNDcyLDE5ICs2NzIsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0
eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9w
ZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTQ5MywyMTMgKzc0NCwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgq
aWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZt
ZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAg
ICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVn
VDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRl
eGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJy
YXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAg
fQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBi
YXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQ
Uik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlz
VlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhp
c0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0Rp
cmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBh
YmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3
ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMg
aGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdl
bmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUg
YWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZh
bHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJh
c2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
cmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAog
ICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QsIHByaXZhdGVGaWVsZEFjY2Vzc0tp
bmQoYnl0ZWNvZGUpKTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBA
IC03MDksNzcgKzExMTUsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0g
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAg
ICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZElu
ZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAg
SklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5C
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52
YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTc5MSwxNyArMTIxNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
OwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFk
ZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSAr
MTI0MywzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBz
Y29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNh
bEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1f
bGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODM4LDkgKzEyODUsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3Vs
dEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTg1MywyOSArMTMwMCwyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQ
UiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTg4NCwxNSArMTMzMSwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhz
Y29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJl
ZyByZWcpCkBAIC05MDYsMTIgKzEzNTgsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQot
ewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CkBAIC05MjIsNTEgKzEzNjgsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRh
ZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcg
cmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zm
c2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJS
ZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zm
c2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVH
UFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BS
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAg
ICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAo
QVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJh
bmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gz
MihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElz
Tm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0
KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsK
KyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFu
ZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7
CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
ICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5k
U2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwg
ZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC05ODAsMTAgKzE0NTksMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2
LDI3ICsxNDc1LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwog
CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYs
NDAgKzE1MDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShy
ZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQ
dHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA3MywyMSArMTUzNCw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0
dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7Cisg
ICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zm
c2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
dHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9m
ZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMDk4LDI4ICsxNTg3LDU3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwog
ICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNh
bid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5Lgog
ICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAg
c3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihj
b25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9w
ZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3Rv
cmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKQEAgLTExMzQsMTIgKzE2NTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8g
V2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2Nh
dGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRD
b2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBl
biBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29u
c3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAg
LTExNTMsMjMgKzE2ODAsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRo
ZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwg
c2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNj
cmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNo
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTExODYsMTAgKzE3MjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1
LDYxICsxNzM5LDE3OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVu
dHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBh
cmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJl
c3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBi
eXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0
b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1p
dFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJS
ZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVl
LmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcywgdmFsdWUpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
fQorICAgIAorICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBL
bm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJy
YW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndp
c2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBv
cHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBl
eGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUg
Y29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxp
ZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9y
IFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
KSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAg
ICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxs
KSkgeworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAgICBpZiAo
Z3ByRm9yT3BlcmFuZChvd25lcikgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVy
R1BSID0gZ3ByRm9yT3BlcmFuZChvd25lcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
b3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIG93bmVyR1BSID0gb3duZXJW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBv
d25lckdQUik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJl
Z1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsK
LSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5U
eXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwob3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwot
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNv
cmQ7CisgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUg
dGhpcy4KKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2ls
ZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJh
cnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2UpCisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChv
d25lck5vdENlbGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZh
bHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9k
ZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8g
T09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFu
Y2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQg
Y2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBj
YXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0
ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAt
IE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxl
bnQgZmlsbAorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25h
bDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5k
KHZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIo
b3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2
YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwog
fQogCkBAIC0xMjcxLDExICsxOTIyLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5h
bF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSks
IHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VU
ZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9w
ZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zm
c2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVU
b3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMjg1LDEwICsxOTUxLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgp
KSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAq
dGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBL
bm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOwor
CisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6
b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZSB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9u
Kik7CkBAIC0xMzg1LDggKzIwNjQsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQog
ewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW47Cisg
ICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNj
cmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFu
Y2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlvbmFsPFNpbGVu
dFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNw
aWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
IH0KIApAQCAtMTQwNCw2ICsyMTAwLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJD
aGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNDY5LDYgKzIxNjcsOCBAQCB0ZW1wbGF0ZSB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxz
ZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9w
X3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBOb3REaXJlY3QgJiYgT3A6Om9wY29k
ZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5o
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0K
IAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAg
VCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBU
JiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJp
dmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVn
aXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBA
QCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BT
PworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0
aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1w
bGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+
bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDEw
IEBAIHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpy
ZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9
IDA7CisgICAgT3B0aW9uczo6Zm9yY2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQo
KSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdF
eGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1p
bgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2JhYmlsaXR5LCAwLjUs
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xv
YmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9v
bCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51bSBPcHRpb25FcXVp
dmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNiArNjUsOSBAQCBKU1ZhbHVlIG51bWJlck9mREZHQ29tcGlsZXMoSlNW
YWx1ZSB0aGVGCiB7CiAgICAgYm9vbCBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gZmFsc2U7
CiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOyAvLyBPT1BTCisKICAgICBpZiAoIU9wdGlvbnM6OnVz
ZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VCYXNlbGluZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VERkdK
SVQoKSkKICAgICAgICAgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IHRydWU7CiAjZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415914</attachid>
            <date>2020-12-10 12:48:21 -0800</date>
            <delta_ts>2020-12-10 16:32:17 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>467730</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMt
dG8tdGhpcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDAwOyBpKyspIHsKICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1i
ZXIiKTsKIH0KIAotYXNzZXJ0KG51bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0
KCFpc0RGR0VuYWJsZWQoKSB8fCBudW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRl
eDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJp
bmctZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1w
cm9wZXJ0eS1rZXktY29uc3Qtc3RyaW5nLWZ0bC5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgSlNU
ZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRs
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw1ICsyMSw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMg
JiYgIW51bWJlck9mREZHQ29tcGkKICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChp
ID49IG1heFRyaWVzKQoraWYgKGkgPj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAg
dGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBE
RkcgSklUIik7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkt
a2V5LWNvbnN0LXN5bWJvbC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNv
bnN0LXN5bWJvbC1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTIyLDUgKzIyLDUgQEAgZm9yICg7
IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChp
KTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0Vu
YWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZH
IEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtl
eS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwu
anMJKHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1w
cm9wZXJ0eS1rZXktc2xvdy1vYmplY3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw1ICsyOSw1IEBAIGZvciAoaSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcK
ICAgICBzbG93T2JqZWN0VmFsdWVPZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAo
aSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZh
aWxlZCB0byBjb21waWxlIHNsb3dPYmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0
LWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJv
cGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRs
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw1ICsyMSw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMg
JiYgIW51bWJlck9mREZHQ29tcGkKICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAot
aWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkK
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3Ry
aW5nIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJv
cGVydHktc2xvdy1wdXQtYXJyYXktc3RvcmFnZS1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQtYXJyYXktc3RvcmFnZS1mdGwu
anMJKHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3Bl
cnR5LXNsb3ctcHV0LWFycmF5LXN0b3JhZ2UtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBAIGVuc3VyZUFycmF5U3RvcmFnZShhcnJheSk7CiBkaWRGVExDb21waWxlID0gZmFs
c2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QxKGFy
cmF5KSwgdHJ1ZSk7Ci1zaG91bGRCZShkaWRGVExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJlKGRp
ZEZUTENvbXBpbGUgfHwgIWlzREZHRW5hYmxlZCgpLCB0cnVlKTsKIAogdmFyIGFycmF5ID0gWzEs
IDIsICwgNF07CiBhcnJheS5fX3Byb3RvX18gPSBvYmplY3Q7CkBAIC01Niw2ICs1Niw2IEBAIGVu
c3VyZUFycmF5U3RvcmFnZShhcnJheTIpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKICAgICBzaG91bGRCZSh0ZXN0MihhcnJheTIpLCBmYWxz
ZSk7Ci1zaG91bGRCZShkaWRGVExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJlKGRpZEZUTENvbXBp
bGUgfHwgIWlzREZHRW5hYmxlZCgpLCB0cnVlKTsKIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZh
bHNlKTsKIHNob3VsZEJlKHRlc3QyKGFycmF5MSksIHRydWUpOwpJbmRleDogSlNUZXN0cy9zdHJl
c3MvaW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvc3RyZXNzL2ludDgtcmVwZWF0LWluLXRoZW4tb3V0LW9mLWJvdW5kcy5qcwkocmV2aXNp
b24gMjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvaW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2Yt
Ym91bmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw1ICsyMSw1IEBAIGlmIChyZW9wdGltaXph
dGlvblJldHJ5Q291bnQoZm9vKSkKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCiAg
ICAgZm9vKGFycmF5LCBmYWxzZSk7CiAKLWlmIChyZW9wdGltaXphdGlvblJldHJ5Q291bnQoZm9v
KSAhPSAxKQoraWYgKGlzREZHRW5hYmxlZCgpICYmIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChm
b28pICE9IDEpCiAgICAgdGhyb3cgIkVycm9yOiB1bmV4cGVjdGVkIHJldHJ5IGNvdW50OiAiICsg
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9wdXQt
YnktaWQtZmxhZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHV0LWJ5LWlkLWZs
YWdzLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxh
Z3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTEzLDcgKzEzLDEzIEBAIHZhciB5ID0ge307CiBmKHgs
IDQyKTsKIGYoeSwge30pOwogCitsZXQgY291bnRlciA9IDA7CiB3aGlsZSAoIW51bWJlck9mREZH
Q29tcGlsZXMoZykpIHsKKyAgICArK2NvdW50ZXI7CisgICAgaWYgKCFpc0RGR0VuYWJsZWQoKSkg
eworICAgICAgICBpZiAoY291bnRlciA+IDEwMDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbihnKTsKICAgICBpZiAodHlwZW9mIGcoeCkgIT09
ICdudW1iZXInKQogICAgICAgICB0aHJvdyAnZmFpbGVkIHdhcm1pbmcgdXAnOwpJbmRleDogSlNU
ZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2UtcHJvdG90eXBl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3R5cGVkYXJyYXktaW50cmluc2ljLWdl
dHRlcnMtY2hhbmdlLXByb3RvdHlwZS5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgSlNUZXN0cy9z
dHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2UtcHJvdG90eXBlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0xOCwxMCArMTgsMTQgQEAKIAogICAgIGxldCBhcnJheSA9IG5ldyBJ
bnQzMkFycmF5KDE1KTsKIAotICAgIHdoaWxlKG51bWJlck9mREZHQ29tcGlsZXMoZm9vKSA8IDEp
IHsKKyAgICBsZXQgY291bnRlciA9IDA7CisgICAgd2hpbGUgKG51bWJlck9mREZHQ29tcGlsZXMo
Zm9vKSA8IDEpIHsKICAgICAgICAgZm9vKGFycmF5KTsKICAgICAgICAgYmFyKGFycmF5KTsKICAg
ICAgICAgYmF6KGFycmF5KTsKKyAgICAgICAgKytjb3VudGVyOworICAgICAgICBpZiAoY291bnRl
ciA+IDEwMDAwMCkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIE9iamVjdC5zZXRQ
cm90b3R5cGVPZihhcnJheSwgbnVsbCk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGku
anMJKHJldmlzaW9uIDI2NzQzNSkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGku
anMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgaWYgKGlzRDgpCiBpZiAodHlwZW9m
IHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAor
dGVzdExpc3QgPSBbJ29jdGFuZS1jb2RlLWxvYWQnXTsKKwogaWYgKHR5cGVvZiB0ZXN0SXRlcmF0
aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJdGVyYXRpb25Db3VudCA9IHVuZGVm
aW5lZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlv
bkNhbGxiYWNrKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbklzREZHRW5hYmxlZChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiBzdHJ1Y3Qg
U2NyaXB0IHsKICAgICBlbnVtIGNsYXNzIFN0cmljdE1vZGUgewpAQCAtNjM5LDYgKzY0MCw4IEBA
IHByaXZhdGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1
bmN0aW9uQXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNE
RkdFbmFibGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGlmIChPcHRp
b25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkpIHsKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbSA9
IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBudWxscHRyLCB0ZXN0Q3VzdG9tQWNjZXNz
b3JTZXR0ZXIpOwpAQCAtMjU2Niw2ICsyNTY5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Bc0QKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVt
YmVyKG51bSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSXNE
RkdFbmFibGVkKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikKK3sKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiAvLyBV
c2UgU0VIIGZvciBSZWxlYXNlIGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNyYXNoIHJl
cG9ydCBkaWFsb2cKIC8vIChsdWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVsZWFzZSBh
bmQgRGVidWcgYnVpbGRzIHNvIGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFp
biBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9iamVjdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1w
ZXIuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAj
aW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAK
KyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lk
IEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpAQCAtMjY5LDcgKzI3MSw3IEBAIHZv
aWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIH0KIAogdGVtcGxhdGU8Y2xh
c3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBo
KEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0
ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBp
Y1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wR3Jh
cGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJ
Q1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVtcEhlYWRlcihibG9jaywgaW5zdHJ1
Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNv
ZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQucHJpbnQoImJiIyIsIGJsb2NrLmlu
ZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0aW9uc0F0SGVhZCkgeworICAgICAg
ICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFkOiBbIik7CisgICAgICAgICAgICBj
b25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9jay5pbmRl
eCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAg
ICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSks
ICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMu
YXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAgICAgICAgICBhdXRvJiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNl
dCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudEluc3RydWN0aW9u
LCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3
ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsK
LSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBj
b25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1w
R3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBP
cHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlv
bnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxl
KCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAgdm9pZCBkdW1w
SWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAogCiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9u
YWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQ
cmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKKyAgICB2b2lkIGR1bXAoQ29k
ZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rp
b25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gc3Bl
Y3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQog
ICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrVHlwZT46OmR1
bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRoaXMsIHNwZWN1bGF0aW9uQXRIZWFk
LCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0
dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0
ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJs
b2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9u
cygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6
bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBj
b25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAtMjQ0OCw2ICsyNDQ4LDggQEAgdW5zaWdu
ZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVzKAogewogICAgIEFTU0VSVChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZU
TCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAg
ICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGlsZWRXaXRo
RlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNTExLDYgKzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1
ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29u
c3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3Zh
bHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlm
IChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAg
IGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFp
dHM+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC0xMzQsNyArMTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0g
c2l6ZW9mKAogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9
IGZhbHNlPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBz
dGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3Is
IFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMg
QEAgcHVibGljOgogCiAgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBP
cGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVt
VG1wcykKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3Qg
bnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAg
ICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxz
KG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAg
ewotICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRt
cHM7CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVt
Q29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdy
b3coc2l6ZSk7CiAgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlh
bGl6YXRpb24pCiAgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAg
ZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywg
c2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgc2l6ZV90IG51bUNvbnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6
IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1M
b2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsK
KyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25z
dGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwo
aW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4m
IG90aGVyLCBjb25zdCBUJiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1
bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2Fscyhv
dGhlci5udW1iZXJPZkxvY2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51
bWJlck9mQ29uc3RhbnRzKCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNp
emUoKSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyAr
MTc2LDUxIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51
bWJlck9mTG9jYWxzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7
IHJldHVybiBtX251bUNvbnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVy
T2ZMb2NhbHMoKSAtIG51bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAg
ICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVf
dCB0bXBJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8
IG51bWJlck9mVG1wcygpKTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRz
KCkgKyBudW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0K
ICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4
OwogICAgIH0KLSAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICBy
ZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0
YW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBu
dW1iZXJPZkNvbnN0YW50cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkg
KyBudW1iZXJPZkxvY2FscygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVf
dCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZU
eXBlIHRtcChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgp
XTsgfQogICAgIAogICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92
YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9
CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxl
X2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJu
IG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVm
VHlwZSBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAg
ICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgo
aWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChz
aXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAg
Q29uc3RSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W2NvbnN0YW50SW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBv
cGVyYW5kS2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcg
QEAgcHVibGljOgogICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBu
dW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
ICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBu
dW1iZXJPZkxvY2FscygpOwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1w
cygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXpl
ID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0
YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3
U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9y
VHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1
YmxpYzoKIAogICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0
cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYg
b3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjYWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25z
dGFudEluZGV4KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9j
YWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwx
NSBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAg
ICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAo
dHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYm
IG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlm
IChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVy
YW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9M
b2NhbCgpKTsKICAgICB9CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNv
bnN0YW50cygpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRv
TG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQo
T3BlcmFuZCBvcCkgY29uc3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAg
ICBlbHNlIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygp
KQorICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAt
IG51bWJlck9mQXJndW1lbnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4
IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlm
IChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZDb25zdGFudHMoKSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25z
dGFudChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAg
ICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4
ID09IGNhbGxlZUluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVy
YW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkg
KyBudW1iZXJPZkNvbnN0YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUp
CkBAIC0zOTMsMTAgKzQzNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1
bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJl
IGxvY2FscywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFy
Z3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBh
cmUgbG9jYWxzLCB0aGUgbmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhl
IHJlc3QgYXJlIHRtcHMuCiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251
bUFyZ3VtZW50cyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX251bUNvbnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGlu
ZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGlu
ZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZp
cnR1YWxSZWdpc3RlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFu
ZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBP
cGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIg
Iik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7
IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJ
bmRleCksIGNvbnRleHQpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVl
KCksIGNvbnRleHQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8
VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJv
b2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAg
IGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVu
dEluZGV4LS07KSB7CkBAIC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAg
aWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2Fs
bGVlIiwgIjoiLCBjYWxsZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlz
SW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAm
IH5TcGVjSW50MzJPbmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZh
bHVlICYgflNwZWNCeXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJT
cGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYg
ISh2YWx1ZSAmIFNwZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsOCArMTE4LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5l
dyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0
IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVh
bFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVh
bFJlZ2lzdGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBp
c0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3Zp
cnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFu
dCgpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lz
dGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQ7IH0KICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdp
c3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkg
Y29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVh
bFJlZ2lzdGVyKTsgfQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAg
ICAgc3RhdGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3Bl
cmFuZCAtIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50
IGFyZ3VtZW50VG9PcGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRv
T3BlcmFuZChpbnQgY29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXggKyBjb25zdGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9
OwpAQCAtMTMzLDQgKzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyRm8KICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1l
bnRUb09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJh
bmQoY29uc3RhbnRJbmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2Rl
SW5kZXggYnl0CiAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMs
IG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMpCiAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBu
dW1Mb2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVy
c2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cywgMCwgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhl
Y3V0aW9uQ291bnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICsz
NTIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE1IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRl
ICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29k
ZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5j
bHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgor
I2luY2x1ZGUgIkpTR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAi
TExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIK
ICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVP
cmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzUyLDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29y
a2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRl
cm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAt
NjAsNiArNjUsODMzIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90
YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2
b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVj
dWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQo
cmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBi
eXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNv
ZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmls
ZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25s
eSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25z
dGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50Pigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9i
aXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9w
bmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9i
eV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
ZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25z
dHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21f
c2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190
aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+
KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9p
dGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3Is
IG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0Pigp
OworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRh
ZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6Cisg
ICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90
eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVs
ZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0
aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Rv
X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJl
cjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3Vt
ZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9f
bnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisK
KyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAg
ICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJs
ZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAh
IShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1
bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihs
ZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0
ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAg
ICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAg
ICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9h
cml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3Vi
bGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAg
ICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFO
IHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91Ymxl
UHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5h
TjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMy
CisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+
KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwp
CisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAg
ZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAg
aGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3Io
Ynl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3Io
Ynl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4g
ZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxk
IGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMy
IHJlc3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigp
LCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAg
ICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0
aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5w
dXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNw
ZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlu
cHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUo
ZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAg
aGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0
ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihi
eXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihi
eXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
QmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmln
SW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAg
ICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRl
Y29kZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7
CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAg
ICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAm
JiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3Ry
dWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRl
Y29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0
eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5
bWJvbCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciog
YnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRv
IGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2Un
dmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAg
ICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMg
bG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAg
ICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHBy
b2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUu
bV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAg
IHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmpl
Y3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAg
IC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlw
ZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlz
PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5
X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwg
U3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJp
bmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19m
dW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNG
dW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Nj
b3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCks
IFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3Ry
dWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJv
cGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1By
b3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3Ry
aW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5j
X2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNv
bHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNw
ZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNf
YnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFy
Z3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwg
U3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3Qp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BM
ZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVh
dGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Vt
cHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9m
X2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
c19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5j
dGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0
aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29u
c3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1
Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251
bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lk
ZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
c3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQ
cm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2Jv
dHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxh
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNf
aW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVz
SGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0
YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0
YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4o
KSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxs
X3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxX
aXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lu
X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ug
b3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3Vw
ZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNh
c2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3Vu
cmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNf
ZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9w
X3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3Nl
dHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNl
IG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAg
IGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6Cisg
ICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9w
X2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6Cisg
ICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVx
OgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ug
b3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJl
cToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVs
b3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBj
YXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9w
X3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNl
IG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAg
IGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ug
b3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBv
cF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBj
YXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9i
eV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2Zy
YW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2
OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9u
b190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9k
dWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9w
cm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6
CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGlu
dF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19w
YXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9m
cm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhp
dF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGlu
dDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9v
cGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAg
ICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVz
aXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRp
Y3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ld
ID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOwor
CisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJs
b2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5h
dCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChz
aXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0g
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJl
ZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOwor
CisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcs
ICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1f
cHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9n
TG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2Fs
bGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAg
ICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4K
KyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFw
aCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5v
dWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBv
cGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBh
IGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQg
PSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3Jh
cGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0
SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0VudHJ5Qmxv
Y2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigpOworICAg
ICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlv
bnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVj
dWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBp
ZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9j
b2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw2ICs4
OTksMTIgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAg
ICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCiti
b29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOworICAgIHJl
dHVybiBtX3VzZUxPTDsKK30KKwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRl
cmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJl
dGVyKQpAQCAtNzYsNiArOTE0LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAg
bV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtMTM3
LDExICs5NzYsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAg
ICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShu
YW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NM
T1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAg
ICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAg
ICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwo
KTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQo
KSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisgICAgICAg
ICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAgICB9IFwKICAgICAgICAgfSBcCiAg
ICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1Niwy
NiArMTAwMSwzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2Rl
ZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAg
ICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAg
IGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAg
ICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBlbWl0U2xv
d0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwK
KyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8j
I25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQpIHsgXAor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkpOyBcCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsgXAorICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFt
ZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24g
c3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlv
bigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJD
b21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxOCArMTA4Miw4
NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rp
b25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1f
c2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5
dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAg
ICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwg
aGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBi
eSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsK
KyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+
c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7
CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYg
KGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBi
bG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3Jz
W3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNh
c3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWlu
UGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNv
ZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJy
ZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVu
dEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVu
dEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0
YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRl
QXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3Rh
dGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRl
ID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5k
QmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5Qmxv
Y2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vz
c29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
c2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs
UHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCld
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRl
Y2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAg
ICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxs
IGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAg
ICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBo
aXQuCisgICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNv
ZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSk7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCkBAIC0yNzgsNDYgKzEx
OTUsNTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAj
ZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
ZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAg
ICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAg
ICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9X
X09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlz
X2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2Zf
aXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVz
aF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZp
cm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChy
ZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFj
aGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBERUZJTkVf
U0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19p
bmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1l
bnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21p
c2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVf
YXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09QKGluX2J5
X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29s
ZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGxl
c3NlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3BlY0Jvb2xl
YW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLm1fZHN0
LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AodHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLm1fZHN0
LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0LCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNwZWNCb29s
ZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9vbGVhbikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3RyY2F0PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNo
X3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVy
KCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhp
cywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChy
ZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9k
c3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9w
ZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19P
UChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBT
cGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0
dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJh
eV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVh
ZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlf
YnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3Qs
IFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAgICAgICBE
RUZJTkVfU0xPV19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERF
RklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1l
bnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3Bl
Y09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZs
eT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVj
QXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3Qp
CisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAg
IERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0
ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAg
ICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTMyMiwxMSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9z
YW1wbGVyX2JlZ2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAg
ICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVG
SU5FX09QKG9wX21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJ
TkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc3LDYgKzE0
MDUsMzggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmICht
X2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAo
IW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2Vu
ZDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX3B1dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2Rp
cmVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF9ub3A6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6
CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm9sb2d1ZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90
YWlsOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBMT0w6ICIsIG9w
Y29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdXNl
TE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIp
OwogICAgIH0KQEAgLTUxNSwxMiArMTQ3NSwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJh
cmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAg
IHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBp
dGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBp
dGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7Cisg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGluayh0aGlzKTsK
KworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAog
ICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIApA
QCAtNTc5LDcgKzE1NDEsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2NoZWNrX3RyYXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfbmVnYXRlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk3LDYg
KzE1NTgsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluYykK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjMzLDE1ICsxNTk3LDE4
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBz
bG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmly
c3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlu
a2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRv
byBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8g
T09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Ns
b3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAi
Tm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAg
IC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIg
LSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNv
ZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQog
ICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVD
YXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBz
aG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQ
bGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0K
QEAgLTc3NCw2ICsxNzQxLDI4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklU
Q29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7
CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgZm9yIChh
dXRvJiBleGl0IDogbV9leGl0SnVtcHMpIHsKKyAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0g
ZXhpdC5maXJzdDsKKyAgICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25kOworICAgICAgICBq
dW1wcy5saW5rKHRoaXMpOworCisgICAgICAgIGlmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkKKyAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQg
ZXhpdHMuCisKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9
ICptX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxPU1JFeGl0UHRyVGFnPiBkZXN0aW5hdGlvbiA9
IExMSW50OjpnZXRDb2RlUHRyPE9TUkV4aXRQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBk
ZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRf
b3NyX2V4aXRfdHJhbXBvbGluZSk7CisgICAgICAgIC8vZWxzZSAKKyAgICAgICAgLy8gICAgZGVz
dGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworCisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5tZXRhZGF0YVRhYmxlKCkpLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxl
R1BSKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKTsK
KyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBtb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwg
R1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0
UHRyVGFnKTsKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCkBAIC0xMDU4LDYgKzIwNDcsNzE1IEBAIFNlY29uZHMgSklUOjp0b3Rh
bENvbXBpbGVUaW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsg
dG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6
c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgLy8gT09QUzogaGFuZGxlIEV4
aXRLaW5kLgorICAgIGlmICghbV9leGl0SnVtcHMuc2l6ZSgpIHx8IG1fZXhpdEp1bXBzLmxhc3Qo
KS5maXJzdCAhPSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fZXhpdEp1bXBzLmFwcGVuZCh7
IG1fYnl0ZWNvZGVJbmRleCwgSnVtcExpc3QoKSB9KTsKKyAgICBtX2V4aXRKdW1wcy5sYXN0KCku
c2Vjb25kLmFwcGVuZChqdW1wKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdp
c3RlclNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRl
ciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3Ig
dGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVl
ZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRh
IGhva2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0
ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0g
QmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlu
cyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAg
YWxsb3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRp
YyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRl
ciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3Ig
IHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5l
ZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0
YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsK
KyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAg
c3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNv
bXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0
LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAv
LyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZl
cmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3
ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8v
IE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3Rl
clNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAg
cmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7
CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1Bh
dGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtzIGN1cnJlbnRseSB3LyB3cml0ZUJhcnJp
ZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5pY2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4g
ZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8vaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAm
JiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisg
ICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhp
bnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxp
ZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAg
ICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3By
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJl
Zyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAg
IGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBh
bGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVn
VmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291
bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1
ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAg
ICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUg
Y29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFn
cmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIGlm
IChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgewor
ICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdG
b3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52
YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRo
ZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAgICAg
Ly8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAgLy8gLSBWYWx1ZU9wZXJhbmQoKQorICAg
ICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAvLyAtIH5WYWx1ZU9wZXJhbmQoKQorICAg
ICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBkZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtl
IHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVwIGZ1bGx5CisgICAgICAgIC8vIGRlYWxs
b2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVt
cC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5WYWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBj
YWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAgICAgICAgLy8gYW4gaW5jb25zaXN0ZW50
IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQorICAgICAgICAgICAgcmVnVmFsdWUuaXNB
bGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwordm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbElt
cGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0byBzZXQpIHsK
KyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYgKCFjYWxsZWVT
YXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkpOworICAgIGRv
Q2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQ
bGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNh
dmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7
CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAg
aWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9w
ZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAg
ICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BS
cygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKQorewor
ICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxS
ZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZO
ZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAg
ICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5zcGlsbGVkUmVn
aXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChS
ZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKwor
ICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdp
c3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxs
QWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhp
cywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxs
LCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
cmVjb3JkLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVn
IHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZl
UGxhbiYgc2F2ZVBsYW4pCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2F2ZVBsYW4pIHsKKyAg
ICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25vcmUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFuZFRvSWdub3Jl
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7CisgICAgICAgICAg
ICBub3AoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7
CisgICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAg
ICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAg
ICAgICAgICBub3AoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVz
dG9yZUZyb21TYXZlUGxhbihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uu
c2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0
cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0
ZWQpOworICAgIGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lz
dGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3By
Rm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3Bl
Y0ludDMyT25seTsKKyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2
b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQ
UlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAg
ICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsK
KyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9w
ZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMgKC9jaGVja3BvaW50
cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWduUmVnKGdwciwgb3Bl
cmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBpZiAob3BlcmFuZCA9PSB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbCgxMikpCisgICAgICAgIHByaW50KCJzdG9yaW5nIGxvYzEyID0gIiwg
Z3ByKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERl
ZihvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6
OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVn
VmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJU
KHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2Nr
Q291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9j
a0NvdW50ICYmICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUg
PSB7IH07Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQp
CisgICAgOiBtX2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKGhpbnQpOworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhp
bnQpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoaGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1
cm4gbV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7
Cit9CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkK
K3sKK30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0g
SW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0
Tm9TbG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1f
aml0LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6
On5GUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVn
KTsKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50
MzJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQo
KQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3Bl
cmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
cmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyht
X2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAg
IGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1f
Z3ByKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7
CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
Z3ByKCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9q
aXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1f
b3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkg
PSBtX2dwcjsKKyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJh
bmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNw
ZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNw
ZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdp
c3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNr
KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxP
cGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGpp
dCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBncHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxs
T3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJl
ZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKwor
ICAgIGlmIChtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAg
ICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBI
YXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNw
ZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6
OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBt
X2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0g
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVy
YW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1
ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5h
c3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dw
cik7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9w
ZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0
KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisg
ICAgICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVy
YW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7Cisg
ICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
ICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7
CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2Zw
cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBt
X2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJS
ZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2Nr
KG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RE
b3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJs
ZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7
CisKKyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4g
bV9mcHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykg
eworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAg
IGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsK
KyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRk
SWZOZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAg
ICAgYWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJ
VDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVB
c0NlbGwpCit7CisgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVB
c0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2
YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30K
Kwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAg
ICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90
aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9i
amVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICgh
aXNPYmplY3RTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjT2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJ
bnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICgh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkp
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7Cisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6
c3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5k
KSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkp
OworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4
cHIgYm9vbCB1c2VCaWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVz
ZUJpZ0ludDMyID0gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KG9wZXJhbmQpIHx8ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJh
bmQsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wZXJhbmQpLCBTcGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
UikpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIg
PSBicmFuY2hJZkJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIu
bGluayh0aGlzKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50Owor
ICAgIH0KKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgor
fQorCit2b2lkIEpJVDo6cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7CisgICAgaWYgKCF1c2VM
T0woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMg
PSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29u
c3RhbnRzKCkuc2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0YW50cygpOyAr
K2kpCisgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rl
ckZvckNvbnN0YW50KGkpKSk7CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY2FsbGVl
KCkgPSBTcGVjRnVuY3Rpb247CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3Bl
cmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9j
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCku
c2l6ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVycyA9IHsg
fTsKK30KKwordm9pZCBKSVQ6OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0NvdW50LCAiKSIpOwor
fQorCit2b2lkIEpJVDo6ZHVtcFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRhdGFMb2dMbigiUmVn
IGFsbG9jIHN0YXRlID0gWyIpOworICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkR1BScygpKSB7
CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBk
YXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVl
KHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkRlBS
cygpKSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAg
ICAgICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJl
Z1ZhbHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dMbigiXSIpOworfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9y
aWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9p
bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFs
bG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFz
cyBCeXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2Rl
QmxvY2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTAxLDE1ICsxMDUsMjYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dD
YXNlRW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBC
eXRlY29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikK
LSAgICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBh
aXI8UmVnLCBWaXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29y
ZCB7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGls
bGVkUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9
OworCisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVt
cHM7IC8vIFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2tw
b2ludHMsIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAg
ICBTYXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5
c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50
czsgLy8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNv
bnZlbmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTgzLDYg
KzE5OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBw
cml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNl
SklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMTkwLDEyICsyMDcsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAw
OwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVw
cmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0g
ICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3Qg
YmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAg
ICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgp
OwpAQCAtMjYzLDYgKzI3NCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxG
b3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgp
OworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEg
Y2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAg
ICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uKQogICAgICAgICB7CkBAIC0zMDAsOSArMzI1LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xv
d0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsK
LSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1Bh
dGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWco
KSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
Y29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmly
dHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAg
ICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMTAsNyArMzM3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxf
dmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTMyNyw3
ICszNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZh
bChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1
dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzM3LDcgKzM2NCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxl
T3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUp
OwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAg
ICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21w
aWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdl
dCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTM1MCw4ICszNzcsOCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBp
cyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNj
cmF0Y2guCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShNZXRhZGF0YSYpOworICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRh
JiwgR1BSUmVnIHZhbHVlID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0
YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgpAQCAtNDc1LDgg
KzUwMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKQEAgLTQ4NCwxMSArNTExLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBE
b3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYp
OwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0
IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAg
ICB2b2lkIGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiop
OworCiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTUxMiw5ICs1NDgsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmls
ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Vu
ZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKQEAgLTU3Niw3ICs2MTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfYmVnaW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNp
ZiBDUFUoWDg2XzY0KQogICAgICAgICB2b2lkIGVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
Kik7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0Myw3NyArNjgx
LDgwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxf
ZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVu
Y3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1v
bihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJl
Z2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAg
ICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7
CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSog
b3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTcyOCw4ICs3NjksNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzQyLDM4ICs3ODEsMTggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVy
YXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVk
RnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmls
ZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRN
YXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24q
LCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2Zp
bGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNo
RnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJ
Q1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwg
U2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93
Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJv
bS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAg
ICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lk
IGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYg
c2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNs
b3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFz
QW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0g
ICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMo
bV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURf
UEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0
cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAg
ICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0
ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4pOwpAQCAtOTI1LDYgKzk0NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlm
CiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9p
ZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3Rh
dGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1
dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05MzUsNiArOTU3LDI1MiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAg
IGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJ
VCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgp
OworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQ
UlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsK
KyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVn
IG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIElu
dDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5k
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUg
dGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBt
aWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBD
ZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJ
VCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgp
OworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAg
ICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcg
fTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisK
KyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAg
ICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91Ymxl
T3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFs
aWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVy
OworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1
ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAg
ICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3Bl
cmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7Cisg
ICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2NlZFJl
ZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAg
ICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAg
ICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCB3aWxsRGVmKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEdQUlJlZyYgZ3ByID0gZ3ByRm9yT3BlcmFuZChvcGVy
YW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZQUlJl
ZyYgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZnBy
ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5v
cGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBn
cHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05v
dENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAm
IH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlv
bihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Io
b3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOwor
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQg
c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0Nl
bGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2Jq
ZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVy
ZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJS
ZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsK
KyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAg
IHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBz
ZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRh
a2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0Lgor
ICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAg
ICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29y
ZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0ZXJD
YWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZy
b21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25v
cmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwog
CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpAQCAtOTUzLDcgKzEyMjEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsK
IAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9y
PFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xv
d0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRj
aGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1
dEluZm9zOwpAQCAtOTkwLDYgKzEyNTgsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBk
b3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAg
ICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJl
ZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAg
ICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlm
IChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBS
UmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1
ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAg
ICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQg
eyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5v
cGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291
bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0
ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAg
ICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVn
LCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4g
cmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHBy
b3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90
aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcu
c2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsK
KworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJv
dmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
c1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBl
c1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhl
ci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJz
W2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJl
c2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKworICAgICAgICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRl
KCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7Cisg
ICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07Cisg
ICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlv
bnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJl
bnRQcmVkaWN0aW9uczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKwor
ICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAg
ICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAgIGJv
b2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxPTCB7IGZh
bHNlIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Qnl0ZWNvZGVJbmRleCwgSnVtcExpc3Q+
PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFu
ZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBE
b3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3Jl
YXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxl
c3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFu
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JF
cXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NTEsMzIgKzE1MSw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVj
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoMCkpKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRU
ZW1wLmdwcigpOworCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgcmVzdWx0KTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworCisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKExlc3NUaGFuLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAg
IGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUocmVzdWx0
KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1Qw
KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNv
bmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwg
Y29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBE
b3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlu
bGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAg
Ly8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNv
bnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVk
aWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkg
eworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlzYWxs
b3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9w
MSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yMjksMTcgKzI4MSw0
MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvCiAKIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAg
ICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEp
ICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIp
OworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOwor
ICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsK
KyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdU
MCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29u
ZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFp
bW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIo
b3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgICAgICBnZXRMSFMoKTsK
KyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBAIC0yNTUsNDIgKzMzMyw4OCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiAKIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJo
c1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxo
c0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNw
ZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdU
MDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAg
ICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9w
MikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQ
UiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQ
Uik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0Owor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3Vs
dC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
cmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRP
cGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVn
VDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
bGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29u
ZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMy
KGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pLCByZXN1bHRHUFIpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAs
IG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEs
IHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBj
b21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKICAgICB9Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgp
LCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29u
ZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNo
VGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBj
b2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBm
bG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0g
Y29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAt
IGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIp
KSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0yOTksOCArNDIzLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwx
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFn
UmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNSw4ICs0NDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdp
c3RlciwgcmVnVDEpOwpAQCAtMzUwLDEyICs0NzAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAg
ICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFp
bDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElm
SW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwog
ICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRU
b0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjgsOSArNDg3LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwog
ICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAg
ICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTM4MCwxMSArNDk5LDQ3IEBAIHZvaWQgSklU
OjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0
ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsK
LSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1
dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOworICAgICAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAg
IGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICAgICAg
c2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93
LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIo
c3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQu
ZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAg
ICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAg
ICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBp
bnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsg
aW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29k
ZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTM5MiwxMSArNTQ3LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
Yyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQz
MihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcg
dGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRy
KCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0
ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUlu
dEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRH
UFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRl
bXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUg
PSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBG
UFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7
CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlu
cHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQ
UiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3Jj
RHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmln
SW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3Vi
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAt
NDA2LDU0ICs2MDMsODkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9u
Kgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
b2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1
cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAg
QVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJl
Z2lzdGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0
byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAg
ICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChlY3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJo
c1RlbXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBjbG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihl
Y3gpOworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRl
bXAuZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBl
Y3gpOworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsK
KyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVt
cC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkg
PT0gZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsK
KworICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAu
ZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBlbnN1cmVT
bG93Q2FzZShlYXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxo
cykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMsIGxoc0dQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzIocmhzLCByaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAg
ICAgICAgbW92ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGhzR1BSID0g
cmVnVDQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgbGhzR1BSLCByaHMs
IGVjeCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICAgICAgbW92ZShsaHNHUFIsIGVh
eCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgz
NjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAgeDg2Q29u
dmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4KTsKLSAgICBKdW1wIG51bWVy
YXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3Rl
ZEltbTMyKDApKTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhp
cyk7Ci0gICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vsc2Ug
Ly8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsK
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgZWF4KTsK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUobGhzKSwgU3BlY0JpZ0ludCkgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShyaHMpLCBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
aWdJbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgpOwogfQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKQEAg
LTQ2Myw3ICs2OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1w
TGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3Myw2ICs3
MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAg
ICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkp
IHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYxLDE1ICs3OTQs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChv
cDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAt
NzIzLDEzICs5NTQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aQogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPiht
X2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJ
WE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0
ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8
T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRl
UHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6
ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRp
bWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25p
cHBldEdlbmVyYXRvcj4KQEAgLTc0MCwxOCArOTY5LDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5h
cnlPcEZhc3RQYXRoKGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLQogICAgIFNuaXBwZXRPcGVy
YW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKIApAQCAt
NzU5LDMzICs5NzYsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25z
dCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAg
ICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikp
OwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4g
aGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNl
CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7
CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAg
IGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmls
aW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRl
Y29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwg
cmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlz
dCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAyLDcgKzEwOTIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0
UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ4LDIwICsxMTM4LDYgQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7
Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNl
bmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kOwogCkBAIC04NzIsMjEgKzExNDgsNzcgQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFs
aWRGUFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIg
ZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIo
KSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAg
ICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmln
aHRTaGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAg
IGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
SW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDEs
MTggKzEyMzMsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJo
c0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhz
RlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVj
dGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0
aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVB
ZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0g
Yml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0TWF0
aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVB
ZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBO
b25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTIzLDE1ICsxMjkxLDM1IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhO
ZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRz
dC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBz
aHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdz
IHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwor
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3JjVGVt
cDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1RlbXAu
ZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNyY1Jl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhOZWdh
dGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4K
KyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQg
c2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3JjUmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNy
Y1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MCwxOSAr
MTMyOCwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAg
ICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNj
cmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdz
KTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBib29s
IGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgp
OwpAQCAtOTYyLDcgKzEzNTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5
TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTczLDEyICsxMzY4LDI4IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCisgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuZmlyc3QoKSk7CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDEpKQorICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFu
dEludChvcDEpKTsKKyAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQorICAg
ICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBG
UFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRl
bXBGUDsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7CkBAIC05ODcsMjUgKzEzOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVEJpbmFyeU1hdGhJQwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRp
ZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgewor
ICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3Bl
cmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07Cisg
ICAgICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBs
ZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAg
ICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJl
c3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3Jh
dGNoVGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwor
ICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogCi0gICAgUkVMRUFT
RV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmlnaHRSZWdzKTsKKyAgICB9CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJh
dG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwogICAgIAog
ICAgIEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3Bl
cmFuZCkpKTsKICAgICAKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29u
c3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
bGVmdFJlZ3MpOwotICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7Ci0KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZVN0
YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgpAQCAtMTAxNCwxNyArMTQ0MCwzNCBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAKICAgICBib29sIGdlbmVyYXRlZElubGlu
ZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAgICBpZiAobGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKLSAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkp
IHsKKyAgICAgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAg
ICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAg
ICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgICAgIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIH0KKwogICAgICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwotICAg
IH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsZWZ0UmVncy5ncHIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmlnaHRSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzQsMTEgKzE0NzcsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIH0pOwogI2Vu
ZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdz
LmdwcigpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+
KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
cjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRj
aEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0
YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0
aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ3LDggKzE0OTcsOCBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3Jj
UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpOwpAQCAtMTA4NCw3ICsxNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2Zp
bGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBh
dGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
biByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5l
cmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTQsMTYg
KzE1NDQsNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKLSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5
dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0
T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTQsMTUg
KzE1NTQsMzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAg
ICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVy
YW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
bGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50
KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07Cisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIg
PyByZWdUMyA6IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVn
VDAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlm
CiAKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7
CisKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0
Y2gpCkBAIC0xMTU1LDIzICsxNjE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IElu
c3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
MjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZw
UmVnVDI7Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7
Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4NywyNyArMTYzMSw5
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNl
dENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5k
LmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAg
IEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4g
cmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRl
bXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1w
LT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1w
LT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAg
ICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIg
PSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnBy
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAg
cmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAg
ICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
KyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBm
cFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAog
ICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2Ny
YXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmln
aHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5n
cHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1i
ZXI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5k
SnVtcExpc3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0
KCkuZW1wdHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rp
dik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQpAQCAtMTIxNSwzNCArMTcy
NCwxMDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9m
aWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4o
KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZU5l
Z1plcm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVz
dWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2
ZVplcm8sIGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAg
ICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgbXVsRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigp
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2Zp
bGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBt
dWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BN
dWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRP
cHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRp
bWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9m
aWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4o
KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAg
bGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsK
KyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5m
cHIoKSk7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZw
cigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5
dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBs
aHMuZ3ByKCksIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJ
VFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRT
dWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihz
dWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1p
emUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUp
OworICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1Bf
UE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25z
dCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGlu
YXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxS
ZWdpc3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0aW9u
Rm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5LDgg
QEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBD
OyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVy
IGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2
YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNT
RVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0
ICszMzcsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAg
IGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
Rm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0
cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYs
NiArMzg5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAg
ICAgICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxp
a2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGgg
bXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSk7CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0
IGhlcmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90
PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0IChp
dGVyYXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZt
KCkucHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5l
eHRDaGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRD
aGVja3BvaW50U2xvdyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNo
b3VsZEJlUmVnVDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChz
aG91bGRCZVJlZ1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25l
eHQsIHJlZ1QwKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hl
YXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRl
cmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsK
IAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVj
dDsKQEAgLTQ1Niw2ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisg
ICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRp
cGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBF
YWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNl
ID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNiArNDk5LDQzIEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBp
dGVyUmVzdWx0R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQ
YXRoOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlclJlc3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3Mg
PSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNl
cnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cyA9IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJz
LmFkZCh2YWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRS
ZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
aXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
dXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpT
VmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9p
bnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgp
OworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25z
dCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAg
ICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFt
ZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgICAgICB3aWxsRGVmKGJ5dGVj
b2RlLm1fdmFsdWUpOwogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQ
Uik7CiAKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+
KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVy
UmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVz
dWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRl
clJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAg
ICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRo
YXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3
aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRo
aW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBz
dGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50
byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5l
bmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAi
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsx
ODksMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1
bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjpl
bnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwg
bV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93
UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9
PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7
CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nh
c2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJu
IG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQog
ewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExp
c3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVt
cCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1
bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdh
eSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChq
dW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGlu
dCByZWxhdGl2ZU9mZnNldCkKQEAgLTMwOSwxMSArMzAxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW4KICAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQor
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBHUFJSZWcgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxp
bmcoKSk7CiAKLSAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlID0gcmVnVDA7CiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7CiAjZW5k
aWYKQEAgLTMzOCwxMSArMzI5LDExIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxkZWMKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoLi4uKSB7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhKQoraW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
R1BSUmVnIHJlZykKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFk
YXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkpLCByZWcpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKQEAgLTM5MywxMSArMzg0LDYgQEAgQUxXQVlTX0lOTElO
RSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5p
dFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUo
anNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcs
OCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAg
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAg
LTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5Pigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
OCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFj
ZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklU
OjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
c3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5n
ZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwg
d2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRH
UFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
Q29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAg
R1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRv
clRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxv
Y2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdU
MDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBy
ZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVs
c2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5
ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJl
ZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwog
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUp
OwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBp
bnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9P
UFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNv
bnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFj
ZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgq
dGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOwor
ICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBp
bnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdU
MCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1
Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5v
dCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29u
c3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMs
OTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5k
cyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJz
LgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUg
d2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90
byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkg
dGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0
KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBD
ZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1
bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9
OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BS
UmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0
VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNo
MlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxs
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwt
PmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKwor
ICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9
IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRl
bXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAg
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5n
cHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAg
ICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBl
bmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3Bl
Y3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJl
Z1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBi
YXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQg
Zm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAg
ICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAg
ICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAg
ICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5z
dGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5w
cm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAg
IGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJU
ZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOwor
CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAg
ICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIs
MzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUik7CisgICAg
ICAgICAgICB0ZXN0NjQoWmVybywgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0OTMsMjcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxs
TnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BS
LCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUyMyw1NiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQo
cmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhl
YXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJ
TlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3Ry
dWN0aW9uKikKQEAgLTMxMywxOCArNTg5LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxf
d2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAot
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBl
KSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjM4
LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVU
ZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzcwMywxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJl
c3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUg
KzcyMiw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5r
KHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92
ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAg
ICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
SnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5r
KHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYs
NTIgKzc2NSwyMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChzcmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0
cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
eW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJp
bmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNT
dHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNw
ZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAo
c3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25l
ID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYg
KHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAg
ICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcg
bmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9u
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFu
KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8s
IHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTog
c3RyaW5ncywgYml0aW50LCBvYmplY3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAv
LyBTZWUgY29tbWVudCBiZWxvdy4KKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblpl
cm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWlu
c3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwg
dGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJp
dCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3Rp
dmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3
aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAg
ICAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMg
dGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNs
ZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxz
ZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBh
Z2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5k
IGZsaXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5v
blplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24g
PSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQ
UiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNj
cmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIu
Z3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1
ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQ
Uiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BS
UmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNv
bmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwg
dmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMg
aW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0
Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJG
UFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
Uiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1
ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk3MCwxMjkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAg
ICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwor
ICAgICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMg
LSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduLmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7
CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNr
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAg
ICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwor
CisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzExMDEsMjYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTUwMCwxMCArMTEyOSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNP
dGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTUxNSw2NSArMTE2MCwzMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5z
dHJ1YwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0g
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVk
SW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBv
aW50ZXIpKSkgeworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRh
Lm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBhdXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0
cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIg
Ym9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENv
bXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlz
RXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOwor
CisgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxo
cyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBK
U1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVT
eW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJl
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5m
cHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNv
bXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2Fz
ZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhz
R1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisK
KyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICB9CisKKyAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+
Cit2b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigp
OworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1f
bGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25z
dGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1
YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFu
ZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgaWYgKCF2YWx1ZXND
b3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAg
IGlmICghaXNFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwo
cmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhz
LCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJo
c0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBW
YWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAg
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+
KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJ
bXBsPE9wRXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOworICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAKLSAg
ICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcg
bGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8
T3BOZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNv
bXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
aHNHUFIsIHJoc0dQUik7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVx
SW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBH
UFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzog
V2UgY2FuIG1ha2UgdGhpcyBhIHNpbmdsZSBicmFuY2ggaWYgdGhlIHJlc3RvcmUgZG9lc24ndCBj
bG9iYmVyIHJldHVyblZhbHVlR1BSLgorICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBs
YW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVn
VDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhz
R1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwg
cmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNDgzLDE0NiBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9
IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVn
VDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0Vx
ID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRv
IGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29t
cGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKwor
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywg
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0
cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBjb21wYXJl
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUg
c3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNs
b3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhz
R1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNH
UFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7
CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1
bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCBy
aWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxl
ZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBp
ZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7
Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZy
YWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdp
dGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5
IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8v
IFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcg
MTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMg
YXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2ls
bCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBh
Ym92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShy
ZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGln
aEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdU
NSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9y
NjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJl
Z1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUg
aXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdU
MSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVj
aXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBz
bG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAg
ICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwg
SlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklH
SU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUn
IHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlz
IERvdWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChs
ZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9u
ZTsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAg
ICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3Rl
YWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJh
bmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYg
aXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhp
Z2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1Qx
LCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGln
aEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFk
ZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVn
VDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNo
VGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Cisg
ICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBz
dHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAg
ICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0
aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBi
b3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1t
NjQoMSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNl
bHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNl
bGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2
NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwot
Ci0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBp
dCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBp
dCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0
aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsK
KyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdz
KS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBh
biBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0
J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxl
ZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAg
ICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJl
Z1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
KyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2
OCArMTY0MCwxMzUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0g
Ynl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdU
MCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEg
PSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RF
cXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRl
cmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0Nv
dWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAg
ICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhz
LCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAg
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
ICAgICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUg
c3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJ
bnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lm
IFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0
eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlz
IERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQot
ICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxs
KQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0g
ICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291
bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZO
dW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIs
IHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBh
bGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0
aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBv
bmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0g
ICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJl
Z1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQo
QWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFu
Y2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwot
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBv
bmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChy
ZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBw
cmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRo
ZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0g
ICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRv
IChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAg
ICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAg
aWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQ
YXRoOworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRo
aXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5h
aXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisg
ICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhl
biBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBo
aWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0
aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZp
bmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRk
NjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywg
cmVnVDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3Ry
aWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9u
ZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2
NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5n
IG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0
byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vs
c2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2Vs
bHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0
KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0K
LSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0
J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0
J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRo
aXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwot
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJn
ZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0
cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAg
ICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBp
dCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8g
aWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAg
ICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwor
ICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVx
dWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlm
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTc4MSwyMjYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVt
cDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
c2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQ
UiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAg
ICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChy
ZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAg
IGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJl
cikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1
dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAg
IEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAg
IGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVj
dChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2Jq
ZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzog
ZGVhbCB3aXRoIHRoaXMuCisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0
IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4K
KwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7
CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjA1OCwyMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRl
Y29kZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2Nv
cGUpICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxP
cGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2Nv
cGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRy
KEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsK
KworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUs
OSArMjA4OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBU
YWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7
Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRl
eCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTkyMiw5ICsyMTE0LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hh
cmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwg
dGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRy
VGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMg
KzIxMzgsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAg
ICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5w
dXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3Bp
bGxGb3JDYWxsKCk7IC8vIE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVC
bG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0Rl
YnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1f
ZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5k
OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6
dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEg
PyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwg
c2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAg
ICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQ
UiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAg
ICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBh
cmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0
R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1
bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBK
dW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9
IGp1bXAoKTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9
CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAg
ICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
aXNFcSA/IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29t
cGFyZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBy
ZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5s
aW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1p
dF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51
bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVs
bD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lz
dGVyIHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgor
CiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUg
b3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8g
YXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFu
ZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2Nr
LT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAg
ICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAg
Zm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFz
VmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlh
YmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZh
bHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7Cisg
ICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSAr
MjI4OSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSks
IHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29w
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+
Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigp
KSwgc2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTA0NSwxMyArMjMxMyw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0
IEluc3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1f
Y2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3NyY0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5t
X3NyY0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmlj
dCgpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2Fj
aGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVz
dWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNy
Y0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0Pwor
ICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3Jj
RHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRv
IHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBl
bHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhl
cikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
aWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENl
bGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBl
LCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQor
ICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1
bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAg
ICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6
IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNl
dEpTVmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyMzk0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVl
ID0gYnl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAm
bWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdU
MDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI0MDQs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lz
dGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVS
ZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBn
cHJUZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBs
YWNlKCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxs
ZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3By
VGVtcDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVn
ID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0
LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3Qp
OworCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFi
bGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSkpOwpAQCAtMTA4Niw2NCArMjQ0NiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVf
dGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVy
ZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJl
Zyk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFs
UmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7
Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVH
UFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
eG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
aW5wdXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3Jr
cyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQg
anVtcCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAg
LTExNjIsOCArMjQ5MSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNv
IHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5
RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0Fy
ZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNs
ZWFyIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAg
ICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0
cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lw
RWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25z
OjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjUx
OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0
aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVk
KCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9w
dGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1
MzYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8g
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8v
IE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExP
TCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9u
KTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjU2
Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZn
X3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NzIsMTggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0
ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BS
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQocmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4
cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjU5Myw0MiBAQCB2b2lk
IEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7
CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAg
ICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBp
ZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2Nv
cGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25l
d19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
RXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2NTcsNDYgQEAg
dm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOwor
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2Nv
cGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVz
ZXQoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0
aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7
CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNl
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bj
b2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1
bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19h
c3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjcyNywxOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5
dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwg
cmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZh
bHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRh
ZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMzYwLDE0ICsyNzQ4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVn
IGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2Uo
KnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7Cisg
ICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNp
emVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Cisg
ICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
Z1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzgxLDM2IEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhp
cywgZW51bWVyYXRvciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMs
IGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgzMCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7Cisg
ICAgbV91c2VMT0wgPSBmYWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7CkBAIC0xNDM2LDYgKzI4NTksOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxs
KCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMjg4NiwxNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlNb2RlIG1v
ZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBh
bmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIG1vZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9y
QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwogICAgIAog
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
cmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2UoYmFk
VHlwZUp1bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTGFiZWwg
ZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4LDEzICsyOTAzLDE0IEBAIHZvaWQgSklUOjplbWl0X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwo
KTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRU
eXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRl
Y29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBuZXh0SG90UGF0aCkpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0
eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTM2LDgy
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBi
YXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JW
YWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZh
bHVlIHsgKnRoaXMsIGluZGV4IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAq
dGhpcywgYmFzZSB9OworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigp
OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBD
b21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVk
IGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAg
ICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
YmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBv
dXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1v
dmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0Vp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAg
ICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5l
IHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJz
dE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIAot
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxp
bmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAg
IG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAg
IGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9m
ZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDIxLDUxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwot
ICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNl
dCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVt
cDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25J
bnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBp
bmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3Ip
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7
CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7
CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91
bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgp
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
LCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxp
bmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1l
c1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRl
eEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE1NzQsMjEgKzMwNzUsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5k
cyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVn
IGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJ
bnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVu
dW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0
b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0
b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5k
ZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1l
cmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywg
aW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qw
LCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQp
LCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAg
bG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1
bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMjksOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBj
YWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rl
cjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1
OCw2ICszMTkxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwog
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5z
aGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BD
YWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9u
QXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUu
Iik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMyMDgsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICsz
MjQxLDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVn
VDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdz
Ojp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihy
ZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNjIsNDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1z
VG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDAp
OwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0
aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tp
cCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRH
UFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIs
IEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNU
b1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMy
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xl
bmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1Rv
U2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYK
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAot
ICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vs
c2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMx
MSw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0
T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBl
bHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwot
ICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1
bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91
bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3Mp
OwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFy
Z3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3Mp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJv
dW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0
UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90
eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BS
LCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwg
ZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7
CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3Mu
dGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdU
Mik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2
YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwor
ICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAg
LTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKQEAgLTI3OSw4ICsyNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwpAQCAtNTA5LDcgKzUwMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAg
IAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJl
bCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2Vu
IHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01NDcsOCArNTQwLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNTg2LDggKzU3Nyw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYz
Miw4ICs2MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY3Myw4
ICs2NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTcyMiw4ICs3MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBA
IC03NjMsOCArNzQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTA0
NCw4ICsxMDI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBA
IC0xMjAxLDggKzExODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUo
KTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFt
YmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKIApAQCAtNTEsNDkgKzUzLDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0
eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHBy
b3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGlu
Z1R5cGVHUFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEu
bV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJP
ZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlm
ICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGlu
ZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisg
ICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhw
cm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAK
ICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJ
bnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9u
bHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0
cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAg
IH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4o
KTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9n
ZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAg
ICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTAyLDM5ICsxNzIsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0
eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTUyLDYgKzI1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0g
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0lu
dGVnZXJDb25zdGFudCkKQEAgLTMxNCw4ICs0MjAsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAg
YXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kLCBw
cml2YXRlRmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2RlKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzNCw3ICs0NDMsNyBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQyLDcgKzQ1MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29k
ZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
QEAgLTM1MCwxMyArNDU5LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAg
ICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAg
IGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CkBAIC0zNzIsNDkgKzQ4MCwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNz
b3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
YWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vz
c29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
clNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0g
Z2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3Bl
cnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5t
X2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBh
Y2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1
dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29y
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQ
UiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nl
c3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTQyNCwxOCArNTg4LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAg
ICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUg
ZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpA
QCAtNDQ0LDI1ICs2NDIsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVs
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ3MiwxOSArNjcyLDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBw
cm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJv
cGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJh
c2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
Y3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00OTMsMjEz
ICs3NDQsMzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
ICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFw
VG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0g
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQ
UiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJl
ZyBpbmRleGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BS
LCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7
CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHRoaXNWUmVnKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1f
Z2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRo
aXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNW
UmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dp
dGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAg
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNb
bV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRj
aCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25l
IHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBs
b2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2Rl
Ci0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0
aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1
ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21h
TW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGly
ZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0LCBwcml2YXRlRmllbGRBY2Nlc3NLaW5kKGJ5dGVjb2Rl
KSk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzA5LDc3ICsx
MTE1LDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
IGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAg
ICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJS
ZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQ
UiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRz
dCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9u
V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03OTEsMTcgKzEy
MTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNp
Z25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC04MTEsMjEgKzEyNDMsMzYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAg
ICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1p
dFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgZGVwdGgpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVw
dGggPiAwKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29w
ZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVu
dC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZp
cm9ubWVudC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKQEAgLTgzOCw5ICsxMjg1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsK
KyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogCkBAIC04NTMsMjkgKzEzMDAsMjkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5Ogog
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNv
bHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUs
IHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAg
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04
ODQsMTUgKzEzMzEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIp
CiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAt
OTA2LDEyICsxMzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KAogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwpAQCAtOTIyLDUxICsxMzY4LDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1
Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVy
ZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29s
dmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAg
ICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOwor
ICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQ
UjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFs
dWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRH
UFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAot
ICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9h
ZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFC
TEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGlu
ZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAg
ICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6
CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVn
VDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgpAQCAtOTgwLDEwICsxNDU5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAogCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNO
b3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTk5NiwyNyArMTQ3NSwy
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQ
Uik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
c3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwog
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDI2LDQwICsxNTA1LDIy
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAg
ICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVj
dFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAg
IGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBy
ZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3Rp
ZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNzMsMjEg
KzE1MzQsNDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7
CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIg
PSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJl
Z1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgfQorCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Nj
b3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlW
YWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBv
ZmZzZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZz
ZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BS
ID0gYnV0dGVyZmx5VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJl
Z1QxOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAg
IH0KIAorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xv
dCwgc2NvcGVHUFIsIG9mZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3Bl
ZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwg
c2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAg
ICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAg
ICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3Qs
IG9mZnNldEdQUik7CisgICAgICAgICAgICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAg
IHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNlSW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMTA5OCwyOCArMTU4Nyw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxv
Y2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKKworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgICAg
IGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAm
JiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMg
cHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAgICAgICAg
ICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFu
ZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7
Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAg
ICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigqb3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAg
ICAgICAgICAgICAgICBsb2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgICAgICBsb2FkUHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFs
dWVHUFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwg
dmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsK
KyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3Bl
R1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5V3Jp
dGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVl
R1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAg
ICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBA
IC0xMTM0LDEyICsxNjUyLDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAg
ICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdh
bnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBz
YW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3
ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywg
c2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExl
eGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1w
IGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0
ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcu
CiAKICAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMTUzLDIzICsx
NjgwLDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3Jh
dGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9m
IGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlm
IHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFn
YWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExv
YWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7CkBAIC0xMTg2LDEwICsxNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7
CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTIwNSw2MSArMTczOSwx
NzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBh
cmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJn
dW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRz
OjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgbG9h
ZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2
YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVl
KTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFy
Z3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKyAgICAKKyAg
ICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRz
OjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3Rl
ciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7
CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBt
aWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3Vu
ZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVk
cyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdh
bGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4K
KyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNh
bGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJl
Z2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0
ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgICAgIGlm
ICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgaWYg
KCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFs
dWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAg
ICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAgICAgaWYgKGdwckZvck9wZXJh
bmQob3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBvd25lckdQUiA9IGdwckZv
ck9wZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG93bmVyVmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgb3duZXJHUFIpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93
bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShvd25lcikg
JiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNj
cmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVm
b3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRG
aWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxs
LmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
KSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIC8vIE9PUFM6IE1ha2Ug
aXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0
aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGlu
dG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBz
YXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVu
dGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNv
IHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwog
ICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
KQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4g
dmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdU
MDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxs
LmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMTI3
MSwxMSArMTkyMiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlz
LCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAg
ICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJu
YWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6
b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTI4NSwxMCArMTk1MSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmll
bGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2Ug
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3Bl
cmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBz
dG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50
ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMTM4
NSw4ICsyMDY0LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QK
IAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1w
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBy
ZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5n
cHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7Cisg
ICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93
bmVyLCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29y
ZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRT
cGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7
CisKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0
MDQsNiArMjEwMCw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXMK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBt
X3VzZUxPTCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2Rl
SW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIApAQCAtMTQ2OSw2ICsyMTY3LDggQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBB
U1NFUlQoKHB1dEtpbmQgPT0gRGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gTm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9w
dXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgp
LnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21h
cFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9y
W10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3Jb
XShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAg
c3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBt
X21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1Bh
dGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0
aENhbGwuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
bG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgog
CiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAg
Ly8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAg
IC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcp
CiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rp
b24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVP
ZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDYgKzM5NiwxMCBAQCBzdGF0aWMg
dm9pZCBkaXNhYmxlQWxsSklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVw
ZW5kZW50T3B0aW9ucygpCiB7CisgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9w
dGlvbnM6OmZvcmNlTE9MKCkgPSAxOworICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAj
aWYgIWRlZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFu
ZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUx
OCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KFVu
c2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZv
clRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9M
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2Ugewog
ICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0
UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhlRgog
ewogICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVOQUJM
RShERkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVy
biBqc051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8fCAh
T3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAg
ICAgIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415942</attachid>
            <date>2020-12-10 16:32:17 -0800</date>
            <delta_ts>2020-12-11 12:34:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>470479</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMt
dG8tdGhpcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDAwOyBpKyspIHsKICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1i
ZXIiKTsKIH0KIAotYXNzZXJ0KG51bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0
KCFpc0RGR0VuYWJsZWQoKSB8fCBudW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRl
eDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJp
bmctZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1w
cm9wZXJ0eS1rZXktY29uc3Qtc3RyaW5nLWZ0bC5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgSlNU
ZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRs
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw1ICsyMSw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMg
JiYgIW51bWJlck9mREZHQ29tcGkKICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChp
ID49IG1heFRyaWVzKQoraWYgKGkgPj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAg
dGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBE
RkcgSklUIik7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkt
a2V5LWNvbnN0LXN5bWJvbC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAy
Njc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNv
bnN0LXN5bWJvbC1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTIyLDUgKzIyLDUgQEAgZm9yICg7
IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChp
KTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0Vu
YWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZH
IEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtl
eS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwu
anMJKHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1w
cm9wZXJ0eS1rZXktc2xvdy1vYmplY3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw1ICsyOSw1IEBAIGZvciAoaSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcK
ICAgICBzbG93T2JqZWN0VmFsdWVPZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAo
aSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZh
aWxlZCB0byBjb21waWxlIHNsb3dPYmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0
LWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJv
cGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRs
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw1ICsyMSw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMg
JiYgIW51bWJlck9mREZHQ29tcGkKICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAot
aWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkK
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3Ry
aW5nIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJv
cGVydHktYXJyYXktc3RvcmFnZS1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aGFzLWluZGV4ZWQtcHJvcGVydHktYXJyYXktc3RvcmFnZS1mdGwuanMJKHJldmlzaW9uIDI2NzQz
NSkKKysrIEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2Ut
ZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw3IEBAIGVuc3VyZUFycmF5U3RvcmFn
ZShhcnJheSk7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QxKGFycmF5KSwgdHJ1ZSk7Ci1zaG91bGRCZShkaWRG
VExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJlKGRpZEZUTENvbXBpbGUgfHwgIWlzREZHRW5hYmxl
ZCgpLCB0cnVlKTsKIAogdmFyIGFycmF5ID0gWzEsIDIsICwgNF07CiBlbnN1cmVBcnJheVN0b3Jh
Z2UoYXJyYXkpOwpAQCAtNDMsNiArNDMsNiBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJyYXkyKTsK
IGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCiAg
ICAgc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwotc2hvdWxkQmUoZGlkRlRMQ29tcGls
ZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwgdHJ1
ZSk7CiBzaG91bGRCZSh0ZXN0MihhcnJheTIpLCBmYWxzZSk7CiBzaG91bGRCZSh0ZXN0MihhcnJh
eTEpLCB0cnVlKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5LXNs
b3ctcHV0LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNz
L2hhcy1pbmRleGVkLXByb3BlcnR5LXNsb3ctcHV0LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZp
c2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93
LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJyYXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRy
dWUpOwotc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21w
aWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwgdHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRd
OwogYXJyYXkuX19wcm90b19fID0gb2JqZWN0OwpAQCAtNTYsNiArNTYsNiBAQCBlbnN1cmVBcnJh
eVN0b3JhZ2UoYXJyYXkyKTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFyIGkgPSAw
OyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwotc2hv
dWxkQmUoZGlkRlRMQ29tcGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFp
c0RGR0VuYWJsZWQoKSwgdHJ1ZSk7CiBzaG91bGRCZSh0ZXN0MihhcnJheTIpLCBmYWxzZSk7CiBz
aG91bGRCZSh0ZXN0MihhcnJheTEpLCB0cnVlKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2ludDgt
cmVwZWF0LWluLXRoZW4tb3V0LW9mLWJvdW5kcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHJldmlzaW9uIDI2NzQz
NSkKKysrIEpTVGVzdHMvc3RyZXNzL2ludDgtcmVwZWF0LWluLXRoZW4tb3V0LW9mLWJvdW5kcy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjEsNSArMjEsNSBAQCBpZiAocmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50KGZvbykpCiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQogICAgIGZvbyhh
cnJheSwgZmFsc2UpOwogCi1pZiAocmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkK
K2lmIChpc0RGR0VuYWJsZWQoKSAmJiByZW9wdGltaXphdGlvblJldHJ5Q291bnQoZm9vKSAhPSAx
KQogICAgIHRocm93ICJFcnJvcjogdW5leHBlY3RlZCByZXRyeSBjb3VudDogIiArIHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudChmb28pOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcHV0LWJ5LWlkLWZs
YWdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwko
cmV2aXNpb24gMjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvcHV0LWJ5LWlkLWZsYWdzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsxMywxMyBAQCB2YXIgeSA9IHt9OwogZih4LCA0Mik7CiBm
KHksIHt9KTsKIAorbGV0IGNvdW50ZXIgPSAwOwogd2hpbGUgKCFudW1iZXJPZkRGR0NvbXBpbGVz
KGcpKSB7CisgICAgKytjb3VudGVyOworICAgIGlmICghaXNERkdFbmFibGVkKCkpIHsKKyAgICAg
ICAgaWYgKGNvdW50ZXIgPiAxMDAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIG9w
dGltaXplTmV4dEludm9jYXRpb24oZyk7CiAgICAgaWYgKHR5cGVvZiBnKHgpICE9PSAnbnVtYmVy
JykKICAgICAgICAgdGhyb3cgJ2ZhaWxlZCB3YXJtaW5nIHVwJzsKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL3R5cGVkYXJyYXktaW50cmluc2ljLWdldHRlcnMtY2hhbmdlLXByb3RvdHlwZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy90eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNo
YW5nZS1wcm90b3R5cGUuanMJKHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL3R5
cGVkYXJyYXktaW50cmluc2ljLWdldHRlcnMtY2hhbmdlLXByb3RvdHlwZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTgsMTAgKzE4LDE0IEBACiAKICAgICBsZXQgYXJyYXkgPSBuZXcgSW50MzJBcnJh
eSgxNSk7CiAKLSAgICB3aGlsZShudW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPCAxKSB7CisgICAg
bGV0IGNvdW50ZXIgPSAwOworICAgIHdoaWxlIChudW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPCAx
KSB7CiAgICAgICAgIGZvbyhhcnJheSk7CiAgICAgICAgIGJhcihhcnJheSk7CiAgICAgICAgIGJh
eihhcnJheSk7CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgaWYgKGNvdW50ZXIgPiAxMDAw
MDApCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBPYmplY3Quc2V0UHJvdG90eXBl
T2YoYXJyYXksIG51bGwpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIv
SmV0U3RyZWFtRHJpdmVyLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0pldFN0cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ0LDEy
ICsxNjQ0LDEyIEBAIGxldCBydW5TZWFNb25zdGVyID0gdHJ1ZTsKIGxldCBydW5Db2RlTG9hZCA9
IHRydWU7CiBsZXQgcnVuV2FzbSA9IHRydWU7CiAKLWlmIChmYWxzZSkgeworaWYgKHRydWUpIHsK
ICAgICBydW5PY3RhbmUgPSBmYWxzZTsKICAgICBydW5BUkVTID0gZmFsc2U7CiAgICAgcnVuV1NM
ID0gZmFsc2U7CiAgICAgcnVuUmV4QmVuY2ggPSBmYWxzZTsKLSAgICBydW5XVEIgPSBmYWxzZTsK
KyAgICBydW5XVEIgPSB0cnVlOwogICAgIHJ1blN1blNwaWRlciA9IGZhbHNlOwogICAgIHJ1blNp
bXBsZSA9IGZhbHNlOwogICAgIHJ1bkNESlMgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25B
c0RvdWJsZU51bWJlcihKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqKTsKIAogc3RydWN0IFNjcmlwdCB7CiAgICAgZW51bSBjbGFzcyBTdHJp
Y3RNb2RlIHsKQEAgLTYzOSw2ICs2NDAsOCBAQCBwcml2YXRlOgogCiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAiYXNEb3VibGVOdW1iZXIiLCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKIAor
ICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzREZHRW5hYmxlZCIsIGZ1bmN0aW9uSXNERkdFbmFi
bGVkLCAwKTsKKwogICAgICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xv
YmFsT2JqZWN0Rm9yVGVzdGluZygpKSB7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
Q3VzdG9tR2V0dGVyU2V0dGVyKiBjdXN0b20gPSBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2
bSwgbnVsbHB0ciwgdGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyKTsKQEAgLTI1NjYsNiArMjU2OSwx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQXNECiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0pKTsKIH0KIAorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzREZHRW5hYmxlZChKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSopCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oT3B0aW9u
czo6dXNlREZHSklUKCkpKTsKK30KKwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25s
eSB0byBnZXQgcmlkIG9mIHRoZSBjcmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUg
c2FtZSB0ZXN0cyBmYWlsIGluIFJlbGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVk
IHRvCiAvLyBiZSBpbiBhIHNlcGFyYXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFp
biBmdW5jdGlvbiByZXF1aXJlcyBvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRl
ICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9j
YXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFy
KiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJs
b2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRl
Y29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5
dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFs
PFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVh
ZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewog
ICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4
NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAg
ICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAo
cHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMg
YXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVk
aWN0aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50
ZXIgY29tbWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJl
ZGljdGlvbnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBT
cGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJP
ZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAg
ICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsK
KyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAg
ICB9CisKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3Ro
KCk7ICkgewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rp
b25zLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVt
cEJ5dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9u
IDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxv
Y2s+CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29k
ZUR1bXBlcjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9j
ayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNT
dGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJs
b2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJl
YW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNN
YXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmlu
dFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0
YXR1c01hcCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1w
Q29uc3RhbnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUdyYXBoLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIs
NyBAQCBwdWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgot
ICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRh
dGFGaWxlKCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYg
cHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlv
bnMsICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZShQcmludFN0cmVhbQogICAgIElDU3RhdHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0
YXR1c01hcChzdGF0dXNNYXApOwogICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+
aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46
OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsK
KyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywg
aW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0K
IAogdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkK
QEAgLTI0NDgsNiArMjQ0OCw4IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21w
aWxlcygKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7
CiAgICAgaWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZURGR0pJVCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChtX2RpZEZh
aWxGVExDb21waWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICBy
ZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJs
aWM6CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2Rl
SW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3Qg
RnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENh
dGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25z
dCBGdW5jdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDcgKzU3LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAg
ICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAg
fSk7CiAgICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2Rl
QmxvY2s6OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29u
c3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRh
LmdldCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5t
X2NhdGNoUHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VU
YWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1
YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2Ft
ZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkg
PSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywg
c2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNp
emVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1D
b25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1B
cmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51
bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNr
Q2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6
VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1B
cmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0
aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6
ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0
IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMp
CiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3Rh
bnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1l
bnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJn
dW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxs
ZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApA
QCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5k
c0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVl
ID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAg
ICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxs
KGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXpl
X3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQog
ICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9
Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUo
KSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90
IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAg
ICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0g
bnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50
cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6
ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5z
aXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJl
dHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAg
ICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6
ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxv
Y2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBu
dW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBp
ZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAg
IHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAg
ICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0g
dHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+Cisg
ICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1w
bGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYm
IHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxv
Y2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAg
CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVG
b3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUg
PD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7
CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
VG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAg
ICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6
ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3Jvdyhu
ZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNp
emVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBz
aXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXpl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVk
VmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlv
bikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZElu
ZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQu
dG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50
KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwog
ICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5
cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChv
cGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7
CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAg
ICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiAr
Mzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9D
b25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSAr
NDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJn
dW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxv
Y2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAg
ICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50
cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAg
IH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6
Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVu
dHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1w
cy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3Vt
ZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25z
dGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2Ug
bV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWdu
ZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3Ry
ZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAog
ewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50
SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01Nywx
MCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcElu
ZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAg
IGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNh
bGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5k
czxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBD
b21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0g
bnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBA
QCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6Iiwg
dG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0
LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAg
ICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGlu
ZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOwor
fQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFs
dWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBw
cmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBh
bnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1i
ZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgZnJp
ZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZy
aWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmly
dHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpAQCAt
NjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBi
b29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmly
dHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBp
c0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3Zp
cnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBj
b25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVy
IDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJl
dHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsxMTgs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQp
IHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1l
bnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVu
dE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1l
bnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsg
fQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgpIHsg
cmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQogCiAg
ICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxpbmUg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9mZnNl
dCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3Rh
bnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQmFz
aWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRIZWFk
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0
VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZh
bHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3Ao
KSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTIsNyArMzUyLDcgQEAgcHVibGljOgogCiAgICAgICAgICAg
ICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVh
cigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxB
dmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOworICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+
KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDAsIDApOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAg
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAg
ICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNSBAQAog
I2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2lu
Y2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1Miw4IEBA
CiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBs
ZVN0YXRzLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNw
YWNlIEpTQyB7CiBuYW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhwciBjb25z
dCBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY1LDgzMyBAQCBTZWNvbmRzIHRvdGFs
RlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRz
IHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBt
X2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBh
dXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUp
IHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAg
IGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsK
KyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJl
YWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVz
ZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5
cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ug
b3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2Fs
bDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFy
YXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENv
bnN0cnVjdFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92
YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhvcjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0
eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29k
ZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fbmV4dCwgbWV0YWRhdGEu
bV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUu
bV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNl
dFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUubV9wcmVkaWN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb3Y6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBlRm9yKGluc3RydWN0aW9u
LT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6
CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgaWYgKCEhKGxl
ZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikp
CisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAm
JiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJpZ0ludDMyIGJldHRlcgor
ICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0
aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0lu
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0cmlu
Z09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJpbmdPclN0cmluZ09iamVj
dFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEZJWE1FOiBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX3N1
YjoKKyAgICBjYXNlIG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBi
eXRlY29kZSkgeworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZv
cihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworCisgICAgICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNC
eXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVByb2R1Y2VOYU5Gcm9tTm9u
TmFOID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2OworICAgICAgICAgICAgICAg
IGlmIChtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIHBy
b2JhYmx5IGRvIGJldHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAgaWYgKGlzQmlnSW50U3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICB9OworCisgICAg
ICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9zdWIpCisgICAgICAgICAgICBo
YW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0
aW9uLT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BEaXY+
KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW9kOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBp
ZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChp
c0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRlciBpZiB3ZSBwcm9maWxlIGV4aXRz
IG9uICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSB8
IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2Rl
RG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8
IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Vuc2ln
bmVkOgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21lIGtpbmQgb2YgZXhpdCBzaXRlIGZl
ZWRiYWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRB
c0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJbnQzMk9ubHkp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgor
ICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJvZmlsZSYgcHJv
ZmlsZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBlRm9yKHNyYyk7
CisgICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpID8gU3BlY0Fu
eUludEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJl
YWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAg
ICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZU51bWJl
cik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0
ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
ZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVj
PigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3Ny
Y0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsK
KyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7
CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwg
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAo
IShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNC
aWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVm
dCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVy
T3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9
OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAg
ICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAg
ICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICgh
dHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVj
dCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3Bl
cnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9Q
cmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMp
OworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEo
dHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdl
IHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2
ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFz
IHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFp
biB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBl
KHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5u
dW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBT
cGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCks
IFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhT
aXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9y
ZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCks
IFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhf
c3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BI
YXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8g
YmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdG
dW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19m
dW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhw
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5l
cmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5l
cmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4o
KSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFy
ZW50X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVu
dFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVy
dHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJl
UHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwg
U3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCksIFNwZWNT
dHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4
X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3Ry
aW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVz
dF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExl
bmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVz
b2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbElu
RXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNT
Y29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9u
ZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxs
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNl
T2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJh
dG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2Vu
ZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
c3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9s
ZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90
b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+
KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+
KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3Bl
Y3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxT
cGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlw
ZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVs
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lz
X2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFi
bGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBj
YXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBj
YXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBv
cF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9s
b2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3Bf
Y2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93
OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6Cisg
ICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rp
b25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVm
aW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6
CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0
cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2Fz
ZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2Fz
ZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3Bf
anN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6Cisg
ICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3Jl
YXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAg
Y2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pu
Z3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6Cisg
ICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ug
b3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBv
cF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9w
dXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNl
IG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9w
X3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBj
YXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9w
cm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNh
c2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAg
Y2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9j
YWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToK
KyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enpl
cl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4
Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93
X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rp
b25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9wcm9ncmFtX3Byb2xvZ3VlOgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blBy
ZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxC
eXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsK
KyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAg
ICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0
cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2st
PmZvckVhY2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsK
KyAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7Cisg
ICAgICAgIH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2Nr
ZXIsIFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsK
KyAgICAgICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19j
YXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAg
ICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JB
cmd1bWVudChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFy
ZykgPSBwcm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3Bl
Y3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50
KGFyZykpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAg
Ym9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZT
LiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGlt
cGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAg
ICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFy
ZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09Q
UzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdl
IGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNv
ZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQ
cmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAg
ICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxM
ZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2Nr
LmxlYWRlck9mZnNldCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0
cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNz
b3JzKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJl
ZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0s
IG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
KQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNiArODk5LDEyIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8
T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9j
aGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQogICAg
ICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKQEAgLTc2LDYgKzkxNCw3IEBAIEpJVDo6
SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fdXNlTE9MID0gT3B0aW9uczo6Zm9yY2VMT0wo
KTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTEzNywxMSArOTc2LDE3IEBAIHZvaWQgSklUOjphc3Nl
cnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgICAgICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Ns
b3dDYXNlOyBcCiAgICAgTkVYVF9PUENPREUobmFtZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19P
UChuYW1lKSBcCisjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAg
IGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFy
dEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsg
XAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNu
YW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAg
aWYgKHVzZUxPTCgpICYmIGRzdC5pc1ZhbGlkKCkpIHtcCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gdHlwZTsgXAorICAgICAgICAgICAgICAgIHdpbGxEZWYoZHN0KTsgXAorICAg
ICAgICAgICAgfSBcCiAgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9w
XyMjbmFtZSk7IFwKICAgICB9CkBAIC0xNTYsMjYgKzEwMDEsMzIgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUp
IFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9
CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3Bf
IyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBpZiAodXNlTE9M
KCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNs
b3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xv
d0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAog
ICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxu
Iik7CiAgICAgCkBAIC0yMzEsMTggKzEwODIsODQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0g
MDsKLSAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICB1bnNpZ25l
ZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7Ci0gICAgICAgIGlm
IChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0
ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgotICAgICAg
ICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4K
LSAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBt
X3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNz
b3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDog
Km1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9j
ay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Zm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxv
Y2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3Nv
ckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
KyAgICB9CiAKLSAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
LCBsYWJlbCgpKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgICAgICBBU1NF
UlQoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgIGZvciAobV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rp
b25Db3VudDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFt
X2N1cnJlbnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJs
b2NrLT5sZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFs
bG9jIGF0IGVuZCBvZiBiYiMiLCBtX2N1cnJlbnRCbG9jay0+aW5kZXgoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgp
XSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV0gPSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4
aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byYgcHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCld
OworICAgICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNz
b3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3By
ZWRlY2Vzc29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNl
c3NvcnNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVl
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0
ZUF0RW5kW3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRl
Y2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3Rh
dGUubWVyZ2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3Mp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBt
X3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9
IG1fc2xvd0Nhc2VzLnNpemUoKTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFy
dEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAg
ICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50
aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhh
dCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAg
bV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpLCBsYWJlbCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAg
ICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwogCiAgICAgICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpKTsKIApAQCAtMjc4LDQ2ICsxMTk1LDUzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogI2VuZGlmCiAKKworICAgICAgICBpZiAoZmFsc2Up
IHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChvcGNv
ZGVJRCkgewotICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGxlc3MpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVx
KQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jYWxsYWJsZSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGdldF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlf
aWRfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhp
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVu
Y19kZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3Bl
cnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19P
UCh0aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93
aXRoX3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlcikKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRf
ZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9TTE9XX09QKGhhc19nZW5lcmljX3By
b3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nKQotICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9j
bG9uZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRz
X2J1dHRlcmZseSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChu
ZXdfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRvcikKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocG93KQor
ICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bGVzcywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3M+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMZXNzZXE+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChn
cmVhdGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKS5tX2RzdCwgU3BlY0Jv
b2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdyZWF0ZXJlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklO
RV9TTE9XX09QKGlzX2NhbGxhYmxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJs
ZT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0
cnVjdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwg
U3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZiwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFR5cGVvZj4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVv
ZklzT2JqZWN0PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dHlwZW9mX2lzX2Z1bmN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5j
dGlvbj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNh
dCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50
PigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9i
eV92YWxfd2l0aF90aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhp
cz4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9p
ZF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9u
ZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVu
Y19kZWNsX2luX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JI
b2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVj
Tm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBW
aXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVh
Y2hhYmxlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9X
X09QKHRocm93X3N0YXRpY19lcnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld0FycmF5QnVmZmVyPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9T
TE9XX09QKHNwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwg
U3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVu
Z3RoLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKS5tX2Rz
dCwgU3BlY0ludDMyT25seSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJv
cGVydHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCkubV9k
c3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51
bWVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4o
KS5tX2RzdCwgU3BlY0NlbGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmlu
ZywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNT
dHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBT
cGVjRGlyZWN0QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVk
X2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50
cz4oKS5tX2RzdCwgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2Nsb25lZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVD
bG9uZWRBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlUmVzdD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19P
UChjcmVhdGVfcHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+
KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdf
cHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNw
ZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9y
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVj
T2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0
b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2Rz
dCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9y
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2Jq
ZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFBvdz4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAog
ICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpA
QCAtMzk4LDcgKzEzMjIsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5F
X09QKG9wX3N1cGVyX3NhbXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQor
I2lmIENQVShYODZfNjQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAg
ICBERUZJTkVfU0xPV19PUChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9k
c3QsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVG
SU5FX09QKG9wX21vdikKICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5F
X09QKG9wX25lZ2F0ZSkKQEAgLTQ3Nyw2ICsxNDA1LDM4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNv
ZGVJbmRleCkgeworICAgICAgICAgICAgaWYgKCFtX2NoZWNrZWRVc2VMT0wpIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgICAgICAgICAgY2FzZSBvcF9jaGVj
a190cmFwczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rocm93OgorICAgICAgICAgICAgICAg
IGNhc2Ugb3Bfam1wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206
CisgICAgICAgICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90
YWlsX2NhbGw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92
YXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJv
ZmlsZV90eXBlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBvcGNvZGVJRCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6
OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjog
IiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MTUsMTIgKzE0NzUsMTQg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQ
cm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBp
dGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsK
LSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYg
c2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93
Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAg
ICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNs
b3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZp
cnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVj
b2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKQEAgLTU3OSw3ICsxNTQxLDYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX25lcSkKQEAgLTU5Nyw2ICsxNTU4LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9y
X29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2Vu
ZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGRlYykKQEAgLTYzMywxNSArMTU5NywxOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAg
IGRhdGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJl
Z2luKCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVy
ID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zm
c2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZz
ZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNs
b3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FH
RShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBh
dGhzIGFscmVhZHkgZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwog
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC03NzQsNiArMTc0MSwyOCBAQCB2b2lkIEpJ
VDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0
Q29kZU9yaWdpbigpKTsKIAorICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBzKSB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQuZmlyc3Q7CisgICAgICAgIGF1dG8ganVt
cHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAganVtcHMubGluayh0aGlzKTsKKworICAgICAgICBp
ZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICBicmVha3BvaW50KCk7
IC8vIE9PUFM6IGhhbmRsZSBjaGVja3BvaW50IGV4aXRzLgorCisgICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxPU1JFeGl0UHRy
VGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0
cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUpOworICAgICAg
ICAvL2Vsc2UgCisgICAgICAgIC8vICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8
SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICBtb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkp
LCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBj
R1BSKTsKKyAgICAgICAgbW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgZmFy
SnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRhZyk7CisgICAgfQorCiAgICAgc3RhY2tP
dmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtMTA1OCw2ICsy
MDQ3LDcxOCBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJu
IHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZU
TENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1w
KQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBz
LnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQor
ICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkg
fSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkK
K3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0
ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBm
dXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlz
CisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdp
c3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJl
Z2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lz
dGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAg
IGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMu
Y29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAg
IHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkK
K3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0
ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUg
ZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhp
cworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3ll
ZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsK
KyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVy
U2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhl
cmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAg
IC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBz
aGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZv
ciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93
ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9
CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJy
ZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2Ug
YSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAg
ICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2Rl
SW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJl
ZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7
CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNB
bGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJl
ZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAv
LyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQ
UnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1w
bChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVn
KQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0
aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0g
dGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAg
ICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkK
KyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdG
b3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVl
cyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAg
ICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAg
ICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4g
d2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVu
ZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRp
YWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hl
biB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGlu
CisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3Bl
cmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9
CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBk
b0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQp
IHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAg
ICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xv
YmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisK
K1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBj
b3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBl
bmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiBy
ZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7Cisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQo
cmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6
c2lsZW50U3BpbGxCZWZvcmVDYWxsKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEg
bG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsKKyAgICBTYXZlUGxhbiBz
YXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUub3BlcmFuZC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBl
bmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwg
PSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNh
bGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIEpJVDo6c2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJl
Y29yZCYgcmVjb3JkKQoreworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJl
Z2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7
IH0sIHJlY29yZC5zdGFja1NpemVGb3JTcGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxh
bihSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3ZvaWQg
SklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIGZvciAo
YXV0byYgcGFpciA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0Owor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBp
ZiAocmVnID09IHJlZ1RvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChvcGVyYW5kID09IG9wZXJhbmRUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQocmVnLmlzRlBSKCkpOworICAgICAgICAgICAgbm9wKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2Vk
R1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNo
LCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgbm9wKCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xv
d0Nhc2UmIHNsb3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVz
dWx0LCBzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNl
dEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9P
UFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FT
U0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFs
dWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRy
ZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7Cisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3By
KS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1
ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQ
UlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3Mg
eyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Io
b3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhh
dCBmb3IgYnl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2Fs
bGVkLgorICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9w
ZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsK
K30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7
CisgICAgaWYgKHRydWUgfHwgb3BlcmFuZCA9PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgxMikp
IHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoNjQoTm90RXF1YWwsIGdwciwgVHJ1c3RlZElt
bTY0KDEpKTsKKyAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgfQorICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICB3aWxs
RGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQorCit2b2lkIEpJ
VDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKyty
ZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxv
Y2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFyZWdWYWx1ZS5s
b2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICByZWdWYWx1
ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGlu
dCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcg
aGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0
KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAh
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAg
bV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVt
cDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJS
ZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJ
bnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9q
aXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFu
ZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJP
cGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAg
ICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVn
KG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisg
ICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIo
bV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5
KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1f
aml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
bV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3Bl
cmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxs
U3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQu
c3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1Jl
Z2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hl
Y2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2Vs
bE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQo
aml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJh
bmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENl
bGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAg
ICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7Cisg
ICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWdu
UmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
CisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIs
IEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+
U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFu
ZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6
IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9w
ZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZh
bHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5l
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIG1faml0
LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91Ymxl
T3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChq
aXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQu
ZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykK
KyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQo
KQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9w
ZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAg
IHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsK
KyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAg
ICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJl
ZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1f
ZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7
IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQ
UlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0Lmxv
Y2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQu
cHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlw
ZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0
ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5v
dERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnBy
KTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVy
biBtX2ZwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVn
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcp
OworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBh
ZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAg
ICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
SklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1
ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9s
KHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOwor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpz
cGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQorewor
ICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRl
T2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0
ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5
KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsK
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklU
OjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVl
KSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0
ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wg
dXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3Bl
cmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lm
IFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNo
R1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQz
MiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQz
Mi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7
CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlm
Cit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVz
ZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBl
cyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5j
b25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7
ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBz
cGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lz
dGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxs
ZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBP
cGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0g
eyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBvcGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7
Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJS
ZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAg
IGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFs
dWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRG
UFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwg
cmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2Rl
T3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQ
b2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5
QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNs
YXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENv
ZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDEsMTUgKzEwNSwy
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xv
d0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAg
IEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShm
KQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6
cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisgICAgc3RydWN0IFNpbGVudFNwaWxsUmVj
b3JkIHsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgICAgIFJlZ2lzdGVyU2V0IHNw
aWxsZWRSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZUZvclNwaWxsOworICAg
IH07CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0LCAxPiBq
dW1wczsgLy8gVXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZvciB0aGluZ3Mgd2l0aCBjaGVj
a3BvaW50cywgd2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgSnVtcExpc3RzCisgICAg
ICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQg
c3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1l
bnRzOyAvLyBTb21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3Ig
Y29udmVuaWVuY2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xODMs
NiArMTk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBu
ZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6
IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZh
Y2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIgKzIwNyw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAg
IHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsK
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9
IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSBy
ZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIK
LSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5v
dCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgog
ICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklU
KCk7CkBAIC0yNjMsNiArMjc0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGls
bEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBs
KCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAg
ICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAg
ICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMjUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRT
bG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYp
OwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IHsgfSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAg
ICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3ICszMzcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2Fs
bF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzI3
LDcgKzM1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyArMzY0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBp
bGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlw
ZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAg
ICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNv
bXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFy
Z2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRp
b25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3Nyw4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxl
IGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8g
c2NyYXRjaC4KLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpN
ZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CkBAIC00NzUs
OCArNTAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVs
YXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRp
b24pOwpAQCAtNDg0LDExICs1MTEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09Q
RVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNl
Jik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwog
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAg
ICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9u
Kik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTEyLDkgKzU0OCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9m
aWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25z
dCBJbnN0cnVjdGlvbiopOwpAQCAtNTc2LDcgKzYxMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOwor
I2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjQzLDc3ICs2
ODEsODAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
dG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhG
dW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBWaXJ0dWFs
UmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWcpOworI2Vsc2UKICAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVl
KiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzI4LDggKzc2OSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3Rh
bnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzggKzc4MSwxOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmls
ZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9m
aWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1p
dE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlv
biosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVu
Y3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0
Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0
aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9u
LCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNs
b3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9t
OwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5m
cm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAg
ICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVy
OwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZv
aWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+
JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxs
U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nh
c2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBo
YXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsK
LSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNl
cyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNF
RF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9
IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywg
aXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQ0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5k
aWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2
b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBz
dGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29t
cHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2ICs5NTcsMjUyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAg
QmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAg
ICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAo
SklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1w
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
R1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYp
OworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJS
ZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3Mg
SW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJh
bmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFy
ZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQs
IG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQo
SklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5k
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAg
ICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQ
UlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3Vi
bGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52
YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAg
ICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZp
bHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0
ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFu
ZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1
cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9y
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsK
KyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2Vk
UmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAg
ICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAg
ICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghbV91c2VMT0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9w
ZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAg
ICAgICAgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBS
UmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChm
cHIgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIp
Lm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9
IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5k
KSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
Tm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
ICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVC
b29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Io
b3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7
CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFz
Q2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVP
YmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZv
aWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUp
OworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBo
ZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQ
UlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigp
OworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAg
ICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lk
IHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMg
dGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQu
CisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAg
ICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxsUmVj
b3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2b2lkIHNpbGVudEZpbGxBZnRl
ckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCByZXN0b3Jl
RnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRUb0ln
bm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7
CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05NTMsNyArMTIyMSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxl
OwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxT
bG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dp
dGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0
UHV0SW5mb3M7CkBAIC05OTAsNiArMTI1OCw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1p
dFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9y
IGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAg
ICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBS
UmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisg
ICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAg
aWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRG
UFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1Zh
bHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAg
ICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRl
ZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90
aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVy
Lm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tD
b3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9j
YXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9Owor
CisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisg
ICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRS
ZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVl
PiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4g
cHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1Jl
Zy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0p
OworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5w
cm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5
cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5
cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90
aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3Rl
cnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHZvaWQg
cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3Rh
dGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsK
KyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsK
KyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0
aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3Vy
cmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOwor
CisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAg
ICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAg
Ym9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9MIHsg
ZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29kZUluZGV4LCBKdW1wTGlz
dD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklU
OjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExl
c3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFs
QW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4s
IERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVh
dGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0
ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhh
bk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5n
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9y
VW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
LCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEs
IGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
dHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxP
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwg
dHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3Ry
dWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRy
dXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAg
c3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAg
ICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdU
MCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVn
VDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwg
Y29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24s
IERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUg
aW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAg
ICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0g
Y29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1t
ZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBkaXNh
bGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIo
b3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTIyOSwxNyArMjgx
LDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY28KIAogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAg
ICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9w
MSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxoc0dQ
UiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQ
Uik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7
CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDAp
OworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJl
Z1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihj
b25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQzMl90IG9w
MWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0z
MihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgICAgIGdldExIUygp
OworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKICAgICB9CiB9CiAKQEAgLTI1NSw0MiArMzMzLDg4
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIAogdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAg
bGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMSkgJj0g
U3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxoc0dQUiA9IHJl
Z1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQUik7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAg
ICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
b3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmhz
R1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhz
R1BSKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVz
dWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOwor
ICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKwogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdl
dE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBy
ZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9u
LCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMCk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9
IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJl
MzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSksIHJlc3VsdEdQUik7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdU
MCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdU
MSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAg
IGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwogICAgIH0K
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNv
bmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXpl
KCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBj
b25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBH
UFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRo
aXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5l
IGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAt
IGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8g
LSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8v
IC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9w
MikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICs0MjMsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFp
bDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzQ0Nyw2IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9
IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzQ3MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0g
ICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBm
YWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7
CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2
NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICs0ODcsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7
CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7Cisg
ICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgwLDExICs0OTksNDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNE
c3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
RHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkp
OwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVt
cCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAg
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAg
ICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAg
ICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3Jj
RHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZs
b3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQz
MihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1
dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAg
ICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3Qp
OworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSks
IGlucHV0R1BSKSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3Mg
eyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVj
b2RlTnVtYmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMzkyLDExICs1NDcsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVjKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVjPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29k
ZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveElu
dDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmls
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJl
ZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShpbnB1dEdQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1Q
dHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIs
IHRlbXBGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55
SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1t
MzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1
dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcg
dGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9u
ZSA9IDEuMDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVt
cEZQUik7CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBS
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
aW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
aW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3cs
IFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0
R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShz
cmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNC
aWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hT
dWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQz
MihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBA
IC00MDYsNTQgKzYwMyw4OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rp
b24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE1vZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ug
c3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAg
ICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2
UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBh
dXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwog
ICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVy
KGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4
VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMs
IGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigp
OworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhU
ZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIo
KSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gp
OworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVt
cC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
bGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOwor
ICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNHUFIg
PSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIsIHJo
cywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQUiwg
ZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0g
YnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0
ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZD
b252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVt
ZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVz
dGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVh
dGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0
aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi0jZWxz
ZSAvLyBDUFUoWDg2XzY0KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKLX0KKyAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgZWF4IH0p
OwogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBlYXgp
OworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUoWDg2XzY0KQpA
QCAtNDYzLDcgKzY5NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1
bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYg
KzcwNSw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwog
ICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzc5
NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChK
SVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5z
dHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJB
VElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBA
IC03MjMsMTMgKzk1NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+
KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8g
RklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVn
YXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xv
dzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVn
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9w
dGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBT
bmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQwLDE4ICs5NjksNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJp
bmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCiAgICAgU25pcHBldE9w
ZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBA
IC03NTksMzMgKzk3NiwxMDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNv
bnN0IAogICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFu
dEludChvcDEpKTsKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQogICAg
ICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFRlbXA7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBp
biBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAt
PmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5n
cHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5n
cHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlmICghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vs
c2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOworI2VuZGlmCiAKLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwg
cmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BS
KTsKIAorICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQs
IHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRo
KCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAg
ICAgaWYgKHByb2ZpbGluZ1BvbGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9m
aWxpbmcpCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5
dGVjb2RlKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzLmdwcigpKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwg
cmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIH0KKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDIsNyArMTA5Miw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxl
ZnRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDgsMjAgKzExMzgsNiBAQCB2b2lkIEpJVDo6ZW1p
dFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJl
ZzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwot
I2VuZGlmCi0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQ7CiAKQEAgLTg3MiwyMSArMTE0OCw3NyBAQCB2b2lkIEpJVDo6ZW1p
dFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52
YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkz
MiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdw
cigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIo
KSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIo
KSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAg
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRS
aWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAg
ICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkw
MSwxOCArMTIzMyw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAg
RlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBS
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwg
cmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCBy
aHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91Ymxl
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJo
cy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRN
YXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjMsMTUgKzEyOTEsMzUgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0
aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQg
ZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lk
IHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7
CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVt
cC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3Jj
UmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5l
Z2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0
LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9p
ZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwg
c3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQwLDE5
ICsxMzI4LDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAog
ICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywg
c2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1Jl
Z3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUg
PSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJv
b2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9m
aWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAg
IGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVs
KCk7CkBAIC05NjIsNyArMTM1MywxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzMsMTIgKzEzNjgsMjggQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisg
ICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAg
IEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKQEAgLTk4NywyNSArMTM5OCw0MCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUQmluYXJ5TWF0aElDCiAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogI2Vu
ZGlmCiAKLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7
CisgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICB9Cisg
ICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkgeworICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7Cisg
ICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAg
IGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwot
ICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNj
cmF0Y2hUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAKLSAgICBSRUxF
QVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29u
c3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOworICAgIH0KIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5l
cmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAg
CiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25z
dGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5l
U3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE0LDE3ICsxNDQwLDM0IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAgIGlmIChsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQot
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAg
ICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAg
ICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAgICAgZWxzZSBpZiAo
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0g
ICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNCwxMSArMTQ3Nywx
OCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgfSk7CiAj
ZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJl
Z3MuZ3ByKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEFk
ZD4pCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwg
cmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBh
dGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9u
U3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDcsOCArMTQ5Nyw4
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBz
cmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMik7CkBAIC0xMDg0LDcgKzE1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Ns
b3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJv
ZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0
aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0
aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NCwx
NiArMTU0NCw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmln
aHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNCwx
NSArMTU1NCwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAK
ICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9w
ZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFu
dChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0
UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJh
dG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdU
MiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9w
ZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiBy
ZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5k
aWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
KyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdo
dE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVw
YXRjaCkKQEAgLTExNTUsMjMgKzE2MTYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0g
ZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0
cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg3LDI3ICsxNjMx
LDkyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQu
c2V0Q29uc3REb3VibGUoZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpOwogI2VuZGlmCi0K
ICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7Cisg
ICAgRlBSUmVnIGxlZnRGUFI7CisgICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7
CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1w
PiByaWdodFRlbXBGUDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5l
bXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ay
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGxlZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQ
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRl
bXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRl
bXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQ
UiA9IGxlZnRUZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5m
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAg
c2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAg
ICByaWdodEZQUiA9IGZwUmVnVDE7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0
KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwor
ICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBGUFJSZWcgbGVmdEZQUiA9
IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKKwogICAgIGlmICghbGVm
dE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
bGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKKyAgICAKKyAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CisgICAgaWYgKHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwog
CiAgICAgSklURGl2R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBmcFJlZ1QxLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOworICAgICAgICBsZWZ0RlBSLCBy
aWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKIAogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRo
KCkpIHsKICAgICAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwog
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdz
LmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51
bWJlcjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5l
bmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExp
c3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
ZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CkBAIC0xMjE1LDM0ICsx
NzI0LDEwNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZv
aWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
TmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRGUFIuZnByKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5k
OjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0
aXZlWmVybywgYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAg
ICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBtdWxEb3VibGUobGhzLmZwcigpLCByaHMuZnBy
KCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlv
blRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxP
cE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9w
dGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFBy
b2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3Vi
PigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVt
cCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBS
LmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIu
ZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
Ynl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3cs
IGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBz
ZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCBy
ZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
SklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJ
VFN1YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+
KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRp
bWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6
ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBP
UF9QT1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDEx
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNv
bnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVh
bFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRp
b25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdp
c3RlcigpOworICAgIHdpbGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDks
OCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJu
UEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0
ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBB
U1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQs
NDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAg
ICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJk
QXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29u
c3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4
Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgog
ICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMg
bGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0
aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgor
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rl
cigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1
bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQg
KGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
dm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAg
bmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4
dENoZWNrcG9pbnRTbG93KTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzLCByZWdUMCB9OworICAgICAgICBHUFJSZWcg
c2hvdWxkQmVSZWdUMCA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNob3VsZEJlUmVnVDAgPT0gcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1f
bmV4dCwgcmVnVDApOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25leHQsIHJlZ1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMp
OwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwpAQCAtNDU2LDYgKzQ3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisK
KyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVs
dGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMu
IEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nh
c2UgPSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDM2ICs0OTksNDMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIs
IGl0ZXJSZXN1bHRHUFIpOwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xv
d1BhdGg7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVn
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJl
c2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisgICAgICAgIHVzZWRSZWdpc3Rl
cnMuYWRkKHZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZl
ZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+bmV4dC5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2tw
b2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoZG9uZUNoZWNrcG9pbnRTbG93UGF0
aCk7CisKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX2RvbmUpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewogICAgICAgICBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMjsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CiAgICAgICAgIGNv
bnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7CiAgICAg
ICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVl
UmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CiAKKyAgICAgICAgSnVtcExpc3QgdmFsdWVDaGVja3BvaW50U2xvd1BhdGg7CisKICAgICAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlO
YW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQodmFsdWVDaGVja3BvaW50U2xvd1BhdGgp
OwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgICAgIHdpbGxEZWYoYnl0
ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEp
OwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVl
R1BSKTsKIApAQCAtNTE1LDEwICs1NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUyNiw3ICs1NTUsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0
ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwor
ICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwogICAgICAgICBKdW1wTGlzdCBu
b3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJS
ZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChp
dGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMl0ubGluayh0aGlzKTsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKQEAgLTU2MSw3ICs1OTAsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAKICAgICAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9Ci0KIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3Mg
dGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sg
dHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1OCw2ICsxNTksNyBAQCBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEpOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28g
dGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhl
IHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNjYsMjUgKzE2OCw2IEBAIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykK
LXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93
Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXIt
PnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQot
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2Vz
LmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgs
ICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDYsMjcg
KzE4OSwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAg
anVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6
OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
QVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1w
LCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8
fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsK
KyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlm
IChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNs
b3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgp
ID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3Vs
dDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgbV9zbG93
Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IH0pOworICAgIH0KKyAgICByZXR1
cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1w
TGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShq
dW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCku
anVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1w
TGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
QVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMg
d2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBq
dW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5k
KGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwg
aW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtMzA5LDExICszMDEsMTAgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2
YWx1ZVByb2ZpbGUsIEdQUlJlZyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2Zp
bGluZygpKTsKIAotICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWUgPSByZWdUMDsKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgIGNvbnN0IFJlZ2lzdGVySUQgdmFsdWVUYWcgPSByZWdUMTsKICNl
bmRpZgpAQCAtMzM4LDExICszMjksMTEgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lPGRlYwogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9m
aWxlZE9wY29kZSguLi4pIHsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBHUFJSZWcgcmVnKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0
YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSksIHJlZyk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQpAQCAtMzkzLDExICszODQsNiBAQCBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJ
bml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Nyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAg
ICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNl
b2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpA
QCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0
MSw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNw
YWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTEsNiArNTMsMjggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzogSWYgd2UgY2hh
bmdlIHJlZ2FsbG9jIHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUgTiByZWdpc3RlcnMgcGVyIGxvY2Fs
LCB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIHR3byByZWdzLgorICAg
ICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNyYykgPT0gSW52YWxp
ZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewog
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAg
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMTQsNTMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3Vs
dFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAg
UmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAg
ICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9y
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2Nh
dG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFs
bG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJl
Z1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9
IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJm
bHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9y
UmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xv
d0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywg
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7
CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3Qp
ID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVy
ZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTcwLDUwIEBAIHZv
aWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdp
c3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVn
IGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8g
T09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4g
Y29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VU
ZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBs
YWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNl
KCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7
CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAg
IGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3Qg
anVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1
bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFz
SW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZh
bHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1
bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJl
Z1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0
cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMg
bm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhj
b25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIy
Myw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJh
bmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3Rl
cnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9u
ZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQu
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHBy
b3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBi
eSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVn
VDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVn
VDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1f
aW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFu
ZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVt
cENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJl
c3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBH
UFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1
bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0
Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENl
bGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBs
YWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2Vs
bC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOwor
CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAg
ICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BS
ID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0
VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAg
ICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1w
LmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAg
ICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFw
cGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVz
cGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBi
YXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4g
dGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywg
cmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMu
IGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9p
ZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0Cisg
ICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bwor
ICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Cisg
ICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9p
bnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdz
LnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMjQsMjkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0
eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzU0LDcyIEBAIHZv
aWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1Qw
KTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0g
ICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1
dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQ
UlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7
CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVt
cEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKwor
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI4LDMzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVy
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29s
ZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ2
MiwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisjaWYgQ1BVKEFS
TTY0KQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCBpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB0ZXN0NjQoWmVybywg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAg
dGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTI2OCwxMSArNDk4LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJl
cihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChO
b25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lO
VDMyKQpAQCAtMjgyLDIxICs1MjgsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFu
Y2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBh
cmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5j
aElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoaW5wdXRH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFn
KSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3Vs
dEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJ
bnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRh
ZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2VsbC5saW5r
KHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAot
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTgg
KzU5NCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBl
ID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0
aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzY0Myw2MSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisg
ICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3Vs
YXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVh
bCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBl
KSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFy
ZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTM1NSw3ICs3MDgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJl
dHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MjcsNDEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9z
cmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIAotICAg
IEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChk
c3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmpl
Y3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5saW5rKHRo
aXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGlz
SW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAgICAgICBp
ZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NzAsMjAzIEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJy
YW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhy
ZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAg
ICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIp
OworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJp
bmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wo
dmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRo
aXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlv
biB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBu
YW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25H
UFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigp
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1w
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2Jq
ZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cu
CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBp
ZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBi
ZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBv
ciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4g
aW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNr
IGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5v
blplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwot
ICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVydCBhZ2Fp
bnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4s
IHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBs
b3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVz
cGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUp
LCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0Lgor
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFs
dWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BS
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNj
cmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNo
Mi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBS
LCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9
CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0
aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2
YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAg
ICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQ
UiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2Ny
YXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gx
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIo
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mg
eyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3Jh
dGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDQwLDQ2ICs5NzUsMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNv
bnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3Jj
KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVj
dWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5v
dENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5k
bGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhl
IHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAg
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFu
ZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlz
KTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNr
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
LSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0g
ICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAot
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsK
IHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVy
KHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
c3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRv
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAg
Ly8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJh
ZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cg
aGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
LSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAg
ICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRKdW1w
KGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
KyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAg
ICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFu
ZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDg4LDEwICsxMTA2LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRf
b3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgor
ICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAs
MTAgKzExMzQsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAg
ICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNjUsMzE0IEBA
IHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQoc3Bl
Y2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVt
cCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBv
aW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEu
bV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxp
bmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
c3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAg
ICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJy
YW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXND
ZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5t
X2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNw
ZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSks
ICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VS
VCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNf
c2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFs
IDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRP
cmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
aWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykp
KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6
IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBD
ZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChy
aHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVT
eW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBj
b21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BS
KTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhz
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFw
QmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsK
KyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIElu
dDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFy
ZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNlTE9M
KCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0
ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJn
ZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAg
YXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90
RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5
cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2Vs
bE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qocmhz
KSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1i
b2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgewor
ICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERv
dWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQ
UiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBS
KSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3Jl
IHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5h
cHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
eXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29t
cGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVl
KTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBh
cmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQ
UiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAg
IHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2
b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
cmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4o
KTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1Qx
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IFdlIGNhbiBtYWtlIHRoaXMgYSBz
aW5nbGUgYnJhbmNoIGlmIHRoZSByZXN0b3JlIGRvZXNuJ3QgY2xvYmJlciByZXR1cm5WYWx1ZUdQ
Ui4KKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
YWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4o
KTsKQEAgLTU4OSw3NCArMTQ4OCwxNDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNv
bnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8g
RXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91Ymxl
RXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShs
aHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21w
YXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0lu
dChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUlu
dDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJo
cykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhl
cmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwogCi0jaWYgVVNFKEJJR0lOVDMy
KQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0
cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAg
ICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCBy
aWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBp
bnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2Vk
IGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBp
cyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBi
aXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQot
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25l
ID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIg
c3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBG
SVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlz
IGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJl
IHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAg
ICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02
NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxo
cywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBB
dCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Cisg
ICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAg
ICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0
IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7Cisg
ICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAg
ICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291
bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZO
dW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIElu
dDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZp
bmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBh
dCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAg
ICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwor
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChy
ZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1Qx
LCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdU
NSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cyku
CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwg
d2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lO
VDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5n
cykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0
aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMg
ZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAg
ICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlz
KTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0g
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQot
ICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAj
ZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE2NDUsMTM1IEBAIHZvaWQg
SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAg
IGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8g
ZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlw
ZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAg
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNh
biBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
SW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhl
cmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAg
LyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEp
OgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290
byBzbG93UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwot
ICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQ
YXRoOwotICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQg
aW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNp
bmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWly
ZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRy
aWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0
byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0g
ICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0
cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9y
IGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCBy
ZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyks
IHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdU
Myk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdU
MiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMs
IHJlZ1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
LSAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292
ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAv
LyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJl
IGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGgg
YXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRv
IGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmln
aHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwg
cmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBu
b3RUYWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVu
dHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJh
bmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdl
IHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sg
aXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0
IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAg
ICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0
cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92
ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBt
b3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxv
d2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Cisg
ICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAg
SnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAg
YWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3Zl
ciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAg
ICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVz
cyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBp
ZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdU
MikpOworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmlj
dEVxKSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5U
MzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdz
KS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlm
IGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNo
IGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1
bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVx
dWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVt
cCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92
ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisg
ICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMp
OworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5r
KHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwg
dGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC03NDgsODkgKzE3ODYsMjI2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9u
ZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3Rv
cmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVn
LCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
TnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNw
ZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAg
ICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJl
Z1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlz
QmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMp
OwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJl
cihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQo
c3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisjZW5kaWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlz
KTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNo
SWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RC
aWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0K
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVt
cCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19z
dHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
c3JjKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAg
aWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorICAg
IHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVy
IHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwpAQCAtODg4LDkgKzIwNjMsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29w
ZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8g
V2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlz
LCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RP
dGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVn
VDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIwOTQsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwg
U3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxl
KCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIs
OSArMjExOSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBU
YWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTQzLDE0NyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBq
dW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJp
bmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsK
KyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BT
OiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1
ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVn
LCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAg
ICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUg
PHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9v
bCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29t
cGFyZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChz
cmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChz
cmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29t
cGFyZU9wLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAg
ICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
CisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAg
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
Y29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51
bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwg
cmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwot
Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7
Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsK
LSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0g
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsK
KyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNl
IGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdo
IENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8v
IHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkg
cHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVz
c3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZv
ciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0
ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsg
aiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBh
ZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyOTQsMjMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQor
ICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNj
b3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIzMTgs
ODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVy
ZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBp
c1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwg
cmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNT
dHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0g
U3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChp
c1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwg
c2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYg
IShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0Rz
dCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3Vs
dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRl
bnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAg
bm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIHNyY0RzdCk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCBy
ZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChO
b25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisg
ICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAg
ICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2Jq
ZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVz
dWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9i
amVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTEwNTksNiArMjM5OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNv
bnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVl
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJh
cnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2Fs
bGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBy
YXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyNDA5LDMxIEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9u
UmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsK
KyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3By
VGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFu
ZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAg
ICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0g
Z3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsK
KyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNh
bGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFy
ZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFS
ZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQg
KzI0NTEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAg
IGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVz
dWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2Fz
ZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigw
eDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJl
Z2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShz
cmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUg
c2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTYyLDggKzI0OTYsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogeworICAgIHJl
c2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdp
dGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9y
RnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdF
YXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTOiBjbGVhciByZWdpc3RlciBzdGF0ZSBo
ZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgogICAgICAgICB1aW50NjRfdCogcHRyID0g
dm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBs
b2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNo
NjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5m
aW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI1MjQsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1p
emF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JS
ZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0
ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNTQxLDEwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVu
dHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMg
Y2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFN
KGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1NjcsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBB
YnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKIH0KIApAQCAtMTI0NSw4ICsyNTc3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdl
eHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBq
c0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmpl
Y3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJl
Z0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI1OTgsNDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29t
bW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAor
ICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5l
bXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29w
ZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdw
cigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAj
ZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNs
KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5j
X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwog
ICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVy
YXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247
CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNjYyLDQ2IEBAIHZvaWQgSklUOjplbWl0TmV3RnVu
Y0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVH
UFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3BlLnJlc2V0KCk7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRl
Y2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1
bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNf
ZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rp
b24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fz
eW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7
CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNf
ZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAg
fQogfQogCkBAIC0xMzQ5LDkgKzI3MzIsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAg
aW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1
ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBH
UFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1w
bGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIo
KTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Fy
cmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjc1Mywy
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5k
ZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCBhcmdHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
YXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNl
bHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2Fk
KHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5k
aWYKIH0KIApAQCAtMTM4MSwxNSArMjc4NiwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3Ry
dWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBl
bnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVl
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7
CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI4MzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7
CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsy
ODY0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBk
byBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4OTEsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBl
TWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2Rl
KHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBl
cyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5z
dHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNs
b3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAt
MTQ3OCwxMyArMjkwOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBt
X2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwg
ZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsK
KworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMjk0MSw4MiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVy
YXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAot
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4
IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhl
biBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0g
anVtcCgpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKwor
ICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQg
aW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIs
IFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
T3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
dGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVn
VDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5r
KHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEp
OworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qx
LCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAg
ICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiAKLSAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTU1MCwyMSArMzAyNiw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBp
bmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50
MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVt
ZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9y
R1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRU
ZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9y
R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJh
dG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93
LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0Vp
Z2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwg
cmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICsz
MDgwLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywg
cmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRl
bXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRl
bXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNl
KCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIg
PSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRl
bXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisK
KyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5
SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAg
ICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVu
ZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVz
dWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTU5OCw2ICszMTM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmls
ZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0g
bWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9m
aWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1Qw
KTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE5Niw5IEBAIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKwor
ICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3Rh
dGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3
ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigp
OwpAQCAtMTY3Miw2ICszMjEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2
bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0
ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAm
JiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMg
dHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExv
Z1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTcwMiwxMSArMzI0NiwyMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVl
UmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihy
ZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwor
ICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJl
Z3MocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjY3LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9yZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1f
bnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhh
bk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0z
MihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9
IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1Nr
aXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3Vi
MzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMy
KHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmso
dGhpcyk7CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBy
ZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJl
cigwKSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzMzMTYsOTkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAg
ICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVk
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwg
cmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0
T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
aW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAg
IG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Cisg
ICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90
eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7
CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hH
UFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09
IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dD
YXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90
b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7Cisg
ICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yNzksOCAr
Mjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxl
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
ICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAg
LTUwOSw3ICs1MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBU
aGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIg
c3dhcHBpbmcgb24gQVJNLgpAQCAtNTQ3LDggKzU0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTU4Niw4ICs1NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzIsOCArNjIxLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02NzMsOCArNjYwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjIsOCArNzA3
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzYzLDggKzc0Niw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTEwNDQsOCArMTAyNSw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTIwMSw4ICsxMTgwLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNv
cGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0
Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVy
LmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKQEAgLTUxLDQ5ICs1
MywxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgaW5kZXhpbmdU
eXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9w
ZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVzdWx0R1BS
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGluZGV4
aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNv
dW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0g
ICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAg
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAg
ICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2Zp
bGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
ICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2Zp
bGUpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3Bl
cnR5R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwg
U3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
YXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAg
ICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9
IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAg
ICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAg
ICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dl
dEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
MiwzOSArMTcyLDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1w
bGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBk
c3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3Vs
YXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
IGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFt
ZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNs
b3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1
Miw2ICsyNTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVj
b2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRl
ciBoZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAg
Ym9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0z
MTQsOCArNDIwLDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQK
ICAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdp
c3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5h
dmFpbGFibGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFt
ZSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVy
dHlOYW1lLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
cmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2lu
ZChieXRlY29kZSkpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCkBAIC0zMzQsNyArNDQzLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVt
aXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAg
LTM0Miw3ICs0NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNN
QU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsK
KyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTAsMTMgKzQ1OSwxMiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAg
IGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbElu
Zm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0g
bGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAt
MzcyLDQ5ICs0ODAsMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2Ug
eyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3Nv
ciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3By
KCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBi
YXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90
IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qx
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRl
Y29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
YWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0
dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1Qx
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVn
VDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0
aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0
aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRy
aWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVy
R1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRl
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nv
ci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNl
dHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNl
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVy
dHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
YWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsK
KyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
cmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjQsMTggKzU4
OCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVj
dWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BS
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8v
IFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5j
ZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ0NCwyNSArNjQyLDI3IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVs
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTkgKzY3Miw3
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywg
cHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOwor
ICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVy
IGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdp
c3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDkzLDIxMyArNzQ0LDM2OCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihi
YXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFs
c1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBi
YXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1Qw
KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJh
c2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJ
ZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0g
cmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6
OkdldEJ5SWREaXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBk
c3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChi
YXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAgbm90QXJyYXlM
ZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5t
X21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdl
dEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVu
Z3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSID0g
dXNlTE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1l
dGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJheUxl
bmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBw
ZW5kKGdlbik7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUu
ZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNH
UFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0
aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNW
UmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQ
UikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5k
ZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJl
Y3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJl
LCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRv
IGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJz
ICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0
aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJv
bSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2
YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVl
R1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNo
R1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERp
cmVjdCwgcHJpdmF0ZUZpZWxkQWNjZXNzS2luZChieXRlY29kZSkpOwogICAgIAogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTcwOSw3NyArMTExNSw5NSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8v
IEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3Rp
dmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBT
aG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRl
ckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVl
R1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRz
W21faW5CeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1tt
X2luQnlJZEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIp
CiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29w
ZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzkxLDE3ICsxMjE1LDI1IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0
YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRT
Y29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIApAQCAtODExLDIxICsxMjQzLDM2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
c29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJs
b2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3Qs
IHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAg
ICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcg
c2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBz
Y29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQ
UiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNjb3Bl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRl
cHRoOyArK2kpCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExv
Y2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04Mzgs
OSArMTI4NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApA
QCAtODUzLDI5ICsxMzAwLDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtODg0LDE1ICsxMzMxLDIwIEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQg
SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3Ry
dWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVj
dHVyZVNsb3QsIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVy
bywgc2NyYXRjaEdQUikpOworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVy
ZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAgLTkwNiwxMiArMTM1OCw2IEBAIHZv
aWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywg
cmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTkyMiw1MSArMTM2OCw4
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1
aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0
YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSBy
ZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQ
UlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7
CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAg
ICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNl
dEdQUiA9IHJlZ1QyOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNo
ZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMg
Zm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVf
c2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAg
ICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihv
cGVyYW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zm
c2V0R1BSKTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAg
ICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNl
dCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BS
LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBh
Ym9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAg
IGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7
Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9Q
dHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNo
LCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBuZWczMihvZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
b2Zmc2V0R1BSLCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1
bHRHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3Vy
ZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBz
Y29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTk4
MCwxMCArMTQ1OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1
bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1w
IGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
ICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogCkBAIC05OTYsMjcgKzE0NzUsMjcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5Ogog
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJl
c29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAg
ICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
LCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTAyNiw0MCArMTUwNSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CisKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9w
ZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdU
MSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9w
ZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBz
dG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDczLDIxICsxNTM0LDQ5IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
dmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2Nv
cGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAg
ICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAg
ICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2Nv
cGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUt
PmdwcigpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAg
ICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRH
UFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4o
WyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsK
LSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAg
ICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwg
QmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEwOTgs
MjggKzE1ODcsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRp
b24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFRE
WiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1p
dCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAg
ICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0
cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBv
aW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExv
Y2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRT
bG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6
CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTEzNCwxMiArMTY1MiwyMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5l
cnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ug
d2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hH
UFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qw
OworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
IEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUg
dG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTE1MywyMyArMTY4MCwzMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8v
IFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9j
YXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0
Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTE4
NiwxMCArMTcyMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyMDUsNjEgKzE3MzksMTc4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFy
Z3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQog
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAg
bG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50
c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50
c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJS
ZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAg
ICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50
c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsK
KyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwg
QWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1ha2Ug
aXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0
aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGlu
dG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBz
YXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVu
dGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNv
IHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwog
ICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVy
KSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJU
ZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFs
dWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3By
Rm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY3Jh
dGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFs
dWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIH0K
KwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBp
ZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQog
Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNw
aWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsg
Ly8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50
U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBv
d25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90
Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAg
Ly8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRv
bid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBP
dGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vz
bid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFs
d2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9m
IGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90Q2Vs
bDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAg
ICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAg
fQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAg
dmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEyNzEsMTEgKzE5MjIsMjYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZz
ZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNl
KSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVs
ZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyODUsMTAgKzE5NTEsMjMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3Jl
UHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9m
ZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3Zl
blR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFk
ZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7
CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQ
dXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTEzODUsOCArMjA2NCwyNSBAQCB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7Cisg
ICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3Jk
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRT
cGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2ls
ZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0xNDA0LDYgKzIxMDAsOCBAQCB2b2lk
IEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwog
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICAKQEAgLTE0
NjksNiArMjE2Nyw4IEBAIHRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmEK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxX
aXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgQVNTRVJUKChwdXRLaW5kID09IERp
cmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5k
ID09IE5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiAr
NjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJl
Z2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVy
biBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7
IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9B
c3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxs
KCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8g
dGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JD
YWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQt
Pm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjY3
NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5Niw2ICszOTYsMTAgQEAgc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9w
dGlvbnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogewor
ICAgIE9wdGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAgICBPcHRpb25zOjpmb3JjZUxPTCgpID0g
MTsKKyAgICBPcHRpb25zOjp1c2VMTEludCgpID0gMTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykK
ICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9v
bCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihVbnNpZ25lZCwgc2VlZEZvckxJQ01G
dXp6ZXIsIDQyNDI0MiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihEb3VibGUsIGFsbG93SG9p
c3RpbmdMSUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29s
LCBleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZXN0UnVubmVyVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBAIEpTVmFs
dWUgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29sIHByZXRlbmRU
b0hhdmVNYW55Q29tcGlsZXMgPSBmYWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAo
IU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7IC8vIE9P
UFMKKwogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVzZUJhc2VsaW5l
SklUKCkgfHwgIU9wdGlvbnM6OnVzZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5kVG9IYXZlTWFu
eUNvbXBpbGVzID0gdHJ1ZTsKICNlbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3Rh
bmRhbG9uZS1wcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5k
YWxvbmUtcHJlLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMv
c3RhbmRhbG9uZS1wcmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCwyMSBAQCB2YXIgc2Vs
ZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1bm5lciA9IHsKICAgICBuZXZlcklubGluZUZ1bmN0aW9u
OiBuZXZlcklubGluZUZ1bmN0aW9uLAotICAgIG51bWJlck9mREZHQ29tcGlsZXM6IG51bWJlck9m
REZHQ29tcGlsZXMsCisgICAgbnVtYmVyT2ZERkdDb21waWxlczogKGZ1bmN0aW9uKCkgeworICAg
ICAgICBsZXQgbWFwOworICAgICAgICByZXR1cm4gKGYpID0+IHsKKyAgICAgICAgICAgIGlmIChp
c0RGR0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxl
cyhmKTsKKworICAgICAgICAgICAgLy8gRW11bGF0ZSBydW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9y
IGEgYml0IHRvIGdldCBzb21lIHRpZXJpbmcgYmVmb3JlIHJldHVybmluZyB0cnVlLgorICAgICAg
ICAgICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAgbWFwID0gbmV3IFdlYWtNYXA7CisgICAg
ICAgICAgICBsZXQgY291bnQgPSBtYXAuZ2V0KGYpIHx8IDA7CisgICAgICAgICAgICBjb3VudCAr
PSAxOworICAgICAgICAgICAgbWFwLnNldChmLCBjb3VudCk7CisgICAgICAgICAgICByZXR1cm4g
KGNvdW50IC8gNDAwMCkgfCAwOworICAgICAgICB9OworICAgIH0pKCksCiAgICAgZmFpbE5leHRO
ZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3Q29kZUJsb2NrCiB9OwogCkBAIC0xNDksOCArMTYzLDkg
QEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUodGhlRnVuY3Rpb24sIF9hLCBfYgogICB2YWx1ZXMucHVz
aCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOwogICAKICAgdHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0Nv
bXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpCisgICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVG
dW5jdGlvbn0pKSB7CiAgICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CisgICAgfQogICAgIHZh
bHVlcy5wdXNoKGV2YWwoX2EpKTsKICAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7
CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVuY3Rpb24gZGZnSW5jcmVtZW50KGFyZ3VtZW50KQogICAg
IGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAgICAgICByZXR1cm4gYXJndW1lbnQuaTsKICAgICAK
LSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSkKKyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFy
Z3VtZW50KSAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuICJzdGFydCIgaW4gYXJn
dW1lbnQgPyBhcmd1bWVudC5zdGFydCA6IDA7CiAgICAgCiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416032</attachid>
            <date>2020-12-11 12:34:46 -0800</date>
            <delta_ts>2020-12-14 11:20:23 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>472796</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI2NzQzNSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw1ICsyMSw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDUgKzIyLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI2NzQzNSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw1ICsyOSw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw1ICsyMSw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw1ICsyNCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY0NCw5ICsxNjQ0
LDkgQEAgbGV0IHJ1blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsK
IGxldCBydW5XYXNtID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1
bk9jdGFuZSA9IGZhbHNlOwotICAgIHJ1bkFSRVMgPSBmYWxzZTsKKyAgICBydW5BUkVTID0gdHJ1
ZTsKICAgICBydW5XU0wgPSBmYWxzZTsKICAgICBydW5SZXhCZW5jaCA9IGZhbHNlOwogICAgIHJ1
bldUQiA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcs
NiArMzU3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxlZFJl
amVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbklzREZHRW5hYmxlZChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiBz
dHJ1Y3QgU2NyaXB0IHsKICAgICBlbnVtIGNsYXNzIFN0cmljdE1vZGUgewpAQCAtNjM5LDYgKzY0
MCw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJl
ciIsIGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiaXNERkdFbmFibGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGlm
IChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkp
IHsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1
c3RvbSA9IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBudWxscHRyLCB0ZXN0Q3VzdG9t
QWNjZXNzb3JTZXR0ZXIpOwpAQCAtMjU2Niw2ICsyNTY5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Bc0QKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91
YmxlTnVtYmVyKG51bSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uSXNERkdFbmFibGVkKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikKK3sKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQor
CiAvLyBVc2UgU0VIIGZvciBSZWxlYXNlIGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNy
YXNoIHJlcG9ydCBkaWFsb2cKIC8vIChsdWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVs
ZWFzZSBhbmQgRGVidWcgYnVpbGRzIHNvIGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJh
dGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9i
amVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4
IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVz
LmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0Mgewog
CiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpAQCAtMjY5LDcgKzI3MSw3
IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIH0KIAogdGVtcGxh
dGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
cEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9u
cywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVz
TWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpk
dW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rp
b25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVtcEhlYWRlcihibG9jaywg
aW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBAIHZvaWQgQ29kZUJsb2Nr
Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQucHJpbnQoImJiIyIsIGJs
b2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0aW9uc0F0SGVhZCkgewor
ICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFkOiBbIik7CisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9j
ay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAg
ICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGlj
dGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBT
cGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAgICAgICAgICBh
dXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxlYWRl
ck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudEluc3Ry
dWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENvZGVCbG9ja0J5
dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01h
cCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlv
blN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmls
ZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBzdGF0aWMgdm9p
ZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3Jh
cGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJl
ZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRh
dGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAgdm9p
ZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAogCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9pZCBkdW1wKENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
T3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uQXRI
ZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKKyAgICB2b2lkIGR1
bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+
Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmls
ZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrVHlw
ZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRoaXMsIHNwZWN1bGF0aW9u
QXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3
ICsyMzMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAg
SUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAg
ICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAg
Q29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3Ry
dWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgs
IFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYm
IGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAtMjQ0OCw2ICsyNDQ4LDggQEAg
dW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVzKAogewogICAgIEFTU0VSVChK
SVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAgICBpZiAoT3B0aW9uczo6dGVz
dFRoZUZUTCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAg
ICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGls
ZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNTExLDYgKzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2Zp
bGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0
YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQorewor
ICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAg
ICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlw
ZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFu
ZCkgPT0gc2l6ZW9mKAogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0Nh
bGxlZSA9IGZhbHNlPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3Jh
Z2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRW
ZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsx
NDQsMjMgQEAgcHVibGljOgogCiAgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXpl
X3QgbnVtVG1wcykKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBz
aXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDAp
CiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVt
TG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMp
CiAgICAgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyAr
IG51bVRtcHM7CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxz
ICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFs
dWVzLmdyb3coc2l6ZSk7CiAgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pCiAgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQog
Ci0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxv
Y2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNp
dCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3Qg
bnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fs
cyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAg
IHsKLSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1U
bXBzKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBu
dW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVz
LmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFu
ZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9u
dW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxv
Y2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90
aGVyLm51bWJlck9mQ29uc3RhbnRzKCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90
aGVyLnNpemUoKSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3
MiwzMyArMTc2LDUxIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9j
YWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZU
bXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMo
KSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBj
b25zdCB7IHJldHVybiBtX251bUNvbnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0g
bnVtYmVyT2ZMb2NhbHMoKSAtIG51bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9
CiAKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxl
X2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAg
IHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlkeCA8IG51bWJlck9mVG1wcygpKTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJn
dW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwog
ICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1
cm4gaWR4OwogICAgIH0KLSAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAg
ICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90
IGNvbnN0YW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
ZHggPCBudW1iZXJPZkNvbnN0YW50cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1w
KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29u
c3RSZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRl
eChpZHgpXTsgfQogICAgIAogICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1
cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1
bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlk
eCldOyB9CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsg
cmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENv
bnN0UmVmVHlwZSBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAg
ICAKICAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2Fs
SW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25z
dGFudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9
CisgICAgQ29uc3RSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5k
S2luZCBvcGVyYW5kS2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyAr
MjcwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZB
cmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1Np
emUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0
YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2Nh
bHMgPSBudW1iZXJPZkxvY2FscygpOwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJl
ck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJP
ZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJP
ZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdy
b3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6
VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1
IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVy
KCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjYWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAg
ICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBjb25zdGFudEluZGV4KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1
cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDgg
KzM0OCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQor
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0
ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRl
cigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAg
ICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFu
dChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJh
bmQudG9Mb2NhbCgpKTsKICAgICB9CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1i
ZXJPZkNvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVy
YW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09w
ZXJhbmQoT3BlcmFuZCBvcCkgY29uc3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwot
ICAgICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3Vt
ZW50cygpKQorICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
bmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1w
KGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAg
ICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZDb25zdGFudHMoKSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJG
b3JDb25zdGFudChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2Fscygp
KTsKKyAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYg
KGluZGV4ID09IGNhbGxlZUluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQg
dmFsdWUpCkBAIC0zOTMsMTAgKzQzNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9u
dW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2Nh
bHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBt
X251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxv
Y2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBh
bmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25l
ZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
c0lubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBA
IGlubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnBy
aW50KHZpcnR1YWxSZWdpc3RlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQg
T3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgor
dm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1l
bnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJh
bmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRt
cCh0bXBJbmRleCksIGNvbnRleHQpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0Nh
bGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQo
Y2FsbGVlKCksIGNvbnRleHQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3Bl
cmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIp
OwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBh
cmd1bWVudEluZGV4LS07KSB7CkBAIC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9
CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiY2FsbGVlIiwgIjoiLCBjYWxsZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVj
dWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBi
b29sIGlzSW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2
YWx1ZSAmIH5TcGVjSW50MzJPbmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAm
JiAhKHZhbHVlICYgflNwZWNCeXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90
SW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFs
dWUgJiYgISh2YWx1ZSAmIFNwZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgsOCArMTE4LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMg
dGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0
IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rl
ci5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3Mg
VmlydHVhbFJlZ2lzdGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZy
aWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZm
ZmZmOwogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAh
PSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAg
Ym9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVu
dChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXND
b25zdGFudCgpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xv
Y2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5k
OyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1
cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0
aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQg
KyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25z
dGFudFRvT3BlcmFuZChpbnQgY29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0
ZXI7CiB9OwpAQCAtMTMzLDQgKzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm8KICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkK
K3sKKyAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRU
b09wZXJhbmQoY29uc3RhbnRJbmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5
dGVjb2RlSW5kZXggYnl0CiAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMs
IG51bVRtcHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAs
IGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcywgMCwgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291
bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
Miw3ICszNTIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4K
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE1IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNp
bmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgi
CiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIkpTR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5j
bHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzUyLDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhO
b2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBK
SVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwpAQCAtNjAsNiArNjUsODMzIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29u
ZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1l
OwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9w
ZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAo
YXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUo
Ynl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
cHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91
bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1f
cHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3Vt
ZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0
aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Rp
cmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BU
b1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5t
X3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRl
cmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4
dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JO
ZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9u
ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVl
LCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2Fs
bDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRl
TmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5h
bF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Rv
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9t
X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
OworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xo
cyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jo
cyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3co
KSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3Vi
bGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFO
KSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxh
dGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBk
byBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwg
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7
CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7
CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRh
dGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlm
IChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50
QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAg
ICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9t
Tm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVj
RG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91Ymxl
UHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJp
Z2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Jp
Z0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8
T3BTdWI+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9tdWwpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAg
ICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3
ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJs
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2Rl
TnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJl
IGJ1aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5n
IGludDMyIHJlc3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2ln
bmVkPigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsK
KyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5w
dXQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxl
LmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1
bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0
aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNl
dFR5cGUoZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsK
KworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAg
ICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNl
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5k
bGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShi
eXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlw
ZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlw
ZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBT
cGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlm
dDoKKyAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0
byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5t
X2xocyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7
CisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxl
KGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZv
cihieXRlY29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAg
YXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wQ2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOwor
ICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hv
dWxkIGRvIGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMg
aWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisg
ICAgICAgICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6
IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQor
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHBy
b2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAg
ICAgICAgIHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmlu
YWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6Cisg
ICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2
ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3By
b21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlz
ZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0
cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNw
ZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4
cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5j
RXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19h
c3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
YXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNF
eHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93
aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRo
U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5n
dGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVy
aWNfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2Vu
ZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBT
cGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVt
ZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVU
b3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+
KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1
bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRv
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRf
Y291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3Vu
dD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFk
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0Nl
bGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBP
YmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmlj
dGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
QmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
b2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29i
amVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVj
dD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJ
c0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
b25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29k
ZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBz
cGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3Zl
cnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5
cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
c19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJ
ZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9p
ZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBj
YXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAg
IGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgor
ICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNl
IG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19z
dGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBj
YXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3Bf
cHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAg
ICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRy
OgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFs
c2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBj
YXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251
bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBv
cF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAg
IGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAg
IGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBv
cF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoK
KyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBj
YXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93
OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAg
IGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAg
Y2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoK
KyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dl
dHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJh
dG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bf
d2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9s
b2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxp
bnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAg
ICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2Fz
ZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21f
c2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90
cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBj
YXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2lu
dGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3Jf
ZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9v
c3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xv
b3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3Bf
Y2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAg
IGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVy
YXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkK
K3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJs
b2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhl
YWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRI
ZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05v
bmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJs
b2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShb
Jl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1f
Y29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dy
YXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAg
Zm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9m
aWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAg
IG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0
aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmci
LCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxl
KCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBk
YXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRb
MF0uY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8g
eworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBv
cmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJz
ZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBE
RlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBp
bnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRl
ZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNo
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDog
Km1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0
aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0Vu
dHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigp
OworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1
bXAobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9u
c0F0SGVhZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdD
YWxsZWVGdW5jdGlvbikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02
Nyw2ICs4OTksMTIgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQog
ICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwog
fQogCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOwor
ICAgIHJldHVybiBtX3VzZUxPTDsKK30KKwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDog
SlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmlu
dGVycHJldGVyKQpAQCAtNzYsNiArOTE0LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7
CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpOwogfQogCiBKSVQ6On5KSVQoKQpA
QCAtMTM3LDExICs5NzYsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgp
CiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09Q
Q09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAog
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisg
ICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZv
ckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNlTE9MKCkgJiYgZHN0Lmlz
VmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisg
ICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAgICB9IFwKICAgICAgICAg
fSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAg
LTE1NiwyNiArMTAwMSwzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkK
IAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBc
Ci0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisg
ICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAog
ICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFt
ZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQp
IHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkp
OyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsg
XAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9w
XyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVu
Y3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwog
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9w
YWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxOCAr
MTA4Miw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAg
ICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5z
dHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6
ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBz
dGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewot
ICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAg
dW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUg
dGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2lu
dCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9n
cmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNp
emUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAg
ICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5k
ZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5p
bmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNv
ZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwotICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsg
bV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
Y3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1f
Y3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdh
bGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJy
ZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVu
dFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBo
LT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0Vu
dHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3By
ZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAg
IGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZp
cnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBp
IDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5k
W3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9j
dXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwor
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFy
dEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92
ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJs
ZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3Mg
ZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9y
Qnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
LmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCkBAIC0yNzgs
NDYgKzExOTUsNTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxv
Z0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7
CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklO
RV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVy
KQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0
eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rp
b24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChz
cHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19P
UCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJh
dG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3Bl
Y0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigp
Lm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVh
bikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigp
Lm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2Jq
ZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19P
UChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RP
dGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRv
cCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJl
Z2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dp
dGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+
KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0
YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVf
U0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVj
Tm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3Rl
cigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9y
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5l
d19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdf
YXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCku
bV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAg
ICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVk
QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2Rz
dCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1l
bnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1
dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0
LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VP
YmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9h
ZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTMyMiwxMSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9z
dXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9l
bmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAg
ICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAg
ICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc3
LDYgKzE0MDUsMzkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAg
IGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAg
ICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9ub3A6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3By
b2ZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2Rl
SUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9j
aGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wp
CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisK
ICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
QXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAg
ICAgfQpAQCAtNTE1LDEyICsxNDc2LDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNh
c2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5z
aWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXIt
PnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAg
ICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisg
ICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC01
NzksNyArMTU0Miw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hl
Y2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9u
ZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTcsNiArMTU1
OSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzMsMTUgKzE1OTgsMTggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6
ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRv
Lm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQg
aW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1h
bnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BT
OgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nh
c2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3Qg
ZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9S
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEp
LT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdl
bi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQ
cm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3Vs
ZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
c2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAt
Nzc0LDYgKzE3NDIsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21w
aQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAg
ICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBmb3IgKGF1dG8m
IGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0
LmZpcnN0OworICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgIGp1bXBz
LmxpbmsodGhpcyk7CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0
cy4KKworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJ
bnQ6OmdldENvZGVQdHI8T1NSRXhpdFB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAg
ICAgLy9pZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIC8vICAgIGRlc3Rp
bmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3Jf
ZXhpdF90cmFtcG9saW5lKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5h
dGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CisKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIp
OworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAg
ICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJU
YWcpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMjA0OCw3MTMgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtp
bmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZp
cnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9i
eXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNv
bmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlz
CisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRv
IGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9r
ZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNl
dCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5r
Ojp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJl
ZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxv
d2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJl
Z2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0
ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0
KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9P
UFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50
IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHBy
b2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09Q
UzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0
PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1
bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAg
ICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgp
Cit7CisgICAgLy8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmllci4g
QnV0IGdlbmVyYWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBmaWd1
cmUgc29tZXRoaW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1f
c2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAv
LyAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkK
K3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAg
ICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAg
ICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9j
YXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1
ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkg
eworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25z
aXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUu
CisKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYgKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
cmVnVmFsdWUub3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAg
ICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9w
ZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlk
RlBSUmVnOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIGlz
QWxsb2NhdGVkL2xvY2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAvLyBo
YXZlIGNvZGUgdGhhdCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAgICAg
IC8vIC0gc3BpbGxGb3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAgICAg
IC8vCisgICAgICAgIC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2UgdGhl
IFZhbHVlT3BlcmFuZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxvY2F0
aW5nIHRoZSByZWdpc3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1wLgor
ICAgICAgICAvLyBPdGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNhbGxz
IHVubG9jaygpLCB3ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQgc3Rh
dGUuCisgICAgICAgIHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IGZhbHNlOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpCit7CisgICAg
Ly8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29y
ZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBhcHBlbmRJZk5lZWRl
ZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAg
ICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3Rl
cnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAg
cmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVz
ZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVy
cywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRl
ckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCBy
ZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDAp
OworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpLCByZWNv
cmQuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVn
VG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFu
JiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzYXZlUGxhbikgeworICAgICAg
ICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAgIG5v
cCgpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAg
ICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAg
ICAgIG5vcCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3Jl
RnJvbVNhdmVQbGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZl
UGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFy
ZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7
CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50
MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQg
SklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJv
eERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAg
IHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFu
ZCk7IC8vIE9PUFM6IFZhbGlkYXRlIHRoYXQgZm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykg
dGhhdCBkZWYsIHdpbGxEZWYgd2FzIGNhbGxlZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5k
KTsKKyAgICBhc3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJh
bmQpOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxv
Y2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cisg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgp
KQorICAgICAgICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJ
VCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQ
UlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgp
OworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVt
cCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAg
bV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0
KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQor
eworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFs
bG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7
Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJ
VDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3Bl
cmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKwor
R1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0
LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9w
ZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxP
cGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpD
ZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2Ugewor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dw
cikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQp
KSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2Vs
bChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29w
ZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RD
ZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVy
YW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAg
ICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1f
aml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAm
IFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5i
cmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRl
clR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQor
CitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQor
eworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1
ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9
CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0
Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIg
PSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIp
OworCisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisK
KyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91
YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBG
UFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFu
ZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQ
UlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJh
bmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAg
ICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAg
ICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVy
YW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAg
eyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQ
UigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBl
LCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFu
ZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShn
cHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVy
YW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVk
ZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVn
VmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAg
ICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2Vk
RlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3Jh
dGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47
Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BS
KSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUp
KTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklU
OjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVj
Q2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2
YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9u
bHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0
ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJ
R0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisg
ICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAg
IHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3Bl
cmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0lu
dDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIp
OworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7Cisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsK
KyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRl
KCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJl
bnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCks
IDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51
bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0
ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29k
ZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50
U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBvcGVyYW5kLCAiLCAi
LCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0ZSgpCit7
CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAgZm9yIChhdXRvIHJl
ZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4o
cmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChh
dXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRh
TG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUg
IkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgog
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIK
ICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVC
YXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJ
bmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7
CkBAIC0xMDEsMTUgKzEwNSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBT
bG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAg
ICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNhdmVQ
bGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisgICAgc3Ry
dWN0IFNpbGVudFNwaWxsUmVjb3JkIHsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAg
ICAgIFJlZ2lzdGVyU2V0IHNwaWxsZWRSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNr
U2l6ZUZvclNwaWxsOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBT
bG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0LCAxPiBqdW1wczsgLy8gVXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZv
ciB0aGluZ3Mgd2l0aCBjaGVja3BvaW50cywgd2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQg
b2YgSnVtcExpc3RzCisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBo
YXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAg
ICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAg
VmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRp
b24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRj
aFJlY29yZCB7CkBAIC0xODMsNiArMTk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xB
U1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2lu
ZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQ
YXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIg
KzIwNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
ID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRC
eUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwg
b2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9y
IHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2Vt
ZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2
OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgo
MCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMsNiArMjc0LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9p
ZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9i
YmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsK
KwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4
Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMjUsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAK
LSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVt
cCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAg
ICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93
Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRK
dW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGlu
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3
ICszMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6
b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1
Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyAr
MzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENv
bXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBl
IHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQp
OworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BF
cVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJp
ZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hv
dWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3
Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRo
ZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJs
ZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdU
MCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFs
dWUsIHZvaWQ+CkBAIC00NzUsOCArNTAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24s
IERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNDg0LDExICs1MTEsMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rp
b25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVj
dGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAg
ICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOwor
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBs
KGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpA
QCAtNTEyLDkgKzU0OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
aWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTc2LDcgKzYxMiw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9l
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9t
b2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biopOwpAQCAtNjQzLDc3ICs2ODEsODAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2
b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29s
IGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRH
UFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2
ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAt
NzI4LDggKzc2OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAg
IEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzgg
Kzc4MSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRG
dW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+
Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
LCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2Fz
ZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAg
ICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlv
biwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBs
aW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJv
bS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZv
aWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwot
ICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdp
c3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAg
ICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRl
Y29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBz
bG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQ0LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdh
dGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2
ICs5NTcsMjUyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50
ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25s
eSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5n
LiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
RlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJv
dmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAg
ICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVy
YW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
OworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3Ry
dWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VMT0wpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR1BSUmVnJiBncHIg
PSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52
YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQg
PSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAg
ICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3By
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9y
T3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFu
ZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcg
ZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnBy
Rm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3Bl
cmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVD
ZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1
bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJs
eSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BS
UmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQ
UlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3Rl
ciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJS
ZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAv
LyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0
IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lk
IHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAg
ICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2
b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAg
ICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0
ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0
ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7
CkBAIC05NTMsNyArMTIyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVt
cFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUlu
ZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAg
IFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxT
d2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5z
aWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTI1OCw4MyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAg
ICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgewor
ICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQg
dmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAg
ICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3Qg
QWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdw
ciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAg
ICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAg
ICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0Nv
dW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRl
ZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAg
IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJl
Z2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhl
ci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVz
LnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNb
aV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdp
c3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRl
OworCisgICAgICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZv
aWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRC
bG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGUsIHRydWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dF
bnRyeT4gbV9leGl0TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4g
bV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNl
c3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wg
bV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRl
Y29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4s
ICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFs
c2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xv
d0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vu
c2lnbmVkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFVuc2lnbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihM
ZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCByZXN1bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMy
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVnVDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
b3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4g
dGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGlt
bWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5n
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZw
cigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IFZhbHVlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKQEAgLTIyOSwxNyArMjgxLDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXAoY28KIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAg
IEdQUlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhT
ID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBv
cDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSksIHRhcmdl
dCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGdldFJIUygpOwog
ICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9w
MWltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0
aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKICAgICB9CiB9CiAK
QEAgLTI1NSw0MiArMzMzLDg4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25z
dCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJl
ZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBv
cDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZd
IHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHQ7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsK
KwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBp
bnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBjb21w
YXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDApOworICAgICAgICBj
b21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJlc3VsdEdQUik7CiAg
ICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGdldFJIUygpOwogICAgICAg
ICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBj
b21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDAp
OworICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9w
MWltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25k
aXRpb24sIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAg
Z2V0UkhTKCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOwogICAgIH0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0
cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdw
cigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8g
ZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNl
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBm
YWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8g
V2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNs
b3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQg
aW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICs0MjMs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzQ0Nyw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzQ3MCwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBK
dW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICs0
ODcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZh
aWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgwLDEx
ICs0OTksNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBl
bnN1cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9u
IHByb3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFi
c29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3Jj
RHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJ
bnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0z
MigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91
YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShz
cmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBz
b21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7Cisg
ICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMzkyLDExICs1NDcsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVj
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkg
eworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1
bHRGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEu
MDsKKyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBG
UFIpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBGUFIsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BS
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlu
cHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAu
ZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAg
ICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAg
ICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVn
cyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qp
OworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBP
UF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDYsNTQgKzYwMyw4
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMg
YXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAg
PT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7
CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJl
Z2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdU
NCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBH
UFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4
KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAg
IGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0
aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAg
ICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hU
ZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBl
YXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxo
c1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlz
LCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwg
ZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJo
c0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJo
c0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAK
LSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1
YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAg
ICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVX
b3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOwor
ICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJ
bnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
bW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQorICAgIGJveEludDMyKGVkeCwgSlNW
YWx1ZVJlZ3MgeyBlYXggfSk7CiAKLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjpl
bWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBlYXgpOworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
ICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBT
cGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNC
aWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUoWDg2XzY0KQpAQCAtNDYzLDcgKzY5NSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBE
b3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMy
T3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzcwNSw3IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChp
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3Rl
ciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBl
bWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzc5NCwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlv
biAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTMgKzk1NCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxk
IGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUg
b3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVn
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9w
dGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2Fz
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9y
PgpAQCAtNzQwLDE4ICs5NjksNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgo
Y29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwot
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBAIC03NTksMzMgKzk3Niwx
MDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgICAgICBs
ZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKICAg
ICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQogICAgICAgICByaWdodE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KICAgICBSRUxF
QVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRU
ZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7
CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7Cisg
ICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAg
ICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAg
ICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAg
ICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlm
CiAKLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKIAorICAgIFNuaXBw
ZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5l
bmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAgICAgaWYgKHByb2ZpbGlu
Z1BvbGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9maWxpbmcpCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1bHRSZWdzLmdw
cigpKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIo
KSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNw
ZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIp
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0g
U3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3Vs
dElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkp
IHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0K
KworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1
bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYg
KHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJP
bmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0lu
dDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKICNlbHNlCkBAIC04MDIsNyArMTA5Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChj
b25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bj
b2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0
UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC04NDgsMjAgKzExMzgsNiBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QyOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKLSNlbHNlCi0gICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlmCi0KICAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQ7CiAKQEAgLTg3MiwyMSArMTE0OCw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgp
IHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVn
IHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBz
Y3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGlu
IGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2Ny
YXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNl
bHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQ
UlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAg
ICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywg
cmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlw
cGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQ
UjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBM
aXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0
UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
ICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBT
cGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
cmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMSwxOCArMTIzMyw1NCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjpl
bWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJ
VEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAg
ICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsK
KyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJl
c3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUu
bV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92
ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1p
emUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVu
Y3Rpb24+CkBAIC05MjMsMTUgKzEyOTEsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0
cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNp
bmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdp
c3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlz
LCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBm
cm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBT
aW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVn
aXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQwLDE5ICsxMzI4LDIyIEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0
aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
KTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjIsNyAr
MTM1MywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAg
fSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4K
QEAgLTk3MywzOSArMTM3MSw4MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NF
UlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyBy
aWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1w
RlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBm
cFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3Qo
KSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5
cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAg
ICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsK
KyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0K
IAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFu
ZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29u
c3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBS
ID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5m
cHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0
RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0
KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6
aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0
b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAg
bWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5k
LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9y
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAg
ICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVy
YW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJh
bmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0
YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50
KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFy
dCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTQsMTcgKzE0NTUsMzQgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVD
b2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRl
KTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7
CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAg
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAg
ICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9
IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM0LDExICsxNDkyLDIwIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRp
ZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5n
cHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSks
IFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxP
cCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9u
Pgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
IHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlv
biktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFi
ZWwoKTsKQEAgLTEwNDcsOCArMTUxNCw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mg
c3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg0LDcgKzE1NTEsNyBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1
bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0
aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmls
ZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0
YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudElu
c3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwpAQCAtMTA5NCwxNiArMTU2MSw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElD
U2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7
CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LnNlY29uZCgpKTsKIApAQCAtMTExNCwxNSArMTU3MSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjpp
c1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2Ug
aWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
IHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdw
cigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
KyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKQEAgLTExNTUsMjMgKzE2MzMsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgot
ICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25k
KCkpOwogCkBAIC0xMTg3LDYyICsxNjQ4LDIxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3Ay
KSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFu
dERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5k
LmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyBy
aWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1w
RlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmln
aHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBG
UC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAg
cmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBs
ZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAg
IGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7
CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVn
VDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9
IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9w
ZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAg
ICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIs
IGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAg
ICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgp
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVz
dWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBB
U1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
ciB8IFNwZWNCaWdJbnQ7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2Zp
bGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVn
WmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
UmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJl
c3VsdFRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhz
R1BSLCBsaHNGUFIpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQ
UiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRGUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2hUZXN0MzIo
WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsK
KyAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNl
X2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVs
T3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9j
b2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1
YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50
QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1
YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0
aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICB3aWxsRGVmKGRzdCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9j
b2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
ICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2
ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAg
ICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0g
Q2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwor
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRy
OwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2Nv
ZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBA
IC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzcsNDQgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1
Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsK
KyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
KTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29u
c3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYsNiArMzg5LDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAg
ICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlw
bGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVh
Y2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1
cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhlcmU/CisKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rp
b24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICBKdW1w
IGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmlj
KSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKIAog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworCisgICAgSnVt
cExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBuZXh0Q2hlY2twb2lu
dFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7
CisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAq
dGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAgPSByZXN1bHRUZW1w
LmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1QwID09IHJlZ1QwKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAgcHJv
dmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzQsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAgICAg
fSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBp
dCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVj
b2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwg
ZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdU
MCk7CiAKQEAgLTQ3NiwzNiArNDk5LDQzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAgIHsK
LSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAg
ICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hlY2tw
b2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogCi0g
ICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0
ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
ZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25l
LCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAK
LQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25l
ID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZh
bHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93
UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
YXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAorICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKQEAgLTUxNSwxMCArNTQ1LDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNl
LmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JO
ZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVy
YXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRl
Y29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0u
bGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmpl
Y3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcg
KzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9
CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNs
b3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6Ogog
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwor
ICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0
IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNl
CkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0
aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChp
dGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhh
c0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRl
Y29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODksMzYgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0
aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1w
KQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAg
CisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVj
b2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1f
c2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxh
c3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQo
SnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1
bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBS
ZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0g
ICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1
bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHku
Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVj
b2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisg
ICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTMw
OSwxMSArMzAxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW4K
ICAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CiAKLSAgICBjb25zdCBSZWdp
c3RlcklEIHZhbHVlID0gcmVnVDA7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBjb25zdCBS
ZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7CiAjZW5kaWYKQEAgLTMzOCwxMSArMzI5LDExIEBA
IGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlZykKIHsKICAgICBpZiAo
IXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3Io
bWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCByZWcpOwogfQogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNl
bGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkK
QEAgLTM5MywxMSArMzg0LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5k
Q29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zv
cihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIs
OCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
ZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3
NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0
cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhl
cmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRo
YXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkg
JiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBh
bGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmpl
Y3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3Rl
cklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJl
Z1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAg
ICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1w
LT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVn
ID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAg
ICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3Qs
IFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUu
bV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5
dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVy
YW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOwor
ICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0
b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhh
c0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBj
b25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VH
UFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJv
bC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
aW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5m
dW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JH
UFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRI
YXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91
bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90
b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2
YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBm
b3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2Ug
Y2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdU
MSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVz
dCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9s
Lmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFs
dWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0g
ICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwK
LSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdU
MSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwot
ICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAg
IE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBw
cm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBH
UFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJv
dG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsK
KyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAg
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJv
dG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nh
c2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAu
ZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7Cisg
ICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVl
R1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3By
KCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRz
IChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMu
CisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRv
bmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0
LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAg
IC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0g
dGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4K
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAg
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVl
CisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7
IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAg
ICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5k
ZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygp
LT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNv
bnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNf
dW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0g
ICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdU
MCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29t
cGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAg
ICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBp
c0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwg
dGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVz
dWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDAp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihF
cXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVs
bChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRl
c3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisj
ZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNl
bmRpZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwy
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVy
bywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdU
MCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI4LDU2IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJp
Z0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsK
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmso
dGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAg
ICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBp
ZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBp
c05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MzMzLDE4ICs2NDMsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3Ry
dQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisg
ICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21w
YXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENl
bGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJl
dHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
QEAgLTM2OSwxNSArNzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25z
dCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAg
IGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUp
KSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChz
cmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAg
IGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTM4Niw1MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+
KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChz
cmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9
IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
ICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNw
ZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVj
U3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAg
ICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5j
dGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25h
bWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRG
dW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0
ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1
ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFk
ZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJ
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMg
YSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFu
IHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1
dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1
ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQu
Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJl
Z1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhl
IHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAg
ICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9y
IDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRo
ZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBi
YWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9j
b25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
c3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0z
MigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBo
YW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNj
cmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAg
ICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJl
Z1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
Owordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9u
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlv
bikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24g
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUg
bW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJU
ZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gy
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAg
RlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTc1LDEyOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisK
KyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBh
dXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisg
ICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0g
dW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRH
UFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgewor
ICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAg
ICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3Jh
dGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9
IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAK
LSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0g
dW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNO
b3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwNiwyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgewor
ICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0LDI2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNTE1LDY1ICsxMTY1LDMxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0
cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1
ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEp
LCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwor
ICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwor
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlz
KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBD
b21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHBy
b3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRH
UFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVj
dWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9
IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERv
dWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBp
ZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkp
IHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
cmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMp
KSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgor
CisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhz
R1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
IH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxo
c0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwg
cmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2Ugewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
KyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9y
ZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRv
bmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0ODgsMTQ2IEBA
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICgh
dmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDog
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAg
SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3Vs
dEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwg
d2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBk
b25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290
byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAg
IC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxk
IGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVt
YmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25s
eSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdU
NSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBy
ZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0
IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAg
IGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQg
dG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmlj
dEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29s
ZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKwor
I2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1
bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAg
cmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwp
CisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVt
ZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBi
cmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYg
d2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmlj
ayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8g
aXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAg
ICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUg
aXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1Zh
bHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYg
Ym90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAot
ICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxl
ZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5s
aW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNv
dmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQo
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7
CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVz
dCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAg
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsK
KyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNjc0LDY4ICsxNjQ1LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1w
KGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVF
cXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkg
eworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNG
UFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQg
PT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJp
Z2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwot
ICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhl
IDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQz
Mi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAv
LyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVF
cXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWws
IHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdU
MSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkg
ewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGlu
ayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElm
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xv
d1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2Vu
OworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAg
IGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAg
ICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQg
d291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNo
SWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFu
IEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxl
YXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAg
ICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMp
OworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2
NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1
YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7
CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
YXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisg
ICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBk
byBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ug
b25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAg
ICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAo
dG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
b3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAor
ICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzg2LDIyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9w
U3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1l
cmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1
dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOwor
I2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDAp
KTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChz
cmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJl
Z1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJp
bmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
ICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAg
ICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7
IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0
eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDYzLDIzIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3Rv
cmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBl
KGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAg
IEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
KyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTkwNSw5ICsyMDk0LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7
CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BS
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1t
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIxMTksMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0g
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTkzOCw5MyArMjE0MywxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhj
b25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGlu
ZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmlu
Z1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4o
KTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBs
b2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAg
ICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4o
Ynl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmso
dGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpl
cU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMx
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwg
T3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5v
dEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAg
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIo
Y29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21w
YXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51
bGwpLCByZXN1bHRHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQot
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29t
cGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3Zv
aWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAg
IHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbElt
cGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhh
dmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtl
IEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2Ug
aW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBv
aW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3Qg
bGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0g
bV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3Vu
dDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAg
IGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3Rv
cmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAg
ICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNw
ZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApA
QCAtMTAzNSw5ICsyMjk0LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2Nv
cGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAg
R1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3Bl
ID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKwor
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwg
c2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZT
Y29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVj
dE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzE4LDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAm
bWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9
IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFN
b2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1Rv
VGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRo
aXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8v
IE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5Lgor
ICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3Bl
Y09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihj
YWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAg
ICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRl
IHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAo
aXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
bG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9U
aGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNT
ZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVj
dDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2Fj
aGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQz
MihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzOTksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRG
dW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxl
ZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEw
NjgsNyArMjQwOSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0
CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxs
ZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5k
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVP
cGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVt
cDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0
b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAy
LT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAg
cmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVn
ID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxs
ZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxl
ZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDUxLDMzIEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJl
ZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAg
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rh
cmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAv
LyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRo
aW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMTE2Miw4ICsyNDk2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8v
IE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBl
IHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAg
Ly8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBl
bnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAg
ICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZElt
bTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0x
MTg3LDEzICsyNTI0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0
aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAt
MTIwNiwxMSArMjU0MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwor
ICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQg
d29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0x
MjMzLDEwICsyNTY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29u
cwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU3Nywx
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nh
c3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0
dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTk4
LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9z
Y29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNF
eGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7
CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7
CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
KG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCAr
MjY2Miw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0
ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAg
ICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVH
UFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5k
aWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHAp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNzMyLDE5
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
c1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdj
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3NTMsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisK
KyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRl
bXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1w
LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJn
R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9m
aWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRl
eCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAg
ICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3ODYs
MzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJh
dG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JW
YWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFs
dWUgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2
ICsyODM1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNo
YWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg2NCw4IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBz
cGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsy
ODkxLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVt
cCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAK
ICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI5MDgsMTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAs
MzcgKzI5NDEsODIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJh
c2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
LQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0g
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0
KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5l
CisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIp
OworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90
PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAg
ICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2Ug
aXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1
dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MSk7CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGlu
ZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAg
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOwor
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0
dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwor
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgfQogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxp
bmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMwMjYsNTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdp
c3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1l
cmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBP
T1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVy
YXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxh
Y2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywg
ZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhU
ZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhH
UFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAg
IEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUlu
ZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAg
aW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQz
MlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3Vs
dEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzA4MCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsK
KyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BS
UmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAg
IE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3Bl
cmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsK
KyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAg
ICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7
CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwg
VGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNF
aWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNT
dHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzEz
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBl
TG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9F
bmQ7CkBAIC0xNjU4LDYgKzMxOTYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAg
IHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSBy
ZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRo
aXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzIxMyw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisg
ICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0
aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndl
IHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAg
LTE3MDIsMTEgKzMyNDYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29u
c3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJn
dW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdz
KHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1
bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0g
SlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xl
bmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSAr
MzI2Nyw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25l
ZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVt
cCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVt
UGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDAp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMy
KG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAg
ICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIo
bnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCks
IHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3Ro
LmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
cmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NzQ0LDQ5ICszMzE2LDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJ
bnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3Vt
ZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAg
YXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwog
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1Ro
YW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwg
cmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAg
ICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwg
cmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1
bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5l
ZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwodmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0s
IHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8
IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qy
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJU
KHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAg
ICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2
YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbElu
ZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZh
bEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93
UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxv
dyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4
ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01
ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5y
ZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgPHd0
Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAor
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01MSw0OSArNTMsMTE3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHBy
b3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZWdUMjsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAogICAgIGlm
IChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJ
Q01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2VsbDsK
KyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
YmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwu
aXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBw
cm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwg
U3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wp
KQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDIsMzkgKzE3Miw3MyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTIsNiArMjU2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2Vy
Q29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE0LDggKzQyMCwxMSBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3Rl
cnMuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdU
MSk7CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSks
IHB1dEtpbmQsIHByaXZhdGVGaWVsZEFjY2Vzc0tpbmQoYnl0ZWNvZGUpKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM0LDcgKzQ0Myw3
IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4g
Z2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArNDUxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1
dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICs0NTksMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxv
YWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAg
Z2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAg
ICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
KTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
KTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM3Miw0OSArNDgwLDEwNSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlk
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nl
c3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29y
R1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBn
ZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0
ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29k
ZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVj
b2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2Ug
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJv
cGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJp
YnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDI0LDE4ICs1ODgsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9k
ZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJy
aWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyBy
ZWdpc3RlcnMuCkBAIC00NDQsMjUgKzY0MiwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVs
QnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0Lmdw
cigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNDcyLDE5ICs2NzIsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0
eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9w
ZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTQ5MywyMTMgKzc0NCwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgq
aWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZt
ZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAg
ICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVn
VDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRl
eGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJy
YXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAg
fQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBi
YXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQ
Uik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlz
VlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhp
c0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0Rp
cmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBh
YmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3
ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMg
aGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdl
bmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUg
YWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZh
bHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJh
c2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
cmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAog
ICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QsIHByaXZhdGVGaWVsZEFjY2Vzc0tp
bmQoYnl0ZWNvZGUpKTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBA
IC03MDksNzcgKzExMTUsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0g
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAg
ICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZElu
ZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAg
SklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5C
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52
YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTc5MSwxNyArMTIxNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
OwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFk
ZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSAr
MTI0MywzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBz
Y29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNh
bEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1f
bGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODM4LDkgKzEyODUsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3Vs
dEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTg1MywyOSArMTMwMCwyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQ
UiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTg4NCwxNSArMTMzMSwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhz
Y29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJl
ZyByZWcpCkBAIC05MDYsMTIgKzEzNTgsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQot
ewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CkBAIC05MjIsNTEgKzEzNjgsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRh
ZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcg
cmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zm
c2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJS
ZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zm
c2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVH
UFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BS
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAg
ICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAo
QVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJh
bmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gz
MihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElz
Tm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0
KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsK
KyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFu
ZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7
CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
ICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5k
U2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwg
ZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC05ODAsMTAgKzE0NTksMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2
LDI3ICsxNDc1LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwog
CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYs
NDAgKzE1MDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShy
ZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQ
dHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA3MywyMSArMTUzNCw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0
dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7Cisg
ICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zm
c2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
dHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9m
ZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMDk4LDI4ICsxNTg3LDU3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwog
ICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNh
bid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5Lgog
ICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAg
c3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihj
b25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9w
ZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3Rv
cmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKQEAgLTExMzQsMTIgKzE2NTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8g
V2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2Nh
dGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRD
b2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBl
biBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29u
c3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAg
LTExNTMsMjMgKzE2ODAsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRo
ZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwg
c2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNj
cmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNo
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTExODYsMTAgKzE3MjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1
LDYxICsxNzM5LDE3OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVu
dHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBh
cmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJl
c3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBi
eXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0
b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1p
dFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJS
ZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVl
LmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcywgdmFsdWUpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
fQorICAgIAorICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBL
bm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJy
YW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndp
c2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBv
cHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBl
eGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUg
Y29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxp
ZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9y
IFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
KSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAg
ICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxs
KSkgeworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAgICBpZiAo
Z3ByRm9yT3BlcmFuZChvd25lcikgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVy
R1BSID0gZ3ByRm9yT3BlcmFuZChvd25lcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
b3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIG93bmVyR1BSID0gb3duZXJW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBv
d25lckdQUik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJl
Z1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsK
LSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5U
eXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwob3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwot
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNv
cmQ7CisgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUg
dGhpcy4KKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2ls
ZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJh
cnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2UpCisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChv
d25lck5vdENlbGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZh
bHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9k
ZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8g
T09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFu
Y2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQg
Y2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBj
YXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0
ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAt
IE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxl
bnQgZmlsbAorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25h
bDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5k
KHZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIo
b3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2
YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwog
fQogCkBAIC0xMjcxLDExICsxOTIyLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5h
bF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSks
IHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VU
ZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9w
ZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zm
c2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVU
b3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMjg1LDEwICsxOTUxLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgp
KSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAq
dGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBL
bm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOwor
CisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6
b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZSB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9u
Kik7CkBAIC0xMzg1LDggKzIwNjQsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQog
ewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW47Cisg
ICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNj
cmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFu
Y2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlvbmFsPFNpbGVu
dFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNw
aWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
IH0KIApAQCAtMTQwNCw2ICsyMTAwLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJD
aGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNDY5LDYgKzIxNjcsOCBAQCB0ZW1wbGF0ZSB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxz
ZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9w
X3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBOb3REaXJlY3QgJiYgT3A6Om9wY29k
ZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5o
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0K
IAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAg
VCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBU
JiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJp
dmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVn
aXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBA
QCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BT
PworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0
aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1w
bGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+
bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDEw
IEBAIHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpy
ZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICAvL09wdGlvbnM6OnVzZURGR0pJVCgp
ID0gMDsKKyAgICAvL09wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOworICAgIC8vT3B0aW9uczo6dXNl
TExJbnQoKSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRh
dGVERkdFeGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlT
dHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2JhYmlsaXR5
LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0dGVy
c09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51bSBPcHRp
b25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOSBAQCBKU1ZhbHVlIG51bWJlck9mREZHQ29tcGls
ZXMoSlNWYWx1ZSB0aGVGCiB7CiAgICAgYm9vbCBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0g
ZmFsc2U7CiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQo
KSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOyAvLyBPT1BTCisKICAgICBpZiAoIU9wdGlv
bnM6OnVzZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VCYXNlbGluZUpJVCgpIHx8ICFPcHRpb25zOjp1
c2VERkdKSVQoKSkKICAgICAgICAgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IHRydWU7CiAj
ZWxzZQpJbmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNp
b24gMjY3NDM1KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRl
c3RSdW5uZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlv
biwKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51
bWJlck9mREZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAg
ICAgcmV0dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAgICAg
IC8vIEVtdWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0
aWVyaW5nIGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQorICAg
ICAgICAgICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50ID0g
bWFwLmdldChmKSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIG1h
cC5zZXQoZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsK
KyAgICAgICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4
dE5ld0NvZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3Vs
ZEJlKHRoZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUu
cHVzaDsKICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlv
bn0pKQorICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAg
dmFsdWVzLnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7
CiAgIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBA
IGZ1bmN0aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0
cykKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxl
ZChhcmd1bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3Rh
cnQgOiAwOwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416177</attachid>
            <date>2020-12-14 11:20:23 -0800</date>
            <delta_ts>2020-12-14 14:10:12 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>472796</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNjc0
MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI2NzQzNSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw1ICsyMSw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDUgKzIyLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI2NzQzNSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw1ICsyOSw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw1ICsyMSw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw1ICsyNCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjY3NDM1KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI2NzQzNSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNjc0MzUpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjY3NDM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY0NCw5ICsxNjQ0
LDkgQEAgbGV0IHJ1blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsK
IGxldCBydW5XYXNtID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1
bk9jdGFuZSA9IGZhbHNlOwotICAgIHJ1bkFSRVMgPSBmYWxzZTsKKyAgICBydW5BUkVTID0gdHJ1
ZTsKICAgICBydW5XU0wgPSBmYWxzZTsKICAgICBydW5SZXhCZW5jaCA9IGZhbHNlOwogICAgIHJ1
bldUQiA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDI2NzQzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcs
NiArMzU3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFVuaGFuZGxlZFJl
amVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbklzREZHRW5hYmxlZChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiBz
dHJ1Y3QgU2NyaXB0IHsKICAgICBlbnVtIGNsYXNzIFN0cmljdE1vZGUgewpAQCAtNjM5LDYgKzY0
MCw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJl
ciIsIGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiaXNERkdFbmFibGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGlm
IChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkp
IHsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1
c3RvbSA9IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBudWxscHRyLCB0ZXN0Q3VzdG9t
QWNjZXNzb3JTZXR0ZXIpOwpAQCAtMjU2Niw2ICsyNTY5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Bc0QKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91
YmxlTnVtYmVyKG51bSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uSXNERkdFbmFibGVkKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikKK3sKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQor
CiAvLyBVc2UgU0VIIGZvciBSZWxlYXNlIGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNy
YXNoIHJlcG9ydCBkaWFsb2cKIC8vIChsdWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVs
ZWFzZSBhbmQgRGVidWcgYnVpbGRzIHNvIGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJh
dGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9i
amVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4
IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVz
LmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0Mgewog
CiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpAQCAtMjY5LDcgKzI3MSw3
IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIH0KIAogdGVtcGxh
dGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
cEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9u
cywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVz
TWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpk
dW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rp
b25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVtcEhlYWRlcihibG9jaywg
aW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBAIHZvaWQgQ29kZUJsb2Nr
Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQucHJpbnQoImJiIyIsIGJs
b2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0aW9uc0F0SGVhZCkgewor
ICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFkOiBbIik7CisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChibG9j
ay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAg
ICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGlj
dGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBT
cGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAgICAgICAgICBh
dXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxlYWRl
ck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudEluc3Ry
dWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw3ICsxMDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENvZGVCbG9ja0J5
dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01h
cCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlv
blN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmls
ZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBzdGF0aWMgdm9p
ZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3Jh
cGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJl
ZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRh
dGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAgdm9p
ZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkocmV2aXNp
b24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAogCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9pZCBkdW1wKENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
T3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9uQXRI
ZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKKyAgICB2b2lkIGR1
bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+
Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmls
ZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrVHlw
ZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRoaXMsIHNwZWN1bGF0aW9u
QXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3
ICsyMzMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAg
SUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAg
ICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAg
Q29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3Ry
dWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgs
IFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYm
IGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAtMjQ0OCw2ICsyNDQ4LDggQEAg
dW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVzKAogewogICAgIEFTU0VSVChK
SVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAgICBpZiAoT3B0aW9uczo6dGVz
dFRoZUZUTCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAg
ICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGls
ZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2
NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNTExLDYgKzUxMSw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2Zp
bGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0
YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQorewor
ICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAg
ICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlw
ZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFu
ZCkgPT0gc2l6ZW9mKAogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0Nh
bGxlZSA9IGZhbHNlPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3Jh
Z2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRW
ZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsx
NDQsMjMgQEAgcHVibGljOgogCiAgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXpl
X3QgbnVtVG1wcykKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBz
aXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDAp
CiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVt
TG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMp
CiAgICAgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyAr
IG51bVRtcHM7CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxz
ICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFs
dWVzLmdyb3coc2l6ZSk7CiAgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pCiAgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQog
Ci0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxv
Y2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNp
dCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3Qg
bnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fs
cyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAg
IHsKLSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1U
bXBzKTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBu
dW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVz
LmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFu
ZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9u
dW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxv
Y2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90
aGVyLm51bWJlck9mQ29uc3RhbnRzKCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90
aGVyLnNpemUoKSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3
MiwzMyArMTc2LDUxIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9j
YWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZU
bXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMo
KSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBj
b25zdCB7IHJldHVybiBtX251bUNvbnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0g
bnVtYmVyT2ZMb2NhbHMoKSAtIG51bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9
CiAKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxl
X2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAg
IHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlkeCA8IG51bWJlck9mVG1wcygpKTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJn
dW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwog
ICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1
cm4gaWR4OwogICAgIH0KLSAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAg
ICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90
IGNvbnN0YW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
ZHggPCBudW1iZXJPZkNvbnN0YW50cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1w
KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29u
c3RSZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRl
eChpZHgpXTsgfQogICAgIAogICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1
cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1
bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlk
eCldOyB9CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsg
cmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENv
bnN0UmVmVHlwZSBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAg
ICAKICAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2Fs
SW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25z
dGFudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9
CisgICAgQ29uc3RSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5k
S2luZCBvcGVyYW5kS2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyAr
MjcwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZB
cmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1Np
emUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0
YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2Nh
bHMgPSBudW1iZXJPZkxvY2FscygpOwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJl
ck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJP
ZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJP
ZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdy
b3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6
VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1
IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVy
KCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjYWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAg
ICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBjb25zdGFudEluZGV4KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1
cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDgg
KzM0OCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQor
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0
ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRl
cigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAg
ICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFu
dChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJh
bmQudG9Mb2NhbCgpKTsKICAgICB9CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1i
ZXJPZkNvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVy
YW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09w
ZXJhbmQoT3BlcmFuZCBvcCkgY29uc3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwot
ICAgICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3Vt
ZW50cygpKQorICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
bmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1w
KGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAg
ICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZDb25zdGFudHMoKSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJG
b3JDb25zdGFudChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2Fscygp
KTsKKyAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYg
KGluZGV4ID09IGNhbGxlZUluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQg
dmFsdWUpCkBAIC0zOTMsMTAgKzQzNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9u
dW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2Nh
bHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBt
X251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxv
Y2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBh
bmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25l
ZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
c0lubGluZXMuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBA
IGlubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnBy
aW50KHZpcnR1YWxSZWdpc3RlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQg
T3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgor
dm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1l
bnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJh
bmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRt
cCh0bXBJbmRleCksIGNvbnRleHQpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0Nh
bGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQo
Y2FsbGVlKCksIGNvbnRleHQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3Bl
cmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIp
OwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBh
cmd1bWVudEluZGV4LS07KSB7CkBAIC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9
CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiY2FsbGVlIiwgIjoiLCBjYWxsZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVj
dWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBi
b29sIGlzSW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2
YWx1ZSAmIH5TcGVjSW50MzJPbmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAm
JiAhKHZhbHVlICYgflNwZWNCeXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90
SW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFs
dWUgJiYgISh2YWx1ZSAmIFNwZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjY3NDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgsOCArMTE4LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMg
dGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0
IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rl
ci5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3Mg
VmlydHVhbFJlZ2lzdGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZy
aWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZm
ZmZmOwogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAh
PSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAg
Ym9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVu
dChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXND
b25zdGFudCgpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xv
Y2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5k
OyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1
cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0
aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQg
KyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25z
dGFudFRvT3BlcmFuZChpbnQgY29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0
ZXI7CiB9OwpAQCAtMTMzLDQgKzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm8KICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkK
K3sKKyAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRU
b09wZXJhbmQoY29uc3RhbnRJbmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24g
MjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5
dGVjb2RlSW5kZXggYnl0CiAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMs
IG51bVRtcHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAs
IGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcywgMCwgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291
bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
Miw3ICszNTIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4K
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE1IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNp
bmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgi
CiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIkpTR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5j
bHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzUyLDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhO
b2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBK
SVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwpAQCAtNjAsNiArNjUsODMzIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29u
ZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1l
OwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9w
ZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAo
YXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUo
Ynl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
cHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91
bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1f
cHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3Vt
ZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0
aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Rp
cmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BU
b1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5t
X3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRl
cmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4
dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JO
ZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9u
ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVl
LCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2Fs
bDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRl
TmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5h
bF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Rv
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9t
X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
OworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xo
cyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jo
cyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3co
KSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3Vi
bGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFO
KSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxh
dGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBk
byBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwg
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7
CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7
CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRh
dGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlm
IChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50
QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAg
ICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9t
Tm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVj
RG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91Ymxl
UHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJp
Z2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Jp
Z0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8
T3BTdWI+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9tdWwpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAg
ICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3
ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURv
dWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJs
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2Rl
TnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJl
IGJ1aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5n
IGludDMyIHJlc3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2ln
bmVkPigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsK
KyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5w
dXQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxl
LmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1
bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0
aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNl
dFR5cGUoZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsK
KworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAg
ICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNl
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5k
bGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShi
eXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlw
ZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlw
ZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBT
cGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlm
dDoKKyAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0
byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5t
X2xocyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7
CisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxl
KGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZv
cihieXRlY29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAg
YXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wQ2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOwor
ICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hv
dWxkIGRvIGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMg
aWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisg
ICAgICAgICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6
IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQor
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHBy
b2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAg
ICAgICAgIHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmlu
YWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6Cisg
ICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2
ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3By
b21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlz
ZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0
cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNw
ZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4
cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5j
RXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19h
c3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
YXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNF
eHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93
aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRo
U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5n
dGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVy
aWNfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2Vu
ZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBT
cGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVt
ZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVU
b3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+
KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1
bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRv
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRf
Y291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3Vu
dD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFk
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0Nl
bGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBP
YmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmlj
dGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
QmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
b2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29i
amVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVj
dD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9p
c19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJ
c0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXND
b25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUu
bV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29k
ZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBz
cGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3Zl
cnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5
cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
c19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJ
ZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9p
ZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBj
YXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAg
IGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ug
b3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgor
ICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNl
IG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19z
dGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBj
YXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3Bf
cHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAg
ICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRy
OgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFs
c2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBj
YXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251
bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBv
cF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAg
IGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAg
IGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBv
cF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoK
KyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBj
YXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93
OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAg
IGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAg
Y2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoK
KyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dl
dHRlcl9ieV92YWw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJh
dG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bf
d2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9s
b2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxp
bnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAg
ICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2Fz
ZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21f
c2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90
cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBj
YXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2lu
dGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3Jf
ZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9v
c3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xv
b3BfaGludDoKKyAgICBjYXNlIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgorICAgIGNhc2Ugb3Bf
Y2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAg
IGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVy
YXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkK
K3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJs
b2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhl
YWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRI
ZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05v
bmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJs
b2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShb
Jl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1f
Y29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dy
YXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAg
Zm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9m
aWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAg
IG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0
aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmci
LCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxl
KCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBk
YXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRb
MF0uY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8g
eworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBv
cmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJz
ZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBE
RlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBp
bnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRl
ZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNo
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDog
Km1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0
aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5pc0Vu
dHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpLnB0cigp
OworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1
bXAobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9u
c0F0SGVhZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdD
YWxsZWVGdW5jdGlvbikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02
Nyw2ICs4OTksMTIgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQog
ICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwog
fQogCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOwor
ICAgIHJldHVybiBtX3VzZUxPTDsKK30KKwogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDog
SlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmlu
dGVycHJldGVyKQpAQCAtNzYsNiArOTE0LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7
CisgICAgbV91c2VMT0wgPSBPcHRpb25zOjpmb3JjZUxPTCgpOwogfQogCiBKSVQ6On5KSVQoKQpA
QCAtMTM3LDExICs5NzYsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgp
CiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09Q
Q09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAog
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisg
ICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZv
ckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNlTE9MKCkgJiYgZHN0Lmlz
VmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisg
ICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAgICB9IFwKICAgICAgICAg
fSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAg
LTE1NiwyNiArMTAwMSwzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkK
IAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBc
Ci0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisg
ICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAog
ICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFt
ZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQp
IHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkp
OyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsg
XAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9w
XyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVu
Y3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwog
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9w
YWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxOCAr
MTA4Miw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAg
ICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5z
dHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6
ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBz
dGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewot
ICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAg
dW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUg
dGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2lu
dCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9n
cmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNp
emUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAg
ICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5k
ZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5p
bmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNv
ZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwotICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsg
bV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
Y3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1f
Y3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdh
bGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJy
ZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVu
dFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBo
LT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0Vu
dHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3By
ZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAg
IGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZp
cnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBp
IDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5k
W3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9j
dXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwor
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFy
dEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92
ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJs
ZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3Mg
ZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9y
Qnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
LmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCkBAIC0yNzgs
NDYgKzExOTUsNTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxv
Z0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7
CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklO
RV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVy
KQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0
eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rp
b24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChz
cHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19P
UCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJh
dG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3Bl
Y0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigp
Lm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVh
bikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigp
Lm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2Jq
ZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19P
UChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RP
dGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRv
cCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJl
Z2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dp
dGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+
KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0
YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVf
U0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVj
Tm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3Rl
cigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9y
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5l
d19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdf
YXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCku
bV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAg
ICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVk
QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2Rz
dCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1l
bnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1
dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0
LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VP
YmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9h
ZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTMyMiwxMSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9z
dXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9l
bmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAg
ICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAg
ICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc3
LDYgKzE0MDUsMzkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAg
IGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAg
ICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9ub3A6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3By
b2ZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2Rl
SUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9j
aGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wp
CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisK
ICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
QXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAg
ICAgfQpAQCAtNTE1LDEyICsxNDc2LDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNh
c2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5z
aWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXIt
PnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAg
ICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisg
ICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC01
NzksNyArMTU0Miw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hl
Y2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9u
ZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTcsNiArMTU1
OSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzMsMTUgKzE1OTgsMTggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6
ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRv
Lm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQg
aW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1h
bnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BT
OgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nh
c2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3Qg
ZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9S
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEp
LT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdl
bi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQ
cm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3Vs
ZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
c2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAt
Nzc0LDYgKzE3NDIsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21w
aQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAg
ICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBmb3IgKGF1dG8m
IGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0
LmZpcnN0OworICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgIGp1bXBz
LmxpbmsodGhpcyk7CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0
cy4KKworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJ
bnQ6OmdldENvZGVQdHI8T1NSRXhpdFB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAg
ICAgLy9pZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIC8vICAgIGRlc3Rp
bmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3Jf
ZXhpdF90cmFtcG9saW5lKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5h
dGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CisKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIp
OworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAg
ICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJU
YWcpOworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKQEAgLTEwNTgsNiArMjA0OCw3MTMgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29t
cGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3Rh
bERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVj
dWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtp
bmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZp
cnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9i
eXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNv
bmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVy
U2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlz
CisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRv
IGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9r
ZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNl
dCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5r
Ojp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJl
ZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxv
d2VkLmFkZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJl
Z2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhp
cworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhv
a2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0
ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0
KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9P
UFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50
IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHBy
b2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09Q
UzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0
PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1
bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAg
ICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgp
Cit7CisgICAgLy8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmllci4g
QnV0IGdlbmVyYWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBmaWd1
cmUgc29tZXRoaW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1f
c2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAv
LyAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkK
K3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAg
ICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAg
ICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9j
YXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1
ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkg
eworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25z
aXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUu
CisKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYgKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
cmVnVmFsdWUub3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAg
ICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9w
ZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlk
RlBSUmVnOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIGlz
QWxsb2NhdGVkL2xvY2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAvLyBo
YXZlIGNvZGUgdGhhdCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAgICAg
IC8vIC0gc3BpbGxGb3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAgICAg
IC8vCisgICAgICAgIC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2UgdGhl
IFZhbHVlT3BlcmFuZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxvY2F0
aW5nIHRoZSByZWdpc3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1wLgor
ICAgICAgICAvLyBPdGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNhbGxz
IHVubG9jaygpLCB3ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQgc3Rh
dGUuCisgICAgICAgIHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IGZhbHNlOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgp
Cit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAg
ICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVz
LmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9i
YmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4o
KQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBs
YW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFu
ZCkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpCit7CisgICAg
Ly8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29y
ZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBhcHBlbmRJZk5lZWRl
ZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAg
ICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3Rl
cnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAg
cmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVz
ZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVy
cywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRl
ckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCBy
ZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDAp
OworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpLCByZWNv
cmQuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVn
VG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFu
JiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzYXZlUGxhbikgeworICAgICAg
ICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAgIG5v
cCgpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAg
ICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAg
ICAgIG5vcCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3Jl
RnJvbVNhdmVQbGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZl
UGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFy
ZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7
CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JP
cGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50
MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQg
SklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJv
eERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAg
IHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFu
ZCk7IC8vIE9PUFM6IFZhbGlkYXRlIHRoYXQgZm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykg
dGhhdCBkZWYsIHdpbGxEZWYgd2FzIGNhbGxlZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5k
KTsKKyAgICBhc3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJh
bmQpOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxv
Y2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7Cisg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgp
KQorICAgICAgICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJ
VCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQ
UlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgp
OworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVt
cCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAg
bV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0
KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQor
eworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFs
bG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7
Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJ
VDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3Bl
cmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKwor
R1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7
CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAg
ICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0
LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9w
ZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxP
cGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpD
ZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2Ugewor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dw
cikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQp
KSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2Vs
bChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29w
ZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RD
ZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAg
R1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVy
YW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAg
ICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1f
aml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAm
IFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5i
cmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRl
clR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQor
CitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQor
eworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1
ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9
CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0
Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIg
PSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIp
OworCisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisK
KyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91
YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBG
UFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFu
ZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQ
UlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJh
bmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAg
ICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAg
ICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVy
YW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAg
eyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQ
UigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBl
LCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFu
ZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShn
cHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVy
YW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVk
ZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVn
VmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAg
ICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2Vk
RlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3Jh
dGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47
Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BS
KSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUp
KTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklU
OjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVj
Q2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2
YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9u
bHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0
ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJ
R0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisg
ICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAg
IHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3Bl
cmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0lu
dDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIp
OworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7Cisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsK
KyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRl
KCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJl
bnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCks
IDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51
bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0
ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29k
ZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50
U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBvcGVyYW5kLCAiLCAi
LCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0ZSgpCit7
CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAgZm9yIChhdXRvIHJl
ZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4o
cmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChh
dXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRh
TG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUg
IkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgog
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIK
ICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVC
YXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJ
bmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7
CkBAIC0xMDEsMTUgKzEwNSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBT
bG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAg
ICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNhdmVQ
bGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcsIFZpcnR1YWxSZWdpc3Rlcj4+OworCisgICAgc3Ry
dWN0IFNpbGVudFNwaWxsUmVjb3JkIHsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAg
ICAgIFJlZ2lzdGVyU2V0IHNwaWxsZWRSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNr
U2l6ZUZvclNwaWxsOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBT
bG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0LCAxPiBqdW1wczsgLy8gVXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZv
ciB0aGluZ3Mgd2l0aCBjaGVja3BvaW50cywgd2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQg
b2YgSnVtcExpc3RzCisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBo
YXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAg
ICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAg
VmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRp
b24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRj
aFJlY29yZCB7CkBAIC0xODMsNiArMTk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xB
U1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2lu
ZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQ
YXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0xOTAsMTIg
KzIwNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
ID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRC
eUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwg
b2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9y
IHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2Vt
ZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2
OwotCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgo
MCkpOwogICAgICAgICB+SklUKCk7CkBAIC0yNjMsNiArMjc0LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAg
ICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9p
ZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9i
YmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsK
KwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4
Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMwMCw5ICszMjUsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAK
LSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVt
cCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAg
ICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93
Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRK
dW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGlu
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMxMCw3
ICszMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6
b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1
Y3RfdmFyYXJncwpAQCAtMzI3LDcgKzM1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zMzcsNyAr
MzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENv
bXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBl
IHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQp
OworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BF
cVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJp
ZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hv
dWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtMzUwLDggKzM3
Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRo
ZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJs
ZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJik7CisgICAgICAgIHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcgdmFsdWUgPSByZWdU
MCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcgdmFsdWUgPSByZWdUMCk7CiAgICAgICAgIHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFs
dWUsIHZvaWQ+CkBAIC00NzUsOCArNTAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24s
IERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNDg0LDExICs1MTEsMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rp
b25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRp
b24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVj
dGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAg
ICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOwor
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBs
KGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpA
QCAtNTEyLDkgKzU0OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
aWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTc2LDcgKzYxMiw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9l
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9t
b2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biopOwpAQCAtNjQzLDc3ICs2ODEsODAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2
b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29s
IGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRH
UFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2
ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAt
NzI4LDggKzc2OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAg
IEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NDIsMzgg
Kzc4MSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRG
dW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+
Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
LCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2Fz
ZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAg
ICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlv
biwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBs
aW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJv
bS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZv
aWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwot
ICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdp
c3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAg
ICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRl
Y29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBz
bG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MjUsNiArOTQ0LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdh
dGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTkzNSw2
ICs5NTcsMjUyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50
ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25s
eSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5n
LiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
RlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJv
dmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAg
ICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVy
YW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
OworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3Ry
dWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VMT0wpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR1BSUmVnJiBncHIg
PSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52
YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQg
PSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAg
ICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3By
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9y
T3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFu
ZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcg
ZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnBy
Rm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3Bl
cmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVD
ZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1
bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJs
eSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BS
UmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQ
UlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3Rl
ciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJS
ZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAv
LyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0
IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lk
IHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAg
ICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2
b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAg
ICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0
ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0
ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7
CkBAIC05NTMsNyArMTIyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVt
cFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUlu
ZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAg
IFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxT
d2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5z
aWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC05OTAsNiArMTI1OCw4MyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAg
ICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgewor
ICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQg
dmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAg
ICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3Qg
QWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdw
ciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAg
ICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAg
ICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0Nv
dW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRl
ZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAg
IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJl
Z2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhl
ci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVz
LnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNb
aV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdp
c3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRl
OworCisgICAgICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZv
aWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRC
bG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGUsIHRydWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dF
bnRyeT4gbV9leGl0TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4g
bV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNl
c3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wg
bV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRl
Y29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4s
ICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFs
c2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xv
d0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vu
c2lnbmVkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFVuc2lnbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihM
ZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCByZXN1bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMy
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVnVDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
b3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4g
dGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGlt
bWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5n
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZw
cigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IFZhbHVlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKQEAgLTIyOSwxNyArMjgxLDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXAoY28KIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAg
IEdQUlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhT
ID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBv
cDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSksIHRhcmdl
dCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGdldFJIUygpOwog
ICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9w
MWltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0
aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKICAgICB9CiB9CiAK
QEAgLTI1NSw0MiArMzMzLDg4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25z
dCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJl
ZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBv
cDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZd
IHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHQ7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsK
KwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBp
bnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBjb21w
YXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDApOworICAgICAgICBj
b21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJlc3VsdEdQUik7CiAg
ICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGdldFJIUygpOwogICAgICAg
ICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBj
b21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDAp
OworICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9w
MWltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25k
aXRpb24sIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAg
Z2V0UkhTKCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOwogICAgIH0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0
cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdw
cigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8g
ZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNl
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBm
YWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8g
V2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNs
b3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQg
aW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTI5OSw4ICs0MjMs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI1LDggKzQ0Nyw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTAsMTIgKzQ3MCwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBK
dW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OCw5ICs0
ODcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZh
aWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgwLDEx
ICs0OTksNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBl
bnN1cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9u
IHByb3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFi
c29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3Jj
RHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJ
bnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0z
MigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91
YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShz
cmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBz
b21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7Cisg
ICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMzkyLDExICs1NDcsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVj
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkg
eworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1
bHRGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEu
MDsKKyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBG
UFIpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBGUFIsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BS
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlu
cHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAu
ZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAg
ICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAg
ICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVn
cyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qp
OworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBP
UF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDYsNTQgKzYwMyw4
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMg
YXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAg
PT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7
CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJl
Z2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdU
NCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBH
UFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4
KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAg
IGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0
aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAg
ICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hU
ZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBl
YXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxo
c1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlz
LCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwg
ZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJo
c0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJo
c0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAK
LSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1
YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAg
ICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVX
b3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOwor
ICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJ
bnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
bW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQorICAgIGJveEludDMyKGVkeCwgSlNW
YWx1ZVJlZ3MgeyBlYXggfSk7CiAKLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjpl
bWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBlYXgpOworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
ICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBT
cGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNC
aWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUoWDg2XzY0KQpAQCAtNDYzLDcgKzY5NSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBE
b3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMy
T3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDczLDYgKzcwNSw3IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChp
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3Rl
ciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBl
bWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjEsMTUgKzc5NCwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlv
biAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3Ry
dWN0aW9uLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9u
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wg
aW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjMsMTMgKzk1NCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxk
IGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUg
b3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVn
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9w
dGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2Fz
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9y
PgpAQCAtNzQwLDE4ICs5NjksNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgo
Y29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwot
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBAIC03NTksMzMgKzk3Niwx
MDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgICAgICBs
ZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKICAg
ICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQogICAgICAgICByaWdodE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KICAgICBSRUxF
QVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRU
ZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7
CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7Cisg
ICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAg
ICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAg
ICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAg
ICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlm
CiAKLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKIAorICAgIFNuaXBw
ZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5l
bmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAgICAgaWYgKHByb2ZpbGlu
Z1BvbGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9maWxpbmcpCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1bHRSZWdzLmdw
cigpKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIo
KSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNw
ZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIp
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0g
U3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3Vs
dElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkp
IHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0K
KworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1
bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYg
KHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJP
bmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0lu
dDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKICNlbHNlCkBAIC04MDIsNyArMTA5Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChj
b25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bj
b2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0
UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC04NDgsMjAgKzExMzgsNiBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QyOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKLSNlbHNlCi0gICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlmCi0KICAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQ7CiAKQEAgLTg3MiwyMSArMTE0OCw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgp
IHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVn
IHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBz
Y3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGlu
IGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2Ny
YXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNl
bHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQ
UlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAg
ICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywg
cmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlw
cGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQ
UjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBM
aXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0
UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
ICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBT
cGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
cmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMSwxOCArMTIzMyw1NCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjpl
bWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJ
VEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAg
ICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsK
KyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJl
c3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUu
bV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92
ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1p
emUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVu
Y3Rpb24+CkBAIC05MjMsMTUgKzEyOTEsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0
cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNp
bmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdp
c3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlz
LCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBm
cm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBT
aW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVn
aXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQwLDE5ICsxMzI4LDIyIEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0
aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
KTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjIsNyAr
MTM1MywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAg
fSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4K
QEAgLTk3MywzOSArMTM3MSw4MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NF
UlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyBy
aWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1w
RlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBm
cFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3Qo
KSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5
cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAg
ICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsK
KyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0K
IAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFu
ZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29u
c3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBS
ID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5m
cHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0
RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0
KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6
aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0
b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAg
bWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5k
LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9y
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAg
ICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVy
YW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJh
bmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0
YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50
KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFy
dCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTQsMTcgKzE0NTUsMzQgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVD
b2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRl
KTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7
CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAg
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAg
ICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9
IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM0LDExICsxNDkyLDIwIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRp
ZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5n
cHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSks
IFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxP
cCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9u
Pgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
IHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlv
biktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFi
ZWwoKTsKQEAgLTEwNDcsOCArMTUxNCw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mg
c3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg0LDcgKzE1NTEsNyBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1
bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0
aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmls
ZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0
YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudElu
c3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwpAQCAtMTA5NCwxNiArMTU2MSw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElD
U2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7
CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LnNlY29uZCgpKTsKIApAQCAtMTExNCwxNSArMTU3MSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjpp
c1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2Ug
aWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
IHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdw
cigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
KyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKQEAgLTExNTUsMjMgKzE2MzMsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgot
ICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25k
KCkpOwogCkBAIC0xMTg3LDYyICsxNjQ4LDIxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3Ay
KSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFu
dERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5k
LmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyBy
aWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1w
RlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmln
aHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBG
UC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAg
cmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBs
ZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAg
IGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7
CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVn
VDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9
IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9w
ZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAg
ICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIs
IGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAg
ICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgp
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVz
dWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBB
U1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
ciB8IFNwZWNCaWdJbnQ7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2Zp
bGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVn
WmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
UmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJl
c3VsdFRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhz
R1BSLCBsaHNGUFIpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQ
UiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRGUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2hUZXN0MzIo
WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsK
KyAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNl
X2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVs
T3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9j
b2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1
YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50
QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1
YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0
aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICB3aWxsRGVmKGRzdCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9j
b2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
ICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2
ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAg
ICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0g
Q2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwor
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRy
OwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2Nv
ZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBA
IC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzcsNDQgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1
Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsK
KyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
KTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29u
c3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYsNiArMzg5LDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAg
ICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlw
bGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVh
Y2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1
cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhlcmU/CisKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rp
b24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICBKdW1w
IGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmlj
KSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKIAog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworCisgICAgSnVt
cExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBuZXh0Q2hlY2twb2lu
dFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7
CisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAq
dGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAgPSByZXN1bHRUZW1w
LmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1QwID09IHJlZ1QwKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAgcHJv
dmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzQsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAgICAg
fSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBp
dCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVj
b2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwg
ZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdU
MCk7CiAKQEAgLTQ3NiwzNiArNDk5LDQzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAgIHsK
LSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAg
ICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hlY2tw
b2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogCi0g
ICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPm5leHQuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0
ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
ZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25l
LCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAK
LQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25l
ID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZh
bHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93
UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMu
YXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAorICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKQEAgLTUxNSwxMCArNTQ1LDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNl
LmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JO
ZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVy
YXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRl
Y29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0u
bGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmpl
Y3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcg
KzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9
CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNs
b3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6Ogog
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwor
ICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0
IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNl
CkBAIC0xNTgsNiArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0
aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZWxzZQpAQCAtMTY2LDI1ICsxNjgsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChp
dGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhh
c0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRl
Y29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA2LDI3ICsxODksMzYgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0
aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1w
KQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAg
CisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVj
b2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1f
c2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxh
c3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQo
SnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1
bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBS
ZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0g
ICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1
bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHku
Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVj
b2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisg
ICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTMw
OSwxMSArMzAxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW4K
ICAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CiAKLSAgICBjb25zdCBSZWdp
c3RlcklEIHZhbHVlID0gcmVnVDA7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBjb25zdCBS
ZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7CiAjZW5kaWYKQEAgLTMzOCwxMSArMzI5LDExIEBA
IGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhKQoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlZykKIHsKICAgICBpZiAo
IXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3Io
bWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCByZWcpOwogfQogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNl
bGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkK
QEAgLTM5MywxMSArMzg0LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5k
Q29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zv
cihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIs
OCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
ZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3
NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
cmV2aXNpb24gMjY3NDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0
cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhl
cmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRo
YXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkg
JiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBh
bGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmpl
Y3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3Rl
cklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJl
Z1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAg
ICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1w
LT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVn
ID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAg
ICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3Qs
IFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUu
bV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5
dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVy
YW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOwor
ICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0
b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhh
c0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBj
b25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VH
UFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJv
bC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
aW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5m
dW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JH
UFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRI
YXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91
bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90
b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2
YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBm
b3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2Ug
Y2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdU
MSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVz
dCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9s
Lmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFs
dWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0g
ICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwK
LSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdU
MSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwot
ICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAg
IE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBw
cm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBH
UFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJv
dG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsK
KyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAg
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJv
dG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nh
c2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAu
ZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7Cisg
ICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVl
R1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3By
KCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRz
IChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMu
CisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRv
bmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0
LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAg
IC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0g
dGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4K
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAg
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVl
CisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7
IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAg
ICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5k
ZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygp
LT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNv
bnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNf
dW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0g
ICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdU
MCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29t
cGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAg
ICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBp
c0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwg
dGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVz
dWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDAp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihF
cXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVs
bChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRl
c3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisj
ZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNl
bmRpZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwy
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVy
bywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdU
MCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI4LDU2IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJp
Z0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsK
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmso
dGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAg
ICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBp
ZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBp
c05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MzMzLDE4ICs2NDMsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3Ry
dQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisg
ICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21w
YXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENl
bGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RU
eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJl
dHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
QEAgLTM2OSwxNSArNzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25z
dCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAg
IGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUp
KSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChz
cmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAg
IGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTM4Niw1MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+
KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChz
cmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9
IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
ICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNw
ZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVj
U3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAg
ICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5j
dGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25h
bWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRG
dW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0
ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1
ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFk
ZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJ
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMg
YSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFu
IHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1
dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1
ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQu
Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJl
Z1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhl
IHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAg
ICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9y
IDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRo
ZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBi
YWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9j
b25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
c3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0z
MigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBo
YW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNj
cmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAg
ICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJl
Z1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
Owordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9u
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlv
bikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24g
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUg
bW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJU
ZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gy
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAg
RlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTc1LDEyOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisK
KyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBh
dXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisg
ICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0g
dW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRH
UFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgewor
ICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAg
ICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3Jh
dGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9
IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAK
LSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0g
dW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNO
b3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwNiwyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgewor
ICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0LDI2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNTE1LDY1ICsxMTY1LDMxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0
cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1
ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEp
LCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBU
cnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwor
ICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwor
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlz
KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBD
b21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHBy
b3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRH
UFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVj
dWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9
IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERv
dWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBp
ZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkp
IHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
cmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMp
KSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgor
CisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhz
R1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
IH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxo
c0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwg
cmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2Ugewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
KyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9y
ZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRv
bmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0ODgsMTQ2IEBA
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICgh
dmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDog
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAg
SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3Vs
dEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwg
d2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBk
b25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290
byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAg
IC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxk
IGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVt
YmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25s
eSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdU
NSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBy
ZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0
IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAg
IGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQg
dG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmlj
dEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29s
ZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKwor
I2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1
bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAg
cmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwp
CisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVt
ZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBi
cmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYg
d2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmlj
ayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8g
aXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAg
ICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUg
aXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lz
ZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xv
dyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1Zh
bHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYg
Ym90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAot
ICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxl
ZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5s
aW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNv
dmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQo
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7
CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVz
dCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAg
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsK
KyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNjc0LDY4ICsxNjQ1LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1w
KGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVF
cXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkg
eworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNG
UFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQg
PT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJp
Z2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwot
ICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhl
IDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQz
Mi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAv
LyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVF
cXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWws
IHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdU
MSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkg
ewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGlu
ayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElm
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xv
d1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2Vu
OworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAg
IGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAg
ICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQg
d291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNo
SWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFu
IEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxl
YXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAg
ICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMp
OworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2
NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1
YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7
CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
YXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisg
ICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBk
byBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ug
b25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAg
ICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAo
dG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
b3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAor
ICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzg2LDIyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9w
U3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1l
cmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1
dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOwor
I2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDAp
KTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChz
cmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJl
Z1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJp
bmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0g
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
ICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAg
ICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7
IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0
eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDYzLDIzIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3Rv
cmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBl
KGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAg
IEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
KyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTkwNSw5ICsyMDk0LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7
CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BS
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1t
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIxMTksMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0g
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTkzOCw5MyArMjE0MywxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhj
b25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGlu
ZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmlu
Z1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4o
KTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBs
b2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAg
ICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4o
Ynl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmso
dGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpl
cU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMx
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwg
T3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5v
dEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAg
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIo
Y29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21w
YXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51
bGwpLCByZXN1bHRHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQot
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29t
cGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3Zv
aWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAg
IHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbElt
cGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhh
dmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtl
IEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2Ug
aW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBv
aW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3Qg
bGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0g
bV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3Vu
dDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAg
IGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3Rv
cmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAg
ICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNw
ZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApA
QCAtMTAzNSw5ICsyMjk0LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2Nv
cGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAg
R1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3Bl
ID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKwor
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwg
c2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZT
Y29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVj
dE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzE4LDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAm
bWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9
IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFN
b2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1Rv
VGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRo
aXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8v
IE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5Lgor
ICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3Bl
Y09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihj
YWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAg
ICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRl
IHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAo
aXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
bG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9U
aGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNT
ZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVj
dDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2Fj
aGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQz
MihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzIzOTksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRG
dW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxl
ZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEw
NjgsNyArMjQwOSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0
CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxs
ZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5k
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVP
cGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVt
cDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0
b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAy
LT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAg
cmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVn
ID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxs
ZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxl
ZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDUxLDMzIEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJl
ZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAg
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rh
cmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAv
LyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRo
aW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMTE2Miw4ICsyNDk2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8v
IE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBl
IHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAg
Ly8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBl
bnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAg
ICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZElt
bTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0x
MTg3LDEzICsyNTI0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0
aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAt
MTIwNiwxMSArMjU0MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwor
ICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQg
d29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0x
MjMzLDEwICsyNTY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29u
cwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU3Nywx
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nh
c3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0
dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNTk4
LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9z
Y29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNF
eGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7
CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7
CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
KG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCAr
MjY2Miw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0
ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAg
ICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVH
UFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5k
aWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHAp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNzMyLDE5
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
c1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdj
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3NTMsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisK
KyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRl
bXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1w
LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJn
R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9m
aWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRl
eCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAg
ICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3ODYs
MzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJh
dG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JW
YWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFs
dWUgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2
ICsyODM1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNo
YWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg2NCw4IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBz
cGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsy
ODkxLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVt
cCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAK
ICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI5MDgsMTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAs
MzcgKzI5NDEsODIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJh
c2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
LQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0g
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0
KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5l
CisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIp
OworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90
PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAg
ICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2Ug
aXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1
dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MSk7CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGlu
ZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAg
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOwor
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0
dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwor
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgfQogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxp
bmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMwMjYsNTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdp
c3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1l
cmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBP
T1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVy
YXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxh
Y2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywg
ZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhU
ZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhH
UFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAg
IEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUlu
ZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAg
aW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQz
MlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3Vs
dEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzA4MCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsK
KyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BS
UmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAg
IE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3Bl
cmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsK
KyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAg
ICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7
CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwg
VGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNF
aWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNT
dHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzEz
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBl
TG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9F
bmQ7CkBAIC0xNjU4LDYgKzMxOTYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAg
IHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSBy
ZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRo
aXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzIxMyw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisg
ICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0
aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndl
IHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAg
LTE3MDIsMTEgKzMyNDYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29u
c3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJn
dW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdz
KHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1
bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0g
SlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xl
bmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSAr
MzI2Nyw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25l
ZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVt
cCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVt
UGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDAp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMy
KG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAg
ICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIo
bnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCks
IHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3Ro
LmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
cmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NzQ0LDQ5ICszMzE2LDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJ
bnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3Vt
ZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAg
YXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwog
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1Ro
YW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwg
cmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAg
ICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwg
cmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1
bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5l
ZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwodmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0s
IHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8
IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qy
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJU
KHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAg
ICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2
YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjc5LDggKzI3NSw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbElu
ZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01MDksNyArNTAzLDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZh
bEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93
UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxv
dyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU0Nyw4
ICs1NDAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC01
ODYsOCArNTc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwpAQCAtNjMyLDggKzYyMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjczLDggKzY2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzIyLDggKzcwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTc2Myw4ICs3NDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC0xMDQ0LDggKzEwMjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKQEAgLTEyMDEsOCArMTE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5y
ZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgPHd0
Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAor
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01MSw0OSArNTMsMTE3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAgIGlmIChtX3VzZUxP
TCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHBy
b3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZWdUMjsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAogICAgIGlm
IChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJ
Q01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2VsbDsK
KyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
YmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwu
aXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBw
cm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwg
U3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wp
KQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDIsMzkgKzE3Miw3MyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTIsNiArMjU2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2Vy
Q29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE0LDggKzQyMCwxMSBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3Rl
cnMuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdU
MSk7CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSks
IHB1dEtpbmQsIHByaXZhdGVGaWVsZEFjY2Vzc0tpbmQoYnl0ZWNvZGUpKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM0LDcgKzQ0Myw3
IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4g
Z2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDIsNyArNDUxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1
dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwpAQCAtMzUwLDEzICs0NTksMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxv
YWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAg
Z2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAg
ICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
KTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
KTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM3Miw0OSArNDgwLDEwNSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlk
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nl
c3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29y
R1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBn
ZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0
ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29k
ZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVj
b2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2Ug
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJv
cGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJp
YnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDI0LDE4ICs1ODgsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9k
ZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJy
aWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyBy
ZWdpc3RlcnMuCkBAIC00NDQsMjUgKzY0MiwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVs
QnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0Lmdw
cigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNDcyLDE5ICs2NzIsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0
eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9w
ZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTQ5MywyMTMgKzc0NCwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgq
aWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZt
ZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAg
ICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVn
VDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRl
eGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJy
YXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAg
fQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBi
YXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQ
Uik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlz
VlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhp
c0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0Rp
cmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBh
YmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3
ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMg
aGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdl
bmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUg
YWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZh
bHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJh
c2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
cmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAog
ICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QsIHByaXZhdGVGaWVsZEFjY2Vzc0tp
bmQoYnl0ZWNvZGUpKTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBA
IC03MDksNzcgKzExMTUsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0g
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAg
ICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZElu
ZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAg
SklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5C
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52
YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTc5MSwxNyArMTIxNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
OwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFk
ZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTgxMSwyMSAr
MTI0MywzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBz
Y29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNh
bEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1f
bGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODM4LDkgKzEyODUsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3Vs
dEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTg1MywyOSArMTMwMCwyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQ
UiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTg4NCwxNSArMTMzMSwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhz
Y29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJl
ZyByZWcpCkBAIC05MDYsMTIgKzEzNTgsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQot
ewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CkBAIC05MjIsNTEgKzEzNjgsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRh
ZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcg
cmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zm
c2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJS
ZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zm
c2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNj
b3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVH
UFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BS
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAg
ICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAo
QVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJh
bmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gz
MihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElz
Tm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0
KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsK
KyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFu
ZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7
CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
ICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5k
U2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwg
ZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC05ODAsMTAgKzE0NTksMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTk2
LDI3ICsxNDc1LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwog
CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwMjYs
NDAgKzE1MDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShy
ZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQ
dHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA3MywyMSArMTUzNCw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0
dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7Cisg
ICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zm
c2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
dHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9m
ZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMDk4LDI4ICsxNTg3LDU3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwog
ICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNh
bid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5Lgog
ICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAg
c3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihj
b25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9w
ZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3Rv
cmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKQEAgLTExMzQsMTIgKzE2NTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8g
V2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2Nh
dGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRD
b2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBl
biBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29u
c3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAg
LTExNTMsMjMgKzE2ODAsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRo
ZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwg
c2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNj
cmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNo
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTExODYsMTAgKzE3MjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjA1
LDYxICsxNzM5LDE3OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVu
dHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBh
cmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJl
c3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBi
eXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0
b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1p
dFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJS
ZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVl
LmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcywgdmFsdWUpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
fQorICAgIAorICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBL
bm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJy
YW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndp
c2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBv
cHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBl
eGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUg
Y29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxp
ZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9y
IFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
KSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAg
ICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxs
KSkgeworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAgICBpZiAo
Z3ByRm9yT3BlcmFuZChvd25lcikgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVy
R1BSID0gZ3ByRm9yT3BlcmFuZChvd25lcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
b3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIG93bmVyR1BSID0gb3duZXJW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBv
d25lckdQUik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJl
Z1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsK
LSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5U
eXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwob3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwot
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNv
cmQ7CisgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUg
dGhpcy4KKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2ls
ZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJh
cnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2UpCisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChv
d25lck5vdENlbGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZh
bHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9k
ZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8g
T09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFu
Y2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQg
Y2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBj
YXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0
ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAt
IE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxl
bnQgZmlsbAorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25h
bDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5k
KHZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIo
b3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2
YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwog
fQogCkBAIC0xMjcxLDExICsxOTIyLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5h
bF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSks
IHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VU
ZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9w
ZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zm
c2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVU
b3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMjg1LDEwICsxOTUxLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgp
KSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAq
dGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBL
bm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOwor
CisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6
b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZSB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9u
Kik7CkBAIC0xMzg1LDggKzIwNjQsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQog
ewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW47Cisg
ICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNj
cmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFu
Y2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlvbmFsPFNpbGVu
dFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNw
aWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
IH0KIApAQCAtMTQwNCw2ICsyMTAwLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJD
aGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNDY5LDYgKzIxNjcsOCBAQCB0ZW1wbGF0ZSB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxz
ZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9w
X3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBOb3REaXJlY3QgJiYgT3A6Om9wY29k
ZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5o
CShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0K
IAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAg
VCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBU
JiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJp
dmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVn
aXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNjc0MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBA
QCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BT
PworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0
aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1w
bGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+
bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2NzQzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDEw
IEBAIHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpy
ZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICAvL09wdGlvbnM6OnVzZURGR0pJVCgp
ID0gMDsKKyAgICAvL09wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOworICAgIC8vT3B0aW9uczo6dXNl
TExJbnQoKSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRh
dGVERkdFeGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjc0MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlT
dHJlYW1pbgogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2JhYmlsaXR5
LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0dGVy
c09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51bSBPcHRp
b25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMjY3NDM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOSBAQCBKU1ZhbHVlIG51bWJlck9mREZHQ29tcGls
ZXMoSlNWYWx1ZSB0aGVGCiB7CiAgICAgYm9vbCBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0g
ZmFsc2U7CiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQo
KSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOyAvLyBPT1BTCisKICAgICBpZiAoIU9wdGlv
bnM6OnVzZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VCYXNlbGluZUpJVCgpIHx8ICFPcHRpb25zOjp1
c2VERkdKSVQoKSkKICAgICAgICAgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IHRydWU7CiAj
ZWxzZQpJbmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNp
b24gMjY3NDM1KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRl
c3RSdW5uZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlv
biwKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51
bWJlck9mREZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAg
ICAgcmV0dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAgICAg
IC8vIEVtdWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0
aWVyaW5nIGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQorICAg
ICAgICAgICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50ID0g
bWFwLmdldChmKSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIG1h
cC5zZXQoZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsK
KyAgICAgICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4
dE5ld0NvZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3Vs
ZEJlKHRoZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUu
cHVzaDsKICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlv
bn0pKQorICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAg
dmFsdWVzLnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7
CiAgIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBA
IGZ1bmN0aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0
cykKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxl
ZChhcmd1bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3Rh
cnQgOiAwOwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416193</attachid>
            <date>2020-12-14 14:10:12 -0800</date>
            <delta_ts>2020-12-16 19:12:41 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>473908</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY0Niw5ICsxNjQ2
LDkgQEAgbGV0IHJ1bldhc20gPSB0cnVlOwogaWYgKHR5cGVvZiBXZWJBc3NlbWJseSA9PT0gInVu
ZGVmaW5lZCIpCiAgICAgcnVuV2FzbSA9IGZhbHNlOwogCi1pZiAoZmFsc2UpIHsKK2lmICh0cnVl
KSB7CiAgICAgcnVuT2N0YW5lID0gZmFsc2U7Ci0gICAgcnVuQVJFUyA9IGZhbHNlOworICAgIHJ1
bkFSRVMgPSB0cnVlOwogICAgIHJ1bldTTCA9IGZhbHNlOwogICAgIHJ1blJleEJlbmNoID0gZmFs
c2U7CiAgICAgcnVuV1RCID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5o
YW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZh
dGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9u
QXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFi
bGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlm
IChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkp
IHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0p
KTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNt
U2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25B
bmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkK
QEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3Rv
cjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1
bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBA
QCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0
LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGlj
dGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVh
ZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
c0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlv
bnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fs
cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAg
ICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAg
ICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkg
ewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0
KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVj
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91
dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVh
bSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01h
cCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3Rh
bnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUdyYXBoLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZv
aWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+
PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxl
KCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRl
ciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0
aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQ
cmludFN0cmVhbQogICAgIElDU3RhdHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01h
cChzdGF0dXNNYXApOwogICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1
Y3Rpb25zKCkpOwotICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBH
cmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1
Y3Rpb25zKCksIGdyYXBoLCBXVEY6Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKQEAgLTI0
ODMsNiArMjQ4Myw4IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygK
IHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAg
aWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURG
R0pJVCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExD
b21waWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4g
KG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAg
ICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1
bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5j
dG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAg
ICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAg
ICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVu
Y3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgp
KSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNo
UHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
IAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBP
cGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoK
ICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQs
IGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZh
dWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90
IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBu
dW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykK
ICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFu
dHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVu
dHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3Vt
ZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6VmVjdG9y
VHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1ZXMuZmls
bChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVu
dHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0IFQmIGlu
aXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAg
ICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51
bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsg
bnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRz
ICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWUpOwog
ICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApAQCAtMTY1
LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VU
YWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgp
KQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCiAg
ICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAgICAgLCBt
X251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAgICAgICAg
bV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRp
YWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbnVt
YmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQogICAgIHNp
emVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9Ci0gICAg
c2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51
bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90IG51bWJl
ck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAgICBzaXpl
X3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVy
T2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50cygpIC0g
ISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6ZV90IGNh
bGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5zaXplKCkg
LSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJldHVybiBp
ZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0
dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlk
eCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygp
KTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxvY2FsSW5k
ZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAg
ICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAgIHJldHVy
biBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAgICB9CiAK
ICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3VtZW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KICAgICBD
b25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
YXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgUmVm
VHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1wbGF0ZSA8
Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNr
Q2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNp
emVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKwor
ICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbY29uc3Rh
bnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAg
dGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBj
b25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUgPD0gbnVt
YmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXplX3QgbmV3
U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygp
ICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBz
aXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6ZV90IG9s
ZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXpl
KTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOwor
ICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAg
ICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUg
IT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewpA
QCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAg
ICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1
bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgp
KTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0K
ICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5cGUgb3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAg
ICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJl
dHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzc0LDgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFu
dEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9
CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArNDAyLDE1
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRz
KCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2Fscygp
ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2Nh
bHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0
dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0g
bnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsK
KyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAgIH0KIAog
ICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAg
Ly8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRo
ZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAg
ICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywg
dGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25zdGFudHMg
YXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2UgbV92YWx1
ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9u
dW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3RyZWFtJiBv
CiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9v
bCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAg
IENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXgg
PSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01NywxMCArNTcs
MTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAi
OiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGlmIGNv
bnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIs
ICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0
cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBDb21tYVBy
aW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBAQCB2b2lk
IE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRt
cEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2
NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0
dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29s
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBp
bmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7
CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVC
YXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0
aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhy
ZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRl
ZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1
Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGlu
dCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNv
bnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpAQCAtNjksNyAr
NzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92
aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlz
TG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJl
Z2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxS
ZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7
IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7
IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBv
cGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsxMTgsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0
dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50
IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQpIHsg
cmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQorICAg
IHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgpIHsgcmV0dXJu
IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQogCiAgICAgaW50
IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxpbmUgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9mZnNldCk7CiB9
CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50
IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQmFzaWNCbG9j
azo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpm
dWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAg
ICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjcwNzg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBD
aGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwot
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFi
aWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOworICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAg
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNiBAQAogI2luY2x1
ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUg
IkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtz
LmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRl
ICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAu
aCIKQEAgLTQ5LDYgKzUzLDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4K
ICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
UHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBz
dGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjYs
ODY4IEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdD
b21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6
c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5
cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0
eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsm
XSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2Zp
bGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAg
ICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGlu
IHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7Cisg
ICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5v
cGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFu
ZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGly
ZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0Ogor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0
cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAg
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
ICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVk
aWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9v
cGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRv
ck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRh
Lm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVk
aWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3Zh
bHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCks
IHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJu
YWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9P
YmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9O
dW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAg
aWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBhdXRv
JiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJs
ZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQz
MlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
Qnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wg
bWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9k
aXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxl
ZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikp
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAg
ICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJ
bnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAg
ICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAg
ICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAo
aW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxlKGlu
c3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVy
IGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUg
a2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50
MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlm
dD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6
CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBo
YW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVu
YXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBp
bnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0
KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5
dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVj
RG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQ
dXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRz
dCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkgewor
ICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVj
QmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAo
aW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwg
Ynl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFk
ZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5t
X2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5t
X3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
QmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0
ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9w
X3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgewor
ICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAg
ICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBp
ZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxO
dW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShi
eXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNo
aWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5h
czxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9f
cHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BU
b1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3Ny
Yyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
aWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlw
ZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRj
aDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7
CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1
ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcg
d2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIg
ZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAgICBicmVh
azsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4g
YmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
KyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0
aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
ZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1F
OiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3
YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigp
LCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVj
RmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21p
c2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1
bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdB
c3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxf
ZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
TGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQz
Mk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJv
cGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNf
b3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5
X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJv
cGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNf
cG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
bmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5f
ZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVG
b3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RB
cmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJn
dW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3Bl
ZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1
dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJv
bWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJl
bG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19l
bXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVm
aW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVm
aW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
VW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
c19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dp
dGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
SWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRp
b24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8
PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2Zp
bGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFu
Y2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5j
ZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1
c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3Vz
dG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9m
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0
cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlw
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92
YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2lu
dGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxl
cl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxl
OgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6Cisg
ICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAg
ICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92
YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmlu
ZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bf
am1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBv
cF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmlu
ZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBv
cF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNh
c2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3Nl
cToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBj
YXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVh
dGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAg
Y2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3
aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9z
dHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90
b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3Bf
cHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0
dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1
dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6Cisg
ICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxk
OiAKKyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdh
c21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1
ZToKKyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxp
bnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9m
b3JfY29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxf
YXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5
X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBs
bGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhy
b3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3Ry
YW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNl
IGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBj
YXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1
cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9s
b2d1ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxz
OgorICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9n
ZXRfaG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdo
dF9leGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAg
IGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRv
cl9vcGVuOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9jb25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdz
X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19z
bG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93Ogor
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9pdGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9s
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlf
Y2hlY2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNl
IHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9s
aW5lX3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQor
eworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxv
Y2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVh
ZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
cHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhl
YWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9u
ZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsm
XSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9j
b2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAg
ICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQo
bV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBm
b3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2Zp
bGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAg
bV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rp
b247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIs
IGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUo
KSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRh
dGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFsw
XS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7
CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9y
ZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNl
IGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERG
UyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlu
cHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVk
IGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAq
bV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rp
b25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50
cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7
CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nv
cl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9uc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKwor
ICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgbV9ncmFwaC0+ZHVt
cChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRpY3Rpb25z
QXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0Nh
bGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTY3
LDYgKzkzNSwxMiBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAg
ICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9
CiAKK2Jvb2wgSklUOjp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7Cisg
ICAgcmV0dXJuIG1fdXNlTE9MOworfQorCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBK
U0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50
ZXJwcmV0ZXIpCkBAIC03Niw2ICs5NTAsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsK
KyAgICBtX3VzZUxPTCA9IE9wdGlvbnM6OmZvcmNlTE9MKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBA
IC0xMzcsMTEgKzEwMTIsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgp
CiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09Q
Q09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAog
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisg
ICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZv
ckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNlTE9MKCkgJiYgZHN0Lmlz
VmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisg
ICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAgICB9IFwKICAgICAgICAg
fSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAg
LTE1NiwyNiArMTAzNywzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkK
IAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBc
Ci0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisg
ICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAog
ICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFt
ZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQp
IHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkp
OyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsg
XAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9w
XyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVu
Y3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwog
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9w
YWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxOCAr
MTExOCw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAg
ICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5z
dHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6
ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBz
dGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewot
ICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAg
dW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUg
dGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2lu
dCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9n
cmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNp
emUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAg
ICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5k
ZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5p
bmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNv
ZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwotICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsg
bV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
Y3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1f
Y3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdh
bGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJy
ZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVu
dFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBo
LT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0Vu
dHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3By
ZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAg
IGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZp
cnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBp
IDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5k
W3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9j
dXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwor
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFy
dEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92
ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJs
ZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3Mg
ZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9y
Qnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
LmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCkBAIC0yNzgs
NDYgKzEyMzEsNTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxv
Z0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7
CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklO
RV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVy
KQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0
eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rp
b24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChz
cHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19P
UCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJh
dG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3Bl
Y0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigp
Lm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVh
bikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigp
Lm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2Jq
ZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19P
UChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RP
dGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRv
cCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJl
Z2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dp
dGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+
KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0
YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVf
U0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVj
Tm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3Rl
cigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9y
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5l
d19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdf
YXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCku
bV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAg
ICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVk
QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2Rz
dCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1l
bnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1
dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0
LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VP
YmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9h
ZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTM1OCwxMSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9z
dXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9l
bmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAg
ICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAg
ICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc4
LDYgKzE0NDIsMzkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAg
IGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAg
ICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9ub3A6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3By
b2ZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2Rl
SUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9j
aGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wp
CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisK
ICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
QXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAg
ICAgfQpAQCAtNTE2LDEyICsxNTEzLDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNh
c2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5z
aWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXIt
PnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAg
ICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisg
ICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC01
ODAsNyArMTU3OSw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hl
Y2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9u
ZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTksNiArMTU5
Nyw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzUsMTUgKzE2MzYsMTggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6
ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRv
Lm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQg
aW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1h
bnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BT
OgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nh
c2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3Qg
ZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9S
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEp
LT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdl
bi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQ
cm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3Vs
ZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
c2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAt
Nzc4LDYgKzE3ODIsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21w
aQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAg
ICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBmb3IgKGF1dG8m
IGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0
LmZpcnN0OworICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgIGp1bXBz
LmxpbmsodGhpcyk7CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQor
ICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0
cy4KKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGlu
YXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRh
Z2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExM
SW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAg
Ly9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0
VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworCisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5tZXRhZGF0YVRhYmxlKCkpLCBMTEludDo6UmVnaXN0
ZXJzOjptZXRhZGF0YVRhYmxlR1BSKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIExMSW50OjpS
ZWdpc3RlcnM6OnBiR1BSKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAg
ICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUklu
Zm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93Lmxp
bmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBp
ZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC0xMDcyLDYgKzIwOTgsNzEzIEBA
IFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVUaW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNl
bGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRp
bWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAg
Ly8gT09QUzogaGFuZGxlIEV4aXRLaW5kLgorICAgIGlmICghbV9leGl0SnVtcHMuc2l6ZSgpIHx8
IG1fZXhpdEp1bXBzLmxhc3QoKS5maXJzdCAhPSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1f
ZXhpdEp1bXBzLmFwcGVuZCh7IG1fYnl0ZWNvZGVJbmRleCwgSnVtcExpc3QoKSB9KTsKKyAgICBt
X2V4aXRKdW1wcy5sYXN0KCkuc2Vjb25kLmFwcGVuZChqdW1wKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8v
IE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVy
ZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBP
T1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFs
bG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxs
Q2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Cisg
ICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxD
YWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhy
ZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFs
bG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNldCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8v
IE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVy
ZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdl
IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8g
T09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVy
U2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBy
ZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsK
KyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93
ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3
ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGls
ZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5z
IGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgor
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBS
SW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBK
SVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtzIGN1cnJl
bnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5pY2UgYXNz
ZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8vaWYgKG1f
c2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBt
X2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxs
b2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
aWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJl
Z1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVn
VmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxs
b2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZp
eCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dl
ZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7Cisg
ICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYg
KCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7Cisg
ICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAg
Ly8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBz
aWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVy
YW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAg
ICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQo
b3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBj
YW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJlY2F1c2Ug
d2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAgLy8gLSBW
YWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAvLyAtIH5W
YWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBkZWFsbG9j
YXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVwIGZ1bGx5
CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5IGRlZ3Jh
ZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5WYWx1ZU9w
ZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAgICAgICAg
Ly8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5kID0gVmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQorICAgICAg
ICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwordm9pZCBK
SVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9
IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAg
ICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNs
b2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93
ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4g
SklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEg
bG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVk
ID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9w
ZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGls
bEJlZm9yZUNhbGwoKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVy
CisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOwor
ICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYg
cmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJl
ZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVk
KHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5k
SWZOZWVkZWQocmVnKTsKKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywg
cmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNv
cmQpCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJv
bVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3Jk
LnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3JkLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnJlc3Rv
cmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRv
SWdub3JlLCBjb25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgZm9yIChhdXRvJiBwYWly
IDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGlmIChyZWcgPT0g
cmVnVG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQg
PT0gb3BlcmFuZFRvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
LCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNG
UFIoKSk7CisgICAgICAgICAgICBub3AoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0g
c2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29u
dGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gs
IHJlZy5mcHIoKSk7CisgICAgICAgICAgICBub3AoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihzbG93Q2FzZS5yZXN1bHQsIHNsb3dD
YXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8gT09QUzogQWRkIGRl
YnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1Zh
bHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKKyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQg
PSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNB
bGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9
IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBI
YXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRl
Y29kZXMgKC9jaGVja3BvaW50cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAg
YXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisK
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lk
IEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9y
ZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAg
ICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykK
K3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50
OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0t
cmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdW
YWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJ
VDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChq
aXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQp
OworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIo
aGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisK
K0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBS
VGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVn
IEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykK
KyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIp
OworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51
bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYg
aml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIo
KTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sK
KyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOwor
CisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9v
cGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5k
KTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNw
ZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNw
ZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBt
X2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJ
VDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dw
ciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIp
OworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAg
ICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisg
ICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0
LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBl
LCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAg
IG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1f
aml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
bV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVy
YW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJz
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
Z3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6Omdwcigp
Cit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dw
cjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3By
ID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIs
IG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJu
IG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOwor
fQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQorewor
ICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyBy
ZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0g
SW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBt
X2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5k
IH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVP
cGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1f
ZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAg
IGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVy
YW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBt
X2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdElu
dDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9q
aXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisg
ICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5h
c3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1Jl
Z2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdp
c3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7
CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVk
KHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3Ry
aW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAg
aWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sK
KyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sK
KyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7Cisg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdz
IHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
T2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7Cisg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJ
bnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFs
c2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1
c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAg
ICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVj
SGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hl
YXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0lu
dDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNlCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit2b2lkIEpJVDo6
cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgp
LCBTcGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2N1cnJl
bnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0YW50cygpOyArK2kpCisgICAgICAgIG1f
Y3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkp
KSk7CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY2FsbGVlKCkgPSBTcGVjRnVuY3Rp
b247CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJl
ZywgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxvY2Vk
UmVnKCkpOworICAgIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVycyA9IHsgfTsKK30KKwordm9pZCBK
SVQ6OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0NvdW50LCAiKSIpOworfQorCit2b2lkIEpJVDo6
ZHVtcFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIHN0YXRlID0g
WyIpOworICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChy
ZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJcdCIpOwor
ICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAg
ICB9CisgICAgfQorICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAg
IGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJc
dCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJlZykpOwor
ICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dMbigiXSIpOworfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2lu
Y2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1
ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVt
IE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxl
OworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBo
OwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xh
c3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTA2LDE1ICsxMTAsMjYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRv
OwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
LCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwg
dG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFs
UmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNh
dmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOwor
ICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0
IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsK
ICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkg
anVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBo
YXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZl
UGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBi
ZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMg
c2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAg
fTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTk3LDYgKzIxMiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
OwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJm
YWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRT
dHViQ2FsbDsKIApAQCAtMjA0LDEyICsyMjEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hH
ZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBN
YWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBh
IHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwg
Y29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQg
YSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRC
eUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMjg2LDYgKzI5
NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAg
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOwor
ICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZv
aWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wp
CisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2
b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBK
SVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5k
Q2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAg
ICB7CkBAIC0zMjMsOSArMzQ4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFk
dmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0g
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3Qm
LCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAg
ICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1
bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90
KEp1bXAsIGludCk7CkBAIC0zMzMsNyArMzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTM1MCw3ICszNzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxs
TGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwot
ICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29u
c3QgT3AmKTsKIApAQCAtMzYwLDcgKzM4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVt
IGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxl
T3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BF
cVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93
KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAg
ICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIs
IFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUgfTsKQEAgLTUwOCw4ICs1MzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
UmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC01MTcsMTIgKzU0NCwyMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9u
LCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBT
bG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0
IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAg
ICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVt
aXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRh
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0
IEluc3RydWN0aW9uKik7CkBAIC01NDYsOSArNTgyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02
MTAsNyArNjQ2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBl
cl9zYW1wbGVyX2JlZ2luKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9zdXBlcl9zYW1wbGVyX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfbHNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAg
ICAgdm9pZCBlbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAg
IHZvaWQgZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRl
KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NzgsNzggKzcxNiw4MSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3Ry
dWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAK
LSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2
b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9u
KTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlv
biopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAog
ICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vu
c2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25l
ZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyBy
ZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAg
ICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVw
dGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVn
IHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAg
ICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsK
ICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3Bl
cmFuZCwgR1BSUmVnKTsKQEAgLTc2NCw4ICs4MDUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09m
T3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAg
ICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAg
ICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZv
aWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIpOwpAQCAtNzc4LDM4ICs4MTcsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0
cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5h
bWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAg
IHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAg
ICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAg
ICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAg
ICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRl
ci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNG
b3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAg
ICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29k
ZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55
U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIs
IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAg
ICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVlOworICAgICAgICAgICAg
aWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNs
b3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRl
eCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpA
QCAtOTYxLDYgKzk4MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBy
dW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0
aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29t
cGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsK
ICAgICAgICAgCkBAIC05NzEsNiArOTkzLDI1MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBj
b3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0g
SW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJU
ZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQ
UlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBH
UFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBi
aXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVn
IG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
b3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90
Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BS
UmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAg
ICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rp
b25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZv
ck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7
CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAg
ICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1Zh
bHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1
ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFs
dWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB3aWxsRGVmKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fdXNl
TE9MKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEdQUlJlZyYgZ3ByID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVn
VmFsdWUoZ3ByKS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAg
ICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZQUlJlZyYgZnByID0gZnByRm9yT3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBh
c3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAgICBy
ZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAg
ICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55Qmln
SW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0lu
dDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsg
Ly8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJv
ZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRH
UFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJ
bnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZp
cnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxS
ZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92
ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2b2lkIGxvY2so
UmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1Bh
dGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9y
ZUNhbGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNw
aWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNv
bnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVn
VG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFu
Jik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOwor
CiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxG
YXJDYWxsUmVjb3JkPiBtX2ZhckNhbGxzOwpAQCAtOTkwLDcgKzEyNTgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBC
eXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50
cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xv
d0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAg
ICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAt
MTAyNyw2ICsxMjk1LDgzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwog
ICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAg
ICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2Ug
bWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2Nh
dGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAg
ICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAg
ICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90
aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBs
b2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsK
KworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAg
ICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAg
ICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAg
ICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIH07CisKKyAgICAgICAgc3Ry
dWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAg
ICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3Bl
cmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsK
KyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsK
KworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBv
dGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
b3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAg
ICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNp
emUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJn
ZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisg
ICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJz
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3Rl
cnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShv
dGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAg
IEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRC
bG9ja1N0YXRlKCk7CisKKyAgICAgICAgdm9pZCBkdW1wUmVnYWxsb2NTdGF0ZSgpOworCisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0
b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOwor
ICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4gbV9jdXJyZW50UHJlZGljdGlv
bnM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVj
dG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxW
ZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9M
IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVt
cHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDgyICs0Niw4MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhh
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JF
cXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRl
clRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVh
bCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRl
cmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFs
LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWws
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Smxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxl
c3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2Fz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUs
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxv
dyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDMyICsxNTEs
ODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDAp
KSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsK
KworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihM
ZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihp
bnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUo
cmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRp
b24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwg
ZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGlt
bWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQg
aW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50
IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihj
b25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNv
bmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIo
KTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlv
biA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICsyODEsNDMgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQog
eworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1w
OworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIg
PSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50
MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAg
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSBy
ZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOwor
ICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdl
dExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9w
MmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhz
R1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0
YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9w
MSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlv
biwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdl
dFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICszMzMsODkgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAg
IEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAg
IGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNU
ZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQ
UiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJ
bnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAg
ICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihv
cDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1t
MzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsK
KyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJl
Z1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNv
bmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNv
bmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlv
bi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNp
emUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5v
blplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1i
ZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVk
aWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51
bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1
bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSk7CkBAIC0zMDAsOCArNDI0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsK
QEAgLTMyNiw4ICs0NDgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAt
MzUxLDEyICs0NzEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBM
SFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAg
ICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1w
IGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMCk7CkBAIC0zNjksOSArNDg4LDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5r
KHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRo
aXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQu
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KQEAgLTM4MSwxMSArNTAwLDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25z
dCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRk
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVl
cyB3LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOwor
ICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAg
ICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAg
ICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92
ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0g
aW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsK
KyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAg
ICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3Jj
RHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVS
ZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93
LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNTQ4LDUzIEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0
ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVn
VDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBi
b3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHBy
b2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2Vy
dmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBG
UFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVk
SW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0
RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNE
c3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3Bl
Y0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwg
aW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSks
IHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1
dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dD
YXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJm
bG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICBib3hJbnQzMihp
bnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBT
cGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94
SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LwpAQCAtNDA3LDU0ICs2MDQsODkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3Ry
dWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBN
YWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMu
Ci0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9
IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAg
ICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4
KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xv
YmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAg
IGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0
aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5n
cHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+
Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0g
ZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJo
c1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBl
bnN1cmVTbG93Q2FzZShlYXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKGxocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMsIGxoc0dQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlSW50MzIocmhzLCByaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4
KTsKKyAgICAgICAgbW92ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGhz
R1BSID0gcmVnVDQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgbGhzR1BS
LCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICAgICAgbW92ZShsaHNH
UFIsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVn
MSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEp
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0y
MTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAg
eDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4KTsKLSAgICBKdW1w
IG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwg
VHJ1c3RlZEltbTMyKDApKTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIo
R3JlYXRlclRoYW5PckVxdWFsLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxp
bmsodGhpcyk7Ci0gICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KKyAg
ICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgZWF4IH0pOwogCi0jZWxzZSAvLyBDUFUoWDg2
XzY0KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
ZWF4KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJo
cyksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUobGhzKSwgU3BlY0JpZ0ludCkgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShyaHMpLCBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCaWdJbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgpOwogfQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82
NCkKQEAgLTQ2NCw3ICs2OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IElu
c3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAg
ICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3
NCw2ICs3MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
CisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYyLDE1
ICs3OTUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9u
LCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNv
bmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYp
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9h
ZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjQsMTMgKzk1NSwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+
KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmls
ZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
Z2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9
IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxs
IHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBC
aWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0
TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQxLDE4ICs5NzAs
NiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
LSNlbmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9w
ZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBAIC03NjAsMzMgKzk3NywxMDYgQEAgdm9pZCBKSVQ6OmVt
aXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25z
dEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKICAgICBlbHNlIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICAvLyBPT1BTOiBn
ZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5l
bXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Cisg
ICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKLSAgICBTbmlwcGV0R2Vu
ZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKIAorICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxl
ZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFT
U0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmso
dGhpcyk7CisKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRS
ZWdzLmdwcigpLCByZXN1bHQpOworCiAgICAgaWYgKHByb2ZpbGluZ1BvbGljeSA9PSBQcm9maWxp
bmdQb2xpY3k6OlNob3VsZEVtaXRQcm9maWxpbmcpCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1bHRSZWdzLmdwcigpKTsKIAotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikg
JiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25s
eSB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJl
c3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1
dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNl
IGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIo
aW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAgICBi
b3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJ
bnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDMs
NyArMTA5Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGkKIAog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Yml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDksMjAg
KzExMzksNiBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBz
Y3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVn
IHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlmCi0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0
T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CiAKQEAgLTg3MywyMSAr
MTE0OSw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAg
ICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQu
aXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAg
RlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKwor
ICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAg
ICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3Jh
dGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAg
ICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Cisg
ICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9
IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFu
ZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAg
ICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAg
ICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5
cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdl
bi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQz
Mk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVn
cy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMiwxOCArMTIzNCw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBh
ZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUlu
dEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAg
ICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJo
cy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNT
bG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUg
KzEyOTIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBz
YW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVu
dEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBz
bG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1l
IHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1l
bnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUg
c2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAg
ICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7
CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxMzI5LDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElD
RmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRl
JiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0
ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+
Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFn
ZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAg
IFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgp
OwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAg
ICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
c3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTM1NCwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOwor
ICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3NCwzOSArMTM3Miw4
MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0
RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVm
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9w
ZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0
VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdl
dE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQ
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+
ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmln
aHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAg
ICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAot
ICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlk
Q29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRv
ciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
KTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0
RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6
OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAg
aWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAo
IUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5k
aWYKQEAgLTEwMTUsMTcgKzE0NTYsMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJp
bmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5l
cmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVy
YXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAg
IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAg
bGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2Ug
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3By
KCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3Mu
Z3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIo
KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGlu
ZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNDkzLDIwIEBAIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJl
cikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNI
ZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJv
ZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
biByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5l
cmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCAr
MTUxNSw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVl
UmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkg
fTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE1NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
IHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7
CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAt
MTA5NSwxNiArMTU2Miw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9w
ZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAt
MTExNSwxNSArMTU3MiwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAo
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9
PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNS
aWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAg
ICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVn
VDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxz
ZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7
CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE2MzQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYy
ICsxNjQ5LDIxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRP
cGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNl
bmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdo
dFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
IHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAg
IGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRl
bXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7Cisg
ICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsK
KyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxl
ZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBp
ZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAg
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBS
ZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVm
dEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRG
YXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVz
dWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3Vs
dFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJU
KGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBl
KHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
TXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
cy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzR1BSLCBsaHNGUFIpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQUiwgcmhzRlBSKTsKKyAgICAg
ICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxv
dywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKSk7
CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAg
ICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIG11bERv
dWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJ
QygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPiht
X2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRN
YXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUsIHNsb3dDYXNl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1
YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCBy
aHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxo
c0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdw
cigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShsaHNGUFIuZnBy
KCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIz
MihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAg
ICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ay
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCks
IHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygm
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2lu
c3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRo
SUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsK
IH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9T
VUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0
Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgd2lsbERlZihkc3QpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3Qg
T3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5h
ZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5z
ZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yMTYsNiArMjE4LDkgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxl
ciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0
b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxs
Rm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAo
b3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFk
ZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsy
NjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0g
T3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50
SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFy
Z3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1
Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgLy8gT09QUzog
TG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2Fz
ZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMg
b3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBob3cg
dG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0
RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTM5
NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4K
ICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRD
aGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5p
bXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVu
ZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKKyAg
ICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENoZWNrcG9pbnRTbG93KTsKKwogICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsK
KyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNW
YWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29k
ZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1
bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVt
cHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNw
aWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdl
IHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRp
cGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAg
ICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3Niwz
NyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAg
ICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBk
b25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVy
U2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0
ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAg
ICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFt
ZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdz
KGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAg
c2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisgICAgICAg
IHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25zdCBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBp
dGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAg
IEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmlt
cGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNo
ZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xv
d0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAgICAgICB3aWxsRGVmKGJ5dGVj
b2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCB2
YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKQEAgLTUx
NSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgog
ICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9u
ZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0g
cmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nh
c2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAg
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAg
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikp
OwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0
KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRl
clJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
ZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlz
IG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0
YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQg
c28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8g
dGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xNjcsMjUgKzE2OSw2IEBAIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNG
b3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09
IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYg
c2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgp
ICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MCwz
NiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5s
aW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3Vy
ZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJU
KG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBk
dXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBp
cyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5
dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Ns
b3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAg
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRo
U2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEh
cmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAg
ICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMu
bGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9z
bG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5q
dW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBt
X2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNb
MF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYg
anVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJU
KG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBk
dXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBp
cyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRv
IG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDog
anVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXAp
OwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJl
bGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICszOTgsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBK
SVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFz
RG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5l
ZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lz
dGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsx
MjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAjaW5j
bHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTEsNiArNTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzogSWYgd2UgY2hhbmdlIHJlZ2FsbG9j
IHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUgTiByZWdpc3RlcnMgcGVyIGxvY2FsLCB3ZSBjYW4gbWFr
ZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIHR3byByZWdzLgorICAgICAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNyYykgPT0gSW52YWxpZEdQUlJlZykgewor
ICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMTQsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAg
ICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50
bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1Qw
OwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxs
b2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9
IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAg
ICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAg
IH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAg
ICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFs
T2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1p
dFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTcwLDUwIEBAIHZvaWQgSklUOjplbWl0
X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0
b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0
YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BS
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50
IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JU
ZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBj
b25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJ
bnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGlu
c3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BS
ID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZh
bHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBr
bm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFz
SW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1i
b2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNo
UHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBp
ZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9y
LCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkg
dXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRz
RGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIyMyw5MyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBi
eXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFs
LCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8g
V2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMg
Zmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxs
cy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5
X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVl
Ci0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3Jh
dGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMu
YXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1w
Q2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAg
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAq
dGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9H
UFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigp
OworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgq
dGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBw
cm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7Cisg
ICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAg
ICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVl
R1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1w
LT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwg
ZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BS
LCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9H
UFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Ig
Z2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAg
ICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNj
cmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwor
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9h
ZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBp
bnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNl
IHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQg
Zm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAg
ICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVz
dCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9s
Lmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIs
IHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90
byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICBy
ZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAg
cmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1tt
X2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
Z2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQ
Uik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMjQsMjkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzU0LDcyIEBAIHZvaWQgSklUOjplbWl0
X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5l
ZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxp
bmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3Ro
ZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
UiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0
R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRl
ZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisg
ICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAg
ICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI4LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
TnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ2MiwzNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisjaWYgQ1BVKEFSTTY0KQorICAgICAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB0ZXN0NjQoWmVybywgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTI2OCwxMSArNDk4LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0
cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVy
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdU
MCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0
KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgy
LDIxICs1MjgsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMy
TWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJN
YXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAg
ICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlw
ZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBy
ZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU5NCw0NyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUu
bV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAg
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzY0Myw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmpl
Y3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmpl
Y3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQor
ICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFs
dWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1w
LmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2
YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2
YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmpl
Y3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
IAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAg
ICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTM1NSw3ICs3MDgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9u
KgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5t
X3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BS
KTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MjcsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0g
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+
U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFs
dWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1p
dGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVn
VDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNy
YykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NzAsMjAzIEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9s
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1
ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAg
ICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAg
bW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9u
TmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24s
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBi
eXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlv
bi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlv
bk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rp
b25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZh
bHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAg
bW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0z
MigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
Mih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBo
YW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFy
ZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAg
ICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUg
d2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNs
ZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxz
ZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWlu
c3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxp
cCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUo
ZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJp
dHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGlj
aCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4K
KyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxs
IGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBj
b25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24g
PSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQ
UiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNj
cmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIu
Z3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1
ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQ
Uiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BS
UmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJS
ZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0
ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0g
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNv
ZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRp
dGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1
c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJU
ZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gx
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7
CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9
LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZh
bHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQw
LDQ2ICs5NzUsMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAg
ICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAg
ICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3Jh
dGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwg
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2Ny
YXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAg
ICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGlu
ayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2Vz
IC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAg
ICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1l
ZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAK
KworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9
CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
Ci0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3Ro
ZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90
Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3Jh
dGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1w
KGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1l
ZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4
LDEwICsxMTA2LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMzQsMjYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisg
ICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5n
IHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNjUsMzE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIu
aXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJy
YW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxs
KCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQp
OwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVh
bCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAg
ICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFs
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1
YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVy
LmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5t
X2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
K3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BF
cT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7
CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91
YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXND
b3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxo
c0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQ
UikpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50
MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNv
bXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSBy
aHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCBy
aHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3Vs
ZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxP
cCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1
dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBh
cmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3Jk
ZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJv
dmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAu
ZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRK
dW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNH
UFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhz
R1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMs
IHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIHhvcjMyKFRydXN0
ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1p
dF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJl
Z1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJn
ZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVx
SW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJS
ZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIC8vIE9PUFM6IFdlIGNhbiBtYWtlIHRoaXMgYSBzaW5nbGUgYnJhbmNo
IGlmIHRoZSByZXN0b3JlIGRvZXNuJ3QgY2xvYmJlciByZXR1cm5WYWx1ZUdQUi4KKyAgICAgICAg
YXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BS
ID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAg
IHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0X29w
X3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3
NCArMTQ4OCwxNDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0
ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RF
cXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRl
cmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5U
eXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6
OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChy
aHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVP
YmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVT
eW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7
CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
CisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0
IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAg
ICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNs
b3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQot
ICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxs
KQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJs
ZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRo
ZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50
MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBK
dW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQg
QmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291
bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIs
IHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGNvbXBhcmUz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUp
OwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJo
cywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2
ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQ
YXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1
bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwg
cmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBm
cmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3
aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVs
eSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAg
ICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFk
ZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2gg
Yml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4g
MTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBv
bmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChy
ZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdU
NSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAg
ICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qg
b25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhp
bmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVk
IHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAg
ICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8v
IEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92
ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMg
YSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBh
bmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9
IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJl
Z1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsK
LSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFy
ZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
KyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91
YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRo
ZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51
bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBy
aWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlm
ICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21w
YXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE2NDUsMTM1IEBAIHZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21w
YXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0g
aXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7
CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92
ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBi
ZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhs
aHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNH
UFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhz
R1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJo
c0dQUikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkg
eworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSBy
aHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJl
LCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290byBzbG93UGF0aDsK
LSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwotICAgIGlmIChsZWZ0
IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGdv
dG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAo
bGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2gg
aW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNl
ZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQg
aWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1h
a2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQg
aXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2gg
Yml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUw
LgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAg
ICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0K
LSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Ci0gICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRk
SnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAv
LyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBh
bmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2Ug
Y291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50
MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJl
Z1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAg
ICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAg
IC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVx
KToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAg
ICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAg
ICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2Vs
bCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAg
ICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQg
b2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNo
SWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBh
IEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBp
dCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQg
aXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2gg
Yml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAx
PDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCBy
ZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJp
dHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0
KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUp
OworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVh
bCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVF
cXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8v
IEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFu
ZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklY
TUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBh
IEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBz
dHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAg
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxp
bmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8g
SnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJ
ZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwot
ICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwg
cmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJv
dGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVn
VDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMg
YSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBh
bmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAg
bGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAg
ICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEs
IHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgs
ODkgKzE3ODYsMjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIK
ICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0
byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJo
c0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0g
ICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51
bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQo
cmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAg
ICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVj
b2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAg
ICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vs
c2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJp
bmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RP
YmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRo
IHRoaXMuCisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNh
biBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICBy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9w
RW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjA2NSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVu
dFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2Rz
dCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNw
ZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNj
b3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBz
Y29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1t
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjA5Niwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5z
dXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAg
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTkyMiw5ICsyMTIxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNv
bnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7
CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRl
eCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIxNDUsMTQ3
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdK
dW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFi
bGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxs
KCk7IC8vIE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5k
ZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVx
dWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29r
VHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1w
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0g
c3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29tcGFyZU9wID0g
aXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7Cisg
ICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21w
YXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3Vs
dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAg
ICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQ
UiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBy
ZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
KyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBp
c0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAg
OiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Cisg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMp
OwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxs
SW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDAp
OwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0K
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVu
dEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRl
IGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8g
RXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0
YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5u
ZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFz
aW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJz
KCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1p
dEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXpl
X3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5k
ZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAg
ICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI5NiwyMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsK
LSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
cmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA0
NSwxMyArMjMyMCw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3Ry
dWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwg
cmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsK
KyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBz
cmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9
IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkgewor
ICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBw
cm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlmIChp
c1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb3Zl
blR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3
ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAg
ICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1
cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNy
Y0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMg
cmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdU
MSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFsdWUo
c3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVn
VDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyNDAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNv
ZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEu
bV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBS
ZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI0MTEsMzEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQgY2Fj
aGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdU
MzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wNDsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlz
LCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3By
VGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcgPSBj
YWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdw
cigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAgIHNj
cmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVt
cDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVE
YXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpA
QCAtMTA4Niw2NCArMjQ1MywzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
aGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIs
IHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQot
Ly8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1
c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0g
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJn
ZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghIShw
cm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRHUFIp
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDAp
KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9M
IHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBoZXJl
LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
ZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjIsOCAr
MjQ5OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZv
aWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBP
U1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmlu
aXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxl
Rm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFyIHJlZ2lz
dGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAgIHVpbnQ2
NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7
CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1
cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJl
dHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjUyNiwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQog
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhl
IEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNG
cm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BF
bnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1NDMsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5v
T3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChq
dW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkg
dGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAg
ICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjU2OSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2Ft
cGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NzksMTggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9y
ZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhw
KSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAg
ICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjYwMCw0MiBAQCB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29w
ZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJl
c3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxP
TCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNj
b3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwog
I2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5m
dW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBm
dW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2NjQsNDYgQEAgdm9pZCBKSVQ6
OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7
CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAg
ICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVzZXQoKTsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQor
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1
bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsK
ICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5j
dGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjczNCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1f
YXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNp
emUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0
ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9
IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdHUFIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYw
LDE0ICsyNzU1LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28K
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQUiA9
IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAot
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7
CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdH
UFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzg4LDM2IEBAIHZvaWQgSklUOjplbWl0
X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVy
YXRvciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkp
LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgzNyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VM
T0wgPSBmYWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CkBA
IC0xNDM2LDYgKzI4NjYsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9P
UFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMjg5MywxNSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKElu
ZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9v
c2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBz
bG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUs
IGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwogICAgIAogICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwog
Ci0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZUp1bXAp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTGFiZWwgZG9uZSA9IGxh
YmVsKCk7CkBAIC0xNDc4LDEzICsyOTEwLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KGMKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAgICAK
LSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhi
eVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2Rl
LCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4
LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0
SG90UGF0aCkpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTQzLDgxIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEg
Y2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0
aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRo
aXMsIGluZGV4IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFz
ZSB9OworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRo
ZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAg
Ly8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBz
dG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNj
ZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCBy
ZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91
dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBk
c3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidz
IGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAg
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BS
LCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRl
eEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2Ny
YXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAg
ICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nl
c3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmly
c3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwor
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRl
eCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRo
ZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRl
eChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1Qw
KTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDI3LDUxIEBAIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEp
OwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9m
ZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25v
d25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1w
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlz
LCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0
b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3By
KCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVn
VDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGlu
Qm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNl
dCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRz
LmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRl
eChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihp
bmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNj
cmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE1NzQsMjEgKzMwODEsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BS
UmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAg
IGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1l
cmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1l
cmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
aW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVu
dW1lcmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxv
dywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJl
Z1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWln
aHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCBy
ZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwg
U3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMzUsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9u
KiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdp
c3RlcjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAt
MTY1OCw2ICszMTk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
cwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0o
KS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVU
b3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYg
bm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRy
dWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dT
aGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMyMTQsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxs
Rm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2Vy
dChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhh
dmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDEx
ICszMjQ3LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291
bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwg
cmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVS
ZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQz
MihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNjgsNDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFy
YW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVn
VDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xl
bmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1Rv
U2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1
bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRH
UFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJh
bXNUb1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldElu
dDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsK
KyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVy
b0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFt
c1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5k
aWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRo
aXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
Z1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwog
I2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1
bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSAr
MzMxNyw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50
T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFy
Z3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAg
fSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIp
OwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVh
bCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBy
ZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9m
Qm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJl
Z3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwor
ICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1
YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJl
c3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4
KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAg
YXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRl
ZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRS
ZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2
YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2
YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxz
ZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQ
Uik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
UmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVS
ZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgp
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2Fz
ZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4
ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTI4MSw4ICsyNzcsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwpAQCAtNTU4LDcgKzU1Miw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
ICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJl
ZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01OTgsOCArNTkxLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjM5LDggKzYzMCw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY4Niw4ICs2
NzUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyOSw4ICs3MTYs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTc3OCw4ICs3NjMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC04MTks
OCArODAyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTEwMCw4ICsx
MDgxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjU3
LDggKzEyMzYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjcwNzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+
CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
IApAQCAtNTIsNTEgKzU0LDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVH
UFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVu
SWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50
aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwg
cHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNl
TE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxs
Q2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5n
VHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAg
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0
eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkK
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAg
ICAgICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVj
U3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmlu
ZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlW
YWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRl
eF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEwNSw0MSArMTczLDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHBy
b3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFBy
aXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3Vs
dFJlZ3MpOworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNT
RVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE1Nyw2ICsyNTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFs
SW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1h
eWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQpCkBAIC0zMTksOCArNDIxLDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
UHV0QnlWYWxXaXQKICAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5h
dmFpbGFibGVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCk7CisgICAgdW5hdmFpbGFibGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IHByb3BlcnR5TmFtZSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lz
dGVycywgcHJvcGVydHlOYW1lLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0
dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzOSw3ICs0
NDQsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0
dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGly
ZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGly
ZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQ3LDcgKzQ1Miw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAg
ICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBb
Jl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
ICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKQEAgLTM1NSwxMyArNDYwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAg
ICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAg
ICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7
CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0zODEsNiArNDg1LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGls
bEZvckNhbGwoKTsgLy8gT09QUzogRG8gYmV0dGVyIGlmIHdlIGNhbiEKKwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKIApAQCAtMzk0LDEzICs1MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBmYXN0
UGF0aEptcCwgZG9uZSwgZG9uZSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0UHJpdmF0ZU5hbWU+KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgUHJp
dmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAg
ICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwpAQCAtNDIwLDQ5ICs1MjUsMTA1IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
LSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vz
c29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9u
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JH
UFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qg
YXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07
CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdl
dHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRl
ci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1Qy
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdU
MSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNv
ZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywg
Ynl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAg
ICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9w
ZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUu
bV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
YWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmli
dXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTggKzYzMyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2Rl
bEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJp
ZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJl
Z2lzdGVycy4KQEAgLTQ5MiwyNSArNjg3LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3By
KCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC01MjAsMTkgKzcxNyw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFs
dWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAg
IHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0
eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlH
UFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7
CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtNTQxLDIyMSArNzg5LDM2OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAg
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQ
Uik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7
CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3Ms
IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBH
UFJSZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNlTE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlw
ZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2Zp
bGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dp
dGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0
aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
dGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNl
KTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAg
fQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhp
c1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRz
V2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisK
ICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhp
c1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBh
dGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBv
bmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVu
IGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNv
ZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0
IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9
IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVj
bWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBk
aXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIAogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTc2NSw3NyArMTE2MCw5NSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgog
ICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBl
ZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VW
UmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3Vs
ZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJh
c2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5C
eUlkc1ttX2luQnlJZEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1
bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0
dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17
Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+
YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQ
UiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ3LDE3ICsxMjYwLDI1IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBt
ZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
CiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5k
aW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29u
c3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCgpKSwgcmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtODY3LDIxICsxMjg4LDM2IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRT
Y29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1f
Y29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRT
Y29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3Vy
ZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRo
KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAg
ICAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3Zl
KHNjb3BlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IGRlcHRoOyArK2kpCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQ
UiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBA
IC04OTQsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKIApAQCAtOTA5LDI5ICsxMzQ1LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1Qw
KTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTQwLDE1ICsxMzc2LDIw
IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkK
K3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQ
dHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRy
KHN0cnVjdHVyZVNsb3QsIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoWmVybywgc2NyYXRjaEdQUikpOworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJv
bVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAgLTk2MiwxMiArMTQwMyw2
IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lz
dGVyKSksIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTk3OCw1MSAr
MTQxMyw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsK
ICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Qq
PigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAg
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRs
ZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJh
c2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAg
ICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0g
cmVnVDI7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7Cisg
ICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAg
IG9mZnNldEdQUiA9IHJlZ1QyOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAg
ICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1
bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxv
YWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xv
dCwgb2Zmc2V0R1BSKTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zm
c2V0R1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAg
ICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAg
ICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBuZWczMihvZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIob2Zmc2V0R1BSLCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRl
eChyZXN1bHRHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0
Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdU
MTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQ
Uik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3Rlcikp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
QEAgLTEwMzYsMTAgKzE1MDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtMTA1MiwyNyArMTUyMCwyNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8v
IExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDgyLDQwICsxNTUwLDIyIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3Rv
cmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJs
ZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRj
aHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2Fk
UHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3Jp
dGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVy
KSkpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTI5LDIxICsxNTc5
LDQ5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAg
IHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZt
ZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
dmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFs
dWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0K
KwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9m
ZnNldFZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0
R1BSOworICAgICAgICAgICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2Nv
cGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BS
ID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1
dHRlcmZseVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNj
b3BlR1BSLCBvZmZzZXRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1i
ZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBi
cmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3Bl
R1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAg
ICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFu
ZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBz
dG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZz
ZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9y
ZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTExNTQsMjggKzE2MzIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAo
IWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ug
bmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3Zl
IHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAg
aWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwog
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Q
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZh
bHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BS
LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWND
ZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgot
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVl
LCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAg
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwg
QWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAg
ICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTE5
MCwxMiArMTY5NywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRv
IGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSBy
ZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29u
J3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0
Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0ds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMy
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQg
dG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAg
ICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTIwOSwyMyArMTcyNSwz
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZh
bHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0
Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBn
byBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJl
c29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwpAQCAtMTI0MiwxMCArMTc2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyNjEsNjEgKzE3ODQsMTc4IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1l
bnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50
c0dQUik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJl
Z1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBs
b2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQ
Uik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVn
VDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFy
cmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAor
ICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Nl
bGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
IHsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdl
IG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9v
dW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5l
ZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJl
Z2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0
LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3Ig
Y2FsbCArIHNpbGVudCBmaWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFs
UmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZp
bHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAg
aWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBp
ZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAg
IGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOwor
ICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAgICBpZiAoZ3ByRm9yT3Bl
cmFuZChvd25lcikgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVyR1BSID0gZ3By
Rm9yT3BlcmFuZChvd25lcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3duZXJWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIG93bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBvd25lckdQUik7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3duZXIsIHJlZ1QwKTsKKyAgICB9CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlKQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZp
bHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93bmVy
KSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwob3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BSKTsK
KyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAg
c2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4KKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxC
ZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVu
dEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChvd25lck5vdENl
bGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2Vs
bC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8gT09QUzogTWFr
ZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5k
IHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQg
aW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRv
IHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBy
dW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQg
c28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAor
CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHJl
Z1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZh
bHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwog
Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENl
bGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0x
MzI3LDExICsxOTY3LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChj
b24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNp
Z25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRo
aXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisg
ICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDAp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTEzNDEsMTAgKzE5OTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJl
Z1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChp
bmRleCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVt
cCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9P
UFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0Nl
bGw7CisKKyAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7Cisg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAg
ICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKQEAgLTE0NDcsOCArMjExNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5j
aCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8
U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3du
ZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2ls
ZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOwogfQogCkBAIC0xNDY2LDYgKzIxNTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRp
ZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICAKQEAgLTE1NjcsNiArMjI1NCw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2kKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRL
aW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9
IGZhbHNlOworCiAgICAgQVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6
b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6
Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcs
MTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lz
dGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBt
X21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJl
dHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3Nl
bWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkK
ICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhp
cyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxs
KCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1f
Ynl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcwNzg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwMyw2ICs0MDMsMTAgQEAgc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlv
bnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAg
IC8vT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIC8vT3B0aW9uczo6Zm9yY2VMT0woKSA9
IDE7CisgICAgLy9PcHRpb25zOjp1c2VMTEludCgpID0gMTsKKwogI2lmICFkZWZpbmVkKE5ERUJV
RykKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNyw2ICs1MjcsNyBAQCBKU19FWFBPUlRf
UFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KEJvb2wsIHVzZUpJVENhZ2UsIGNh
blVzZUpJVENhZ2UoKSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VQdWJsaWNT
dGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxs
IHVuZGVyc3RhbmQgcHVibGljIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBc
CiAgICAgdihCb29sLCB1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwg
IklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHByaXZhdGUgc3RhdGljIGRhdGEg
ZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKQogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0
aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVu
bmVyVXRpbHMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5
IEBAIEpTVmFsdWUgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29s
IHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSBmYWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICByZXR1cm4ganNOdW1iZXIo
MCk7IC8vIE9PUFMKKwogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVz
ZUJhc2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6OnVzZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5k
VG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsKICNlbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9yZXNv
dXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcmVzb3Vy
Y2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBMYXlvdXRUZXN0cy9y
ZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCwyMSBA
QCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1bm5lciA9IHsKICAgICBuZXZlcklubGlu
ZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAotICAgIG51bWJlck9mREZHQ29tcGlsZXM6
IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVyT2ZERkdDb21waWxlczogKGZ1bmN0aW9u
KCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICByZXR1cm4gKGYpID0+IHsKKyAgICAgICAg
ICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZE
RkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8gRW11bGF0ZSBydW5uaW5nIHRoaXMgZnVu
Y3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJpbmcgYmVmb3JlIHJldHVybmluZyB0cnVl
LgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAgbWFwID0gbmV3IFdlYWtN
YXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAuZ2V0KGYpIHx8IDA7CisgICAgICAgICAg
ICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNldChmLCBjb3VudCk7CisgICAgICAgICAg
ICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAgICAgICB9OworICAgIH0pKCksCiAgICAg
ZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3Q29kZUJsb2NrCiB9OwogCkBAIC0xNDks
OCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUodGhlRnVuY3Rpb24sIF9hLCBfYgogICB2
YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOwogICAKICAgdHJ5IHsKLSAgICB3aGls
ZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpCisgICAgd2hpbGUgKCFkZmdDb21waWxl
ZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CisgICAg
fQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2Vw
dGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVuY3Rpb24gZGZnSW5jcmVtZW50KGFyZ3Vt
ZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAgICAgICByZXR1cm4gYXJndW1lbnQu
aTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSkKKyAgICBpZiAoIWRmZ0Nv
bXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuICJzdGFy
dCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6IDA7CiAgICAgCiAgICAgcmV0dXJuIGFy
Z3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416381</attachid>
            <date>2020-12-16 19:12:41 -0800</date>
            <delta_ts>2020-12-17 11:02:18 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>478818</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY0Niw5ICsxNjQ2
LDkgQEAgbGV0IHJ1bldhc20gPSB0cnVlOwogaWYgKHR5cGVvZiBXZWJBc3NlbWJseSA9PT0gInVu
ZGVmaW5lZCIpCiAgICAgcnVuV2FzbSA9IGZhbHNlOwogCi1pZiAoZmFsc2UpIHsKK2lmICh0cnVl
KSB7CiAgICAgcnVuT2N0YW5lID0gZmFsc2U7Ci0gICAgcnVuQVJFUyA9IGZhbHNlOworICAgIHJ1
bkFSRVMgPSB0cnVlOwogICAgIHJ1bldTTCA9IGZhbHNlOwogICAgIHJ1blJleEJlbmNoID0gZmFs
c2U7CiAgICAgcnVuV1RCID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5o
YW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZh
dGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9u
QXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFi
bGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlm
IChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkp
IHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0p
KTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNt
U2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25B
bmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkK
QEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3Rv
cjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1
bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBA
QCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0
LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGlj
dGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVh
ZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
c0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlv
bnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fs
cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAg
ICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAg
ICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkg
ewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0
KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVj
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91
dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVh
bSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01h
cCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3Rh
bnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUdyYXBoLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZv
aWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+
PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxl
KCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRl
ciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0
aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQ
cmludFN0cmVhbQogICAgIElDU3RhdHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01h
cChzdGF0dXNNYXApOwogICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1
Y3Rpb25zKCkpOwotICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBH
cmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1
Y3Rpb25zKCksIGdyYXBoLCBXVEY6Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKQEAgLTI0
ODMsNiArMjQ4Myw4IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygK
IHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAg
aWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURG
R0pJVCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExD
b21waWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4g
KG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAg
ICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1
bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5j
dG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAg
ICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAg
ICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVu
Y3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgp
KSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNo
UHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
IAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBP
cGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoK
ICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQs
IGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZh
dWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90
IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBu
dW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykK
ICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFu
dHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVu
dHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3Vt
ZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6VmVjdG9y
VHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1ZXMuZmls
bChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVu
dHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0IFQmIGlu
aXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAg
ICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51
bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsg
bnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRz
ICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWUpOwog
ICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApAQCAtMTY1
LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VU
YWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgp
KQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCiAg
ICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAgICAgLCBt
X251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAgICAgICAg
bV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRp
YWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbnVt
YmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQogICAgIHNp
emVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9Ci0gICAg
c2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51
bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90IG51bWJl
ck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAgICBzaXpl
X3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVy
T2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50cygpIC0g
ISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6ZV90IGNh
bGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5zaXplKCkg
LSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJldHVybiBp
ZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0
dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlk
eCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygp
KTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxvY2FsSW5k
ZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAg
ICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAgIHJldHVy
biBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAgICB9CiAK
ICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3VtZW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KICAgICBD
b25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
YXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgUmVm
VHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1wbGF0ZSA8
Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNr
Q2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNp
emVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKwor
ICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbY29uc3Rh
bnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAg
dGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBj
b25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUgPD0gbnVt
YmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXplX3QgbmV3
U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygp
ICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBz
aXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6ZV90IG9s
ZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXpl
KTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOwor
ICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAg
ICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUg
IT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewpA
QCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAg
ICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1
bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgp
KTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0K
ICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5cGUgb3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAg
ICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJl
dHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzc0LDgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFu
dEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9
CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArNDAyLDE1
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRz
KCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2Fscygp
ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2Nh
bHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0
dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0g
bnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsK
KyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAgIH0KIAog
ICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAg
Ly8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRo
ZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAg
ICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywg
dGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25zdGFudHMg
YXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2UgbV92YWx1
ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9u
dW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3RyZWFtJiBv
CiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9v
bCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAg
IENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXgg
PSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01NywxMCArNTcs
MTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAi
OiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGlmIGNv
bnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIs
ICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0
cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBDb21tYVBy
aW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBAQCB2b2lk
IE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRt
cEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2
NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0
dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29s
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBp
bmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7
CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVC
YXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0
aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhy
ZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRl
ZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1
Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGlu
dCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNv
bnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpAQCAtNjksNyAr
NzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92
aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlz
TG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJl
Z2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxS
ZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7
IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7
IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBv
cGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsxMTgsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0
dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50
IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQpIHsg
cmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQorICAg
IHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgpIHsgcmV0dXJu
IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQogCiAgICAgaW50
IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxpbmUgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9mZnNldCk7CiB9
CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50
IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQmFzaWNCbG9j
azo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpm
dWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAg
ICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw3ICs5Niw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoK
IHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1h
cCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0
aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChW
TSYgdm0sIENDYWxsCiAgICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIGppdC5h
ZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhpdElubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogCisgICAgLy8gT09QUzogTWFrZSB0aGlzIGRvIHRoZSByaWdodCB0aGluZyBi
YXNlZCBvbiBMT0wgb3Igbm90LgogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGpp
dC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgQVNTRVJUKGNv
ZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVWZXJzaW9uKCkpOwog
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRU
eXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIxLDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3Ry
dWMKIHsKICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0gICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1
bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWduZWQgbnVtVG1wczsKQEAgLTE1NSw2ICsx
NTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiAgICAgICAg
IG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKICAgICAg
ICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7IC8vIE9PUFM6IGJ5dGVjb2RlVmVyc2lv
bgogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxh
YmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
LCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5h
cmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTUgQEAg
Ym9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlTwogICAgIHN3aXRjaCAoY29k
ZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azoKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9M
SklUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAg
ICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2Ug
SklUVHlwZTo6Tm9uZToKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcyLDYgKzc0LDEwIEBAIGJvb2wgQ2FsbEZyYW1lOjpj
YWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAg
IHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2Ug
SklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNzksOCArODUsNiBAQCBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9y
aWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDEyICszMCwxNiBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lu
bGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRG
R0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzUzLDggQEAKICNpbmNsdWRl
IDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4K
IAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsK
IG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjYsODY4IEBAIFNlY29uZHMgdG90YWxGVExDb21waWxl
VGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExC
M0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFBy
ZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0
VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAv
L3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBz
aW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAg
ICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJn
dW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2
YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFy
YXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9y
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BC
aXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0
LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9m
aWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
aXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1l
dGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92
PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNl
IG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9u
YW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dl
dF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3By
b3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihi
eXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihi
eXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
QW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNE
b3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlm
IChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5n
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1h
eWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNh
c2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7
CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9m
aWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91
YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVBy
b2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEo
cmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8g
YmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
ZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQg
JiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJs
ZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0lu
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAg
ICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9y
IHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBv
cF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAg
ICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUo
ZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3Vi
bGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQp
KSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5
cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsK
KyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0Jp
Z0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBT
cGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
aW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5j
PigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3Ny
Y0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAg
ICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVs
c2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAg
ICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYm
IHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBj
YXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRs
ZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZv
cihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5T
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAg
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBo
YW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0
eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4o
KTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAg
IGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihT
cGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzog
TWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tz
IGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBw
cm9maWxpbmcuCisgICAgICAgICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4
ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4K
KyAgICAgICAgfQorICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5t
X29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7
ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNw
ZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3By
b3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFz
ZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BT
dHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19m
dW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5j
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdH
ZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dl
bmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVu
dW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVj
dHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVy
ZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNw
ZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBT
cGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3Bl
X2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBT
cGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2Fy
Z3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJl
Y3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3Vt
ZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVu
dHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dl
bmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5l
cmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdH
ZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
QXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVh
ZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCks
IFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0
cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0
cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRl
cmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BU
eXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0
cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlw
ZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRU
eXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5
X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhf
dGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hl
Y2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9w
OgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3Nh
bXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAg
IGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFw
czoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2Fz
ZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9w
X2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgor
ICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9w
cm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNl
IG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAg
Y2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFf
bnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5k
ZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6
CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9w
X2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAg
IGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pu
bGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9w
X2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hf
Y2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVf
Y29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1
bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3Nl
dHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZp
cm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBj
YXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgor
ICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9n
cmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6
CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNh
c2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJp
Y19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFt
cG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRp
dmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25z
dHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxp
bmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBv
bGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAg
Y2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jf
bmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGlu
ZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgorICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3Ry
YW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAg
ICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxs
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxs
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFy
Z3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29u
c3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxs
X2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFn
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9j
aGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1
bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFt
cG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9f
dGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpy
dW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlx
dWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kp
CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJs
b2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29s
KSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUo
bG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVy
KSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAg
ICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgewor
ICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVu
dChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsK
KyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVt
cFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1
bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKwor
ICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRv
IERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRl
ciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMu
CisgICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhh
dCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8v
IE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBp
ZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5
dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJy
ZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisg
ICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9j
aygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRv
dGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBi
bG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSAr
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBt
X3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRz
W2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSkKKyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTY3LDYgKzkzNSwxMiBAQCB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFn
Z2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKK2Jvb2wgSklUOjp1c2VMT0woKQoreworICAg
IG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7CisgICAgcmV0dXJuIG1fdXNlTE9MOworfQorCiBKSVQ6
OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykK
ICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCkBAIC03Niw2ICs5NTAsNyBAQCBK
SVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVt
aXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX3VzZUxPTCA9IE9wdGlvbnM6OmZvcmNl
TE9MKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC0xMzcsMTEgKzEwMTIsMTcgQEAgdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2
aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9T
TE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBc
CiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49
IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0
cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAg
ICAgICBpZiAodXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBc
CisgICAgICAgICAgICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01B
SU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTAzNywzMiBAQCB2b2lkIEpJVDo6
YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1Ao
bmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAog
ICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2Fz
ZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2Fs
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1
c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAg
fSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24g
c3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKICAgICAKQEAgLTIzMSwxOCArMTExOCw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVu
c2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRl
Y29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFs
bCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0g
ICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIg
aGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAg
ICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVk
ZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxv
Y2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8
IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlu
cyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3Vj
Y2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIGxhYmVsKCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAg
IEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJy
ZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
ZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmlu
ZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2Nr
LT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2st
PmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3Mg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVk
ZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRF
bmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFBy
ZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0g
cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJs
b2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9u
cyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNT
aXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09
IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7
CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1
cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3Vy
ZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3Bv
aW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Cisg
ICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogCkBAIC0yNzgsNDYgKzEyMzEsNTMgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChm
YWxzZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgp
OworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2gg
KG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVh
dGVyZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9m
KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJ
TkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0
cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1
dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0
aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFf
cHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0
eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9T
TE9XX09QKHRocm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2Fy
cmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVy
KQotICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVy
aWNfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1
bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9X
X09QKG5ld19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9y
KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChw
b3cpCisgICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xP
V19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jv
b2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBT
cGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Nh
bGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNf
Y29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1f
ZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBE
RUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xP
V19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJ
c0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
c3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3Ry
aW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdp
c3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxf
ZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJv
bm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Z2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdp
dGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0
X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNw
ZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCks
IFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVy
dHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQor
ICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1f
ZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJs
ZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
Lm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJp
Y19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4o
KS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0
eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhf
c3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwg
U3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVu
dHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9k
c3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJn
dW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhl
cikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJv
bWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09Q
KG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2Rz
dCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5l
cmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3Qs
IFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dl
bmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigp
Lm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5l
cmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNw
ZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRu
b3QpCkBAIC0zOTgsNyArMTM1OCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBE
RUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hp
ZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisg
ICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4o
KS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAg
ICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc4LDYgKzE0NDIsMzkgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRC
eXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1
c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
RGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE2LDEyICsxNTEzLDE0IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmls
ZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZp
bmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9
IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAg
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dD
YXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2Uu
Ynl0ZWNvZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2Fz
ZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRv
ID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC01ODAsNyArMTU3OSw2IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0
cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9uZXEpCkBAIC01OTksNiArMTU5Nyw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVu
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQ
VShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChk
ZWMpCkBAIC02MzUsMTUgKzE2MzYsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigp
LCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBt
X3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgp
LCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVy
IC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBj
b2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJ
VEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkg
IT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNh
c2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmly
c3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBz
IGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBh
bHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50
SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAtNzc4LDYgKzE3ODIsMjggQEAgdm9pZCBKSVQ6OmNv
bXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVP
cmlnaW4oKSk7CiAKKyAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICBhdXRvIGp1bXBzID0g
ZXhpdC5zZWNvbmQ7CisgICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgaWYgKGJ5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBP
T1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0cy4KKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRy
YW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAg
ICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xp
bmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5h
dGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworCisg
ICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5tZXRh
ZGF0YVRhYmxlKCkpLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKTsKKyAgICAg
ICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSksIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKTsKKyAgICAgICAgbW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICBmYXJKdW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKyAg
ICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCkBAIC0xMDcyLDYgKzIwOTgsNzEzIEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVUaW1l
KCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21w
aWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4
aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgLy8gT09QUzogaGFuZGxlIEV4aXRLaW5kLgorICAg
IGlmICghbV9leGl0SnVtcHMuc2l6ZSgpIHx8IG1fZXhpdEp1bXBzLmxhc3QoKS5maXJzdCAhPSBt
X2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fZXhpdEp1bXBzLmFwcGVuZCh7IG1fYnl0ZWNvZGVJ
bmRleCwgSnVtcExpc3QoKSB9KTsKKyAgICBtX2V4aXRKdW1wcy5sYXN0KCkuc2Vjb25kLmFwcGVu
ZChqdW1wKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBjb21w
dXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJl
LiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8v
IGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVu
YW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBh
cm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dl
ZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdp
c3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFs
bG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQo
cmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNl
dCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJl
LiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAv
LyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hl
bmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3Ig
YXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2Vk
UmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQor
CitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQg
YSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxv
Y2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBk
b24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMg
aXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9u
Y2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0
OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0
cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJu
IHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAg
IC8vIE9PUFM6IHRoaXMgYnJlYWtzIGN1cnJlbnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5l
cmFsbHkgc2VlbXMgbGlrZSBhIG5pY2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0
aGluZyBvdXQuLi4KKworICAgIC8vaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNl
cy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JB
U0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAg
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgewor
ICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAo
cmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdw
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigp
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAg
ICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRl
ZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNs
b2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kg
dmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVl
Lm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
aWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9w
ZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsK
KyAgICAgICAgfQorICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRl
ZC9sb2NrQ291bnQgdmFsdWVzIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2Rl
IHRoYXQgZG9lczoKKyAgICAgICAgLy8gLSBWYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNw
aWxsRm9yQ2FsbAorICAgICAgICAvLyAtIH5WYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAg
ICAgICAvLyBBbmQgd2hlbiB3ZSBkZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9w
ZXJhbmQsIHdlIHdpbGwgZW5kIHVwIGZ1bGx5CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUg
cmVnaXN0ZXIsIGVzc2VudGlhbGx5IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAg
Ly8gT3RoZXJ3aXNlLCB3aGVuIH5WYWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2so
KSwgd2UnZCBlbmQgdXAgaW4KKyAgICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAg
ICAgICByZWdWYWx1ZS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICgh
cmVnVmFsdWUubG9ja0NvdW50KQorICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBm
YWxzZTsKKyAgICB9CisKK30KKwordm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAg
IFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9y
IChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlu
cyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxv
d2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAg
ICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3Vs
dDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAg
ICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5k
SWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2lsZW50
U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKQoreworICAgIC8vIE9PUFM6
IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0
OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChy
ZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBs
YW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChy
ZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJz
KCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJlc3VsdC5z
dGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdp
c3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMsIDApOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNv
bnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNw
aWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsKKyAgICBy
ZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3JkLnNhdmVQ
bGFuKTsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3Jl
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYgc2F2ZVBs
YW4pCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJl
ZyA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcGFpci5z
ZWNvbmQ7CisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25vcmUpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFuZFRvSWdub3JlKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7CisgICAgICAgICAgICBub3AoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAg
ICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHVu
Ym94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICBub3Ao
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhT
YXZlUGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZl
UGxhbihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOwor
fQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBn
cHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QK
KworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJv
eEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsK
KyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUo
ZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0
KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBP
T1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMgKC9jaGVja3BvaW50cz8pIHRoYXQgZGVm
LCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAg
YXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3Bl
Y0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShn
cHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30K
Kwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMt
PnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
OworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyBy
ZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICgh
cmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwg
R1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpn
cHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6
IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBp
ZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQ
UigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitK
SVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJ
bnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMy
T3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5J
bnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgp
OworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAg
ICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVs
c2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0
LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0
LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9v
cGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
Zk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3Bl
Y0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpD
ZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgp
Cit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJh
bmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBp
ZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAg
ICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIs
IEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJh
bmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5v
dENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcg
SklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAg
IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1f
aml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1f
aml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2Vs
bENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZD
ZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1f
b3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpW
YWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5k
Ojp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJS
ZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1Bh
dGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAg
ICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9q
aXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJh
bmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJl
ZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3Vi
bGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklU
OjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVn
KQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAg
bV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQg
fTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAg
ICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQu
YnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNC
eXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1w
R1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisK
KyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdp
c3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsm
XSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3Vs
dC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkK
KyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQ
UnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RT
dHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJp
bmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJ
Zk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikp
OworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
KSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAg
IH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQor
eworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlm
ICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVj
aykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklU
OjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQor
eworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3Bl
Y0ludDMyT25seSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMy
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51
bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVt
YmVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0
ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxh
dGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1
ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
QmlnSW50MzI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAg
IGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjQmlnSW50OworICAgIH0KKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyNlbmRpZgorfQorCit2b2lkIEpJVDo6cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7Cisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUu
cHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNv
bnN0YW50cygpOyArK2kpCisgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0
YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZp
cnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVu
VHlwZXMuY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFu
ZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+
Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgIG1fY3VycmVudFN0YXRlLnJl
Z2lzdGVycyA9IHsgfTsKK30KKwordm9pZCBKSVQ6OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0Nv
dW50LCAiKSIpOworfQorCit2b2lkIEpJVDo6ZHVtcFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRh
dGFMb2dMbigiUmVnIGFsbG9jIHN0YXRlID0gWyIpOworICAgIGZvciAoYXV0byByZWcgOiBhbGxv
d2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9
ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoYXV0byByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVk
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJl
ZywgIiA9ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dM
bigiXSIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdo
dFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRl
ICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVk
ZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBj
bGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9j
azsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAg
ICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTA2
LDE1ICsxMTAsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
c3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9t
OwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VF
bnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAg
ICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZl
Y3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxl
bnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdp
c3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JT
cGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2Uo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdz
IHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBM
aXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRl
bHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJl
ZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxS
ZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRl
IGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQg
ewpAQCAtMTk3LDYgKzIxMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdO
TUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9
IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMjA0LDEyICsyMjEsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNl
ZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1
bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBj
YW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2
QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5k
IHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAg
IHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICAgICAgfkpJVCgpOwpAQCAtMjg2LDYgKzI5NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZv
ckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxG
b3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwo
cmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzQ4LDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyBy
ZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQg
YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVn
IHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1w
LCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyArMzYwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lk
IGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlE
ICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKQEAgLTM1MCw3ICszNzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM4Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BT
dHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBO
RXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAg
ICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRl
clZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1MzUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC01MTcs
MTIgKzU0NCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93
T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVy
YXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xv
d0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0
KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1w
bChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYsOSArNTgy
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRo
X3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVn
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02MTAsNyArNjQ2LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3RydWN0aW9u
Kik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02Nzgs
NzggKzcxNiw4MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1l
bnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90
b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNs
b3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNv
bnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0Umln
aHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hp
ZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVk
KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3
RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
VmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNl
bHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
SlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTc2NCw4ICs4MDUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdl
dENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzc4LDM4ICs4MTcsMTggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5v
blByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2
b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQg
ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0
aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hG
dW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dD
YXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIr
Ky0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
aXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlz
KTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1t
eVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAg
ICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQg
bGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleCht
X3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlT
bG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBi
b29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTYxLDYgKzk4MCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsg
fQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAg
ICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBi
b29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05NzEsNiArOTkzLDI1MiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwog
CisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBH
UFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+
R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRH
UFJSZWcpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVt
cChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnBy
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50
MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIg
Yml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUg
dGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQm
IG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAg
ICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxs
T3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBn
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
RG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAg
ICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2Zw
ciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVk
VHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
bkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
IH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcm
IGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5k
KS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAg
QWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1
ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0K
KworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCB3aWxsRGVmKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdQUlJlZyYgZ3ByID0gZ3ByRm9yT3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEZQUlJlZyYgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFs
dWUoZnByKS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAg
IGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQo
b3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVy
YW5kOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50
MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5v
dENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihv
cGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNT
eW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVz
ZUxPTCgpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVT
dHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtp
bmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3Jl
IGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0
ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2Nh
dGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7
CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAg
ICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFr
ZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8g
c2V0IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVn
KTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRT
cGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRG
aWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxGYXJDYWxsUmVjb3JkPiBtX2ZhckNhbGxzOwpAQCAt
OTkwLDcgKzEyNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJs
ZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsK
LSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdt
ZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNo
UmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVk
PiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtMTAyNyw2ICsxMjk1LDgzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJv
b2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAg
ICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJp
YW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
ICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZw
ciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxv
Y2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9
IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAg
ZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
eyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBi
b29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25z
dCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQg
IT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9
IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3Bl
cmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0
ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25z
dCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9w
ZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6
ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwg
b3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVy
cy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisK
KyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAgICAgICAgdm9pZCBk
dW1wUmVnYWxsb2NTdGF0ZSgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdy
YXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2Nr
IHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRy
dWU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5
PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0
YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29y
czsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2No
ZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2Rl
SW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgyICs0Niw4MiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVM
ZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4p
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERv
dWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5n
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBm
YWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2Fz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTUxLDMyICsxNTEsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWdu
ZWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NU
aGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
Z1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0z
MigwKSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
TGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEs
IG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAv
LyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUg
ZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRp
YXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAg
ICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigp
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ay
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkp
LCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0
aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpA
QCAtMjI5LDE3ICsyODEsNDMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BS
UmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBb
Jl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmlt
bSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsK
ICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAg
ICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1t
KSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24p
LCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAt
MjU1LDQzICszMzMsODkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElu
cwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJo
c0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7
CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0gewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhp
cywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMy
X3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUz
Mihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9
IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGlu
dDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBh
cmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1t
KSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlv
biwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRS
SFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CiAgICAgfQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3Bl
cmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlv
biwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBv
cDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGlu
dmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgot
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlv
blNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9u
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdo
ID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gu
bGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRl
IGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAg
ICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQog
ICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIK
ICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIu
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0zMDAsOCArNDI0LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQo
bnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNiw4ICs0NDgsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAg
ZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUxLDEyICs0NzEsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAg
IEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9
IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3Rlciwg
cmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAg
ICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjksOSArNDg4LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5r
KHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRo
aXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTM4MSwxMSArNTAwLDQ3IEBA
IHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChw
cm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBh
bGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVlcyB3LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlv
bi4KKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJl
c3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2lu
ZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0
R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0Rz
dCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0
ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQz
Mi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBl
bnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAg
Ym94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShz
cmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Cisg
ICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5Mywx
MSArNTQ4LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAg
ICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAg
ICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
RlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlu
cHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91
YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUo
c3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BS
KSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQ
UiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9
CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2MDQsODkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0
IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lz
dGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8g
ZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVj
eDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsK
ICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVt
cDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQ
UjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAg
IGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVt
cGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsK
KyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAt
PmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7
CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxh
Y2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAg
ICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLT5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShlYXgsIGRzdCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykpCisgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihsaHMsIGxoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihyaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocmhzLCByaHNHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsK
KworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICAgICAgbW92ZShyaHNHUFIsIGVjeCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGhzR1BSID0gcmVnVDQ7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGxocywgbGhzR1BSLCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQoZWN4KTsKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShy
ZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsK
ICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRy
dXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
RXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0
b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAg
ICAgeDg2RGl2MzIoZWN4KTsKLSAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIo
R3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBKdW1wIG51
bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBsaHNHUFIsIFRy
dXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVkeCkp
OwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7Ci0gICAgYm94SW50MzIoZWR4LCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KKyAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsg
ZWF4IH0pOwogCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21v
ZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgZWF4KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVs
c2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0JpZ0ludCkg
JiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQmlnSW50KSkKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCaWdJbnQ7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJ
bnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgp
OwogfQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKQEAgLTQ2NCw3ICs2OTYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0
KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBK
dW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3NCw2ICs3MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3Ay
LCByZWdUMSwgcmVnVDApOwpAQCAtNTYyLDE1ICs3OTUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRp
b24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRp
b24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjQs
MTMgKzk1NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6
IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBz
aW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5l
Z2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXpl
LCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0
R2VuZXJhdG9yPgpAQCAtNzQxLDE4ICs5NzAsNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9w
RmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQg
bGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBAIC03NjAs
MzMgKzk3NywxMDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAog
ICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChv
cDEpKTsKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQogICAgICAgICBy
aWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0K
ICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJl
LgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigp
IH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9
OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworI2VuZGlmCiAKLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRP
cGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKIAor
ICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwog
ICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAgICAgaWYg
KHByb2ZpbGluZ1BvbGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9maWxpbmcp
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2Rl
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzLmdwcigpKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0
UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShy
ZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BC
aXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBi
b29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIH0KKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBu
b3QzMihyZXN1bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQor
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDMsNyArMTA5Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2JpdG5vdChjb25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdz
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDksMjAgKzExMzksNiBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0
U2hpZnRGYXN0UGF0aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKLSNl
bHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlm
Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQ7CiAKQEAgLTg3MywyMSArMTE0OSw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0
U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQu
aXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7Cisg
ICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQ
UlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxG
UFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0
IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAu
ZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
Mik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07
CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNo
RlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBp
ZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwor
ICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1Qw
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNo
RlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2Vu
LmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3Qo
KSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQz
Mk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
c2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMiwxOCAr
MTIzNCw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZv
aWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFBy
b2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRk
PigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVt
cCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBS
LmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIu
ZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
Ynl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIo
KSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3
aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNT
bG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblBy
b2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUgKzEyOTIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0
ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0Lgot
ICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZm
bGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3Jj
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAg
SlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBs
YWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9
IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBi
ZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAg
ICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVm
ZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVn
cyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVn
cyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxMzI5
LDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1h
dGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRj
aEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwot
CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2lu
c3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
TWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2Vu
ZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNs
b3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBA
IC05NjMsNyArMTM1NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRo
SUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShy
ZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRG
dW5jdGlvbj4KQEAgLTk3NCwzOSArMTM3Miw4MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBw
ZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwor
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5z
ZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAg
bGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Cisg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVM
RUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hG
UFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAg
IEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQog
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmln
aHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRp
ZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgewor
ICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3Bl
cmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07Cisg
ICAgICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBs
ZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAg
ICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJl
c3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0
VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIo
KSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0
VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAg
ICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAg
ICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAg
ICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdl
bmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYg
KCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAg
fQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmln
aHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0g
R2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsK
ICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxp
ZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBp
bmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTUsMTcgKzE0NTYsMzQgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0
ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJh
dGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYg
KGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXND
b25zdCgpKSB7CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsK
KyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigp
IH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAg
ICAgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNl
IGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
KTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsx
NDkzLDIwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9
KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVz
dWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6Omlz
X3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRj
aEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikK
K3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJ
bnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCArMTUxNSw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElD
U2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNW
YWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcg
KzE1NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUg
UmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rp
b24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQo
Y3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwxNiArMTU2Miw2IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
LSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAg
CiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMu
Zmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNSwxNSArMTU3MiwzNiBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2Vu
ZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2Vu
ZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAg
ICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0
T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxl
ZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1
dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6
OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE2MzQs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
LSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgp
KTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYyICsxNjQ5LDIxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRE
b3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJh
bmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAg
IEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAg
ICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2Ny
YXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsK
KyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwor
ICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOwor
CisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQ
UiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBy
aWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAg
ICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBn
ZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRK
dW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExp
c3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwog
ICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAm
JiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJl
cikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBS
UmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3Vs
dEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUobGhzR1BSLCBsaHNGUFIpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKHJoc0dQUiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCBy
aHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFu
Y2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3Vs
dC5mcHIoKTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBS
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRN
YXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlTXVsT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3Vi
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1
YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHN1YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBT
cGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3By
KCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBi
aXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRo
SUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRl
Y29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgd2lsbERlZihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRv
cDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJvb2wg
SklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBy
ZWdUMCk7CkBAIC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJs
b2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciBy
ZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAg
ICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQog
ewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3LDQ0
IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxl
T3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFp
bENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRB
cmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0K
ICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNo
b3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxl
IGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisg
ICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPwor
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3Ip
IGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3Bl
cnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2tw
b2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENo
ZWNrcG9pbnRTbG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAg
PSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1Qw
ID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsK
KyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBy
ZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihp
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJl
ZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2
ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
ICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzog
TG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2Fz
ZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMg
b3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZO
b3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BS
KTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1
bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAg
ICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3Vs
dEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQ
Uik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0
ZXJzLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
aXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRo
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVj
a3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAg
ICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qz
OwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHko
dm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQ
YXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2
bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2tw
b2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0pOworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJh
dGlvbkRvbmUubGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01
MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAg
ICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxp
bmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEs
NyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAg
fQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklU
VHlwZSA6IHVpbnQ4X3QgewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVu
aywKICAgICBCYXNlbGluZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJ
VAogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwg
dGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3LDYgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtl
IGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxs
IHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY3LDI1ICsxNjksNiBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50
byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5l
bmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAi
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA3LDI3ICsx
OTAsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1
bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjpl
bnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwg
bV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93
UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9
PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7
CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nh
c2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJu
IG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQog
ewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExp
c3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVt
cCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1
bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdh
eSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChq
dW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGlu
dCByZWxhdGl2ZU9mZnNldCkKQEAgLTQwNiwxMSArMzk4LDYgQEAgQUxXQVlTX0lOTElORSBkb3Vi
bGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRl
ZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBS
ZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIs
OCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAog
I2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5o
IgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0
X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwog
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdh
bGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2Fu
IG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYg
KHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3Vy
cmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSBy
ZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVn
IGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JS
ZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAg
ICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsK
KyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNG
aW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAg
IGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0
cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFz
SW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5j
ZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGlu
dmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVj
dG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhp
cywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywg
aGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAg
ICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5j
ZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFu
Y2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYg
d2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3Rv
bWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNl
U3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigp
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7Cisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1
Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAn
SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMt
QVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0
b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Rv
ID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFz
ZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAg
IC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0
aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUg
Y2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdl
dF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2
YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8g
c2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNl
T2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVl
VGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHBy
b3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3Vs
ZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxh
Y2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhp
cywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigp
OworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAg
ICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3Rv
VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3By
KCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1
ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHBy
b3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJh
dG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwK
KyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAg
ICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2Vu
KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVs
eSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBz
aW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNl
IGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsK
KyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFs
IG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5
bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
cHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAg
ICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAg
ICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VP
ZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5
cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRl
ZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2Vs
bC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwor
ICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVt
cCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJl
c3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAg
IAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1
bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02NCkKKyAg
ICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NCha
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3Qg
SW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051
bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywg
cmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRl
c3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAg
LTI4MiwyMSArNTI4LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5z
dHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJ
bnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0lu
dDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwog
Ci0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0lu
dFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNr
KSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjpl
bWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVj
b2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05v
dENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDMsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZh
bHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0
KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFy
ZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0zNTUsNyArNzA4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVj
dGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNv
ZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1
ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlz
SW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9i
amVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNy
YykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMp
ICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVl
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQ
cmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAh
PSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5
bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUo
dmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5j
dGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhp
cywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0
aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVu
Y3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVu
Y3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1
bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVh
bih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291
bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhh
dCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZh
bHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBh
Z2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5k
IGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1Zh
bHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFs
bCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAo
d2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVs
eSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2gg
d2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0
aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAg
R1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBj
b25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5
dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihj
b25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29u
ZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIs
IFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3Jh
dGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJ
ZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3Ro
ZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
c2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1
YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAg
fQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVt
cCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5v
dyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFO
dWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
c2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0
aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0
ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwo
Y29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAg
fSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0
LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIp
KQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90
aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTY1LDMxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2lu
dGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwg
PSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFz
Q2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVt
cGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIo
RXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7
CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9p
bnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9M
KCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3As
IE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVx
dWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6
IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJo
cykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0lu
dChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChy
aHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBS
ID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQ
UiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzog
Q291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJo
cyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3Nh
bWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7
Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBD
b21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyks
IHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNU
ZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdl
dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxh
dGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsK
KworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwot
ICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcg
cmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90
RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdU
MTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihU
cnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30K
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6
OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAg
R1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAg
fQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJy
YW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAg
ICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxo
c0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1p
dF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01
ODksNzQgKzE0ODgsMTQ2IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0
cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9
IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDog
Tm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5k
T3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJv
dmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1Zh
bHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNl
bGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BS
KSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQ
UikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxo
c0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAv
KiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6
Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290
byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMg
Q2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBv
ZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJ
ZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1Zh
bHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3Zl
cmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEg
bnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAot
ICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChy
ZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAg
Ly8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3Mg
YW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0lu
dDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdz
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21w
YXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJl
Z1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1Qw
LCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBz
bG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxs
IHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBk
b25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRo
aXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5h
aXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisg
ICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhl
biBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBo
aWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0
aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZp
bmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRk
NjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywg
cmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUp
OworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisg
ICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxl
YXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29t
ZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkg
bmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkK
KyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hC
b29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90
aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBs
ZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAg
Y29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFy
ZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjQ1LDEzNSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdw
Q29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFy
ZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwg
cHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBs
b3QgYmV0dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmco
cmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0lu
dChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJo
cykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgewor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBS
ID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEg
aGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1Bh
dGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAo
bGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAg
ICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVu
dHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJh
bmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdl
IHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0
aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2ls
bCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElm
IGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBo
aWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAx
PDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7
Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1Qz
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkp
OwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwot
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAg
IGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0g
ICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmlu
Z3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6
IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJp
Z0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJp
bmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhz
LCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAg
ICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJp
Y3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisg
ICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAg
ICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlz
IENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47
CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0
ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJy
YW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQg
aWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1h
a2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElm
IGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBo
aWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1
YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdU
MSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBh
ZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJl
Z1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJl
RXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAo
YXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAg
ICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5n
cyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8v
IEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUg
aXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBh
cmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVh
bC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAg
IC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAg
bW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIg
aXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5l
LCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEp
KTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBp
ZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAg
ICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NzQ4LDg5ICsxNzg2LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IElu
c3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQ
UiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BS
LCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNs
b3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDAp
OwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNv
ZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmln
SW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNC
eXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMy
KQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBh
dXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNo
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsK
KyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2Rl
TnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwor
CisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5w
dXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwg
d2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3
ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAg
ICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwNjUsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1
cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUu
bV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAm
PSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFu
ZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BS
ID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIw
OTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUt
PmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOwor
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC05MjIsOSArMjEyMSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJs
ZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTQ1
LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3Ry
aW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BS
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVi
dWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxvY2so
KS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVn
SG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNF
cSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVP
cCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQo
Y29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkg
eworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKwor
ICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEg
PyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0
aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVx
TnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBz
dGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAg
IC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBj
b25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lk
IHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVt
VmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAg
IGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0K
IAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyOTYs
MjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigp
OworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNj
b3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2Nv
cGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEwNDUsMTMgKzIzMjAsODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlz
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hl
ZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNE
c3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQ
Uiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAg
ICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRh
dGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBp
ZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChw
cm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2lu
Y2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAg
ICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAg
ICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAg
ICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0
aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUo
cmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qx
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1Zh
bHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBl
KHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjQwMSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5
dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFk
YXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAg
ICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyNDExLDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklE
IGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0g
cmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgq
dGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVn
ID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAx
LT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAg
ICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdw
clRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3By
KCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JS
YXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykp
KTsKQEAgLTEwODYsNjQgKzI0NTMsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMo
Y29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Omlu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lz
dGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQot
Ci0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMy
KFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigp
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
ISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0
R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9y
IExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAg
aGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTYy
LDggKzI0OTgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBj
YW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21J
bmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGln
aWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTOiBjbGVhciBy
ZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgogICAgICAgICB1
aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rp
b24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5
UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFy
bHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI1MjYsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
JikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9y
IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7
Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNh
dmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6
ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNTQzLDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAg
ICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BT
OiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9v
LgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1NjksOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBl
clNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNTc5LDE4IEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2Rl
Lm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJl
Z2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7
CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI2MDAsNDIgQEAgdm9pZCBKSVQ6
OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAg
IEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAg
c2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1
c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BS
KTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9j
ay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlE
IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
YykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQ
UiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNjY0LDQ2IEBAIHZvaWQg
SklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNj
b3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsK
KyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3BlLnJlc2V0KCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlE
OwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
Z2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlv
bik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
RnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI3MzQsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29k
ZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1Qw
LCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdH
UFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNT
dGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJn
R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEu
bV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTM2MCwxNCArMjc1NSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdH
UFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlz
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0K
KwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5k
ZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Fy
cmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDAp
OworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAg
ICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
YXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMjc4OCwzNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVu
dW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNl
IH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAgICAg
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI4MzcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1f
dXNlTE9MID0gZmFsc2U7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OwpAQCAtMTQzNiw2ICsyODY2LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhl
ZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAv
LyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4OTMsMTUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBt
b2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5
TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVK
dW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMjkxMCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAg
ICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbklu
Zm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwg
bW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJ
bmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
bmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMjk0Myw4MSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBp
cyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUg
eyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7
ICp0aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMs
IGJhc2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwot
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChi
YXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAg
ICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0
aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAot
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisg
ICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
aW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5l
QWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0
cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qy
KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYg
aW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdl
LCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGlu
ZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCBy
ZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzAyNyw1MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6
IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9y
VGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgq
dGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVt
ZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAt
PmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9
IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVt
cCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhP
ZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJv
dW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9Q
dHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BS
LCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDgxLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAg
aW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAg
IEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0
aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5k
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAg
ICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBl
bnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBl
bnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1l
c0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0
KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmlu
ZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszMTM1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2Nh
dGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFs
UmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsK
QEAgLTE2NTgsNiArMzE5Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25z
dCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBk
YXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1Qw
ICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBp
cyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszMjE0LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBz
cGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19h
c3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2ls
bCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTcw
MiwxMSArMzI0NywyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJ
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVu
dENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVn
VDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1Zh
bHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94
SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3Ro
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjY4
LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51
bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2Fk
MzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyks
IHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHpl
cm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJh
bXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwor
CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVz
dWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVt
UGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBz
ZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKdW1w
IHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1Q
YXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVn
VDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwog
I2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIHplcm9MZW5ndGgubGlu
ayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Qw
KTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdU
MSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJl
Z1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQs
NDkgKzMzMTcsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1
bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOwor
ICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxz
ZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJl
Z1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgp
KSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRP
dXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1
bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1Qy
KTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5P
ckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBp
bmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAg
ICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZVZhbHVlKGpz
VW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmpl
Y3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVH
UFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAg
ICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwog
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwor
ICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0
Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZh
bHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xv
d0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdz
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0y
MTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CkBAIC0yODEsOCArMjc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZh
bHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0
byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTk4LDggKzU5MSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzOSw4ICs2MzAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02ODYs
OCArNjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjksOCAr
NzE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC03NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAt
ODE5LDggKzgwMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTExMDAs
OCArMTA4MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRz
dCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAt
MTI1Nyw4ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7
CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJk
YS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVF
NjQpCiAKQEAgLTUyLDUxICs1NCwxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdU
eXBlR1BSID0gcmVzdWx0R1BSOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDA7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1f
c2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJ
ZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVj
Q2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRl
eGluZ1R5cGVHUFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAg
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJv
cGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVy
dHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAg
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0
eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsK
KyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25seSkpCisgICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAg
ICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwg
U3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAg
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFs
SW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5
VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5k
ZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTcsNiArMjU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRC
eVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BT
OiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdl
ckNvbnN0YW50KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAKKyAgICBhdXRv
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1dEtpbmQpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0zMzks
NyArNDQ0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAg
IHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Nyw3ICs0NTIsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwog
Ci0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRl
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzgxLDYgKzQ4NSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAg
c3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IERvIGJldHRlciBpZiB3ZSBjYW4hCisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5NCwxMyArNTAwLDEyIEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwg
ZmFzdFBhdGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFByaXZhdGVOYW1lPigpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAg
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKQEAgLTQyMCw0OSArNTI1LDEwNSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJC
eUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFz
ZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9h
Y2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vz
c29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRl
ciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBz
ZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVn
VDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCBy
ZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRl
Y29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5
dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jh
c2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1f
cHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0
dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2MzMsNTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC00OTIsMjUgKzY4NywyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
ZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0
LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJv
cGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3Bl
cnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9w
ZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAg
ICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNl
IHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KQEAgLTU0MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVRE
ZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQog
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
ICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRS
ZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAg
ICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRh
ZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAg
ICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVnVDE7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGlu
Z1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQ
cm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQog
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIs
IHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRC
eUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0
aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3Qo
KTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0
byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3Rv
cmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUg
YmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0
ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5
cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BS
LCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1Qy
LCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAg
ICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03NjUsNzcgKzExNjAsOTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxp
bmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihi
YXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBT
aG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwot
Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBi
YXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhp
cyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigp
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcg
cmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAg
IHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRo
KQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1
bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0NywxNyArMTI2MCwyNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRo
ID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdU
MDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1Qx
KTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTg2NywyMSArMTI4OCwzNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0
YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNs
b3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBk
ZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAg
ICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisg
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50Lmdl
dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgpAQCAtODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCBy
ZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BS
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk0MCwxNSArMTM3
NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBs
b2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9h
ZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZh
ckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05NjIsMTIgKzE0
MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9h
ZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihS
ZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05Nzgs
NTEgKzE0MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJl
ZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAg
ICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAg
ICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAg
ICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgog
CiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAg
ICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFu
ZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAg
ICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5k
ZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAg
Y2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1p
dEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
cmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC0xMDM2LDEwICsxNTA0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1
dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0g
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTEwNTIsMjcgKzE1MjAsMjcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIp
OyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Miw0MCArMTU1MCwyMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmVnVDApOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAg
IHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0
V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAg
bG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJl
Z1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTEyOSwyMSAr
MTU3OSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsK
ICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Qq
PigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9
IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVn
VDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Ym9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZh
bHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9m
ZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
ICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNl
dEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIg
PSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVn
VDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90
LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBz
Y29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAg
ICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwg
b2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOworICAgICAgICAgICAg
c3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9mZnNldEdQUiwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90
b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBw
cm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRl
KG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1
ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVH
UFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAg
ICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAg
LTExOTAsMTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNh
bWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdl
IHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRl
bXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4K
IAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTEyMDksMjMgKzE3
MjUsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0K
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2Yg
ZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYg
d2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdh
aW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjYxLDYxICsxNzg0LDE3
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFy
Z3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1
bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHZh
bHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOwor
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKyAg
ICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1v
ZGUpCiB7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBp
ZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2gg
YXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBp
dCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0
ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0
ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUg
Zm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmly
dHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91
bGRGaWx0ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewor
ICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAg
ICAgIGlmICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsK
KyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAgICAgaWYgKGdwckZv
ck9wZXJhbmQob3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBvd25lckdQUiA9
IGdwckZvck9wZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG93bmVy
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgb3duZXJH
UFIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG93bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShv
d25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOwor
ICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMu
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNw
aWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQor
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBpZiAob3duZXJO
b3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIC8vIE9PUFM6
IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFy
b3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBm
ZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1
bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2lu
Y2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtl
IGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZp
bGwKKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1
ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVy
KTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVO
b3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApA
QCAtMTMyNywxMSArMTk2NywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmll
bGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7
ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5k
IQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsxOTk2LDIzIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAv
LyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNw
ZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkp
OworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAg
ICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0
ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW47CisgICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJh
cnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlv
bmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCks
IG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwo
KnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUxLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElk
ZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNTY3LDYgKzIyNTQsOCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQg
cHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VM
T0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYg
T3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRL
aW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpy
ZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1
cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3Qg
eyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3Jv
QXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2Fs
bCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRv
IHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9y
Q2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0
LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDggQEAgaW5saW5lIGJvb2wg
c2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsbwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3Vs
ZCB0cnkgdG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKKyAgICAvLyBPT1BTOiBJbXBsZW1lbnQg
dGhpcyB3LnIudCBMT0wuCisKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQg
dG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMywxMCBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxs
SklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygp
CiB7CisgICAgLy9PcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgLy9PcHRpb25zOjpmb3Jj
ZUxPTCgpID0gMTsKKyAgICAvL09wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmlu
ZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9
IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNyw3IEBAIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgdXNlSklU
Q2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVz
ZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFy
c2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFz
c2VzLiIpIFwKICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHJpdmF0ZSBzdGF0
aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0ws
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAg
IFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVu
bmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewog
ICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShE
RkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBq
c051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0
aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAg
IHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vsc2UKSW5kZXg6IExheW91dFRl
c3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHJldmlzaW9uIDI3MDc4OSkKKysrIExheW91
dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNCw3
ICs0LDIxIEBAIHZhciBzZWxmID0gdGhpczsKIAogc2VsZi50ZXN0UnVubmVyID0gewogICAgIG5l
dmVySW5saW5lRnVuY3Rpb246IG5ldmVySW5saW5lRnVuY3Rpb24sCi0gICAgbnVtYmVyT2ZERkdD
b21waWxlczogbnVtYmVyT2ZERkdDb21waWxlcywKKyAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiAo
ZnVuY3Rpb24oKSB7CisgICAgICAgIGxldCBtYXA7CisgICAgICAgIHJldHVybiAoZikgPT4gewor
ICAgICAgICAgICAgaWYgKGlzREZHRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dW1iZXJPZkRGR0NvbXBpbGVzKGYpOworCisgICAgICAgICAgICAvLyBFbXVsYXRlIHJ1bm5pbmcg
dGhpcyBmdW5jdGlvbiBmb3IgYSBiaXQgdG8gZ2V0IHNvbWUgdGllcmluZyBiZWZvcmUgcmV0dXJu
aW5nIHRydWUuCisgICAgICAgICAgICBpZiAoIW1hcCkKKyAgICAgICAgICAgICAgICBtYXAgPSBu
ZXcgV2Vha01hcDsKKyAgICAgICAgICAgIGxldCBjb3VudCA9IG1hcC5nZXQoZikgfHwgMDsKKyAg
ICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgICAgICBtYXAuc2V0KGYsIGNvdW50KTsKKyAg
ICAgICAgICAgIHJldHVybiAoY291bnQgLyA0MDAwKSB8IDA7CisgICAgICAgIH07CisgICAgfSko
KSwKICAgICBmYWlsTmV4dE5ld0NvZGVCbG9jazogZmFpbE5leHROZXdDb2RlQmxvY2sKIH07CiAK
QEAgLTE0OSw4ICsxNjMsOSBAQCBmdW5jdGlvbiBkZmdTaG91bGRCZSh0aGVGdW5jdGlvbiwgX2Es
IF9iCiAgIHZhbHVlcy5wdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7CiAgIAogICB0cnkgewot
ICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkKKyAgICB3aGlsZSAoIWRm
Z0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpIHsKICAgICAgIHZhbHVlcy5wdXNoKGV2YWwoX2Ep
KTsKKyAgICB9CiAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOwogICB9IGNhdGNoIChlKSB7CiAg
ICAgZXhjZXB0aW9uID0gZTsKQEAgLTM0Niw3ICszNjEsNyBAQCBmdW5jdGlvbiBkZmdJbmNyZW1l
bnQoYXJndW1lbnQpCiAgICAgaWYgKGRpZEZhaWxTb21lVGVzdHMpCiAgICAgICAgIHJldHVybiBh
cmd1bWVudC5pOwogICAgIAotICAgIGlmICghZGZnQ29tcGlsZWQoYXJndW1lbnQpKQorICAgIGlm
ICghZGZnQ29tcGlsZWQoYXJndW1lbnQpICYmIGlzREZHRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm4gInN0YXJ0IiBpbiBhcmd1bWVudCA/IGFyZ3VtZW50LnN0YXJ0IDogMDsKICAgICAKICAgICBy
ZXR1cm4gYXJndW1lbnQuaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416438</attachid>
            <date>2020-12-17 11:02:18 -0800</date>
            <delta_ts>2020-12-17 19:19:34 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>478818</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY0Niw5ICsxNjQ2
LDkgQEAgbGV0IHJ1bldhc20gPSB0cnVlOwogaWYgKHR5cGVvZiBXZWJBc3NlbWJseSA9PT0gInVu
ZGVmaW5lZCIpCiAgICAgcnVuV2FzbSA9IGZhbHNlOwogCi1pZiAoZmFsc2UpIHsKK2lmICh0cnVl
KSB7CiAgICAgcnVuT2N0YW5lID0gZmFsc2U7Ci0gICAgcnVuQVJFUyA9IGZhbHNlOworICAgIHJ1
bkFSRVMgPSB0cnVlOwogICAgIHJ1bldTTCA9IGZhbHNlOwogICAgIHJ1blJleEJlbmNoID0gZmFs
c2U7CiAgICAgcnVuV1RCID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5o
YW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZh
dGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9u
QXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFi
bGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlm
IChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkp
IHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0p
KTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNt
U2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25B
bmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkK
QEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3Rv
cjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1
bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBA
QCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0
LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGlj
dGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVh
ZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
c0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlv
bnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fs
cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAg
ICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAg
ICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkg
ewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0
KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVj
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91
dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVh
bSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01h
cCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3Rh
bnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUdyYXBoLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZv
aWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+
PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxl
KCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRl
ciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0
aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQ
cmludFN0cmVhbQogICAgIElDU3RhdHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01h
cChzdGF0dXNNYXApOwogICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1
Y3Rpb25zKCkpOwotICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBH
cmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1
Y3Rpb25zKCksIGdyYXBoLCBXVEY6Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKQEAgLTI0
ODMsNiArMjQ4Myw4IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygK
IHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAg
aWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURG
R0pJVCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExD
b21waWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4g
KG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwdWJsaWM6CiAg
ICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1
bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5j
dG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAg
ICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAg
ICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVu
Y3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgp
KSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNo
UHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
IAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBP
cGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoK
ICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQs
IGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZh
dWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90
IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBu
dW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykK
ICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFu
dHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVu
dHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3Vt
ZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6VmVjdG9y
VHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1ZXMuZmls
bChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVu
dHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0IFQmIGlu
aXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAg
ICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51
bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsg
bnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRz
ICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWUpOwog
ICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApAQCAtMTY1
LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VU
YWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgp
KQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCiAg
ICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAgICAgLCBt
X251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAgICAgICAg
bV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRp
YWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbnVt
YmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQogICAgIHNp
emVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9Ci0gICAg
c2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51
bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90IG51bWJl
ck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAgICBzaXpl
X3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVy
T2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50cygpIC0g
ISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6ZV90IGNh
bGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5zaXplKCkg
LSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJldHVybiBp
ZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0
dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlk
eCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygp
KTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxvY2FsSW5k
ZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAg
ICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAgIHJldHVy
biBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAgICB9CiAK
ICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3VtZW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KICAgICBD
b25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
YXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgUmVm
VHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1wbGF0ZSA8
Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNr
Q2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNp
emVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKwor
ICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbY29uc3Rh
bnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAg
dGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBj
b25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUgPD0gbnVt
YmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXplX3QgbmV3
U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygp
ICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBz
aXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6ZV90IG9s
ZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXpl
KTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOwor
ICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAg
ICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUg
IT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewpA
QCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAg
ICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1
bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgp
KTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0K
ICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5cGUgb3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAg
ICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJl
dHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzc0LDgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFu
dEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9
CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArNDAyLDE1
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRz
KCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2Fscygp
ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2Nh
bHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0
dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0g
bnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsK
KyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAgIH0KIAog
ICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAg
Ly8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRo
ZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAg
ICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywg
dGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25zdGFudHMg
YXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2UgbV92YWx1
ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9u
dW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3RyZWFtJiBv
CiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9v
bCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAg
IENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXgg
PSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01NywxMCArNTcs
MTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAi
OiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGlmIGNv
bnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIs
ICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0
cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBDb21tYVBy
aW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBAQCB2b2lk
IE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRt
cEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2
NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0
dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29s
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBp
bmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7
CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVC
YXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0
aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhy
ZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRl
ZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1
Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGlu
dCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNv
bnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJl
Z2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpAQCAtNjksNyAr
NzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92
aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlz
TG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJl
Z2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxS
ZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7
IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7
IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBv
cGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsxMTgsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0
dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50
IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQpIHsg
cmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQorICAg
IHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgpIHsgcmV0dXJu
IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQogCiAgICAgaW50
IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxpbmUgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9mZnNldCk7CiB9
CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50
IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQmFzaWNCbG9j
azo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpm
dWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAg
ICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw3ICs5Niw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoK
IHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1h
cCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0
aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChW
TSYgdm0sIENDYWxsCiAgICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIGppdC5h
ZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhpdElubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogCisgICAgLy8gT09QUzogTWFrZSB0aGlzIGRvIHRoZSByaWdodCB0aGluZyBi
YXNlZCBvbiBMT0wgb3Igbm90LgogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGpp
dC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgQVNTRVJUKGNv
ZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVWZXJzaW9uKCkpOwog
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRU
eXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIxLDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3Ry
dWMKIHsKICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0gICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1
bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWduZWQgbnVtVG1wczsKQEAgLTE1NSw2ICsx
NTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiAgICAgICAg
IG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKICAgICAg
ICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7IC8vIE9PUFM6IGJ5dGVjb2RlVmVyc2lv
bgogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxh
YmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
LCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5h
cmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTUgQEAg
Ym9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlTwogICAgIHN3aXRjaCAoY29k
ZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azoKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9M
SklUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAg
ICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2Ug
SklUVHlwZTo6Tm9uZToKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcyLDYgKzc0LDEwIEBAIGJvb2wgQ2FsbEZyYW1lOjpj
YWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAg
IHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2Ug
SklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNzksOCArODUsNiBAQCBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9y
aWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDEyICszMCwxNiBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lu
bGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRG
R0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzUzLDggQEAKICNpbmNsdWRl
IDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4K
IAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsK
IG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjYsODY4IEBAIFNlY29uZHMgdG90YWxGVExDb21waWxl
VGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExC
M0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFBy
ZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0
VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAv
L3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBz
aW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAg
ICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJn
dW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2
YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFy
YXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9y
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BC
aXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0
LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9m
aWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
aXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1l
dGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92
PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNl
IG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9u
YW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dl
dF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3By
b3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihi
eXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihi
eXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
QW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNE
b3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlm
IChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5n
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1h
eWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNh
c2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7
CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9m
aWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91
YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVBy
b2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEo
cmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8g
YmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
ZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQg
JiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJs
ZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0lu
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAg
ICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9y
IHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBv
cF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAg
ICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUo
ZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3Vi
bGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQp
KSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5
cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsK
KyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0Jp
Z0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBT
cGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
aW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5j
PigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3Ny
Y0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAg
ICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVs
c2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAg
ICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYm
IHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBj
YXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRs
ZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZv
cihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5T
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAg
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBo
YW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0
eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4o
KTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAg
IGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihT
cGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzog
TWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tz
IGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBw
cm9maWxpbmcuCisgICAgICAgICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4
ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4K
KyAgICAgICAgfQorICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5t
X29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7
ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNw
ZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3By
b3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFz
ZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BT
dHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19m
dW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5j
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdH
ZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dl
bmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVu
dW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVj
dHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVy
ZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNw
ZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBT
cGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3Bl
X2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBT
cGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2Fy
Z3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJl
Y3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3Vt
ZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVu
dHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dl
bmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5l
cmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdH
ZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
QXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVh
ZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCks
IFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0
cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0
cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRl
cmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BU
eXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0
cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlw
ZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRU
eXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5
X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhf
dGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hl
Y2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9w
OgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3Nh
bXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAg
IGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFw
czoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2Fz
ZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9w
X2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgor
ICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9w
cm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNl
IG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAg
Y2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFf
bnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5k
ZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6
CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9w
X2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAg
IGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pu
bGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9w
X2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hf
Y2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVf
Y29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1
bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3Nl
dHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZp
cm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBj
YXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgor
ICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9n
cmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6
CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNh
c2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJp
Y19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFt
cG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRp
dmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25z
dHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxp
bmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBv
bGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAg
Y2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRf
YnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jf
bmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGlu
ZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgorICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3Ry
YW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAg
ICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxs
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxs
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFy
Z3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29u
c3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxs
X2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFn
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9j
aGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1
bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFt
cG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9f
dGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpy
dW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlx
dWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kp
CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJs
b2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29s
KSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUo
bG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVy
KSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAg
ICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgewor
ICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVu
dChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsK
KyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVt
cFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1
bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKwor
ICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRv
IERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRl
ciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMu
CisgICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhh
dCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8v
IE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBp
ZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5
dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJy
ZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisg
ICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9j
aygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRv
dGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBi
bG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSAr
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBt
X3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRz
W2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSkKKyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTY3LDYgKzkzNSwxMiBAQCB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFn
Z2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKK2Jvb2wgSklUOjp1c2VMT0woKQoreworICAg
IG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7CisgICAgcmV0dXJuIG1fdXNlTE9MOworfQorCiBKSVQ6
OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykK
ICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCkBAIC03Niw2ICs5NTAsNyBAQCBK
SVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVt
aXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX3VzZUxPTCA9IE9wdGlvbnM6OmZvcmNl
TE9MKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC0xMzcsMTEgKzEwMTIsMTcgQEAgdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2
aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9T
TE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBc
CiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49
IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0
cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAg
ICAgICBpZiAodXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBc
CisgICAgICAgICAgICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01B
SU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTAzNywzMiBAQCB2b2lkIEpJVDo6
YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1Ao
bmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAog
ICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2Fz
ZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2Fs
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1
c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAg
fSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24g
c3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKICAgICAKQEAgLTIzMSwxOCArMTExOCw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVu
c2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRl
Y29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFs
bCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0g
ICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIg
aGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAg
ICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVk
ZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxv
Y2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8
IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlu
cyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3Vj
Y2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIGxhYmVsKCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAg
IEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJy
ZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
ZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmlu
ZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2Nr
LT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2st
PmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3Mg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVk
ZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRF
bmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFBy
ZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0g
cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJs
b2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9u
cyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNT
aXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09
IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7
CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1
cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3Vy
ZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3Bv
aW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Cisg
ICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogCkBAIC0yNzgsNDYgKzEyMzEsNTMgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChm
YWxzZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgp
OworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2gg
KG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVh
dGVyZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9m
KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJ
TkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0
cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1
dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0
aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFf
cHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0
eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9T
TE9XX09QKHRocm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2Fy
cmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVy
KQotICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVy
aWNfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1
bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9X
X09QKG5ld19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9y
KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChw
b3cpCisgICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xP
V19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jv
b2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBT
cGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Nh
bGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNf
Y29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1f
ZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBE
RUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xP
V19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJ
c0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
c3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3Ry
aW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdp
c3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxf
ZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJv
bm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Z2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdp
dGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0
X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNw
ZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCks
IFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVy
dHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQor
ICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1f
ZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJs
ZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
Lm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJp
Y19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4o
KS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0
eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhf
c3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwg
U3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVu
dHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9k
c3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJn
dW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhl
cikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJv
bWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09Q
KG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2Rz
dCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5l
cmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3Qs
IFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dl
bmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigp
Lm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5l
cmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNw
ZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRu
b3QpCkBAIC0zOTgsNyArMTM1OCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBE
RUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hp
ZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisg
ICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4o
KS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAg
ICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc4LDYgKzE0NDIsMzkgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRC
eXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1
c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
RGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTE2LDEyICsxNTEzLDE0IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmls
ZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZp
bmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9
IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAg
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dD
YXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2Uu
Ynl0ZWNvZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2Fz
ZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRv
ID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCkBAIC01ODAsNyArMTU3OSw2IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0
cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9uZXEpCkBAIC01OTksNiArMTU5Nyw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVu
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQ
VShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChk
ZWMpCkBAIC02MzUsMTUgKzE2MzYsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigp
LCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBt
X3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgp
LCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVy
IC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBj
b2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJ
VEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkg
IT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNh
c2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmly
c3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBz
IGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBh
bHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50
SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAtNzc4LDYgKzE3ODIsMjggQEAgdm9pZCBKSVQ6OmNv
bXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVP
cmlnaW4oKSk7CiAKKyAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICBhdXRvIGp1bXBzID0g
ZXhpdC5zZWNvbmQ7CisgICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgaWYgKGJ5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBP
T1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0cy4KKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRy
YW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAg
ICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xp
bmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5h
dGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworCisg
ICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5tZXRh
ZGF0YVRhYmxlKCkpLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKTsKKyAgICAg
ICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSksIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKTsKKyAgICAgICAgbW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICBmYXJKdW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKyAg
ICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCkBAIC0xMDcyLDYgKzIwOTgsNzEzIEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVUaW1l
KCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21w
aWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4
aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgLy8gT09QUzogaGFuZGxlIEV4aXRLaW5kLgorICAg
IGlmICghbV9leGl0SnVtcHMuc2l6ZSgpIHx8IG1fZXhpdEp1bXBzLmxhc3QoKS5maXJzdCAhPSBt
X2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fZXhpdEp1bXBzLmFwcGVuZCh7IG1fYnl0ZWNvZGVJ
bmRleCwgSnVtcExpc3QoKSB9KTsKKyAgICBtX2V4aXRKdW1wcy5sYXN0KCkuc2Vjb25kLmFwcGVu
ZChqdW1wKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitSZWdpc3RlclNldCBjb21w
dXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJl
LiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8v
IGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVu
YW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBh
cm0uLi4KKworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dl
ZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdp
c3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpIHx8IGFs
bG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hZGQo
cmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNl
dCYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJl
LiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAv
LyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hl
bmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3Ig
YXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2Vk
UmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQor
CitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQg
YSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxv
Y2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBk
b24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMg
aXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9u
Y2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0
OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0
cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJu
IHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAg
IC8vIE9PUFM6IHRoaXMgYnJlYWtzIGN1cnJlbnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5l
cmFsbHkgc2VlbXMgbGlrZSBhIG5pY2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0
aGluZyBvdXQuLi4KKworICAgIC8vaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNl
cy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JB
U0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAg
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgewor
ICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAo
cmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdw
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigp
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAg
ICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRl
ZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNs
b2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kg
dmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVl
Lm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
aWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9w
ZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsK
KyAgICAgICAgfQorICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRl
ZC9sb2NrQ291bnQgdmFsdWVzIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2Rl
IHRoYXQgZG9lczoKKyAgICAgICAgLy8gLSBWYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNw
aWxsRm9yQ2FsbAorICAgICAgICAvLyAtIH5WYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAg
ICAgICAvLyBBbmQgd2hlbiB3ZSBkZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9w
ZXJhbmQsIHdlIHdpbGwgZW5kIHVwIGZ1bGx5CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUg
cmVnaXN0ZXIsIGVzc2VudGlhbGx5IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAg
Ly8gT3RoZXJ3aXNlLCB3aGVuIH5WYWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2so
KSwgd2UnZCBlbmQgdXAgaW4KKyAgICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAg
ICAgICByZWdWYWx1ZS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICgh
cmVnVmFsdWUubG9ja0NvdW50KQorICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBm
YWxzZTsKKyAgICB9CisKK30KKwordm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAg
IFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9y
IChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlu
cyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxv
d2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAg
ICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3Vs
dDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAg
ICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5k
SWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2lsZW50
U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKQoreworICAgIC8vIE9PUFM6
IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0
OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChy
ZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBs
YW4uYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChy
ZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJz
KCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJlc3VsdC5z
dGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdp
c3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMsIDApOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNv
bnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNw
aWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsKKyAgICBy
ZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3JkLnNhdmVQ
bGFuKTsKK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3Jl
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYgc2F2ZVBs
YW4pCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJl
ZyA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcGFpci5z
ZWNvbmQ7CisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25vcmUpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFuZFRvSWdub3JlKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7CisgICAgICAgICAgICBub3AoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAg
ICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHVu
Ym94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICBub3Ao
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhT
YXZlUGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZl
UGxhbihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOwor
fQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBn
cHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QK
KworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJv
eEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKSA9IGdwcjsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsK
KyAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworfQorCit2b2lkIEpJVDo6c2V0
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUo
ZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0
KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBP
T1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMgKC9jaGVja3BvaW50cz8pIHRoYXQgZGVm
LCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAg
YXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3Bl
Y0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShn
cHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30K
Kwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMt
PnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
OworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyBy
ZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICgh
cmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwg
R1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpn
cHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6
IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBp
ZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQ
UigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitK
SVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJ
bnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMy
T3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5J
bnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgp
OworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAg
ICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVs
c2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0
LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0
LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9v
cGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
Zk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3Bl
Y0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpD
ZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgp
Cit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJh
bmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBp
ZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAg
ICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIs
IEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJh
bmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5v
dENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcg
SklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAg
IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1f
aml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1f
aml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2Vs
bENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZD
ZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1f
b3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpW
YWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5k
Ojp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJS
ZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1Bh
dGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAg
ICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9q
aXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJh
bmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJl
ZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3Vi
bGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklU
OjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVn
KQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAg
bV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQg
fTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAg
ICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQu
YnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNC
eXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1w
R1BSLCBtX2Zwcik7CisKKyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisK
KyAgICByZXR1cm4gbV9mcHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdp
c3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsm
XSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3Vs
dC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkK
KyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQ
UnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RT
dHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJp
bmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJ
Zk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikp
OworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
KSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAg
IH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQor
eworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlm
ICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVj
aykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklU
OjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQor
eworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3Bl
Y0ludDMyT25seSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMy
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51
bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVt
YmVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0
ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxh
dGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1
ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
QmlnSW50MzI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAg
IGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjQmlnSW50OworICAgIH0KKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyNlbmRpZgorfQorCit2b2lkIEpJVDo6cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7Cisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUu
cHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNv
bnN0YW50cygpOyArK2kpCisgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0
YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZp
cnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVu
VHlwZXMuY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFu
ZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+
Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgIG1fY3VycmVudFN0YXRlLnJl
Z2lzdGVycyA9IHsgfTsKK30KKwordm9pZCBKSVQ6OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0Nv
dW50LCAiKSIpOworfQorCit2b2lkIEpJVDo6ZHVtcFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRh
dGFMb2dMbigiUmVnIGFsbG9jIHN0YXRlID0gWyIpOworICAgIGZvciAoYXV0byByZWcgOiBhbGxv
d2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9
ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoYXV0byByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVk
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJl
ZywgIiA9ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dM
bigiXSIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdo
dFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRl
ICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVk
ZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBj
bGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9j
azsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAg
ICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTA2
LDE1ICsxMTAsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
c3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9t
OwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VF
bnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAg
ICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZl
Y3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVnaXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxl
bnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdp
c3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JT
cGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2Uo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdz
IHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBM
aXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRl
bHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJl
ZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxS
ZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRl
IGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQg
ewpAQCAtMTk3LDYgKzIxMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdO
TUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9
IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMjA0LDEyICsyMjEsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNl
ZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1
bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBj
YW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2
QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5k
IHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAg
IHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICAgICAgfkpJVCgpOwpAQCAtMjg2LDYgKzI5NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZv
ckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxG
b3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwo
cmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzQ4LDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyBy
ZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQg
YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVn
IHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1w
LCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyArMzYwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lk
IGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlE
ICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKQEAgLTM1MCw3ICszNzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM4Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BT
dHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBO
RXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAg
ICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRl
clZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1MzUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC01MTcs
MTIgKzU0NCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93
T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVy
YXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xv
d0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0
KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1w
bChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYsOSArNTgy
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRo
X3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVn
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02MTAsNyArNjQ2LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3RydWN0aW9u
Kik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02Nzgs
NzggKzcxNiw4MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1l
bnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90
b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNs
b3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNv
bnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0Umln
aHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hp
ZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVk
KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3
RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
VmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNl
bHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
SlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTc2NCw4ICs4MDUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdl
dENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzc4LDM4ICs4MTcsMTggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5v
blByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2
b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQg
ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0
aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hG
dW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dD
YXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIr
Ky0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
aXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlz
KTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1t
eVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAg
ICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAg
ICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQg
bGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleCht
X3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlT
bG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBi
b29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTYxLDYgKzk4MCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsg
fQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAg
ICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBi
b29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05NzEsNiArOTkzLDI1MiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwog
CisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBH
UFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+
R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRH
UFJSZWcpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVt
cChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnBy
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50
MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIg
Yml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUg
dGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQm
IG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAg
ICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxs
T3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBn
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
RG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAg
ICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2Zw
ciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVk
VHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
bkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
IH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcm
IGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5k
KS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAg
QWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1
ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0K
KworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCB3aWxsRGVmKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdQUlJlZyYgZ3ByID0gZ3ByRm9yT3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEZQUlJlZyYgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFs
dWUoZnByKS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAg
IGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3Bl
cmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5k
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQo
b3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVy
YW5kOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50
MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5v
dENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihv
cGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNT
eW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVz
ZUxPTCgpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVT
dHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtp
bmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3Jl
IGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0
ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2Nh
dGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7
CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAg
ICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFr
ZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8g
c2V0IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVn
KTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRT
cGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICAgICAgdm9pZCBzaWxlbnRG
aWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxGYXJDYWxsUmVjb3JkPiBtX2ZhckNhbGxzOwpAQCAt
OTkwLDcgKzEyNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJs
ZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsK
LSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdt
ZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNo
UmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVk
PiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtMTAyNyw2ICsxMjk1LDgzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJv
b2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAg
ICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJp
YW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
ICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZw
ciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxv
Y2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9
IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAg
ZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
eyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBi
b29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25z
dCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQg
IT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9
IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3Bl
cmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0
ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25z
dCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9w
ZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6
ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwg
b3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVy
cy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisK
KyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAgICAgICAgdm9pZCBk
dW1wUmVnYWxsb2NTdGF0ZSgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdy
YXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2Nr
IHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRy
dWU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5
PiBtX2V4aXRMb2c7CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0
YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29y
czsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2No
ZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2Rl
SW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDgyICs0Niw4MiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVM
ZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4p
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERv
dWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5n
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBm
YWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2Fz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTUxLDMyICsxNTEsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWdu
ZWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NU
aGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
Z1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0z
MigwKSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
TGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEs
IG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAv
LyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUg
ZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRp
YXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAg
ICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigp
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ay
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkp
LCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0
aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpA
QCAtMjI5LDE3ICsyODEsNDMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BS
UmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBb
Jl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmlt
bSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsK
ICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAg
ICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1t
KSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24p
LCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAt
MjU1LDQzICszMzMsODkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElu
cwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJo
c0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7
CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0gewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhp
cywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMy
X3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUz
Mihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9
IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGlu
dDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBh
cmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1t
KSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlv
biwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRS
SFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CiAgICAgfQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3Bl
cmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlv
biwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBv
cDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGlu
dmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgot
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlv
blNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9u
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdo
ID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gu
bGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRl
IGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAg
ICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQog
ICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIK
ICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIu
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0zMDAsOCArNDI0LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQo
bnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNiw4ICs0NDgsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAg
ZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUxLDEyICs0NzEsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAg
IEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9
IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3Rlciwg
cmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAg
ICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjksOSArNDg4LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5r
KHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRo
aXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTM4MSwxMSArNTAwLDQ3IEBA
IHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChw
cm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBh
bGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVlcyB3LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlv
bi4KKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJl
c3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2lu
ZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0
R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0Rz
dCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0
ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQz
Mi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBl
bnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAg
Ym94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShz
cmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Cisg
ICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5Mywx
MSArNTQ4LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAg
ICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAg
ICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
RlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlu
cHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91
YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUo
c3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BS
KSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQ
UiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9
CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2MDQsODkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0g
Ynl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0
IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lz
dGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8g
ZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVj
eDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsK
ICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVt
cDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQ
UjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAg
IGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVt
cGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsK
KyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAt
PmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7
CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxh
Y2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAg
ICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLT5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShlYXgsIGRzdCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykpCisgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihsaHMsIGxoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihyaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocmhzLCByaHNHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsK
KworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICAgICAgbW92ZShyaHNHUFIsIGVjeCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGhzR1BSID0gcmVnVDQ7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGxocywgbGhzR1BSLCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQoZWN4KTsKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShy
ZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsK
ICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRy
dXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
RXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0
b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAg
ICAgeDg2RGl2MzIoZWN4KTsKLSAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIo
R3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBKdW1wIG51
bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBsaHNHUFIsIFRy
dXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVkeCkp
OwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7Ci0gICAgYm94SW50MzIoZWR4LCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KKyAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsg
ZWF4IH0pOwogCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21v
ZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgZWF4KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVs
c2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0JpZ0ludCkg
JiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQmlnSW50KSkKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCaWdJbnQ7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJ
bnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgp
OwogfQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKQEAgLTQ2NCw3ICs2OTYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0
KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBK
dW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3NCw2ICs3MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3Ay
LCByZWdUMSwgcmVnVDApOwpAQCAtNTYyLDE1ICs3OTUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRp
b24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRp
b24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjQs
MTMgKzk1NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6
IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBz
aW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5l
Z2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXpl
LCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0
R2VuZXJhdG9yPgpAQCAtNzQxLDE4ICs5NzAsNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9w
RmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQg
bGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBAIC03NjAs
MzMgKzk3NywxMDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAog
ICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChv
cDEpKTsKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQogICAgICAgICBy
aWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0K
ICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJl
LgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigp
IH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9
OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworI2VuZGlmCiAKLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRP
cGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKIAor
ICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwog
ICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAgICAgaWYg
KHByb2ZpbGluZ1BvbGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9maWxpbmcp
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2Rl
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzLmdwcigpKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0
UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShy
ZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BC
aXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBi
b29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIH0KKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBu
b3QzMihyZXN1bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQor
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDMsNyArMTA5Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2JpdG5vdChjb25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdz
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDksMjAgKzExMzksNiBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0
U2hpZnRGYXN0UGF0aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKLSNl
bHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlm
Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQ7CiAKQEAgLTg3MywyMSArMTE0OSw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0
U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQu
aXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7Cisg
ICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQ
UlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxG
UFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0
IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAu
ZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
Mik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07
CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNo
RlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBp
ZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwor
ICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1Qw
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNo
RlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2Vu
LmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3Qo
KSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQz
Mk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
c2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMiwxOCAr
MTIzNCw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZv
aWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFBy
b2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRk
PigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVt
cCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBS
LmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIu
ZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
Ynl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIo
KSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3
aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNT
bG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblBy
b2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUgKzEyOTIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0
ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0Lgot
ICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZm
bGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3Jj
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAg
SlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBs
YWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9
IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBi
ZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAg
ICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVm
ZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVn
cyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVn
cyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxMzI5
LDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1h
dGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRj
aEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwot
CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2lu
c3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
TWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2Vu
ZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNs
b3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBA
IC05NjMsNyArMTM1NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRo
SUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShy
ZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRG
dW5jdGlvbj4KQEAgLTk3NCwzOSArMTM3Miw4MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBw
ZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwor
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5z
ZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAg
bGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Cisg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVM
RUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hG
UFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAg
IEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQog
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmln
aHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRp
ZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgewor
ICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3Bl
cmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07Cisg
ICAgICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBs
ZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAg
ICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJl
c3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0
VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIo
KSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0
VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAg
ICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAg
ICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAg
ICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdl
bmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYg
KCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAg
fQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmln
aHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0g
R2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsK
ICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxp
ZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBp
bmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTUsMTcgKzE0NTYsMzQgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0
ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJh
dGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYg
KGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXND
b25zdCgpKSB7CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsK
KyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigp
IH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAg
ICAgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNl
IGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
KTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsx
NDkzLDIwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9
KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVz
dWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6Omlz
X3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRj
aEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikK
K3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJ
bnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCArMTUxNSw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElD
U2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNW
YWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcg
KzE1NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUg
UmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rp
b24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQo
Y3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwxNiArMTU2Miw2IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
LSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAg
CiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMu
Zmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNSwxNSArMTU3MiwzNiBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2Vu
ZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2Vu
ZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAg
ICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0
T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxl
ZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1
dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6
OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE2MzQs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
LSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgp
KTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYyICsxNjQ5LDIxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRE
b3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJh
bmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAg
IEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAg
ICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2Ny
YXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsK
KyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwor
ICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOwor
CisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQ
UiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBy
aWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAg
ICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBn
ZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRK
dW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExp
c3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwog
ICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAm
JiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJl
cikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBS
UmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3Vs
dEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUobGhzR1BSLCBsaHNGUFIpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKHJoc0dQUiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCBy
aHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFu
Y2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3Vs
dC5mcHIoKTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBS
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRN
YXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlTXVsT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3Vi
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1
YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHN1YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBT
cGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3By
KCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBi
aXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRo
SUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRl
Y29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgd2lsbERlZihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRv
cDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJvb2wg
SklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBy
ZWdUMCk7CkBAIC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJs
b2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciBy
ZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAg
ICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQog
ewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3LDQ0
IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxl
T3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFp
bENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRB
cmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0K
ICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNo
b3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxl
IGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisg
ICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPwor
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3Ip
IGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3Bl
cnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2tw
b2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENo
ZWNrcG9pbnRTbG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAg
PSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1Qw
ID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsK
KyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBy
ZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihp
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJl
ZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2
ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
ICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzog
TG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2Fz
ZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMg
b3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZO
b3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BS
KTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1
bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAg
ICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3Vs
dEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQ
Uik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0
ZXJzLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
aXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRo
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVj
a3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAg
ICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qz
OwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHko
dm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQ
YXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2
bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2tw
b2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0pOworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJh
dGlvbkRvbmUubGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01
MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAg
ICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxp
bmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEs
NyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAg
fQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklU
VHlwZSA6IHVpbnQ4X3QgewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVu
aywKICAgICBCYXNlbGluZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJ
VAogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwg
dGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3LDYgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtl
IGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxs
IHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY3LDI1ICsxNjksNiBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50
byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5l
bmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAi
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA3LDI3ICsx
OTAsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1
bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjpl
bnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwg
bV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93
UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9
PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7
CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nh
c2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJu
IG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQog
ewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExp
c3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVt
cCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1
bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdh
eSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChq
dW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGlu
dCByZWxhdGl2ZU9mZnNldCkKQEAgLTQwNiwxMSArMzk4LDYgQEAgQUxXQVlTX0lOTElORSBkb3Vi
bGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRl
ZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBS
ZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIs
OCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAog
I2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5o
IgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0
X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwog
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdh
bGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2Fu
IG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYg
KHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3Vy
cmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSBy
ZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVn
IGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JS
ZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAg
ICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsK
KyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNG
aW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAg
IGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0
cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFz
SW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5j
ZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGlu
dmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVj
dG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhp
cywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywg
aGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAg
ICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5j
ZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFu
Y2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYg
d2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3Rv
bWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNl
U3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigp
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7Cisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1
Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAn
SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMt
QVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0
b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Rv
ID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFz
ZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAg
IC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0
aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUg
Y2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdl
dF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2
YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8g
c2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNl
T2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVl
VGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHBy
b3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3Vs
ZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxh
Y2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhp
cywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigp
OworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAg
ICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3Rv
VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3By
KCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1
ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHBy
b3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJh
dG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwK
KyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAg
ICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2Vu
KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVs
eSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBz
aW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNl
IGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsK
KyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFs
IG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5
bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
cHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAg
ICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAg
ICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VP
ZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5
cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRl
ZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2Vs
bC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwor
ICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVt
cCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJl
c3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAg
IAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1
bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02NCkKKyAg
ICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NCha
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3Qg
SW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051
bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywg
cmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRl
c3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAg
LTI4MiwyMSArNTI4LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5z
dHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJ
bnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0lu
dDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwog
Ci0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0lu
dFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNr
KSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjpl
bWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVj
b2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05v
dENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDMsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZh
bHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0
KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFy
ZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0zNTUsNyArNzA4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVj
dGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNv
ZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1
ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlz
SW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9i
amVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNy
YykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMp
ICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVl
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQ
cmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAh
PSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5
bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUo
dmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5j
dGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhp
cywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0
aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVu
Y3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVu
Y3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1
bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVh
bih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291
bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhh
dCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAg
ICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZh
bHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBh
Z2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5k
IGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1Zh
bHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFs
bCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAo
d2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVs
eSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2gg
d2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0
aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAg
R1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBj
b25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5
dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihj
b25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29u
ZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIs
IFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3Jh
dGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJ
ZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3Ro
ZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
c2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1
YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAg
fQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVt
cCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5v
dyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFO
dWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
c2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0
aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0
ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwo
Y29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAg
fSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0
LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIp
KQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90
aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTY1LDMxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2lu
dGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwg
PSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFz
Q2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVt
cGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIo
RXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7
CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9p
bnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9M
KCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3As
IE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVx
dWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6
IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJo
cykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0lu
dChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChy
aHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBS
ID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQ
UiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzog
Q291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJo
cyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3Nh
bWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7
Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBD
b21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyks
IHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNU
ZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdl
dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxh
dGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsK
KworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwot
ICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcg
cmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90
RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
Cit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdU
MTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihU
cnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30K
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6
OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAg
R1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAg
fQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJy
YW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAg
ICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxo
c0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1p
dF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01
ODksNzQgKzE0ODgsMTQ2IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0
cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9
IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDog
Tm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5k
T3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJv
dmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1Zh
bHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNl
bGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BS
KSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQ
UikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxo
c0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAv
KiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6
Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290
byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMg
Q2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBv
ZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJ
ZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1Zh
bHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3Zl
cmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEg
bnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAot
ICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChy
ZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAg
Ly8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3Mg
YW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0lu
dDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdz
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21w
YXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJl
Z1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1Qw
LCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBz
bG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxs
IHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBk
b25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRo
aXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5h
aXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisg
ICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhl
biBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBo
aWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0
aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZp
bmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRk
NjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywg
cmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUp
OworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisg
ICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxl
YXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29t
ZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkg
bmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkK
KyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hC
b29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90
aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBs
ZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAg
Y29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFy
ZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjQ1LDEzNSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdw
Q29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFy
ZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwg
cHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBs
b3QgYmV0dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmco
cmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0lu
dChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJo
cykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgewor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBS
ID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEg
aGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1Bh
dGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAo
bGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAg
ICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVu
dHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJh
bmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdl
IHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0
aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2ls
bCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElm
IGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBo
aWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAx
PDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7
Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1Qz
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkp
OwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwot
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAg
IGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0g
ICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmlu
Z3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6
IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJp
Z0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJp
bmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhz
LCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAg
ICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJp
Y3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisg
ICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAg
ICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlz
IENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47
CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0
ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJy
YW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQg
aWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1h
a2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElm
IGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBo
aWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1
YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdU
MSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBh
ZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJl
Z1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJl
RXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAo
YXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAg
ICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5n
cyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8v
IEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUg
aXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBh
cmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVh
bC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAg
IC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAg
bW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIg
aXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5l
LCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEp
KTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBp
ZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAg
ICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NzQ4LDg5ICsxNzg2LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IElu
c3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQ
UiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BS
LCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNs
b3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDAp
OwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNv
ZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmln
SW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNC
eXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMy
KQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBh
dXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNo
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsK
KyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2Rl
TnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwor
CisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5w
dXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwg
d2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3
ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAg
ICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwNjUsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1
cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUu
bV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAm
PSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFu
ZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BS
ID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIw
OTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUt
PmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOwor
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC05MjIsOSArMjEyMSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJs
ZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTQ1
LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3Ry
aW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BS
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVi
dWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxvY2so
KS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVn
SG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNF
cSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVP
cCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQo
Y29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkg
eworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKwor
ICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEg
PyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0
aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVx
TnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBz
dGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAg
IC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBj
b25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lk
IHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVt
VmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAg
IGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0K
IAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyOTYs
MjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigp
OworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNj
b3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2Nv
cGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEwNDUsMTMgKzIzMjAsODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlz
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hl
ZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNE
c3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQ
Uiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAg
ICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRh
dGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBp
ZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChw
cm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2lu
Y2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAg
ICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAg
ICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAg
ICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0
aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUo
cmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qx
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1Zh
bHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBl
KHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjQwMSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5
dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFk
YXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAg
ICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyNDExLDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklE
IGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0g
cmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgq
dGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVn
ID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAx
LT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAg
ICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdw
clRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3By
KCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JS
YXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykp
KTsKQEAgLTEwODYsNjQgKzI0NTMsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMo
Y29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Omlu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lz
dGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQot
Ci0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMy
KFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigp
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
ISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0
R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9y
IExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAg
aGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTYy
LDggKzI0OTgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBj
YW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21J
bmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGln
aWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTOiBjbGVhciBy
ZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgogICAgICAgICB1
aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rp
b24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5
UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFy
bHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI1MjYsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
JikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9y
IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7
Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNh
dmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6
ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNTQzLDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAg
ICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BT
OiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9v
LgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1NjksOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBl
clNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNTc5LDE4IEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2Rl
Lm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJl
Z2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7
CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI2MDAsNDIgQEAgdm9pZCBKSVQ6
OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAg
IEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAg
c2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1
c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BS
KTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9j
ay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlE
IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
YykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQ
UiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNjY0LDQ2IEBAIHZvaWQg
SklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNj
b3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsK
KyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3BlLnJlc2V0KCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlE
OwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
Z2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlv
bik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
RnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI3MzQsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29k
ZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1Qw
LCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdH
UFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNT
dGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJn
R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEu
bV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTM2MCwxNCArMjc1NSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdH
UFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlz
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0K
KwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5k
ZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Fy
cmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDAp
OworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAg
ICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
YXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMjc4OCwzNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVu
dW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNl
IH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAgICAg
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI4MzcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1f
dXNlTE9MID0gZmFsc2U7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OwpAQCAtMTQzNiw2ICsyODY2LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhl
ZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAv
LyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4OTMsMTUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBt
b2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5
TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVK
dW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMjkxMCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAg
ICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbklu
Zm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwg
bW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJ
bmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
bmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMjk0Myw4MSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBp
cyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUg
eyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7
ICp0aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMs
IGJhc2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwot
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChi
YXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAg
ICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0
aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAot
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisg
ICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
aW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5l
QWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0
cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qy
KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYg
aW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdl
LCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGlu
ZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCBy
ZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzAyNyw1MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6
IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9y
VGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgq
dGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVt
ZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAt
PmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9
IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVt
cCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhP
ZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJv
dW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9Q
dHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BS
LCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDgxLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAg
aW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAg
IEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0
aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5k
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAg
ICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBl
bnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBl
bnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1l
c0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0
KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmlu
ZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszMTM1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2Nh
dGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFs
UmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsK
QEAgLTE2NTgsNiArMzE5Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25z
dCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBk
YXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1Qw
ICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBp
cyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszMjE0LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBz
cGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19h
c3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2ls
bCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTcw
MiwxMSArMzI0NywyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJ
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVu
dENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVn
VDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1Zh
bHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94
SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3Ro
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjY4
LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51
bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2Fk
MzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyks
IHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHpl
cm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJh
bXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwor
CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVz
dWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVt
UGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBz
ZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKdW1w
IHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1Q
YXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVn
VDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwog
I2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIHplcm9MZW5ndGgubGlu
ayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Qw
KTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdU
MSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJl
Z1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQs
NDkgKzMzMTcsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1
bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOwor
ICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxz
ZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJl
Z1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgp
KSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRP
dXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1
bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1Qy
KTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5P
ckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBp
bmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAg
ICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZVZhbHVlKGpz
VW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmpl
Y3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVH
UFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAg
ICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwog
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwor
ICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0
Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZh
bHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xv
d0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdz
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0y
MTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CkBAIC0yODEsOCArMjc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZh
bHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0
byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTk4LDggKzU5MSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzOSw4ICs2MzAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02ODYs
OCArNjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjksOCAr
NzE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC03NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAt
ODE5LDggKzgwMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTExMDAs
OCArMTA4MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRz
dCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAt
MTI1Nyw4ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7
CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJk
YS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVF
NjQpCiAKQEAgLTUyLDUxICs1NCwxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdU
eXBlR1BSID0gcmVzdWx0R1BSOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDA7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1f
c2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJ
ZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVj
Q2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRl
eGluZ1R5cGVHUFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAg
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJv
cGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVy
dHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAg
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0
eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsK
KyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25seSkpCisgICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAg
ICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwg
U3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAg
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFs
SW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5
VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5k
ZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTcsNiArMjU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRC
eVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BT
OiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdl
ckNvbnN0YW50KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAKKyAgICBhdXRv
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1dEtpbmQpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0zMzks
NyArNDQ0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAg
IHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Nyw3ICs0NTIsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwog
Ci0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRl
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzgxLDYgKzQ4NSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAg
c3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IERvIGJldHRlciBpZiB3ZSBjYW4hCisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5NCwxMyArNTAwLDEyIEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwg
ZmFzdFBhdGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFByaXZhdGVOYW1lPigpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAg
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKQEAgLTQyMCw0OSArNTI1LDEwNSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJC
eUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFz
ZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9h
Y2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vz
c29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRl
ciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBz
ZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVn
VDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCBy
ZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRl
Y29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5
dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jh
c2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1f
cHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0
dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2MzMsNTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC00OTIsMjUgKzY4NywyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
ZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0
LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJv
cGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3Bl
cnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9w
ZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAg
ICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNl
IHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KQEAgLTU0MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVRE
ZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQog
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
ICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRS
ZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAg
ICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRh
ZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAg
ICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVnVDE7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGlu
Z1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQ
cm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQog
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIs
IHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRC
eUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0
aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3Qo
KTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0
byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3Rv
cmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUg
YmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0
ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5
cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BS
LCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1Qy
LCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAg
ICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03NjUsNzcgKzExNjAsOTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxp
bmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihi
YXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBT
aG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwot
Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBi
YXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhp
cyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigp
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcg
cmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAg
IHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRo
KQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1
bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0NywxNyArMTI2MCwyNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRo
ID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdU
MDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1Qx
KTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTg2NywyMSArMTI4OCwzNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0
YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNs
b3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBk
ZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAg
ICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisg
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50Lmdl
dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgpAQCAtODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCBy
ZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BS
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk0MCwxNSArMTM3
NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBs
b2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9h
ZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZh
ckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05NjIsMTIgKzE0
MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9h
ZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihS
ZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05Nzgs
NTEgKzE0MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJl
ZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAg
ICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAg
ICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAg
ICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgog
CiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAg
ICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFu
ZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAg
ICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5k
ZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAg
Y2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1p
dEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
cmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC0xMDM2LDEwICsxNTA0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1
dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0g
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTEwNTIsMjcgKzE1MjAsMjcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIp
OyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Miw0MCArMTU1MCwyMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmVnVDApOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAg
IHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0
V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAg
bG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJl
Z1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTEyOSwyMSAr
MTU3OSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsK
ICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Qq
PigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9
IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVn
VDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Ym9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZh
bHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9m
ZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
ICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNl
dEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIg
PSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVn
VDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90
LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBz
Y29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAg
ICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwg
b2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOworICAgICAgICAgICAg
c3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9mZnNldEdQUiwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90
b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBw
cm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRl
KG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1
ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVH
UFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAg
ICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAg
LTExOTAsMTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNh
bWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdl
IHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRl
bXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4K
IAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTEyMDksMjMgKzE3
MjUsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0K
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2Yg
ZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYg
d2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdh
aW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjYxLDYxICsxNzg0LDE3
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFy
Z3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1
bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHZh
bHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOwor
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKyAg
ICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1v
ZGUpCiB7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBp
ZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2gg
YXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBp
dCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0
ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0
ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUg
Zm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmly
dHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91
bGRGaWx0ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewor
ICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAg
ICAgIGlmICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsK
KyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAgICAgaWYgKGdwckZv
ck9wZXJhbmQob3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBvd25lckdQUiA9
IGdwckZvck9wZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG93bmVy
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgb3duZXJH
UFIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG93bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShv
d25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOwor
ICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMu
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNw
aWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQor
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBpZiAob3duZXJO
b3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIC8vIE9PUFM6
IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFy
b3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBm
ZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1
bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2lu
Y2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtl
IGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZp
bGwKKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1
ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVy
KTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVO
b3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApA
QCAtMTMyNywxMSArMTk2NywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmll
bGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7
ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5k
IQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsxOTk2LDIzIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAv
LyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNw
ZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkp
OworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAg
ICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0
ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW47CisgICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJh
cnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlv
bmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCks
IG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwo
KnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUxLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElk
ZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNTY3LDYgKzIyNTQsOCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQg
cHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VM
T0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYg
T3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRL
aW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpy
ZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1
cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3Qg
eyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3Jv
QXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2Fs
bCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRv
IHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9y
Q2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0
LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDggQEAgaW5saW5lIGJvb2wg
c2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsbwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3Vs
ZCB0cnkgdG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKKyAgICAvLyBPT1BTOiBJbXBsZW1lbnQg
dGhpcyB3LnIudCBMT0wuCisKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQg
dG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMywxMCBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxs
SklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygp
CiB7CisgICAgLy9PcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgLy9PcHRpb25zOjpmb3Jj
ZUxPTCgpID0gMTsKKyAgICAvL09wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmlu
ZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9
IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNyw3IEBAIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgdXNlSklU
Q2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVz
ZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFy
c2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFz
c2VzLiIpIFwKICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHJpdmF0ZSBzdGF0
aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0ws
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAg
IFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVu
bmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewog
ICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShE
RkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBq
c051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0
aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAg
IHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vsc2UKSW5kZXg6IExheW91dFRl
c3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHJldmlzaW9uIDI3MDc4OSkKKysrIExheW91
dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNCw3
ICs0LDIxIEBAIHZhciBzZWxmID0gdGhpczsKIAogc2VsZi50ZXN0UnVubmVyID0gewogICAgIG5l
dmVySW5saW5lRnVuY3Rpb246IG5ldmVySW5saW5lRnVuY3Rpb24sCi0gICAgbnVtYmVyT2ZERkdD
b21waWxlczogbnVtYmVyT2ZERkdDb21waWxlcywKKyAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiAo
ZnVuY3Rpb24oKSB7CisgICAgICAgIGxldCBtYXA7CisgICAgICAgIHJldHVybiAoZikgPT4gewor
ICAgICAgICAgICAgaWYgKGlzREZHRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dW1iZXJPZkRGR0NvbXBpbGVzKGYpOworCisgICAgICAgICAgICAvLyBFbXVsYXRlIHJ1bm5pbmcg
dGhpcyBmdW5jdGlvbiBmb3IgYSBiaXQgdG8gZ2V0IHNvbWUgdGllcmluZyBiZWZvcmUgcmV0dXJu
aW5nIHRydWUuCisgICAgICAgICAgICBpZiAoIW1hcCkKKyAgICAgICAgICAgICAgICBtYXAgPSBu
ZXcgV2Vha01hcDsKKyAgICAgICAgICAgIGxldCBjb3VudCA9IG1hcC5nZXQoZikgfHwgMDsKKyAg
ICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgICAgICBtYXAuc2V0KGYsIGNvdW50KTsKKyAg
ICAgICAgICAgIHJldHVybiAoY291bnQgLyA0MDAwKSB8IDA7CisgICAgICAgIH07CisgICAgfSko
KSwKICAgICBmYWlsTmV4dE5ld0NvZGVCbG9jazogZmFpbE5leHROZXdDb2RlQmxvY2sKIH07CiAK
QEAgLTE0OSw4ICsxNjMsOSBAQCBmdW5jdGlvbiBkZmdTaG91bGRCZSh0aGVGdW5jdGlvbiwgX2Es
IF9iCiAgIHZhbHVlcy5wdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7CiAgIAogICB0cnkgewot
ICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkKKyAgICB3aGlsZSAoIWRm
Z0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpIHsKICAgICAgIHZhbHVlcy5wdXNoKGV2YWwoX2Ep
KTsKKyAgICB9CiAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOwogICB9IGNhdGNoIChlKSB7CiAg
ICAgZXhjZXB0aW9uID0gZTsKQEAgLTM0Niw3ICszNjEsNyBAQCBmdW5jdGlvbiBkZmdJbmNyZW1l
bnQoYXJndW1lbnQpCiAgICAgaWYgKGRpZEZhaWxTb21lVGVzdHMpCiAgICAgICAgIHJldHVybiBh
cmd1bWVudC5pOwogICAgIAotICAgIGlmICghZGZnQ29tcGlsZWQoYXJndW1lbnQpKQorICAgIGlm
ICghZGZnQ29tcGlsZWQoYXJndW1lbnQpICYmIGlzREZHRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm4gInN0YXJ0IiBpbiBhcmd1bWVudCA/IGFyZ3VtZW50LnN0YXJ0IDogMDsKICAgICAKICAgICBy
ZXR1cm4gYXJndW1lbnQuaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416490</attachid>
            <date>2020-12-17 19:19:34 -0800</date>
            <delta_ts>2020-12-18 19:18:29 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>490509</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY0Niw5ICsxNjQ2
LDkgQEAgbGV0IHJ1bldhc20gPSB0cnVlOwogaWYgKHR5cGVvZiBXZWJBc3NlbWJseSA9PT0gInVu
ZGVmaW5lZCIpCiAgICAgcnVuV2FzbSA9IGZhbHNlOwogCi1pZiAoZmFsc2UpIHsKK2lmICh0cnVl
KSB7CiAgICAgcnVuT2N0YW5lID0gZmFsc2U7Ci0gICAgcnVuQVJFUyA9IGZhbHNlOworICAgIHJ1
bkFSRVMgPSB0cnVlOwogICAgIHJ1bldTTCA9IGZhbHNlOwogICAgIHJ1blJleEJlbmNoID0gZmFs
c2U7CiAgICAgcnVuV1RCID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5o
YW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZh
dGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9u
QXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFi
bGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlm
IChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkp
IHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0p
KTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNt
U2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25B
bmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkK
QEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3Rv
cjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1
bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBA
QCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0
LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGlj
dGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVh
ZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
c0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlv
bnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fs
cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAg
ICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAg
ICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkg
ewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0
KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVj
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91
dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVh
bSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01h
cCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3Rh
bnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUdyYXBoLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZv
aWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+
PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxl
KCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRl
ciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0
aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFu
ZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgT3BlcmFuZCBkZXN0aW5hdGlvbkZvcihjb25zdCBCeXRl
Y29kZSYgYgogICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBv
cF9pdGVyYXRvcl9uZXh0KSB7CiAgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CiAg
ICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiB7Ci0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpERkdKSVQpCisg
ICAgICAgICAgICBpZiAodHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgdHlwZSA9PSBKSVRUeXBl
OjpGVExKSVQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChPcEl0ZXJhdG9y
TmV4dDo6bmV4dFJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGUubV92YWx1ZTsg
Ly8gV2UgcmV1c2UgdmFsdWUgYXMgYSB0ZW1wIGJlY2F1c2UgaXRzIGVpdGhlciBub3QgdXNlZCBp
biBzdWJzZXF1ZW50IGJ5dGVjb2RlcyBvciB3cml0dGVuIGFzIHRoZSB0ZW1wIG9iamVjdCAuCiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7
CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCkKKyAgICBpZiAoKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8
fCB0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsK
ICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5w
cmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwog
ICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0
aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8
Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBz
dGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBH
cmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0
dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYg
c3RhdHVzTWFwKQpAQCAtMTA1OCw2ICsxMDU4LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2
ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAg
ICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc2LDggQEAgc3RhdGljIFNl
Y29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAx
MCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJ
bnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsK
KyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgpAQCAtMTU0OCw2ICsxNTUyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIuY291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJh
c2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNv
dW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgpAQCAtMTg2Nyw3ICsxODcyLDcgQEAgQ29kZUJs
b2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkg
ewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgewor
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBl
KSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3Zl
IGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8v
IGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpj
bGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2Rl
QmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJ
VApAQCAtMjQ4Myw2ICsyNDg4LDggQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0Nv
bXBpbGVzKAogewogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkp
KTsKICAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAgIGlmICghT3B0aW9u
czo6dXNlREZHSklUKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAg
IHJldHVybiAobV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcjsKQEAgLTI3MDksNyArMjcxNiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpm
b3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25U
aHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKLSAgICBpZiAodHlwZSAhPSBKSVRU
eXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklU
ICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbigqdGhpcywg
IjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBjb2RlIGJ1dCBoYXZlICIsIHR5cGUpOwogICAg
ICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaml0Q29kZSgpLmdl
dCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkpOwogICAgIH0KQEAgLTI5NDgsNiArMjk1
NSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERG
R19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7CisgICAg
Ly8gT09QUwogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7
CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5
cGUoKSkpOwogICAgIApAQCAtMzA1MCw2ICszMDU4LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpm
cmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6
OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICByZXR1cm4g
SklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IApAQCAtMzQyMSw3ICszNDMwLDcgQEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2Nr
OjpieXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAg
ICAgSklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkKKyAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGpp
dFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xK
SVQpCiAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBjYWxsU2l0ZUluZGV4LmJ5dGVjb2RlSW5kZXgo
KTsKICAgICBlbHNlIGlmIChqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09
IEpJVFR5cGU6OkZUTEpJVCkgewogI2lmIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjcwNzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MzgsNyArNDM4LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNCYXNlbGluZUpJVFBy
b2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAg
ICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlw
ZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMiw3
IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9y
Qnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmls
ZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBm
b3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0
b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVBy
b2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUo
Y29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwog
ICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1f
cmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFy
ZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOSBAQCB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpCiAgICAgY2FzZSBFeGl0RnJvbUFueXRoaW5nOgogICAg
ICAgICBvdXQucHJpbnQoIkZyb21Bbnl0aGluZyIpOwogICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBFeGl0RnJvbUxPTDoKKyAgICAgICAgb3V0LnByaW50KCJGcm9tTE9MIik7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEV4aXRGcm9tREZHOgogICAgICAgICBvdXQucHJpbnQoIkZyb21ERkci
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4aXRpbmdKSVRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWlu
dDhfdCB7CiAgICAgRXhpdEZyb21Bbnl0aGluZywKKyAgICBFeGl0RnJvbUxPTCwKICAgICBFeGl0
RnJvbURGRywKICAgICBFeGl0RnJvbUZUTAogfTsKQEAgLTM4LDYgKzM5LDggQEAgZW51bSBFeGl0
aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogaW5saW5lIEV4aXRpbmdKSVRUeXBlIGV4aXRpbmdKSVRU
eXBlRm9yKEpJVFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEpJ
VFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIEV4aXRGcm9tTE9MOwogICAgIGNhc2UgSklU
VHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gRXhpdEZyb21ERkc7CiAgICAgY2FzZSBKSVRU
eXBlOjpGVExKSVQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgPHR5
cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wZXJh
bmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tD
YWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKICAgICB1c2luZyBTdG9y
YWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0
VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+PjsKQEAgLTE0MywyMSAr
MTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhw
bGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6
ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywg
c2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAw
KQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251
bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRz
KQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMg
KyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2Fs
cyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlOwogICAgICAgICBtX3Zh
bHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVk
c0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkpOwogICAgIH0K
IAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1M
b2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGlj
aXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90
IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAg
ICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2Nh
bHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAg
ICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVt
VG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsg
bnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWUpOwogICAgICAgICBtX3ZhbHVl
cy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApAQCAtMTY1LDYgKzE2OCw3IEBAIHB1
YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJh
bmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1f
bnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICwgbV9udW1M
b2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhv
dGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAgICAgICAgbV92YWx1ZXMuZ3Jvdyhv
dGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CkBAIC0x
NzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMo
KSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQogICAgIHNpemVfdCBudW1iZXJPZkxv
Y2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9m
VG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRz
KCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAt
IG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50cygpIC0gISF0cmFja0NhbGxlZTsg
fQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6ZV90IGNhbGxlZUluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSAxOworICAgIH0KICAg
ICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJl
ck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKTsK
ICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0
dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKICAg
ICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorICAgIHNpemVf
dCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAgICB9CiAKICAgICBSZWZUeXBlIHRt
cChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIENv
bnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5k
ZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0
dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgYXJn
dW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChp
ZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6
OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgUmVmVHlwZSBjYWxsZWUoKSB7
IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVl
LCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBD
b25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CiAg
ICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2Nh
bEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKworICAgIFJlZlR5cGUgY29u
c3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsg
fQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4LDcg
KzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9m
QXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdT
aXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgbnVtYmVyT2ZDb25z
dGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9j
YWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1i
ZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsy
OTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9s
ZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5n
cm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6
OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewpAQCAtMzA1LDggKzMyNywx
NSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQor
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0
ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRl
cigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1
cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0
dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKQEAgLTMxOSw4
ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkK
KyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25z
dGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFk
ZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3Rh
bnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbChvcGVy
YW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzc0LDggQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpIDwgbnVt
YmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3Bl
cmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAgICAgYm9vbCBoYXNP
cGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArNDAyLDE1IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4KTsK
LSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9m
QXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRt
cChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOworICAg
ICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSAr
IG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVy
Rm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMo
KSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgIGlm
IChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAgIH0KIAogICAgIHZvaWQgZmlsbChU
IHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1f
bnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9j
YWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAgICAvLyBUaGUgZmlyc3Qg
bV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1M
b2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25zdGFudHMgYXJlIGNvbnN0YW50cywg
YW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5zaWdu
ZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07
CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBA
QCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3RyZWFtJiBvCiAgICAgICAgIG91dC5w
cmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lk
IE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4K
K3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBj
b21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3Vt
ZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01NywxMCArNTcsMTIgQEAgdm9pZCBPcGVy
YW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0
bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tD
YWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgaW5Db250ZXh0
KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9w
ZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAi
KTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsg
YXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CiAgICAg
fQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5o
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Bl
Y3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUg
Ym9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEo
dmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUg
JiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05v
dEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZh
bHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5z
IHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhh
dCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0
ZXIuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNz
IFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGludCwgaW50KTsKKyAgICBm
cmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCk7CiAK
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZm
ZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIg
IT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAg
IGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1l
bnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlz
Q29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0
dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9M
b2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbCht
X3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFu
ZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0
dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CiAgICAgc3Rh
dGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50
ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQorICAgIHN0YXRpYyBpbnQgY29u
c3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgpIHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQogCiAgICAgaW50IG1fdmlydHVhbFJlZ2lz
dGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6
OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9mZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50IGNvbnN0YW50SW5kZXgp
Cit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50
VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhC
eXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9j
YWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAg
LCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMs
IG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNv
dW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBA
IHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKIHsKICAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
NCw2ICszOTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAg
ICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhpdElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisg
ICAgLy8gT09QUzogTWFrZSB0aGlzIGRvIHRoZSByaWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Ig
bm90LgogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVC
bG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQg
PT0gY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2
IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKIHsKICAgICBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJp
YWJsZXM7CiAgICAgdW5zaWduZWQgbnVtVG1wczsKQEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25l
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9
IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNv
ZGVCbG9jay0+bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBl
bHNlIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCk7IC8vIE9PUFM6IGJ5dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1W
YXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAg
IG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAg
ICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xl
YXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8
QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5
Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAg
ICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAg
ICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUs
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlz
aW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTUgQEAgYm9vbCBDYWxsRnJhbWU6
OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlTwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5
cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICBjYXNlIEpJ
VFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSklUVHlwZTo6Tm9uZToK
ICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTcyLDYgKzc0LDEwIEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVD
b2RlT3JpZ2kKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJs
b2NrKCktPmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoK
KyAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklU
OgorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAg
Y2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzksOCArODUs
NiBAQCBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpCiAgICAgY2FzZSBK
SVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwx
NiBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5o
IgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUg
IkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwu
aCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzUzLDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2Rl
V29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJ
bnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpA
QCAtNjAsNiArNjYsODY4IEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMg
dG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwog
Cit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBT
cGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJh
bmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0
byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0
ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJv
ZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQg
b25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJl
ZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXND
b25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQ
cmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRo
aXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVj
dF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
b25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zy
b21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90
b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1Ro
aXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3By
b2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0
b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNl
dFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0
PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVBy
b2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBt
ZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6
CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFt
ZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJv
dG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9m
aWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
d2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251
bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2Fy
Z3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2Fk
ZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOwor
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7
CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0Rv
dWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8
fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQg
fD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBy
ZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNC
eXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRl
Y29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlv
bihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBi
ZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3Bl
Y0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7Cisg
ICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisK
KyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEu
bV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChw
cm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNE
b3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAg
ICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9u
TmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91
YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVy
ZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2lu
dDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0lu
dFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwg
U3BlY0JpZ0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BT
dWI+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9t
dWwpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAg
ICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAg
ICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAm
JiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBj
YW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1
aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGlu
dDMyIHJlc3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVk
PigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAg
ICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAo
aW5wdXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9
IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5
cGUoZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAg
ICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlm
IChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUo
Ynl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRl
Y29kZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZv
cihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZv
cihieXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVj
QmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoK
KyAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBi
eXRlY29kZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xo
cyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7Cisg
ICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGlu
c3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihi
eXRlY29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0
byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3Bl
Y1N5bWJvbCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wQ2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAg
ICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxk
IGRvIGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYg
d2UndmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAg
ICAgICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRo
aXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAg
ICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAg
ICAgIHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxP
YmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAg
ICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQg
dHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVz
b2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVU
aGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lu
X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21p
c2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4o
KSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNh
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNT
dHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhw
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3lu
Y19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVu
Yz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5
bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5
bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRo
X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2Nv
cGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3Jl
YXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+
KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFz
U3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNf
cHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJp
Y1Byb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVj
U3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJh
dG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19m
dW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BS
ZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3Ap
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCks
IFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVu
dHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291
bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4o
KSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmpl
Y3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
cT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
cmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlw
ZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BU
eXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmln
SW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19m
dW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1
bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Y29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25z
dHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Vx
X251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90
b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5t
X2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVj
dWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJp
ZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
bnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVv
Zj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19j
ZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Nl
bGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNh
c2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bf
c3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAg
IGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9w
X3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0
aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNl
IG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0
X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBj
YXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgor
ICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6
CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNl
IG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6
CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9q
bmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNh
c2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0
ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNh
c2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9q
YmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAg
ICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNl
IG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBj
YXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93Ogor
ICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRl
cl9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBj
YXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoK
KyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRf
ZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGlu
dF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rp
b25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29u
c3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6
CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNh
c2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25h
dGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3Ry
YW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xp
bmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBv
bGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNl
IGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dl
dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29w
ZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRf
cHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5k
aXJlY3Rfbm9fdGxzOgorICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hh
bmRsZV91bmNhdWdodF9leGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2Nh
bGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29w
X3RhaWxfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9pdGVyYXRvcl9vcGVuOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
Y2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92
YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50c19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFy
YXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hl
Y2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2Fs
bDoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ug
d2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJv
cGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFw
aD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVk
aWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJl
ZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAw
LCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFs
dWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAg
ICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAg
ICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xu
KCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVBy
b2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJn
KTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmls
ZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRh
dGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdU
Rjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0
aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdl
ZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2
ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93
IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElz
IGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50
IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBj
YXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4K
KyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9j
ayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMg
PSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAo
IWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZz
ZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRI
ZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2N1cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQ
cmVkaWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChj
aGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAg
bV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBt
X3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q2FsbCgKQEAgLTY3LDYgKzkzNSwxMiBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0
clRhZz4oKSk7CiB9CiAKK2Jvb2wgSklUOjp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxP
TCA9IHRydWU7CisgICAgcmV0dXJuIG1fdXNlTE9MOworfQorCiBKSVQ6OkpJVChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJw
cmV0ZXIodm0uaW50ZXJwcmV0ZXIpCkBAIC03Niw2ICs5NTAsNyBAQCBKSVQ6OkpJVChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFs
c2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKIHsKKyAgICBtX3VzZUxPTCA9IE9wdGlvbnM6OmZvcmNlTE9MKCk7CiB9CiAKIEpJ
VDo6fkpJVCgpCkBAIC0xMzcsMTEgKzEwMTIsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwK
ICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwK
KyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8j
I25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCkgeyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAg
ICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAg
ICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNlTE9M
KCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAgICB9
IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsg
XAogICAgIH0KQEAgLTE1NiwyNiArMTAzNywzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNh
c2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmlu
ZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsg
XAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xv
d19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93
Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVz
dWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3Qu
aXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2Fz
ZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5F
WFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VD
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklU
OjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blBy
ZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAK
QEAgLTIzMSwxOCArMTExOCw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZv
ciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3Vz
U2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNv
ZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNl
dCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0
cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBM
ZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAg
ICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVu
ZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkg
eworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJs
b2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8g
c3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFw
cGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAot
ICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkp
OwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1
Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyAp
IHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJs
b2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRl
ck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxz
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5k
IG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdU
Rk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVu
dEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkp
OworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNl
c3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3Jd
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJl
ZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ld
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgq
bV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlv
bnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2Fz
ZXMuc2l6ZSgpOworICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICAv
LyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFy
ZSB1bnJlYWNoYWJsZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNo
aW5nIGlmIGl0J3MgZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxh
YmVsKCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIEFTU0VSVChj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OwogCkBAIC0yNzgsNDYgKzEyMzEsNTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0g
ICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bGVzcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xP
V19PUChncmVhdGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19j
b25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJ
TkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBl
b2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5
X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5f
ZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0
YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFk
KQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxl
X2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBE
RUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1
bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5
KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNl
KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19P
UChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERF
RklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+
KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAg
IERFRklORV9TTE9XX09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4o
KS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R3JlYXRlcmVxPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
aXNfY2FsbGFibGUsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0
LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVh
bikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mPigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0
eXBlb2ZfaXNfb2JqZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+
KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNf
ZnVuY3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1f
ZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9u
ZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3Qs
IFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRo
X3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0
LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhp
cywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChw
dXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5f
ZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVu
Y0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19P
UChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdp
c3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZp
cnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3df
c3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklO
RV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVf
U0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJy
YXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3By
ZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90
aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50
MzJPbmx5KQorICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jv
b2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBT
cGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RB
cmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0
LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xv
bmVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3Vt
ZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0
ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVS
ZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9w
cm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwg
U3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VP
YmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhl
cikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2Jq
ZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93
PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERF
RklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyAr
MTM1OCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERF
RklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3Vw
ZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4
Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9T
TE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3Bf
bW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVn
YXRlKQpAQCAtNDc4LDYgKzE0NDIsMzkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQogCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7
CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3
aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9q
bXA6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2hhc19pbmRl
eGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVu
dGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6
CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9w
X2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExP
TDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0
cnVjdGlvbik7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAg
ICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUo
KSwgIlxuIik7CiAgICAgfQpAQCAtNTE2LDEyICsxNTEzLDE0IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3VudGVk
QXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CiAg
ICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBm
b3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93Q2Fz
ZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRleDsK
IAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCks
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBm
aXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5saW5r
KHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUlu
ZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAg
ICAgICAgCkBAIC01ODAsNyArMTU3OSw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2Qp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBA
IC01OTksNiArMTU5Nyw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1df
T1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzUsMTUg
KzE2MzYsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJz
dFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQo
KSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBq
dW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNl
dCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAg
ICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVy
ID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zm
c2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsK
KyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9
PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93
IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVz
cygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMs
IHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQ
YXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7
CiAgICAgfQpAQCAtNzc4LDYgKzE3ODIsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlu
a2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChs
YWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAg
ICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7Cisg
ICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hl
Y2twb2ludCBleGl0cy4KKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0
clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygp
LmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAgICAvLyBPT1BTCisgICAg
ICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBkZXN0
aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUo
KTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpu
b3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworCisgICAgICAgIG1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5tZXRhZGF0YVRhYmxlKCkpLCBM
TEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKTsKKyAgICAgICAgbW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIo
KSksIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6
cGNHUFIpOworICAgICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0
aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBm
YXJKdW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKyAgICB9CisKICAgICBzdGFj
a092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05NjcsNyAr
MTk5Myw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29kZVJl
ZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1
ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIs
IHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/IEpJ
VFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAg
ICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFk
ZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05Nzgs
NyArMjAwNCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fY29k
ZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNo
cmluayk7CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9w
dFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1
bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAg
ICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1f
Y29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRy
KCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAt
MTA3Miw2ICsyMDk4LDcxMyBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAg
ICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUg
KyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwg
SnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1f
ZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29k
ZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1
bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93
ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3
ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21waWxl
IGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMg
bGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisK
KyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwor
ICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7
CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2Fs
bGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7Cisg
ICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93
ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3
ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGls
ZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5z
IGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgor
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BS
SW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGlj
IFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVy
IHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAg
dGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVl
ZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRh
IGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5Owor
ICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBz
dGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29t
cHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQu
Z2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BT
OiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNl
ZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0
Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgp
LmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9
CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIo
KSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYg
cmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFs
dWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAg
ICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAo
IXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRl
ZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9j
a0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBj
bG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1w
bChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRp
b24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5k
OworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcu
aXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5n
cHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFs
bG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAg
IH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0Nv
dW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRv
ZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNh
bGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
QW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3
ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVy
LCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVy
d2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2Qg
ZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVn
VmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVl
LmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7Cisg
ICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3Rl
clNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Cisg
ICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byBy
ZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkK
KyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMo
KSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09Q
UzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAg
YXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9j
YXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVk
KHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5k
SWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVj
b3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNv
dWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsKKyAgICBT
YXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVn
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUu
b3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAg
ICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJz
KCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXN1bHQuc3RhY2tTaXpl
Rm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9T
dGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxl
bnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKnRoaXMsIHJlY29yZC5zcGlsbGVkUmVn
aXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JTcGlsbCwgMCk7CisgICAgcmVzdG9yZUZy
b21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCksIHJlY29yZC5zYXZlUGxhbik7Cit9
CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQorewor
ICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBwYWly
LmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25kOwor
ICAgICAgICBpZiAocmVnID09IHJlZ1RvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChvcGVyYW5kID09IG9wZXJhbmRUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQocmVnLmlzRlBSKCkpOworICAgICAgICAgICAgbm9wKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNTRVJU
KCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERvdWJs
ZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgbm9wKCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
Y29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xv
d0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9p
ZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQorewor
ICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihn
cHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVn
VmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9
OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNW
YWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFk
ZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFs
aWRhdGUgdGhhdCBmb3IgYnl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERl
ZiB3YXMgY2FsbGVkLgorICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJl
ZyhmcHIsIG9wZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29k
ZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0Fs
bG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdp
bGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQg
SklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1
ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICAr
K3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQorewor
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
bG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVl
LmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1Zh
bHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBo
aW50KQorICAgIDogbV9qaXQoaml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJl
ZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1
cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9
IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAg
cmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9n
cHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChq
aXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnBy
ICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAg
ICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJU
ZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQ
UlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6
OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBt
X2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0g
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVy
YW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQz
Mk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAg
ICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25S
ZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisK
KyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkp
KQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQz
MihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9u
bHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAg
IG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIo
KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9n
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0g
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0g
bV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9v
cGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0Nl
bGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFn
UmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxD
aGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RD
ZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3Bl
cmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90
Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKwor
ICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsK
KyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3Np
Z25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dw
ciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVy
YW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVl
T3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6
VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlm
IChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0
LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3Vi
bGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2pp
dC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVn
KQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFu
ZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91Ymxl
T3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
eworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0g
cmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4g
bV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5k
IHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAg
R1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQu
bG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2pp
dC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRU
eXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdp
c3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
Tm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0
ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVE
b3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9m
cHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0
dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyBy
ZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAg
ICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJl
Zyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAg
IGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisg
ICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZh
bHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1i
b2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7
Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9
CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9u
bHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkp
OworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFs
dWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30K
Kwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29u
c3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9v
bCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChv
cGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICByZXR1cm47CisgICAgfQorCisj
aWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihvcGVyYW5kKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0
Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0lu
dDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0lu
dDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0lu
dDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKQoreworICAgIGlmICgh
dXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2st
PmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMo
KTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVn
aXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNh
bGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZyA9
IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50
cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMg
PSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIsICIsIGxvY2tDb3VudCwgIiki
KTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkKK3sKKyAgICBkYXRhTG9nTG4o
IlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEdQUnMo
KSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICAg
ICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdW
YWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dl
ZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAg
ICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAi
LCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkYXRhTG9nTG4oIl0iKTsK
K30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNl
ZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAg
Y2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3Mg
Q29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwNiwxNSArMTEw
LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBT
bG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAg
ICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9t
KGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3Rk
OjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxS
ZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
c3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7Cisg
ICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+
IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNo
ZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAg
ICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNl
ZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1
bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZv
ciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5
Nyw2ICsyMTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklU
IDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVy
ZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxMiArMjIxLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAg
ICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVy
OwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0
ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJl
IHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxl
cgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkg
bm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6
CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5K
SVQoKTsKQEAgLTI4Niw2ICsyOTcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHNw
aWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbElt
cGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7Cisg
ICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAgICAgICAgIC8vIEFk
ZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgog
ICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkgKzM0OCwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lk
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAgICAgICB2b2lkIGFk
ZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0
Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0g
UmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2b2lkIGFkZFNsb3dD
YXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQs
IFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsK
ICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9p
ZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzMzLDcgKzM2MCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICB2b2lkIGNv
bXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9j
YWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0z
NTAsNyArMzc3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAg
ICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVt
aXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTM2MCw3ICszODcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29t
cGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFU
eXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0g
ICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQg
Y29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBU
YXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdp
c3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwg
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01MDgsOCArNTM1LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJl
bGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
VW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNTE3LDEyICs1NDQs
MjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRB
bmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlv
bj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlv
biosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNs
b3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUs
IERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7
CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAg
IHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7
CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTQ2LDkgKzU4Miw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxl
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5k
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJ
bnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY0Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOworI2lm
IENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjc4LDc4ICs3MTYs
ODEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2No
aWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWls
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3Vi
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3Nl
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1
bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0
cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxS
ZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAg
ICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qp
OworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUq
IG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODA1LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODE3LDE4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxl
ZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2Zp
bGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0
TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVy
YXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRj
aEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdl
bmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQ
cm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24s
IFNsb3dDYXNlJik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoU2xv
d0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZy
b20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAg
ICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2Fz
ZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9p
ZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4m
IHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxT
bG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2Fz
ZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGhh
c0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwot
ICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2Vz
KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9vbCBiID0g
dHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBp
dGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KTsKQEAgLTk2MSw2ICs5ODAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRp
ZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZv
aWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0
YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21w
dXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTcxLDYgKzk5MywyNTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBC
aW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAg
ICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgR1BSVGVtcChK
SVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgfkdQUlRlbXAo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7
CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJl
ZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJ
bnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQo
SklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFu
ZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJl
IHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwg
bWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3Mg
Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVn
IH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9Owor
CisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAg
ICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BS
UmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkRvdWJs
ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZh
bGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAg
ICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmls
dGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRl
cjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAg
ICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9w
ZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRS
ZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJh
bmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAg
ICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAg
ICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAg
ICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZvck9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3Rlcigp
OworICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcmIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGZw
ciAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGZwciku
b3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBmcHIgPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQp
ID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNO
b3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkg
JiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VMT0woKTsK
KworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9i
amVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhl
cmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoR1BS
UmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7
CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAg
ICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQg
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2UgdGhpcyB0
YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNldCBpdC4K
KyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAg
ICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50U3BpbGxSZWNv
cmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVy
Q2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVG
cm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdu
b3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsK
IAogICAgICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4gbV9mYXJDYWxsczsKQEAgLTk5MCw3ICsx
MjU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1w
VGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4g
bV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3Bp
ZWRHZXRQdXRJbmZvczsKQEAgLTEwMjcsNiArMTI5NSw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAg
Ly8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAg
ICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BS
UmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZh
bGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5n
cHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0Fs
bG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFs
dWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9
IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVy
LmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9
OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFs
bG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJl
Z1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwg
dHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tT
dGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9S
ZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBv
dGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnBy
b3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgp
ID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAg
IHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2Fs
bG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9n
cmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxw
dHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9w
cmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+
IG1fY3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0
TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5k
OworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAg
ICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNl
TE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29kZUluZGV4LCBK
dW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZv
aWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFs
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNz
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNs
b3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
SmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxB
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0
IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVu
c2lnbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVn
VDAsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IG9wMSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBy
ZXN1bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsK
KyAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFu
LCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVnVDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRh
cmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwg
dGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0
aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAg
IC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBp
bnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdl
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xv
d0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYm9v
bCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDAp
OwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTIyOSwx
NyArMjgxLDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY28KIAog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNH
UFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOwor
ICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
cmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRP
cGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRp
b24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAgfSBl
bHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQz
Ml90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJn
ZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BS
LCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgICAgIGdl
dExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25k
aXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKICAgICB9CiB9CiAKQEAgLTI1NSw0MyAr
MzMzLDg5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIAogdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAg
ICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9w
MSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxoc0dQ
UiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQ
Uik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7
CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHQ7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdw
cigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKwogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmlt
bSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0
aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJlMzIoY29u
ZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQzMl90IG9w
MWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBjb21wYXJlMzIoY29t
bXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOworICAgICAgICBj
b21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSksIHJlc3Vs
dEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3Ax
LCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1Qw
LCByZWdUMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7Cisg
ICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwog
ICAgIH0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0
aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0
aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIs
IHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVy
dCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNs
b3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBE
b3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgYXV0byBmYWxsdGhyb3VnaCA9IGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGZhbGx0aHJvdWdoLmxpbmsodGhp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUg
Y29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgogICAgIC8vIC0g
ZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAt
IGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8g
LSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlm
IChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3Ay
KSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMzAwLDggKzQyNCw2IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
ICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWls
MSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjYsOCArNDQ4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0g
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVn
aXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MSwxMiArNDcxLDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAg
ICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZh
aWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJ
ZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsK
ICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0
VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY5LDkgKzQ4OCw5IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsK
ICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAg
ICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC0zODEsMTEgKzUwMCw0NyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0Rz
dCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7
Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBh
dXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7IC8vIE9PUFM6IGVuc3VyZSBmb3IgYWxsIG9wY29k
ZXMgcHJvdmVuVHlwZSBhZ3JlZXMgdy8gdGhlIHByZWRpY3Rpb24gcHJvcGFnYXRpb24uCisgICAg
ICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcgZnByID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShpbnB1dEdQUiwgZnByKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9u
ZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUp
LCBmcHIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOwor
ICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAg
ICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNz
KCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xv
d0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3Zl
cmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMy
KGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9
IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBi
b3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVj
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTMsMTEgKzU0OCw1
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAg
RlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7
CisgICAgICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAg
IGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICAg
ICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVtcEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
ICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3Vi
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAg
ICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
dGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIo
KTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1
dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwg
aW5wdXRGUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29t
ZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAg
ICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiAvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQwNyw1NCArNjA0LDg5IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2
IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVh
eCk7CisgICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBhdXRvIGVkeCA9IFg4
NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAg
QVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7CiAgICAgQVNT
RVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJl
Z1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBl
YXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNHUFI7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAgICBjbG9iYmVy
KGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5lbXBsYWNlKCp0
aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7CisgICAgICAg
IGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1wLT5ncHIoKTsK
KyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigpOworCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlz
LCBsaHMpOworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7CisgICAgICAgIGxo
c0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC0+
Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIo
bGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhz
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAg
ICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7
CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQsIHJl
Z1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAgSnVt
cCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1t
MzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBl
YXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90TmVn
MS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4NkRp
djMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0b3JQ
b3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1t
MzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBu
dW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsK
IAotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAog
I2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArNjk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
K3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qg
bm90SW50MzJPcDI7CkBAIC00NzQsNiArNzA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEs
IHJlZ1QwKTsKQEAgLTU2MiwxNSArNzk1LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNp
Z25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93
T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3Ry
dWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJh
dGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmlu
c3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29s
IGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICs5NTUs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVtaXRN
YXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9u
VG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3Vs
ZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhl
IG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5l
Z0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRp
bWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVP
cHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSwgc2xvd0Nh
c2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRv
cj4KQEAgLTc0MSwxOCArOTcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRo
KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsK
LSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVy
YW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKIApAQCAtNzYwLDMzICs5Nzcs
MTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAg
bGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVM
RUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0
VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1w
OworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOwor
ICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7
CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRp
ZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwg
cmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlw
cGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4u
ZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxp
bmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5n
cHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3By
KCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Ay
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVz
dWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90Pigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1
bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
KSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9
CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVz
dWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlm
IChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMy
T25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJ
bnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtODAzLDcgKzEwOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3Qo
Y29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9w
Y29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVm
dFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtODQ5LDIwICsxMTM5LDYgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFz
dFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgotCiAgICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kOwogCkBAIC04NzMsMjEgKzExNDksNzcgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFz
dFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJl
ZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFsaWRGUFJSZWc7CisK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4g
c2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBp
biBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAg
ICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNj
cmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEp
OworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9Cisj
ZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKyAgICBG
UFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmlnaHRTaGlmdEdlbmVy
YXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgc25p
cHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hG
UFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1w
TGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3Vs
dFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVy
KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51
bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwg
U3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBl
KHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcnNoaWZ0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIsMTggKzEyMzQsNTQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBK
SVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAg
ICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBS
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7
CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCBy
ZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2Rz
dCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2Rl
Lm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIG1v
dmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBhZGRE
b3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0
PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24p
KTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9w
dGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGlt
aXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1
bmN0aW9uPgpAQCAtOTI0LDE1ICsxMjkyLDM1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZp
dHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KLSAgICAvLyBT
aW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVn
aXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIEpTVmFsdWVS
ZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3JjVGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hU
ZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhp
cywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMg
ZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KKyAgICAgICAgLy8g
U2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJl
Z2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MSwxOSArMTMyOSwyMiBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAgICBtYXRoSUMtPm1f
Z2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKLQogICAgIE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBib29sIGdlbmVyYXRlZElu
bGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZSht
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtOTYzLDcg
KzEzNTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAg
IH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBy
ZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+
CkBAIC05NzQsMzkgKzEzNzIsODIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3BlcmFu
ZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBTbmlw
cGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkp
OworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRD
b25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNT
RVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwor
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
Mik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcg
cmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVt
cEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOwogI2Vsc2UKICAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
NDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0g
ZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAotICAg
IFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0
KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghR2VuZXJh
dG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAg
ICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7
CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICB9
CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworICAgICAgICByZXN1bHRUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQ
UiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+
ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdo
dEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25z
dCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJh
dG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAotICAg
IG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2Ny
YXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRv
cihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAgCiAg
ICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVy
YW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25z
dGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3Rh
cnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3ICsxNDU2LDM0IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5l
Q29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAgIGlmIChsZWZ0T3Bl
cmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
bGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQotICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkg
eworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAg
ICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAg
ICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAg
ICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAgICAgZWxzZSBpZiAocmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAg
fSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNSwxMSArMTQ5MywyMCBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgfSk7CiAjZW5k
aWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3Mu
Z3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEp
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0
KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lX3Y8
T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9w
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0
ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlv
bj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0
aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBt
X2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rp
b24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxh
YmVsKCk7CkBAIC0xMDQ4LDggKzE1MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdz
IHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTA4NSw3ICsxNTUyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hG
dW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5j
dGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2Zp
bGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJ
bnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE1NjIsNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAogICAgIFNu
aXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkp
OwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE1NzIsMzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRP
cGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3Bl
cmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6
aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6
aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0
LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
bGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUMyA6IHJlZ1QyIH07CisgICAgfSBlbHNl
IGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQp
KSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5n
cHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07Cisg
ICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdw
cigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQ
YXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRP
cGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0
T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBAIC0xMTU2LDIzICsxNjM0LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYK
LSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotCiAgICAgU25pcHBldE9w
ZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAg
U25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29u
ZCgpKTsKIApAQCAtMTE4OCw2MiArMTY0OSwyMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9w
MikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3Rh
bnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcg
cmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVt
cEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJp
Z2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1w
RlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAg
IHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAg
bGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAgICAg
ICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIg
PSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRP
cGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0g
ICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
LCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAg
ICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAgICAgICBnZW4uZW5kSnVtcExpc3Qo
KS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJl
c3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHNldEpT
VmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5lbXB0eSgpKTsKICAgICAgICAg
QVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAg
ICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0g
bV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZU5l
Z1plcm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzVGVtcCB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyByaHNG
UFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSBy
ZXN1bHRUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxo
c0dQUiwgbGhzRlBSKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHNH
UFIsIHJoc0ZQUik7CisgICAgICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCBy
ZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVz
dWx0RlBSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoVGVzdDMy
KFplcm8sIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9
IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7
CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAg
ICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lz
ZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xv
dzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBz
dWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUlu
dEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpP
dmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1
bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBz
dWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9j
YXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxP
cFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9w
dGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29k
ZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1Qw
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxE
ZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29t
cGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpA
QCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAg
ICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgog
ICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSko
KTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2
ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3Bv
aW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9P
UFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBp
bnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
ICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6
OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiBy
ZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVz
LT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisK
KyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93
LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRD
aGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50
U2xvdyk7CisKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1w
IHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0
VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdU
MCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAg
IHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwog
CiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0
b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDEx
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQog
ICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxs
eSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBi
eXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1
bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHko
cmVnVDApOwogCkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAg
ICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsK
KyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNo
ZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsK
IAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQ
Uik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1
bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRv
bmVHUFIgfSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNs
b3dQYXRoKTsKKworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFu
Y2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAg
ICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsK
ICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9w
ZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93
UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAg
ICAgICAgd2lsbERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25l
LmxpbmsodGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1
NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJS
ZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMp
OwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRD
b2RlOjp0eXBlTmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBK
SVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90IHsKICAg
ICBIb3N0Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxpbmVKSVQs
CisgICAgTE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02NywzNiArNjgs
MjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJVFR5cGUp
OwogCi0gICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBKSVRU
eXBlIHRvcFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsK
ICAgICB9CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRU
eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklU
VHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6REZHSklUOwot
ICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBl
OjpGVExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0KEpJVFR5
cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBj
YXNlIEpJVFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAgICAgICBj
YXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFz
ZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJ
VFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBkZWZhdWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNhc2UgSklU
VHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAg
ICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTExNiw2ICsx
MDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xK
SVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ1LDYgKzEzOCwxMSBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIoZXhwZWN0ZWRM
b3dlciwgZXhwZWN0ZWRIaWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBib29sIHVzZXNSZXBs
YWNlbWVudENvZGVCbG9jayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
aml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQg
fHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBi
b29sIGlzT3B0aW1pemluZ0pJVChKSVRUeXBlIGppdFR5cGUpCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUs
NiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAg
IC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBh
dGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBA
IC0xNTcsNiArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQg
Y2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNl
LgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CkBAIC0xNjcsMjUgKzE2OSw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4
KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hp
bGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09
IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MCwzNiBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFs
dWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1w
IGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyBy
ZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsK
KyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCku
Ynl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAg
ICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2Fz
ZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFw
cGVuZChKdW1wTGlzdCB7IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlz
dCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1
bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXAp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyBy
ZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0g
ICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBo
YXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1f
Ynl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMo
KSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpA
QCAtNDA2LDExICszOTgsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRD
b25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9y
KGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4
ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
Q3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1
MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2Zp
bGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQpAQCAtNTEsNiArNTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgLy8gT09QUzogSWYgd2UgY2hhbmdlIHJlZ2FsbG9jIHN1Y2ggdGhhdCB0aGVy
ZSBjYW4gYmUgTiByZWdpc3RlcnMgcGVyIGxvY2FsLCB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2ggdGhh
dCB3ZSBkb24ndCBuZWVkIHR3byByZWdzLgorICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAm
JiBncHJGb3JPcGVyYW5kKHNyYykgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKQEAgLTkwLDMyICsxMTQsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9j
YXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFs
bG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVj
dD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVy
SUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVn
VDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAg
IEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0g
cmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAt
PmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcg
PSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICgh
YWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6
Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRp
YWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAg
ICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwg
VHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEyNSwyMyArMTcwLDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5t
X2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0
ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJS
ZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJh
bmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsK
KyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3Rv
ckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFz
SW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNv
bnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQ
Uik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9s
Lmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBp
bnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1
bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQ
Uik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhh
c0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3Vu
ZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIyMyw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3Rv
dHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZh
bHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZv
ciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBj
YW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1Qx
KTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0
IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wu
aGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1
ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAg
ICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAot
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1Qx
LCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0g
ICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAg
T3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHBy
b3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3Jh
dGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90
bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOwor
ICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAg
ICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90
b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5l
bXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1w
LT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAg
ICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVH
UFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIo
KSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMg
KGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4K
KyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9u
ZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQu
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0
aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAg
SklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
CisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUK
KyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsg
Ly8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAg
IG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRl
eCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCkt
PmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qKQpAQCAtMTk5LDExICszMjQsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29u
c3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTIxMSwyOCArMzU0LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191
bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1
bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21w
YXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAg
ICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAg
ICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAo
KTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0
ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIp
OworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1
bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTI0MSwxMyArNDI4LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxs
KGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
TnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ2MiwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVz
dDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyNl
bHNlCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworI2Vu
ZGlmCisgICAgICAgICAgICB0ZXN0NjQoWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDk4LDI3
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJv
LCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1Qw
LCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MjgsNTYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BS
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRU
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qmln
SW50MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0
aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAg
IGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlm
ICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChj
b25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU5NCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBj
b21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0z
MzMsMTggKzY0Myw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNl
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFk
ZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAg
ICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAg
ICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBh
cmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5
cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDgsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0
dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1
ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpA
QCAtMzY5LDE1ICs3MjcsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0
IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAg
aXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1
ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAg
aXNJbW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMzg2LDUyICs3NzAsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4o
U3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91
bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNy
YywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0g
YnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
ICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3Bl
Y1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1
ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0
aW9uIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFt
ZSB9OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9mdW5jdGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRl
c3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVm
ZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRl
ciwgZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAg
ICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIElu
dmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBh
IGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4g
dGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0
cyByZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVl
KSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4K
LSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVn
VDApOworCisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUg
dmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAg
ICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3Ig
MSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhl
biBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJh
Y2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH4xKSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2Nv
bmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkg
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBz
cGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
Y29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNv
bmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMy
KDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhh
bmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2Ny
YXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAg
ICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNo
MUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVn
VDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
Qm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9u
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBt
b3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIg
eyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBG
UFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwg
c2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NzUsMTI5IEBA
IHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKwor
ICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1
dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9
IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAg
ICAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwg
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwg
dGFyZ2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9
IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNH
bG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRK
dW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRp
YXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1t
ZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7Cisg
ICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2Fz
ZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hH
UFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdl
dCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0g
anVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMg
LSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAot
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVt
cCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9
IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05v
dEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMTA2LDI2IEBA
IHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7Cisg
ICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMzQsMjYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC01MTUsNjUgKzExNjUsMzE0IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAo
anVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVl
KHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSks
ICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRy
dXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Cisg
ICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Cisg
ICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMp
OworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29k
ZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
Y29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAg
IGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENv
bXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJv
dmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywg
cmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVT
eW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAg
ICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAg
ICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJs
ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1
bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKwor
ICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5j
aElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BS
LCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1
ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0g
aXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91
YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkg
eworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykp
IHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3By
KCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVt
cExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMy
KGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNH
UFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
fQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hC
b29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhz
R1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
ICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCBy
ZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwor
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVn
VDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IC8vIE9PUFM6IFdlIGNhbiBtYWtlIHRoaXMgYSBzaW5nbGUgYnJhbmNoIGlmIHRoZSByZXN0b3Jl
IGRvZXNuJ3QgY2xvYmJlciByZXR1cm5WYWx1ZUdQUi4KKyAgICAgICAgYXV0byBkb25lID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAg
R1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9u
ZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3Rv
cmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTQ4OCwxNDYgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAg
ICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAg
YXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90
RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2
YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywg
cmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21w
YXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAg
ICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNU
ZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7Cisg
ICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3Vs
ZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0
R1BSLCBkc3QpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3
ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJl
c3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRv
bmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3Rv
IHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRo
ZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwg
aGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5
IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAg
YWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1
KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJv
dmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJl
Z1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQg
bGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAg
YW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5n
IG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0
byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0
RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xl
YW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisj
aWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3Vt
aW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAg
ICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkK
KyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBp
dHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
bW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAo
dG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQo
VHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFs
dWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292
ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAg
ICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwor
ICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC02NzQsNjggKzE2NDUsMTM1IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
c3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
Ym9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAg
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVx
dWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYg
KCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7
CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNH
UFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsK
KworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQ
UiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3Vs
ZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAg
ICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBpZiAobGVmdCA9
PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmln
aHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGdvdG8gbm90VGFrZW47Ci0g
ICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUg
NCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMy
L2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlz
IGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3cs
IGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVy
IGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8v
IExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwg
cmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVx
dWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwg
dGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYg
YXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0g
ICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRo
aW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVl
ZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1Qx
KTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7
Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5r
KHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBs
ZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYg
KGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93
UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47
CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAg
Z290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAg
ICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0
IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3
b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJ
Zk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4g
SW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVh
dmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVy
IGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAg
ICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAg
bW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Cisg
ICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7
CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0
KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVh
bCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVx
dWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsK
KworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBh
dCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAg
ICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRv
IHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBv
bmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJv
dGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChy
ZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3Qg
dGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAg
ICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihy
ZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0
T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGlu
ayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVx
KQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJl
Z1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0
byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBv
cjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdU
MikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Cisg
ICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qw
KSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzE3ODYsMjI4IEBA
IHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BT
dHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwg
cmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQ
UlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0K
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93
Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
TnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIo
c3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBK
dW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5r
KHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgewor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RD
ZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051
bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
OworICAgICAgICB9CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1Qw
KSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAg
ICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsK
LQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAo
c3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisgICAgcmVz
ZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0
aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2
ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBA
IC04ODgsOSArMjA2NSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNv
bnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
YXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBr
bm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1
cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVy
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNj
b3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjA5NiwxNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigm
dm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsy
MTIxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxl
LT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIxNDUsMTQ3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBU
YWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAg
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IFdl
IGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3Rz
QWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2
bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5v
RGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9w
LCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29tcGFyZU9wID0gaXNFcSA/IEVxdWFsIDog
Tm90RXF1YWw7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0
cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1
bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZXN1bHRHUFIsIHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
TnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOwor
ICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21w
YXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4o
Y3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQot
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAg
IC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1p
dFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJ
IGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVn
aXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9s
b25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJl
LgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChz
aXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJl
c3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJv
dmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI5NiwyMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA0NSwxMyArMjMyMCw4MCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQq
IGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBhdXRvIGlzU3Ry
aWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1
bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmlj
dCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVj
T2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3Ry
aWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5j
ZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHBy
b3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAm
IFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAg
ICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0
eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RD
ZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwg
c3JjRHN0KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3Vs
dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAg
ICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAg
ICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9
IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAg
IH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RU
eXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCByZXN1bHRH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsK
KworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0
VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA1OSw2ICsyNDAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
VGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRlQmFycmll
ckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7
CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVE
YXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI0MTEsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcg
PSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBn
cHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUpOworICAg
ICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1w
NC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5n
cHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAgICAgICBz
dHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBncHJU
ZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAg
ICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVl
UmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0
YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywg
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2NCArMjQ1
MywzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9h
ZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHNyYykg
JiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93
IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjIsOCArMjQ5OCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CisgICAgcmVzZXRD
dXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91
dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6
aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRlIGhlcmUg
c28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgp
LmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2
NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChC
ZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0
ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjUyNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRp
b24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lz
dGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAog
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29k
ZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1NDMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnku
bGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4g
anVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRl
cik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjU2OSw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29s
dXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
bmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwog
fQogCkBAIC0xMjQ1LDggKzI1NzksMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChj
b25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2Fz
dDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsK
KyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhw
Kj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgpAQCAtMTI1NiwyMyArMjYwMCw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24o
Y29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0Owor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxh
Y2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5n
cHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0
aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7
CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNl
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0
ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bj
b2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19n
ZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVH
UFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVu
YykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9y
X2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAg
ICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2NjQsNDYgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhw
ckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNj
b3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9
IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVzZXQoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7
CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rp
b24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHAp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7
CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHAp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIs
IGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9
CiAKQEAgLTEzNDksOSArMjczNCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29u
c3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQg
c2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0
YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJl
ZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNl
KCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOwor
ICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzU1LDI2IEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9
IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFy
Z0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UK
LSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6
ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgog
fQogCkBAIC0xMzgxLDE1ICsyNzg4LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1l
cmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwot
ICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBB
ZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3Ry
dWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgzNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX3N0
cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKyAg
ICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5w
dHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzI4NjYs
OCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJl
dHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwpAQCAtMTQ2MSwxNSArMjg5MywxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNr
KSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJv
ZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAgYmFk
VHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxp
a2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0
TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAg
IEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVj
dGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nh
c2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4
LDEzICsyOTEwLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMK
IAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25l
LCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFs
Q29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1w
KCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworCisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTQzLDgxIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9y
IH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworCisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BS
ID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCi0gICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAK
LSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5s
aW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxp
bmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNF
aWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndp
c2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1Qx
KTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDI3LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAg
R1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAg
ICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIp
OwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAs
IFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRj
aEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVz
RWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJp
bmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1
NzQsMjEgKzMwODEsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMy
KEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpl
bmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOwor
ICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+
IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1w
LmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBp
bmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVt
ZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdU
MTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwor
ICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmlj
UHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0g
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAg
IAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9j
YXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmls
ZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszMTk3LDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2Vu
KCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSBy
ZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJv
bG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMyMTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAg
ICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9
IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAyLDExICszMjQ3LDIwIEBAIHZv
aWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9
IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwotICAgIGJv
eEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZh
aWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNjgsNDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0
ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMy
KExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1
YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVtcCB6ZXJv
TGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMyKG51bVBh
cmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZXN1
bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVyb0xlbmd0
aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5j
aDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAg
ICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAg
Ym94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHplcm9MZW5n
dGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCks
IHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNlbmRpZgog
Ci0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5k
aWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzMxNyw5OSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBi
cmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7
CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3Vu
ZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVV
bmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJn
dW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhp
cyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFy
Z3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3Mp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJv
dW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0
UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2
YWx1ZUdQUikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVt
aXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMs
IHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Qg
fCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
Mik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVS
ZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VS
VCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAg
ICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwo
dmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIo
KSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIo
KSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAg
ICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI4MSw4ICsy
NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhd
OwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
ICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAt
NTU4LDcgKzU1Miw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
IAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRo
ZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBz
d2FwcGluZyBvbiBBUk0uCkBAIC01OTgsOCArNTkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjM5LDggKzYzMCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY4Niw4ICs2NzUsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyOSw4ICs3MTYsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc3OCw4ICs3NjMs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC04MTksOCArODAyLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTEwMCw4ICsxMDgxLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjU3LDggKzEyMzYsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29w
aWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIu
aCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTIsNTEgKzU0
LDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRleGluZ1R5
cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3Bl
cnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFz
ZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRHUFI7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5kZXhp
bmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291
bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAg
ICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAg
ICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAg
ICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmls
ZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
ICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmls
ZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVy
dHlHUFIpOworICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmco
cHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVj
Q2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VH
UFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAg
ICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5
KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAg
ICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAg
ICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAg
ICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dl
dEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
NSw0MSArMTczLDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1w
bGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAog
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MpOworICAgICAg
ICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dD
YXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJh
c2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5
VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Nyw2
ICsyNTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2Rl
SW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBo
ZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9v
bCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHBy
b3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTks
OCArNDIxLDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAg
ICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
YXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3Rl
cnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFp
bGFibGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlO
YW1lLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVn
VDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzOSw3ICs0NDQsNyBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQ3LDcgKzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29k
ZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
QEAgLTM1NSwxMyArNDYwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAg
ICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAg
IGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CkBAIC0zODEsNiArNDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogRG8gYmV0dGVyIGlmIHdlIGNhbiEKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qx
KTsKIApAQCAtMzk0LDEzICs1MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGls
YXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBmYXN0UGF0aEptcCwgZG9uZSwg
ZG9uZSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+
KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwpAQCAtNDIwLDQ5ICs1MjUsMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lKGMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BS
ID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwor
ICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vz
c29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5n
cHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRl
ci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNl
dHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BS
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGlu
dDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nl
c3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNz
b3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywg
YWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9Owor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBh
Y2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00NzIsMTggKzYzMyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVn
VDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklU
RGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMg
Y2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBp
cyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBv
ZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ5
MiwyNSArNjg3LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUK
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJ
bmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC01MjAsMTkgKzcxNyw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVy
dHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUu
ZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisg
ICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQ
UiwgcHJvcGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRj
aEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1p
dCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmll
ciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTQxLDIyMSArNzg5
LDM2OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hC
b29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJ
ZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJh
c2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGly
ZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAg
bm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
LmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdU
eXBlR1BSID0gdXNlTE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBu
b3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZS
ZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsK
LQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChn
ZW4pOworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdGhpc1ZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAg
IEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdGhp
c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgfQorCisgICAgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0K
IAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5k
KGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRH
UFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVn
IHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlk
V2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRo
VGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0
ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJv
b2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0
cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAg
ICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJl
Z2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNo
IHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3Rh
bmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBy
ZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB2
YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2Rl
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
c2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKQEAgLTc2NSw3NyArMTE2MCw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBV
c2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byBy
ZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0
ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBk
c3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChi
YXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5C
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlk
SW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZElu
ZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAg
aWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVD
bG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
cHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtODQ3LDE3ICsxMjYwLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
c29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2Fs
U2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0
Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJl
Z1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVz
dWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtODY3LDIxICsxMjg4LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFu
dFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9u
YWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7
CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3Bl
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29w
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kp
CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3Vs
dEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04OTQsOSArMTMzMCw5
IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTA5LDI5
ICsxMzQ1LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTQwLDE1ICsxMzc2LDIwIEBAIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcg
c2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xv
dCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3Qs
IHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRj
aEdQUikpOworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1
ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAgLTk2MiwxMiArMTQwMyw2IEBAIHZvaWQgSklUOjpl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTk3OCw1MSArMTQxMyw4NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwg
c3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZz
ZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsK
KyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0
R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJl
Z1QyOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1
Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGppdEFz
c2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xv
dCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsK
ICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAg
aXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3Rl
ZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdpdGhS
ZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZM
aW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAg
ICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBu
ZWczMihvZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0R1BS
LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIG9m
ZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21J
bmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdU
MCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
IC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXN1
bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29w
ZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgotICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTEwMzYsMTAgKzE1
MDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsK
KyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKIApAQCAtMTA1MiwyNyArMTUyMCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5
cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAot
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCks
IHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAg
ICAgYnJlYWs7CkBAIC0xMDgyLDQwICsxNTUwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9w
ZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdU
MSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9w
ZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBz
dG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTI5LDIxICsxNTc5LDQ5IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
dmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2Nv
cGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAg
ICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAg
ICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2Nv
cGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUt
PmdwcigpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAg
ICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRH
UFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4o
WyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsK
LSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAg
ICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwg
QmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExNTQs
MjggKzE2MzIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRp
b24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFRE
WiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1p
dCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAg
ICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0
cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBv
aW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExv
Y2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRT
bG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6
CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTE5MCwxMiArMTY5NywyMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5l
cnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ug
d2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hH
UFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qw
OworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
IEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUg
dG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTIwOSwyMyArMTcyNSwzMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8v
IFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9j
YXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0
Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTI0
MiwxMCArMTc2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyNjEsNjEgKzE3ODQsMTc4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFy
Z3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQog
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAg
bG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhh
cmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBi
eXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBh
cmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7Cisg
ICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50
cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBh
cmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0g
dmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0g
cmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0b3JlNjQodmFs
dWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICBpZiAo
IXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BT
OiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBh
cm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4g
ZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVm
dWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNp
bmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFr
ZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBm
aWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9k
ZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8
ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9u
YWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIGlmIChncHJGb3JPcGVy
YW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQ
UiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1Qw
OworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IG93bmVyVmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBvd25l
ckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZChvd25lcikgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVyR1BSID0gZ3ByRm9yT3BlcmFuZChvd25l
cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgIG93bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBvd25lckdQUik7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsK
KyAgICB9CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBv
d25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAg
ICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkp
CisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwob3duZXJHUFIpOwor
ICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFu
Y2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRl
QmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBi
YXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBPcHRpb25hbDxT
aWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgc2NyYXRjaFZhbHVlLnJl
c2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4KKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93
bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwo
KnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChvd25lck5vdENlbGwuaXNTZXQoKSkKICAg
ICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgIGlmICh2
YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdl
OgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJ
ZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBz
dGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8v
ICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5
IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRv
IG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgSnVtcCB2YWx1
ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
ICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2Vs
bCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIp
OworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAg
ICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0xMzI3LDExICsxOTY3LDI2
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5
cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIs
IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEzNDEsMTAgKzE5OTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2Zp
ZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBl
bWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9w
ZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAg
c3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdU
MSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTE0
NDcsOCArMjExNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0
CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwg
cmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOwor
ICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBv
d25lciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNv
cmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50
U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQp
OworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0x
NDY2LDYgKzIxNTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lz
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAg
bV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICAKQEAgLTE1NjcsNiArMjI1NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dFByaXZhdGVOYW1lV2kKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAg
QVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3Bf
cHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBP
cDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywgIXByb2ZpbGVkREZHQ29k
ZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiBkaWQgYmVjb21lIHJlYWR5LiIpOwogICAgIApAQCAtNTUsNyAr
NTUsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIXByb2ZpbGVkREZHQ29kZUJsb2Nr
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwg
KmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpy
ZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1
cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3Qg
eyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3Jv
QXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2Fs
bCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRv
IHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9y
Q2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0
LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDggQEAgaW5saW5lIGJvb2wg
c2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsbwogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3Vs
ZCB0cnkgdG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKKyAgICAvLyBPT1BTOiBJbXBsZW1lbnQg
dGhpcyB3LnIudCBMT0wuCisKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQg
dG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMywxMCBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxs
SklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygp
CiB7CisgICAgLy9PcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgLy9PcHRpb25zOjpmb3Jj
ZUxPTCgpID0gMTsKKyAgICAvL09wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmlu
ZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9
IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNyw3IEBAIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgdXNlSklU
Q2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVz
ZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFy
c2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFz
c2VzLiIpIFwKICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHJpdmF0ZSBzdGF0
aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0ws
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAg
IFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVk
CiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGxsaW50X2hhbmRsZV91Y2F1
Z2h0X2V4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAg
ICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
cENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9w
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogICAg
ICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRz
LCB0b3BDb2RlQmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhl
RgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVO
QUJMRShERkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJl
dHVybiBqc051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8
fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAg
ICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vsc2UKSW5kZXg6IExh
eW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtNCw3ICs0LDIxIEBAIHZhciBzZWxmID0gdGhpczsKIAogc2VsZi50ZXN0UnVubmVyID0gewog
ICAgIG5ldmVySW5saW5lRnVuY3Rpb246IG5ldmVySW5saW5lRnVuY3Rpb24sCi0gICAgbnVtYmVy
T2ZERkdDb21waWxlczogbnVtYmVyT2ZERkdDb21waWxlcywKKyAgICBudW1iZXJPZkRGR0NvbXBp
bGVzOiAoZnVuY3Rpb24oKSB7CisgICAgICAgIGxldCBtYXA7CisgICAgICAgIHJldHVybiAoZikg
PT4geworICAgICAgICAgICAgaWYgKGlzREZHRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudW1iZXJPZkRGR0NvbXBpbGVzKGYpOworCisgICAgICAgICAgICAvLyBFbXVsYXRlIHJ1
bm5pbmcgdGhpcyBmdW5jdGlvbiBmb3IgYSBiaXQgdG8gZ2V0IHNvbWUgdGllcmluZyBiZWZvcmUg
cmV0dXJuaW5nIHRydWUuCisgICAgICAgICAgICBpZiAoIW1hcCkKKyAgICAgICAgICAgICAgICBt
YXAgPSBuZXcgV2Vha01hcDsKKyAgICAgICAgICAgIGxldCBjb3VudCA9IG1hcC5nZXQoZikgfHwg
MDsKKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgICAgICBtYXAuc2V0KGYsIGNvdW50
KTsKKyAgICAgICAgICAgIHJldHVybiAoY291bnQgLyA0MDAwKSB8IDA7CisgICAgICAgIH07Cisg
ICAgfSkoKSwKICAgICBmYWlsTmV4dE5ld0NvZGVCbG9jazogZmFpbE5leHROZXdDb2RlQmxvY2sK
IH07CiAKQEAgLTE0OSw4ICsxNjMsOSBAQCBmdW5jdGlvbiBkZmdTaG91bGRCZSh0aGVGdW5jdGlv
biwgX2EsIF9iCiAgIHZhbHVlcy5wdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7CiAgIAogICB0
cnkgewotICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkKKyAgICB3aGls
ZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpIHsKICAgICAgIHZhbHVlcy5wdXNoKGV2
YWwoX2EpKTsKKyAgICB9CiAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOwogICB9IGNhdGNoIChl
KSB7CiAgICAgZXhjZXB0aW9uID0gZTsKQEAgLTM0Niw3ICszNjEsNyBAQCBmdW5jdGlvbiBkZmdJ
bmNyZW1lbnQoYXJndW1lbnQpCiAgICAgaWYgKGRpZEZhaWxTb21lVGVzdHMpCiAgICAgICAgIHJl
dHVybiBhcmd1bWVudC5pOwogICAgIAotICAgIGlmICghZGZnQ29tcGlsZWQoYXJndW1lbnQpKQor
ICAgIGlmICghZGZnQ29tcGlsZWQoYXJndW1lbnQpICYmIGlzREZHRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gInN0YXJ0IiBpbiBhcmd1bWVudCA/IGFyZ3VtZW50LnN0YXJ0IDogMDsKICAgICAK
ICAgICByZXR1cm4gYXJndW1lbnQuaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416565</attachid>
            <date>2020-12-18 19:18:29 -0800</date>
            <delta_ts>2020-12-21 12:09:38 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>517037</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY0Niw5ICsxNjQ2
LDkgQEAgbGV0IHJ1bldhc20gPSB0cnVlOwogaWYgKHR5cGVvZiBXZWJBc3NlbWJseSA9PT0gInVu
ZGVmaW5lZCIpCiAgICAgcnVuV2FzbSA9IGZhbHNlOwogCi1pZiAoZmFsc2UpIHsKK2lmICh0cnVl
KSB7CiAgICAgcnVuT2N0YW5lID0gZmFsc2U7Ci0gICAgcnVuQVJFUyA9IGZhbHNlOworICAgIHJ1
bkFSRVMgPSB0cnVlOwogICAgIHJ1bldTTCA9IGZhbHNlOwogICAgIHJ1blJleEJlbmNoID0gZmFs
c2U7CiAgICAgcnVuV1RCID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5o
YW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZh
dGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9u
QXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFi
bGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlm
IChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkp
IHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0p
KTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNt
U2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25B
bmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkK
QEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3Rv
cjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1
bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBA
QCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0
LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGlj
dGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVh
ZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
c0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlv
bnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fs
cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAg
ICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAg
ICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkg
ewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0
KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVj
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91
dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVh
bSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01h
cCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3Rh
bnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUdyYXBoLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZv
aWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+
PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxl
KCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRl
ciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0
aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFu
ZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgT3BlcmFuZCBkZXN0aW5hdGlvbkZvcihjb25zdCBCeXRl
Y29kZSYgYgogICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBv
cF9pdGVyYXRvcl9uZXh0KSB7CiAgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CiAg
ICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiB7Ci0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpERkdKSVQpCisg
ICAgICAgICAgICBpZiAodHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgdHlwZSA9PSBKSVRUeXBl
OjpGVExKSVQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChPcEl0ZXJhdG9y
TmV4dDo6bmV4dFJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGUubV92YWx1ZTsg
Ly8gV2UgcmV1c2UgdmFsdWUgYXMgYSB0ZW1wIGJlY2F1c2UgaXRzIGVpdGhlciBub3QgdXNlZCBp
biBzdWJzZXF1ZW50IGJ5dGVjb2RlcyBvciB3cml0dGVuIGFzIHRoZSB0ZW1wIG9iamVjdCAuCiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7
CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCkKKyAgICBpZiAoKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8
fCB0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsK
ICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5w
cmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwog
ICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0
aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8
Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBz
dGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBH
cmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0
dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYg
c3RhdHVzTWFwKQpAQCAtMTA1OCw2ICsxMDU4LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2
ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAg
ICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc2LDggQEAgc3RhdGljIFNl
Y29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAx
MCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJ
bnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsK
KyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgpAQCAtMTU0OCw2ICsxNTUyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIuY291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJh
c2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNv
dW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgpAQCAtMTg2Nyw3ICsxODcyLDcgQEAgQ29kZUJs
b2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkg
ewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgewor
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBl
KSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3Zl
IGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8v
IGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpj
bGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2Rl
QmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJ
VApAQCAtMjIzMSw1MSArMjIzNiw1NSBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmls
ZXI6OkpldHRpCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwogICAgIAog
ICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6Ci0gICAgLy8gMSkg
TWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5v
dywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAxKSBJZiB3ZSdyZSBERkcvRlRMLCBt
YWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93
LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAogICAgIC8vICAgIHdlIHNob3VsZCBPU1IgZXhpdCBh
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRoZSByZXR1
cm4uCiAgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIgZXhlY3V0
YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4KIAogI2lmIEVOQUJM
RShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoSklUQ29kZTo6aGFzREZHQ29tbW9uKGppdFR5cGUoKSkpIHsKICAgICAgICAgaml0
Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlmIChy
ZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNv
bXBpbGF0aW9uLmdldCgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQotICAg
ICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRz
IG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4K
LSAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKLSAg
ICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJl
bnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7
Ci0gICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb09sZEFnZSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgp
OworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAgICAg
ICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0
cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQu
CisgICAgICAgICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkg
eworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZt
LmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhl
Y3V0YWJsZSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHko
KSkKICAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVvcHRp
bWl6YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2RlID09
IENvdW50UmVvcHRpbWl6YXRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hv
dWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCkt
PmNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYg
KERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
RGlkIGNvdW50IHJlb3B0aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYKICAg
ICB9CiAgICAgCiAgICAgaWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgd2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFw
cGVuIGZvciBPU1IgZW50cnkgY29kZQogICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8vIE9y
LCB3ZSdyZSBhbiBMT0wgQ29kZUJsb2NrIGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAgICBh
bHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29uICE9
IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0
dGlzb25EdWVUb1ZNVHJhcHMpCisgICAgaWYgKEpJVENvZGU6Omhhc0RGR0NvbW1vbihqaXRUeXBl
KCkpICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24g
IT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50
RXhpdFNpdGVzKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNv
biBjYW4gaGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8g
YSBkZWFkIGV4ZWN1dGFibGUKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBv
YmplY3QgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgpAQCAtMjQ4Myw2ICsyNDkyLDggQEAgdW5zaWdu
ZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVzKAogewogICAgIEFTU0VSVChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZU
TCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAg
ICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGlsZWRXaXRo
RlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKQEAgLTI3MDksNyAr
MjcyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQg
Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1
bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5
cGUoKTsKLSAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0
eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7
CiAgICAgICAgIGRhdGFMb2dMbigqdGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBj
b2RlIGJ1dCBoYXZlICIsIHR5cGUpOwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oaml0Q29kZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlw
ZSkpOwogICAgIH0KQEAgLTI5NDgsNiArMjk1OSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRP
cHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFsbHlG
cmVxdWVudEV4aXRTaXRlcygpCiB7CisgICAgLy8gT09QUwogICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIApAQCAtMzA1MCw2ICszMDYy
LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5B
QkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlw
ZTo6TE9MSklUOgogICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhp
cyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApAQCAtMzQyMSw3ICszNDM0LDcgQEAgT3B0aW9u
YWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVj
b2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAgICAgSklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0
VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwg
aml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICBpZiAoaml0VHlwZSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQg
fHwgaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQpCiAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBj
YWxsU2l0ZUluZGV4LmJ5dGVjb2RlSW5kZXgoKTsKICAgICBlbHNlIGlmIChqaXRUeXBlID09IEpJ
VFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCkgewogI2lmIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRU
eXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBF
TkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2Zp
bGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0
YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQorewor
ICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAg
ICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5n
SklUVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4aXRpbmdKSVRUeXBlLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpCiAgICAg
Y2FzZSBFeGl0RnJvbUFueXRoaW5nOgogICAgICAgICBvdXQucHJpbnQoIkZyb21Bbnl0aGluZyIp
OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0RnJvbUxPTDoKKyAgICAgICAgb3V0LnBy
aW50KCJGcm9tTE9MIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRGcm9tREZHOgog
ICAgICAgICBvdXQucHJpbnQoIkZyb21ERkciKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHJldmlz
aW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklU
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiAgICAgRXhpdEZyb21Bbnl0aGluZywK
KyAgICBFeGl0RnJvbUxPTCwKICAgICBFeGl0RnJvbURGRywKICAgICBFeGl0RnJvbUZUTAogfTsK
QEAgLTM4LDYgKzM5LDggQEAgZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogaW5saW5l
IEV4aXRpbmdKSVRUeXBlIGV4aXRpbmdKSVRUeXBlRm9yKEpJVFR5cGUgdHlwZSkKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJu
IEV4aXRGcm9tTE9MOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4g
RXhpdEZyb21ERkc7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBA
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5k
c0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRz
IHsKIHB1YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJh
bmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3Vt
ZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6
ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAh
IXRyYWNrQ2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAo
IVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAg
bV92YWx1ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBU
JiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50
cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMs
IGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1
bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVt
Q29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVt
QXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3co
bnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJh
Y2tDYWxsZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQog
ICAgIApAQCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhP
cGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlh
bFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJn
dW1lbnRzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkK
KyAgICAgICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAg
IHsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVl
cy5maWxsKGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAg
ICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50
czsgfQogICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9j
YWxzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAg
c2l6ZV90IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6
ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNv
bnN0YW50cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0g
dHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+Cisg
ICAgc2l6ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlcy5zaXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAg
ICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsK
KyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5k
ZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6
ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
ZHggPCBudW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRz
KCkgKyBpZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7Cisg
ICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlk
eDsKKyAgICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1t0bXBJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBl
IGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wg
Zm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxl
ZT4+CisgICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAg
ICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3Qg
aWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZU
eXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgo
aWR4KV07IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92
YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9
CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90
IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSAr
IHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mVG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXpl
OwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAg
ICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMu
Z3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkg
KyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUg
KyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChl
bnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFs
aXphdGlvbikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5k
ZXgoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29u
c3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2Fs
KCkpOwogICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7
CiAgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0z
MzgsNiArMzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2Nh
bHMoKTsKICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0z
NjQsOSArNDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwg
bnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsK
LSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFy
Z3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJh
Y2tDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkp
OwogICAgIH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHBy
aXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBh
cmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBh
cmUgdG1wcy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9u
dW1Db25zdGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0
b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAg
dW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMg
eyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBA
IC01NywxMCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0
cgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIs
IHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAg
fQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgImNhbGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBP
cGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudElu
ZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiAr
ODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgs
ICI6IiwgdG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3Vs
YXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAK
K2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3Vi
bGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVz
IHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMg
ZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAg
ICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90
YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwog
ICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNs
dWRpbmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZh
bGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
OwpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0K
ICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2Fs
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAg
Ym9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVu
dChtX3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFk
ZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJl
Z2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0
YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwo
KSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2
ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9w
ZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRv
QXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQg
YXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5k
ZXgpIHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsg
fQogCiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBp
bmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSAr
IG9mZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9y
Q29uc3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFi
bGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9u
T2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0
cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhl
YWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1
bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0s
IENhbGxGcmFtZSoKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVC
bG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7
Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9j
ay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1
bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhpdElubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgLy8gT09QUzogTWFrZSB0aGlzIGRvIHRoZSBy
aWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Igbm90LgogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
Rm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAg
ICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVW
ZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tG
b3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJl
YW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0gICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWduZWQgbnVtVG1wczsK
QEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0
cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkg
KyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgp
ICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5saW5lQ2Fs
bEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7IC8vIE9PUFM6IGJ5
dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+
bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1
Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
LCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwx
MyArNTUsMTUgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlTwogICAg
IHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuazoKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2Ug
SklUVHlwZTo6TE9MSklUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVFR5cGU6
OkRGR0pJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1
bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcyLDYgKzc0LDEwIEBAIGJvb2wg
Q2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKIHsKICAgICBBU1NFUlQoY29kZUJs
b2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgeworICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklU
OgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Y2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNzksOCArODUsNiBAQCBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXJlQ29kZU9yaWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNiBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgog
I2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzUzLDgg
QEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2lt
cGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1l
c3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjYsODY4IEBAIFNlY29uZHMgdG90
YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29u
ZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlv
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0g
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAg
IG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAg
IGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisg
ICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkg
eworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkg
cmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXBy
ZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8g
dHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBl
IHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7
CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2Fz
ZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
YWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxW
YXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJn
czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5
X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9y
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BC
aXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxl
Lm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0
YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29k
ZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRp
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rp
b24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdo
dCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRh
dGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEo
bGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFO
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVy
CisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmln
SW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3Ry
aW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2Jq
ZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bf
c3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRv
IGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBl
Rm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0g
dHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmln
aHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAg
IGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21O
b25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAg
ICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVy
ZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4g
cHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIH07CisKKyAg
ICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAgICAg
IGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERp
dj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBT
cGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYg
KGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhp
dHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5
IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNv
ZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNC
eXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdW5z
aWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUg
ZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUlu
dEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25s
eSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6
CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBw
cm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3Jj
KTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAg
ICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVj
QW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91Ymxl
UmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAg
ICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlv
bihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNl
dFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BE
ZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1f
c3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOwor
ICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkg
eworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4o
KTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5k
LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAg
ICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlm
ICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChp
c0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAg
ICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byBs
ZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0g
dHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1i
ZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAg
IH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAg
ICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYg
KCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2Jq
ZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJv
cGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BU
b1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3Ny
Yyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAo
ISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAg
ICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVy
Z2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBo
YXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBo
YXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBt
YWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5
cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2st
Pm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdf
YXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCks
IFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4o
KSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0
aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4o
KSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0
aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlX
aXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hh
c19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBk
byBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNF
eHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dl
bmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9w
YXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFy
ZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9w
ZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1
cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigp
LCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1
Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3Bl
Y1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5k
ZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhT
dHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9y
ZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0
TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9y
ZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNs
SW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3Bl
Y1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0Nl
bGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21p
c2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5l
cmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNH
ZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmlu
Zz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmls
ZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxT
cGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0
PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
aXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxs
YWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAg
IGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAg
IGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3By
b2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBv
cF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoK
KyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5j
dGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9k
ZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0
eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3Bf
anRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBj
YXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBj
YXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBv
cF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToK
KyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pn
cmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAg
ICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bf
am5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToK
KyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNl
IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAg
IGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9w
X3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfcHJp
dmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRv
cl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dp
ZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9n
dWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAg
Y2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2Ug
bGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3Ny
X2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29w
X2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2Nv
bnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV9p
ZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9u
X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIHdh
c21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgorICAgIGNhc2Ugbm9ybWFs
X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVy
bl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb246CisgICAg
Y2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jf
b3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX2V2
YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9u
ZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3Rh
aWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rfc2xvdzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0
b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuX3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNh
c2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93
YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRp
cmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBX
VEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAg
ICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBw
cm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hD
YXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2Zp
bGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNF
bnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkg
PT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAw
OyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkp
OyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+
dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYg
KHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAg
ICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0
SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAg
ICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNG
dW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6
IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBP
T1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRo
bSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBi
eXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/
CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdz
IHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAg
ICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmlu
ZGV4KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9j
ay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29y
IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgc3VjY2Vzc29y
T3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nl
c3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9p
ZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTY3LDcgKzkzNSwxMyBAQCB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1
bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKK2Jvb2wgSklUOjp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRy
dWU7CisgICAgcmV0dXJuIG1fdXNlTE9MOworfQorCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxv
Y2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMo
Y29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUs
NiArOTQ5LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAg
ICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhm
YWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQorICAgICwgbV91c2VMT0woY29tcGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxP
TCkKIHsKIH0KIApAQCAtMTM3LDExICsxMDEyLDE3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQogICAgICAgICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBc
CiAgICAgTkVYVF9PUENPREUobmFtZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBc
CisjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3Bf
IyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2Rl
SW5kZXgpIHsgXAorICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsgXAorICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAog
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgaWYgKHVzZUxP
TCgpICYmIGRzdC5pc1ZhbGlkKCkpIHtcCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gdHlwZTsgXAorICAgICAgICAgICAgICAgIHdpbGxEZWYoZHN0KTsgXAorICAgICAgICAgICAg
fSBcCiAgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7
IFwKICAgICB9CkBAIC0xNTYsMjYgKzEwMzcsMzIgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBj
YXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9u
LCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZp
bmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7
IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNs
b3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xv
d0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJl
c3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0
LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nh
c2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBO
RVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAg
CkBAIC0yMzEsMTggKzExMTgsODQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBm
b3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICB1bnNpZ25lZCBwcmV2aW91
c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7Ci0gICAgICAgIGlmIChtX2J5dGVj
b2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5z
dHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8g
TGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KLSAgICAgICAg
ICAgIGJyZWFrcG9pbnQoKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRF
bmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgp
IHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRC
bG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRv
IHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgo
KSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5h
cHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAK
LSAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIt
PnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgp
KTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3Ry
dWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgICAgICBBU1NFUlQoY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpOworICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFk
ZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAg
ICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmFs
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGF0IGVu
ZCBvZiBiYiMiLCBtX2N1cnJlbnRCbG9jay0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0gPSBX
VEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJl
bnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4aXRCbG9jaygp
KTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJlZGVj
ZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAg
ICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNzb3JzKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29y
XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNlc3NvcnNTZXQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0ZUF0RW5kW3By
ZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUubWVyZ2Uo
Km1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rp
b25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nh
c2VzLnNpemUoKTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2Rl
SW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAgICAgICAgICAg
Ly8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBh
cmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFz
aGluZyBpZiBpdCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3Nl
bWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBs
YWJlbCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBBU1NFUlQo
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
KTsKIApAQCAtMjc4LDQ2ICsxMjMxLDUzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgfQogI2VuZGlmCiAKKworICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpOworICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigpOworICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewot
ICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGxlc3MpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoZ3JlYXRlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChpc19jYWxsYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNf
Y29uc3RydWN0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlw
ZW9mX2lzX2Z1bmN0aW9uKQotICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9i
eV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRfd2l0aF90
aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2lu
X2V2YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotICAg
ICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCi0gICAgICAgIERF
RklORV9TTE9XX09QKHVucmVhY2hhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19z
dGF0aWNfZXJyb3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVh
ZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJs
ZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9TTE9XX09QKGhhc19nZW5lcmljX3Byb3BlcnR5KQot
ICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Nj
b3BlZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJn
dW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZs
eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlz
ZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRvcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobmV3X2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocG93KQorICAgICAgICBE
RUZJTkVfU0xPV19PUChpbl9ieV92YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFs
PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcywgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcExlc3M+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChsZXNzZXEsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+
KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisg
ICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdyZWF0ZXJlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09Q
KGlzX2NhbGxhYmxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKS5tX2Rz
dCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwgU3BlY0Jvb2xl
YW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZiwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFR5cGVvZj4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dHlwZW9mX2lzX29iamVjdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0
PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lz
X2Z1bmN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKS5t
X2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05v
bmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLm1fZHN0
LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0
aF90aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2Rz
dCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3Ro
aXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
cHV0X2J5X3ZhbF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2lu
X2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1
bmNEZWNsSW5FdmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZGVmaW5lX2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBW
aXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93
X3N0YXRpY19lcnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5QnVmZmVyPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNw
cmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxP
dGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKS5tX2RzdCwgU3BlY0lu
dDMyT25seSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHksIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCkubV9kc3QsIFNwZWNC
b29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwg
U3BlY0NlbGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0
QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2Rz
dCwgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1
bWVudHM+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVBcmd1bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
UmVzdD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVf
cHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3Qs
IFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNl
T2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3Ro
ZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09i
amVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIp
CisgICAgICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBv
dz4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBE
RUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcg
KzEzNTgsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBE
RUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1
cGVyX3NhbXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShY
ODZfNjQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVf
U0xPV19PUChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9w
X21vdikKICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25l
Z2F0ZSkKQEAgLTQ3OCw2ICsxNDQyLDM5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkg
eworICAgICAgICAgICAgaWYgKCFtX2NoZWNrZWRVc2VMT0wpIHsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgICAgICAgICAgY2FzZSBvcF9jaGVja190cmFwczoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rocm93OgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
am1wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6
CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaWRl
bnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBl
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVf
Y29udHJvbF9mbG93OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBM
T0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5z
dHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAg
ICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXpl
KCksICJcbiIpOwogICAgIH0KQEAgLTUxNiwxMiArMTUxMywxNCBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRl
ZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwog
ICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAg
Zm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5i
ZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nh
c2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7
CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXgg
Zmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGlu
ayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJ
bmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAg
ICAgICAgIApAQCAtNTgwLDcgKzE1NzksNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2NoZWNrX3RyYXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9k
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbmVnYXRlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpA
QCAtNTk5LDYgKzE1OTcsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZW5kaWYKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjM1LDE1
ICsxNjM2LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmly
c3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5k
KCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZz
ZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAg
ICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRl
ciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9m
ZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkg
PT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xv
dyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2Zp
bGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJl
c3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlz
LCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
OwogICAgIH0KQEAgLTc3OCw2ICsxNzgyLDc3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExp
bmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgo
bGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJl
bCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisg
ICAgaWYgKCFtX2V4aXRKdW1wcy5lbXB0eSgpKSB7CisgICAgICAgIEp1bXBMaXN0IGV4aXRDb21t
b247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBzKSB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICAgICAgYXV0byBqdW1w
cyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0aGlzKTsKKworICAgICAg
ICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMuCisKKyAgICAgICAg
ICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4aXRDb21tb24uYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4aXRDb21tb24uZW1w
dHkoKSk7CisgICAgICAgIGV4aXRDb21tb24ubGluaygqdGhpcyk7CisKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiA9PSByZWdUNCk7CisgICAgICAgIEFTU0VS
VChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5zKEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyKSk7IC8vIFRoZSBjb2RlIGJlbG93IHJlbGllcyBvbiB0aGlzIGJlaW5n
IGEgY2FsbGVlIHNhdmUuCisKKyAgICAgICAgYXV0byBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gaml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExM
SW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4oJnZtLCBtX2NvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgICAgIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAg
ICAgbW92ZShHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIpOworICAgICAgICBtb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDMsIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayk7CisKKyAgICAgICAgbG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgIGFkZDMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFz
c2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zk9TUkV4aXRDb3VudGVyKCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5j
aDMyKEJlbG93LCBHUFJSZWc6OnJlZ1QyIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKG1f
Y29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpKSk7CisgICAg
ICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIsIEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5jZSB0aGUgTExJbnQgUEMgcmVn
aXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25UcmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3cpPigmdm0sIG1fY29kZUJsb2NrKTsKKyAgICAgICAg
cHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRy
aWdnZXJSZW9wdGltaXphdGlvbk5vdykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAg
Y2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3Zl
KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7Cisg
ICAgICAgIG1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJU
YWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIHNraXBKZXR0aXNvbi5s
aW5rKCp0aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJy
YW5jaDMyKAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVh
bCwKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAg
IEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NS
RXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOwor
ICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KQorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRy
YW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBk
ZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgp
OworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7Cisg
ICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAg
IG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6
cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8v
IDEuIFN0b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpl
dHRpc29uIGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJy
aWVyIExMSW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhp
cyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05NjcsNyArMjA0Miw3IEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBy
ZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRh
ZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkp
OworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29k
ZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05NzgsNyArMjA1Myw3IEBAIENvbXBp
bGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0Zp
dChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAg
IG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJ
VENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7Cisg
ICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNr
LCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwog
CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdl
bmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQu
ZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRh
YmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMTQ3LDcxMyBA
QCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFz
ZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVU
aW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAg
IC8vIE9PUFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8
fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBt
X2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAg
bV9leGl0SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAv
LyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZl
cmVudCBjb2RlYmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdl
IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8g
T09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBh
bGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFs
bENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewor
ICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxs
Q2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMo
cmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBh
bGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAv
LyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZl
cmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3
ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8v
IE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3Rl
clNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAg
cmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7
CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxv
d2VkRlBScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4g
d2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBp
bGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2Fu
cyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4K
KworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2
ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
S2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQ
UkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQg
SklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJyZWFrcyBjdXJy
ZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2UgYSBuaWNlIGFz
c2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAgICAvL2lmICht
X3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0g
bV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFs
bG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
IGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJl
Z1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAg
ICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFs
bG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBm
aXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdW
YWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
ICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOwor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQoreworICAg
IC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGgg
c2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVn
VmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBpZiAob3Bl
cmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAg
ICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVn
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5k
KG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2Ug
Y2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBiZWNhdXNl
IHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAgIC8vIC0g
VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAgLy8gLSB+
VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2UgZGVhbGxv
Y2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1cCBmdWxs
eQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxseSBkZWdy
YWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+VmFsdWVP
cGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisgICAgICAg
IC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFuZCA9IFZp
cnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkKKyAgICAg
ICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9CisKK3ZvaWQg
SklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIg
PSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAg
ICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBj
bG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxv
d2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFu
IEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBh
IGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRl
ZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5v
cGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChS
ZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3Bp
bGxCZWZvcmVDYWxsKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3Rl
cgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsK
KyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihy
ZWcsIHJlZ1ZhbHVlLm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRl
ZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVu
ZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMs
IHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEpJVDo6c2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVj
b3JkKQoreworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zy
b21TdGFja0ZvckNhbGwoKnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29y
ZC5zdGFja1NpemVGb3JTcGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwg
VmlydHVhbFJlZ2lzdGVyKCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpyZXN0
b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRU
b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIGZvciAoYXV0byYgcGFp
ciA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09
IHJlZ1RvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvcGVyYW5k
ID09IG9wZXJhbmRUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlm
IChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVnLmlz
RlBSKCkpOworICAgICAgICAgICAgbm9wKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9
IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNv
bnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNo
LCByZWcuZnByKCkpOworICAgICAgICAgICAgbm9wKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNs
b3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93
Q2FzZS5kc3QsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBk
ZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKworICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5k
ID0gb3BlcmFuZDsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlz
QWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIg
PSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwg
SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkp
OworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3IgYnl0
ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgorICAg
IGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOwor
CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9p
ZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7Cisg
ICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcp
Cit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3Vu
dDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAt
LXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVn
VmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitK
SVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQo
aml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50
KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlm
IChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQor
CitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAh
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQ
UlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJl
ZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnBy
KTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQu
dW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2pp
dC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1f
b3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFu
ZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitK
SVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dw
cik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5h
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9n
cHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIo
KTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3By
KTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAg
ICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKwor
ICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2pp
dC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlw
ZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAg
ICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJu
IG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9q
aXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6Omdwcigp
Cit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dw
cjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQu
cHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVy
cykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsK
KyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQo
SklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAg
bV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIo
KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9n
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0g
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQ
UlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dw
ciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3By
LCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVy
biBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsK
K30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sK
KyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOwor
CisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcg
cmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9
IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAg
bV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFu
ZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVl
T3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBt
X2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAg
ICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3Bl
cmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
ZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJ
bnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1f
aml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKwor
ICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQu
YXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitS
ZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVn
aXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
OworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcp
OworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVl
ZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0
cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAg
IGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7
CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsK
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpz
cGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgewor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJ
Zk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVy
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVn
cyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJl
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNC
eXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1
bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQorewor
ICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAg
ICByZXR1cm47CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmln
SW50MzIgPSB0cnVlOworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZh
bHNlOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAh
dXNlQmlnSW50MzIpIHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7Cisg
ICAgICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3Bl
Y0hlYXBCaWdJbnQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNI
ZWFwQmlnSW50OworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgIGlmICghZG9uZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVCaWdJbnQzMihvcGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJ
bnQzMih2YWx1ZSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7Cisg
ICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6
OnJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3Bl
Y3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUo
KSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJy
ZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBt
X2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZh
bHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChp
KSkpOworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0
aW9uOworICAgIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRS
ZWcsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2Nl
ZFJlZygpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQg
SklUOjpSZWdWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiKCIsIG9wZXJhbmQsICIsICIsIGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6
OmR1bXBSZWdhbGxvY1N0YXRlKCkKK3sKKyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9
IFsiKTsKKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAo
cmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsK
KyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAg
ICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygi
XHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBkYXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcwNzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
MTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNp
bmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNs
dWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51
bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFw
aDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNs
YXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0
bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAs
IHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVh
bFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBT
YXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsK
KyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVj
dCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7
CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5
IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4g
aGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2
ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMg
YmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3Bz
IHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAg
IH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Nyw2ICsyMTIsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9u
KTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVy
ZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklU
U3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRj
aEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8v
IE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFz
IGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2ls
bCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZp
dCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1
dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgotICAgICAgICBKSVQoVk0m
LCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29k
ZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVU
eXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAgTE9MCisgICAgICAgIH07
CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21waWxlVHlwZSwgQnl0
ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkp
OwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJm
YWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhy
ZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMg
Q29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQg
PSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVU
eXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
SklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQp
OworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29tcGlsZVR5cGUsIGNvZGVCbG9jaywgYnl0
ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsK
KyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5l
KTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2Rl
SW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFs
Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21w
aWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0YXRpYyB2b2lk
IGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQ
dXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklU
IGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAg
ICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAg
ICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAg
ICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJ
bmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5
TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3Bp
bGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNw
aWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJ
bXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAg
ICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0
aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkgKzM1MywxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAg
ICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9p
ZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBS
ZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNl
KFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAo
SnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzMzLDcgKzM2
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9v
bCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTM2MCw3ICszOTIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBF
cSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlw
ZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1v
ZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRG
aWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01MDgsOCArNTQwLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAt
NTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
U2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwg
U2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0
cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBl
cUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IElu
c3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTQ2LDkg
KzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlf
d2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9k
ZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0cnVj
dGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAt
Njc4LDc4ICs3MjEsODEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Fy
Z3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
dHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9w
dXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlm
dChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1p
dFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdo
dFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNp
Z25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3Ry
dWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7
CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3Vy
ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hH
UFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2lu
dGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCAr
ODEwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1
ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODIyLDE4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9u
LCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3As
IHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5
cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAg
ICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0
IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24s
IFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlw
ZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2
b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0
cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBh
dGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dD
YXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQg
bGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmso
dGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
RHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2
b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5k
ZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNl
cywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFz
QW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAg
ICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAg
ICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1f
c2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTk2MSw2ICs5ODUsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7
CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOwor
CiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0
aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTcxLDYgKzk5OCwy
NTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9w
PgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9w
KTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICAg
ICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVnIGhpbnQgPSBJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisK
KyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQ
UlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVn
IGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAg
fkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2Vy
IDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0
IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+
Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJ
bnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwor
ICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1
ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklU
JiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgp
OworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAg
ICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcg
fTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisK
KyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcg
bV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBl
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3Vs
YXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3Vs
YXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3Bl
cmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBS
UmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3Bl
cmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAg
ICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFu
ZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVn
VmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAg
IH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAg
ICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZv
ck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1
YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcmIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
Z1ZhbHVlKGZwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAg
ICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5k
KG9wZXJhbmQpID0gZ3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3Bl
cmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVy
YW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0g
b3BlcmFuZDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090
aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9v
bCB1c2VMT0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4
aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQg
bW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxs
b2NhdGVHUFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFs
bG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJS
ZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7Cisg
ICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6
IE1ha2UgdGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0
IHRvIHNldCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2Nr
KFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2ls
ZW50U3BpbGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgICAgIHZvaWQgc2ls
ZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lk
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3RlclNldCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9p
bnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4gbV9mYXJDYWxsczsK
QEAgLTk5MCw3ICsxMjYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1w
VGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5k
ZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAg
U2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3
aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNp
Z25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTEwMjcsNiArMTMwMCw4MyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAg
ICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgewor
ICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQg
dmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAg
ICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3Qg
QWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdw
ciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAg
ICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAg
ICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0Nv
dW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRl
ZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAg
IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJl
Z2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhl
ci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVz
LnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNb
aV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdp
c3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRl
OworCisgICAgICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZv
aWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRC
bG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGUsIHRydWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dF
bnRyeT4gbV9leGl0TG9nOworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4g
bV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNl
c3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wg
bV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRl
Y29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4s
ICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFs
c2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xv
d0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vu
c2lnbmVkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFVuc2lnbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihM
ZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCByZXN1bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMy
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVnVDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
b3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAg
ICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4g
dGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGlt
bWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5n
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZw
cigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IFZhbHVlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKQEAgLTIyOSwxNyArMjgxLDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXAoY28KIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAg
IEdQUlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhT
ID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBv
cDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSksIHRhcmdl
dCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGdldFJIUygpOwog
ICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9w
MWltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0
aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKICAgICB9CiB9CiAK
QEAgLTI1NSw0MyArMzMzLDg5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25z
dCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJl
ZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBv
cDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZd
IHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHQ7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsK
KwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBp
bnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBjb21w
YXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDApOworICAgICAgICBj
b21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJlc3VsdEdQUik7CiAg
ICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGdldFJIUygpOwogICAgICAg
ICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBj
b21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDAp
OworICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9w
MWltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25k
aXRpb24sIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAg
Z2V0UkhTKCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOwogICAgIH0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xv
d09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVy
YXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVy
YXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVy
YXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9u
LCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgU2xvd09wZXJhdGlv
bj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1
Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJh
dGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRp
b24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgYXV0byBmYWxsdGhy
b3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVH
UFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGZhbGx0aHJv
dWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBXZSBnZW5l
cmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRo
OgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlh
dGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVt
YmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVt
YmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25z
dGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMzAwLDggKzQyNCw2IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAg
ICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFk
ZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjYsOCArNDQ4LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRkNjQo
bnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MSwxMiArNDcxLDExIEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAo
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAg
ICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFp
bDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0
ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAg
ICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY5LDkgKzQ4OCw5IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEu
bGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMubGlu
ayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8g
OiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC0zODEsMTEgKzUwMCw0
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7IC8vIE9PUFM6IGVuc3VyZSBm
b3IgYWxsIG9wY29kZXMgcHJvdmVuVHlwZSBhZ3JlZXMgdy8gdGhlIHByZWRpY3Rpb24gcHJvcGFn
YXRpb24uCisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcgZnByID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShpbnB1dEdQUiwgZnByKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29u
c3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVB
ZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZw
cik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91
YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBp
bnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShz
cmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigpOworICAgICAgICAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBhZGREb3VibGUoQWJz
b2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwg
ZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmln
SW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3Qg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAg
ICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVn
VDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkp
OworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0z
OTMsMTEgKzU0OCw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9
IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCByZXN1bHRG
UFIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAg
ICAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7Cisg
ICAgICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVtcEZQUiwgcmVzdWx0RlBSKTsK
KyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1bHRGUFIpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxv
dywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAg
ICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgaW5wdXRGUFIg
PSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsK
KyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAg
bG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1
YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOworICAgICAgICAgICAgc2V0RG91
YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
T09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1
dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5w
dXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51
bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAg
fQogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQwNyw1NCArNjA0LDg5IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29w
X21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJo
cyA9IGJ5dGVjb2RlLm1fcmhzOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29y
cmVjdCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZS
ZWdpc3RlcnM6OmVheCk7CisgICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBh
dXRvIGVkeCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJz
OjplY3g7CisgICAgQVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVk
eCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1Q0KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBlYXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxo
c1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBs
aHNHUFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAg
ICAgICBjbG9iYmVyKGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVt
cC5lbXBsYWNlKCp0aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVk
eCk7CisgICAgICAgIGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhU
ZW1wLT5ncHIoKTsKKyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdw
cigpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5l
bXBsYWNlKCp0aGlzLCBsaHMpOworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7
CisgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQ
Uik7CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBl
Y3gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KGVjeCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1v
dmUocmVnVDQsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4
KSk7CiAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4
LCBUcnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKEVxdWFsLCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9t
aW5hdG9yTm90TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigp
OwogICAgIHg4NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5j
aDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVt
cCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BS
LCBUcnVzdGVkSW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBl
ZHgpKTsKICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVk
eCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwot
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVn
cyB7IGVheCB9KTsKIAotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJ
bnQpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkp
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVj
QmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
ZWF4KTsKIH0KIAogI2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArNjk2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFM
VUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNv
bmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAg
ICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzQsNiArNzA2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3Mu
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2Fk
KG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MiwxNSArNzk1LDEzIEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3Bl
cmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5z
dHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3Bl
cmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChv
cDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAt
NzI0LDEzICs5NTUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aQogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPiht
X2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJ
WE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0
ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8
T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRl
UHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6
ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRp
bWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25p
cHBldEdlbmVyYXRvcj4KQEAgLTc0MSwxOCArOTcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5h
cnlPcEZhc3RQYXRoKGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLQogICAgIFNuaXBwZXRPcGVy
YW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKIApAQCAt
NzYwLDMzICs5NzcsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25z
dCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAg
ICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikp
OwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4g
aGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNl
CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7
CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAg
IGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmls
aW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRl
Y29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwg
cmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlz
dCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzEwOTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0
UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDIwICsxMTM5LDYgQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7
Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNl
bmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kOwogCkBAIC04NzMsMjEgKzExNDksNzcgQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFs
aWRGUFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIg
ZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIo
KSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAg
ICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmln
aHRTaGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAg
IGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
SW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIs
MTggKzEyMzQsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJo
c0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhz
RlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVj
dGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0
aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVB
ZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0g
Yml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0TWF0
aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVB
ZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBO
b25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxMjkyLDM1IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhO
ZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRz
dC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBz
aHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdz
IHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwor
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3JjVGVt
cDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1RlbXAu
ZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNyY1Jl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhOZWdh
dGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4K
KyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQg
c2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3JjUmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNy
Y1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MSwxOSAr
MTMyOSwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAg
ICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNj
cmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdz
KTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBib29s
IGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgp
OwpAQCAtOTYzLDcgKzEzNTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5
TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8
IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2Zp
bGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzEzNzIsODIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgp
KTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAg
ICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkp
OworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0
T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAg
IFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsK
KyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRU
ZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7
CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJU
ZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOwogI2Vs
c2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVn
IHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAj
ZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkp
IHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAg
ICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdo
dE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsK
KyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9
OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAg
ICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7
Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRP
cGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworICAgICAg
ICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
bGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0g
bGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwor
ICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAg
ICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOwor
ICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYg
KCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAg
IGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5k
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwor
ICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQs
IHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwg
ZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElDLT5tX2dlbmVyYXRv
ciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQ
Uik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25z
dGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1
dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3ICsxNDU2LDM0IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2Vu
ZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAg
IGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXND
b25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5k
LmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
MSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7
CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAg
ICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAgICAg
ZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0
UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZSht
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNSwx
MSArMTQ5MywyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAg
ICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQs
IHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3Zl
blR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoc3Rk
Ojppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJl
cGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rp
b24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiog
bWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBw
cm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJy
ZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE1MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdz
IHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTA4
NSw3ICsxNTUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRj
aEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5m
aW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE1NjIsNiBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNlbmRpZgot
ICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5
cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE1NzIsMzYgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJUKCEoR2VuZXJh
dG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9y
Ojppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogCi0gICAgaWYg
KEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGVsc2UgaWYg
KEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xv
d0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZh
bGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUMyA6IHJlZ1QyIH07
CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBpZiAoR2VuZXJh
dG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxzZSBpZiAoR2VuZXJh
dG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBAIC0xMTU2LDIzICsx
NjM0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotCiAg
ICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmly
c3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTY0OSwyMTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0
YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShnZXRP
cGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJFTEVBU0VfQVNTRVJU
KCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsK
KyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRU
ZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7
CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJU
ZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7
CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBG
UC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9
IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnBy
KCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdU
MjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdU
MTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0
Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJS
ZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYg
KCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQor
ICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVREaXZHZW5lcmF0
b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hG
UFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BS
LCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAgICAgICBnZW4u
ZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3Mp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5lbXB0eSgp
KTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAgICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJl
cikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
Qnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVs
SUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7CisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBhcml0aFByb2ZpbGUu
ZGlkT2JzZXJ2ZU5lZ1plcm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhz
VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyBy
ZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKGxoc0dQUiwgbGhzRlBSKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShyaHNHUFIsIHJoc0ZQUik7CisgICAgICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQ
UiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5k
OjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRH
UFIpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywg
YnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSBy
ZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11
bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBl
bWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
dWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3Qp
ID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhz
LmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29k
ZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3Vi
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklD
ID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRp
b25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0
TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVj
b2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlv
bkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lz
dGVyKCksIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3Io
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rlcigp
OworICAgIHdpbGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hl
YXBUb3A7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBi
b29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENv
ZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0
ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkK
ICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQo
b3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMz
Nyw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29t
cGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BU
YWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93
Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3
YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICsz
ODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAg
ICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3
ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0
aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsK
KworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVy
ZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0
ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJh
dG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5w
cm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENo
ZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5l
eHRDaGVja3BvaW50U2xvdyk7CisKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHRUZW1wIHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJl
Z1QwID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVS
ZWdUMCA9PSByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdU
MCk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgcmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Bl
bj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBH
UFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00
NTYsNiArNDc0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4K
ICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9P
UFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93
IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMg
aXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5j
aElmTm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3Vs
dEdQUik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVy
UmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAg
ICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJS
ZXN1bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdz
LmFkZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFs
dWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJl
Z2lzdGVycywKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVS
ZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93
UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25l
Q2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAg
ICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBmYWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRT
bG93UGF0aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdl
bi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNo
ZWNrcG9pbnRTbG93UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1
ZUdQUiB9KTsKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBp
dGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpA
QCAtNTI2LDcgKzU1NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwog
ICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAg
ICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sy
XS5saW5rKHRoaXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAt
NTYxLDcgKzU5MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMK
IAogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
ICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25z
dCBjaGFyKiBKSVRDb2RlOjp0eXBlTmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJ
bnQiOwogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFz
ZWxpbmUiOworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7
CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBj
YXNlIEpJVFR5cGU6OkZUTEpJVDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1
aW50OF90IHsKICAgICBIb3N0Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAg
QmFzZWxpbmVKSVQsCisgICAgTE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBA
IC02NywzNiArNjgsMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVO
YW1lKEpJVFR5cGUpOwogCi0gICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAg
IHN0YXRpYyBKSVRUeXBlIHRvcFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5
cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQo
SklUVHlwZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAg
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlw
ZTo6REZHSklUOwotICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJl
dHVybiBKSVRUeXBlOjpGVExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5v
bmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxl
U2NyaXB0KEpJVFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkg
ewogICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9z
dENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoK
KworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAg
ICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5
NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoK
ICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAg
ICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpM
T0xKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0K
QEAgLTExNiw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5
cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBK
SVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBj
YXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ1LDcg
KzEzOCwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRp
ZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRIaWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBi
b29sIHVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRU
eXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAor
ICAgIHN0YXRpYyBib29sIGhhc0RGR0NvbW1vbihKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRU
eXBlOjpGVExKSVQ7CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgaXNPcHRpbWl6aW5nSklUKEpJ
VFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6
OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0
NSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBP
T1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRv
bid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3
LDYgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgogQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwg
dGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwpAQCAtMTY3LDI1ICsxNjksNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChp
dGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhh
c0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRl
Y29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA3LDI3ICsxOTAsMzYgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0
aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1w
KQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAg
CisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVj
b2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1f
c2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxh
c3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQo
SnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1
bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBS
ZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0g
ICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1
bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHku
Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVj
b2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisg
ICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTQw
NiwxMSArMzk4LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwog
ICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qp
Ci17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3Qp
KTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3Rv
bT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxv
Zy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
QEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlv
bioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2Fu
IGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2Ug
ZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3By
Rm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBA
IC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9u
U2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCpt
X3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFs
bG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOwor
ICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJS
ZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3Vs
dFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVn
VDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9j
YXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBi
dXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJl
c3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBw
cm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0
ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25z
dHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2Rl
Lm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNv
bnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisg
ICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAg
ICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIg
PSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3Rh
bmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1
Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOwor
ICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJ
bnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFu
Y2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwog
CiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVu
Y3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2Up
LCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7
CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSBy
ZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBh
IGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0lu
c3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdU
MCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8g
cHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlv
bmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1Rl
bXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVt
cCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcg
dmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFU
ZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7
CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIg
PSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVl
VGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3By
KCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAg
IH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAor
ICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNj
cmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNl
VmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAg
ICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0
aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBp
cyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAg
ICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNj
cmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107
CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNl
R1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikK
QEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IElu
c3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0g
ICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1
ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwg
PSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEs
MTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
TnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9v
bGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NCha
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29s
ZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
Qm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgor
ICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5w
dXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI4LDU2IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMy
VGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBh
bmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7
Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2
NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNF
KEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENl
bGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4
ICs2NDMsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2
YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAg
ICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0
aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2
OSwxNSArNzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1t
LmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1t
LmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTM4Niw1MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5j
aElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBp
c1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0
byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsK
KyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlv
bk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJv
b2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIo
WmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5s
aW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0
Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29s
ZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBs
b3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVz
cGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdo
aWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsK
KworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVl
IHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAg
Ly8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9y
IGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52
ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGlu
LCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdU
MCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpm
YWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRp
b247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRp
dGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUg
bW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJU
ZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gy
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAg
RlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVl
PigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZG
YWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBj
YXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZw
U2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRo
aXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24s
IHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVu
ZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAg
ICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKwor
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBj
YXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5n
cHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
LQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0LDI2IEBAIHZvaWQgSklUOjplbWl0X29w
X2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNTE1LDY1ICsxMTY1LDMxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25z
dCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVj
aWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVk
SW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAg
ICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0
ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRv
IGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJl
ID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5
cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAg
RG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNU
ZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOwor
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2
ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihF
cXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZh
bHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAg
ICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
Q2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7Cisg
ICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
ZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0
IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNH
UFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
dHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30K
IAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQ
UlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0K
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVx
SW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0K
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBP
T1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vz
bid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhT
YXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFy
Z2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhz
R1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE0ODgsMTQ2IEBAIHZvaWQg
SklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5t
X2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMx
LCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29s
IGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAg
IGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8g
ZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVz
Q291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhz
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgSnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMy
KHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwg
ZHN0KTsKIAotI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8g
KGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQg
PSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwot
ICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93
UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRo
aXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5h
aXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0g
ICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFk
ZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2gg
Yml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0
OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3Vi
bGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBt
b3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0
T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0
KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0g
ICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JF
cXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdU
MSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7
Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0
IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0
KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3Jl
IHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8g
dGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQot
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJl
Z1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZWdUNSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVT
RShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAn
dHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0
ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290
byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAg
ICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAo
bGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2gg
aW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNl
ZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0
aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2ls
bCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAv
LyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9u
bHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9y
IGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUo
cmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0
T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAg
ICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEp
LCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBi
cmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNv
dmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwor
ICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5s
ZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRo
IGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJl
Z1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVn
cyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUp
OwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBh
cmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAg
ICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qy
KSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8v
IGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5s
aW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRo
aXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0
cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAg
ICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBp
dCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8g
aWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAg
ICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwor
ICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Njc0LDY4ICsxNjQ1LDEzNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0
IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
bGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBy
aHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEs
IHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wg
aXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFu
ZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAg
ICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAu
ZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwog
Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1p
bmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmln
aHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlz
IENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwotICAgICov
Ci0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhh
dCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFu
Y2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJ
bnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2
aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBh
bGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2
aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigx
KSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9
IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdl
dCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxl
YXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBt
b3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8g
ZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAK
LSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlz
KTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwg
d2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7
CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAg
ICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8g
c2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMy
LCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcg
YWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBh
bGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8g
TGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAg
ICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAg
ICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdU
MiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJl
Z1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwg
cmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVh
c3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAg
IGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9
CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFy
ZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAg
IG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3Qg
aWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8g
aWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxp
bmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhp
cyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCks
IHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292
ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAg
ICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwor
ICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAj
ZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzg2LDIyOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0
RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RF
cVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVn
VDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdw
cigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcg
bGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2Up
OworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJl
cj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBp
c0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlz
KTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFu
eUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFw
QmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIg
PSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNl
bmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAg
ICAgICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwor
ICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5r
KHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwor
ICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlm
IChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcs
IHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
dHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAh
PSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorICAgIHJlc2V0Q3Vy
cmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQg
YW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJv
bUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4
LDkgKzIwNjUsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50
U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBp
dCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50
U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwg
cmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIwOTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJl
Y29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjEyMSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5z
dXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMTQ1LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUg
PSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4g
ZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJl
c3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwg
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVn
Z2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BF
cU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVx
dWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29t
cGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7
Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7
CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0
KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwot
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVt
cCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
LSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21w
YXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdElt
bWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBP
T1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0
ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vz
bid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVy
cyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2lu
ZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAg
ICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90
IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50
OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9y
KHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIo
bV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIyOTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBz
Y29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIzMjAsODAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNo
ZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9
IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVj
dDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAm
JiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2Un
cmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5U
eXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVj
Q2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAg
ICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3Jj
RHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8g
Tm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsK
KyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIs
IHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAg
ICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAg
IGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNy
Y0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkp
OwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVn
VDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUp
KTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
NTksNiArMjQwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNl
PEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAg
IFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJl
ZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyNDExLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVn
VDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAg
Z3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7
CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0
dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMt
PmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAg
Y2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9
IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0
ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI0NTMsMzMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFk
ZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
Y3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVl
R1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVy
blZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5W
YWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3Bl
Y0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRo
IGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTYyLDggKzI0OTgsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29w
X2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVu
dEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55
IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygp
ICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpKSkgeworICAgICAgICAvLyBPT1BTOiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdl
IGNhbiBhbHdheXMgT1NSIGVudGVyLgogICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRM
b29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRy
LCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3cs
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29w
c0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI1MjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9v
cF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xv
b3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNo
ZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRl
eC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNTQzLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5Lmxpbmso
dGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3Vy
cmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3Qg
YmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwog
I2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI1NjksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBl
cl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFk
ZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVU
cmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApA
QCAtMTI0NSw4ICsyNTc5LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3Qg
SW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Jl
Z2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVn
ZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVn
RXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
QEAgLTEyNTYsMjMgKzI2MDAsNDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0
IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJl
ZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0
aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlE
OwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBm
dW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2Ug
ewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5j
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQog
fQogCkBAIC0xMzAxLDI0ICsyNjY0LDQ2IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21t
b24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAg
ICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5l
bXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29w
ZS0+Z3ByKCk7CisgICAgICAgIHNjb3BlLnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAg
IE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsK
ICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAg
IGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBA
IC0xMzQ5LDkgKzI3MzQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IElu
c3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUg
PSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJn
R1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhp
cywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCBhcmdHUFIsIHNpemUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjc1NSwyNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRl
Y29kZS5tX2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAg
ZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRl
eCwgcmVnVDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApA
QCAtMTM4MSwxNSArMjc4OCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9y
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAK
LSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNDA5LDYgKzI4MzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1
cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisgICAgLy8g
T09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODY2LDggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIg
aGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFz
SW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKQEAgLTE0NjEsMTUgKzI4OTMsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoYwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJl
Z1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUp
OwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVK
dW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5
cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRG
b3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJh
ZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyAr
MjkxMCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKICAg
ICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2Rl
SW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4
dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBp
bGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBi
YWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwpAQCAtMTUxMCwzNyArMjk0Myw4MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGly
ZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9Owor
ICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JH
UFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGlu
ZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVn
VDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogCi0gICAg
Ly8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0
aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVn
MzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAg
IGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRH
UFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJ
ZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3Jh
Z2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNj
ZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0
J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVn
MzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3Vs
dEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENo
ZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBl
bnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFj
Y2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdU
MSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAg
ICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBp
dCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBu
ZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Cisg
ICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTU1MCwyMSArMzAyNyw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRz
ID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJl
ZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8
SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBl
bnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJh
dG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJh
dG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGlu
ZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVt
ZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJl
bG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1l
c0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0
KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwg
U3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmlj
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIx
ICszMDgxLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxv
dywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBH
UFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRl
eFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRl
eFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBs
YWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhH
UFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRv
clRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9
CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3Bl
cnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
ICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxv
YWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxv
YWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4
dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9u
ID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Q
cm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZv
ckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJl
Z1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE5Nyw5IEBAIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsK
KworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAg
c3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIs
ICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3Vl
PigpOwpAQCAtMTY3Miw2ICszMjE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVw
ZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdU
MCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMg
aXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTcwMiwxMSArMzI0NywyMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1Zh
bHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQz
MihyZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwor
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJs
ZVJlZ3MocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszMjY4LDQ4IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9yZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2Rl
Lm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJ
bW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0
aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNU
b1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGlu
ayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihM
ZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAg
c3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveElu
dDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0g
anVtcCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxp
bmsodGhpcyk7CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkp
LCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bWJlcigwKSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdU
MCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzMzMTcsOTkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNo
MzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAg
ICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZp
bmVkKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
MSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50
T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwot
ICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVu
dE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZElt
bTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMu
bGluayh0aGlzKTsKKyAgICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3Mp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVH
UFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9h
ZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2Ny
YXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3Bl
Y090aGVyOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qz
LCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFs
dWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
MywgcmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBB
U1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVl
UmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdz
LnBheWxvYWRHUFIoKSkpOworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsK
IAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJl
c3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRH
UFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQxOSw2ICsz
NDE5LDM2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja0kKICAgICBy
ZXR1cm4gMDsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJS
ZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSkKK3sKKyAg
ICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhl
cmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CisgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFi
bGUuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKGxvbENvZGVCbG9jay0+dm0oKS5oZWFw
KTsKKyAgICAKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obG9sQ29kZUJsb2NrLT52bSgpKTsKKwor
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxvbENvZGVCbG9jaywgIjog
RW50ZXJlZCByZW9wdGltaXplIGZyb20gTE9MIik7CisKKyAgICBDb2RlQmxvY2sqIGxsaW50Q29k
ZUJsb2NrID0gbG9sQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIC8vIFdlIG11c3QgYmUg
Y2FsbGVkIHdpdGggdGhlIGJhc2VsaW5lIGNvZGUgYmxvY2suCisgICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGxsaW50Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnQgPSBsbGludENvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBp
ZiAoIXJlcGxhY2VtZW50IHx8IHJlcGxhY2VtZW50ID09IGxsaW50Q29kZUJsb2NrKSB7CisgICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxsaW50Q29kZUJsb2NrLCAi
OiBOb3QgcmVvcHRpbWl6aW5nIExPTCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgYmVlbiBqZXR0aXNv
bmVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUg
cmVwbGFjZW1lbnQgbXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4gb3Bwb3J0
dW5pdHkKKyAgICAvLyB0byBjaGVjayBvdXIgbG9naWMuCisgICAgQVNTRVJUKGxsaW50Q29kZUJs
b2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGxvbENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKworICAgIC8vIE9PUFM6
IGZpZ3VyZSBvdXQgc3R1Y2sgaW4gYSBsb29wIGxvZ2ljCisgICAgbG9sQ29kZUJsb2NrLT5qZXR0
aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09TUkV4aXQsIENvdW50UmVvcHRpbWl6YXRpb24p
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTgsNiArMzE4LDggQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25WYWx1ZQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzVHlw
ZVByb2ZpbGVyTG9nLCB2b2lkLCAoVk0qKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB2b2lkLCAoVk0qKSk7CiAKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93LCB2
b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI4MSw4ICsyNzcsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAg
ICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAtNTU4LDcg
KzU1Miw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRoZSByZWdp
c3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGlu
ZyBvbiBBUk0uCkBAIC01OTgsOCArNTkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwpAQCAtNjM5LDggKzYzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGly
ZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY4Niw4ICs2NzUsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyOSw4ICs3MTYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc3OCw4ICs3NjMsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC04MTksOCArODAyLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTEwMCw4ICsxMDgxLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjU3LDggKzEyMzYsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0
UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
TW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTIsNTEgKzU0LDExNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFI7
CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9
IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRHUFI7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5kZXhpbmdUeXBl
R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+
IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5v
dENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
ICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAg
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7Cisg
ICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhp
cyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIG1v
dmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNl
R1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIp
OworICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJh
c2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocHJv
cGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVy
dHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxP
TCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENo
ZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGlu
ZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MpOworICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJv
cGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAg
ICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3Bl
Y1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9n
ZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlm
ICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBp
ZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFs
SW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNSw0MSAr
MTczLDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgq
dGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAg
cHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MpOworICAgICAgICB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Nyw2ICsyNTcs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgp
OwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPwor
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBwcm9w
ZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5
KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTksOCArNDIx
LDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyBy
ZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBy
ZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFpbGFibGVS
ZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlOYW1lLAog
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVj
bWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzOSw3ICs0NDQsNyBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlOwpAQCAtMzQ3LDcgKzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUg
ZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0
byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewog
ICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1
NSwxMyArNDYwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
ICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBs
b2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0
YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFi
ZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CkBAIC0zODEsNiArNDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlW
YWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzog
RG8gYmV0dGVyIGlmIHdlIGNhbiEKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKIApA
QCAtMzk0LDEzICs1MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25J
bmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBmYXN0UGF0aEptcCwgZG9uZSwgZG9uZSkp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRL
aW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
ICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwpAQCAtNDIwLDQ5ICs1MjUsMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lKGMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNj
ZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0
aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsK
KyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VH
UFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0
ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVy
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
YmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdl
dHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
c2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50
MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0
ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIg
PSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNz
b3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nv
ci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00
NzIsMTggKzYzMyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7Cisg
ICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
Y3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdy
aXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxs
LgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1
ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ5MiwyNSAr
Njg3LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBl
bWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhy
ZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MjAs
MTkgKzcxNyw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFj
ZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIg
PSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJv
cGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0
ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9i
YmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTQxLDIyMSArNzg5LDM2OCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAg
IEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Cisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwot
ICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNl
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAgbm90QXJy
YXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0
YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5
TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BS
ID0gdXNlTE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRhLm1fbW9k
ZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJh
eUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRHZXRCeUlk
V2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwor
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVl
LmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlz
R1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAg
dGhpc0dQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgfQorCisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlz
VlJlZywgdGhpc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNH
UFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRo
aXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0lu
ZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGly
ZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVy
ZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0
byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVy
cyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQg
dGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZy
b20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwg
dmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2
YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1
ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
fQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRj
aEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJl
Y3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKQEAgLTc2NSw3NyArMTE2MCw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5j
b25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2Ug
Y29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNl
KTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
KHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNb
bV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5j
dGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgr
K107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAK
KyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4Kytd
OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAgaWYgKCFu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyAr
K2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0
KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtODQ3LDE3ICsxMjYwLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1f
cmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVE
ZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50
U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVzdWx0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0
YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtODY3LDIxICsxMjg4LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3Bl
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8Q2Vs
bE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAg
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kpCisgICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRh
dGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwg
ZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04OTQsOSArMTMzMCw5IEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZl
VHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTA5LDI5ICsxMzQ1
LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwog
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtOTQwLDE1ICsxMzc2LDIwIEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNP
YmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHNjcmF0
Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUikp
OworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3Bl
cmFuZCwgR1BSUmVnIHJlZykKQEAgLTk2MiwxMiArMTQwMyw2IEBAIHZvaWQgSklUOjplbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTk3OCw1MSArMTQxMyw4NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJh
bmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5k
KTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
ewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0
dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSBy
ZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAgICAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAg
ICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0g
b2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QyOwor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBk
c3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVT
bG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIg
aW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1
dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBj
aGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGppdEFzc2VydChz
Y29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAg
IHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKICAgICAg
ICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRP
ZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMy
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGlu
ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVzdGVkSW1tMzIo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24o
SklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxp
bmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBu
ZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZz
ZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBuZWczMihv
ZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0R1BSLCBvZmZz
ZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIG9mZnNldEdQ
UiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFRE
WiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXN1bHRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9w
ZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAg
ICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwg
cmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTEwMzYsMTAgKzE1MDQsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAor
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKIApAQCAtMTA1MiwyNyArMTUyMCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAot
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVt
cCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3Vs
dEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJl
YWs7CkBAIC0xMDgyLDQwICsxNTUwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQp
OwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBp
bmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQs
IHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0
cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTI5LDIxICsxNTc5LDQ5IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwog
CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVW
YWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0
cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1
ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcg
c2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgR1BS
UmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAg
IG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseVZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsK
KyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBidXR0
ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRHUFIpOyAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgp
IC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7Cisg
ICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAg
bmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUlu
ZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExNTQsMjggKzE2
MzIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRj
aFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNo
R1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xv
YmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
Y29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0
Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0
KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VM
T0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9p
bnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAq
IHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTE5MCwxMiArMTY5NywyMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2Yg
ZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYg
d2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdh
aW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBE
eW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxy
ZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwpAQCAtMTIwOSwyMyArMTcyNSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRv
bid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcg
dGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBw
YXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2Up
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTI0MiwxMCAr
MTc2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIHsKQEAgLTEyNjEsNjEgKzE3ODQsMTc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1l
bnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhp
cywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50
c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0
KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVu
dHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29k
ZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERp
cmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVu
dHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgR1BS
UmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBhcmd1bWVu
dHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7
CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0b3JlNjQodmFsdWVHUFIs
IEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVzZUxP
TCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BTOiBNYWtl
IGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQg
dGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBp
bnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8g
c2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1
bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBz
byB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisK
ICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25l
cikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
VmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZh
bHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdw
ckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgICAgICB2
YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2
YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IG93bmVyVmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQUjsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2Ny
YXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKworICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZChvd25lcikgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVyR1BSID0gZ3ByRm9yT3BlcmFuZChvd25lcik7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgIG93bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBvd25lckdQUik7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9
CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAg
aWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkpCisgICAg
ICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwob3duZXJHUFIpOworICAgIH0K
IAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVy
QnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBPcHRpb25hbDxTaWxlbnRT
cGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7
IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4KKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyR1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVu
dFNwaWxsUmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbi5saW5rKHRoaXMpOworICAgIGlmIChvd25lck5vdENlbGwuaXNTZXQoKSkKICAgICAgICAg
b3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgIGlmICh2YWx1ZU5v
dENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAg
IC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBk
b24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4g
T3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9l
c24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBh
bHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBv
ZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgSnVtcCB2YWx1ZU5vdENl
bGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAg
ICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
aWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAg
ICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAg
ICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisg
ICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAg
IH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAg
IHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0xMzI3LDExICsxOTY3LDI2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zm
c2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFz
ZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50
ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEz
NDEsMTAgKzE5OTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNv
bgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5z
aWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQh
CisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgc3RvcmVQ
dHIodmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRk
cmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFs
RmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTE0NDcsOCAr
MjExNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDAp
OworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwg
c2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNp
bGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxS
ZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAg
ICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0xNDY2LDYg
KzIxNTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VM
T0wgPSBmYWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICAKQEAgLTE1NjcsNiArMjI1NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dFByaXZhdGVOYW1lV2kKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgQVNTRVJU
KChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bj
b2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCiB7CiAgICAg
QVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywgIXByb2ZpbGVkREZHQ29kZUJsb2Nr
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwg
KmNvZGVCbG9jaywgIiBkaWQgYmVjb21lIHJlYWR5LiIpOwogICAgIApAQCAtNTUsNyArNTUsNyBA
QCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVC
bG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEx
ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUV29ya2xpc3Q6OlBsYW4gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsKIHB1YmxpYzoK
LSAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICAg
ICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KQorICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUg
Y29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgOiBtX2xsaW50Q29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX2NvZGVCbG9j
a1RvQ29tcGlsZShjb21waWxlVHlwZSA9PSBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgPyBtX2xsaW50
Q29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpIDogbV9sbGludENvZGVCbG9jaykgCisgICAgICAg
ICwgbV9qaXQobV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCksIG1fY29kZUJsb2NrVG9Db21waWxl
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgbV9qaXQuZG9NYWlu
VGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CisgICAgICAgIC8vIE9PUFM6IHZpc2l0
IHRoaXMgaW4gY29uY3VycmVudCBnYworICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUg
IT0gbV9sbGludENvZGVCbG9jaykgeworICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUt
PnZtKCkuaGVhcC5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZCgpCkBAIC01MywxNyArNTgsMjMgQEAg
cHVibGljOgogICAgIHZvaWQgZmluYWxpemUoKQogICAgIHsKICAgICAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gbV9qaXQubGluaygpOworCisgICAgICAgIGF1dG8gc2NvcGVFeGl0ID0g
bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxl
ICE9IG1fbGxpbnRDb2RlQmxvY2spCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBp
bGUtPnZtKCkuaGVhcC51bnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9
KTsKKwogICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgICAgICBjYXNlIENvbXBpbGF0aW9u
RmFpbGVkOgotICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRl
bGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOworICAgICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChtX2xsaW50Q29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJj
b21waWxhdGlvbiBmYWlsZWQiKSk7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7CisgICAgICAgICAgICBtX2xsaW50
Q29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2Rl
QmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CiAgICAgICAgICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nl
c3NmdWwuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlu
c3RhbGxDb2RlKG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5qaXRTb29u
KCk7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+b3duZXJFeGVjdXRhYmxlKCkt
Pmluc3RhbGxDb2RlKG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgICAgIG1fbGxpbnRD
b2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MSw4ICs4
Miw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgVk0mIHZtKCkgeyByZXR1cm4g
bV9jb2RlQmxvY2stPnZtKCk7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0tleSgpIHsgcmV0
dXJuIG1fbGxpbnRDb2RlQmxvY2s7IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2xsaW50Q29k
ZUJsb2NrLT52bSgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5nKCkKICAg
ICB7CkBAIC04MCwxNSArOTEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0Zpbmlz
aGVkQ29tcGlsaW5nOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCisgICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklU
OjpDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQogICAgIHsKLSAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGNvbXBpbGVU
eXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcGxhbi5jb21waWxlSW5U
aHJlYWQoKTsKICAgICAgICAgcGxhbi5maW5hbGl6ZSgpOwogICAgIH0KICAgICAKIHByaXZhdGU6
Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fbGxpbnRDb2Rl
QmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9ja1RvQ29tcGlsZTsKICAgICBKSVQgbV9q
aXQ7CiAgICAgTG9jayBtX2xvY2s7CiAgICAgYm9vbCBtX2lzRmluaXNoZWRDb21waWxpbmcgeyBm
YWxzZSB9OwpAQCAtMjMzLDkgKzI0NSwxMSBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0
ZXIoQ29kZUJsb2NrCiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBl
ID0gT3B0aW9uczo6Zm9yY2VMT0woKSA/IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA6IEpJVDo6Q29t
cGlsZVR5cGU6OkJhc2VsaW5lOwogICAgIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVu
dEpJVCgpKSB7Ci0gICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNv
bXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKQEAgLTI0OSw3ICsyNjMsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxl
TGF0ZXIoQ29kZUJsb2NrCiAgICAgICAgIAogICAgICAgICBpZiAobV9udW1BdmFpbGFibGVUaHJl
YWRzKSB7CiAgICAgICAgICAgICBtX3BsYW5uZWQuYWRkKGNvZGVCbG9jayk7Ci0gICAgICAgICAg
ICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBh
ZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KSk7CiAgICAgICAgICAgICBtX3BsYW5zLmFwcGVuZChwbGFuKTsKICAgICAgICAg
ICAgIG1fcXVldWUuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9jb25kaXRpb24tPm5vdGlm
eUFsbChsb2NrZXIpOwpAQCAtMjczLDE0ICsyODcsMjQgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29t
cGlsZUxhdGVyKENvZGVCbG9jawogICAgIC8vIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBpc3N1ZS4g
SWYgdGhlIGNvbmN1cnJlbnQgSklUIHRocmVhZCBpcyBjb252b3llZCwgd2UgcmV2ZXJ0IHRvIG1h
aW4KICAgICAvLyB0aHJlYWQgY29tcGlsZXMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGFzIGdvb2Qg
YXMgaWYgd2UgaGFkIG11bHRpcGxlIEpJVCB0aHJlYWRzLiBNYXliZSB3ZQogICAgIC8vIGNhbiBk
byB0aGF0IHNvbWVkYXkuCi0gICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21w
aWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiB9CiAKKy8qCiB2b2lkIEpJVFdv
cmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgp
OwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKworICAgIGF1dG8gaXNDb21waWxl
ZCA9IFsmXSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBpZiAoaXNDb21waWxl
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYm9vbCBpc1BsYW5uZWQ7CkBAIC0yOTYs
MTcgKzMyMCwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogCiAg
ICAgfQogICAgIAogICAgIC8vIE5vdyBpdCBtaWdodCBiZSBjb21waWxlZCEKLSAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAgICBpZiAo
aXNDb21waWxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gV2UgZG8gdGhpcyBp
biBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBj
b21waWxlIHdpdGggdGhlCi0gICAgLy8gYmFzZWxpbmUgSklULgotICAgIGNvZGVCbG9jay0+cmVz
ZXRKSVREYXRhKCk7Ci0gICAgCi0gICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KLSAgICBKSVQ6
OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0gICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKworICAgIGlmIChPcHRpb25zOjpmb3JjZUxPTCgpKSB7
CisgICAgICAgIENvZGVCbG9jayogbG9sQ29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNl
bWVudCgpOworICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGxvbENvZGVCbG9jaywgSklUOjpDb21w
aWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBsb2xDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LT5pbnN0YWxsQ29kZShsb2xDb2RlQmxvY2spOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdl
IGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZh
aWxlZCwgdG8gY29tcGlsZSB3aXRoIHRoZQorICAgICAgICAvLyBiYXNlbGluZSBKSVQuCisgICAg
ICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7CisgICAgICAgIAorICAgICAgICAvLyBPSywg
anVzdCBjb21waWxlIGl0LgorICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklU
OjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgIH0KIH0KKyovCiAKIHZvaWQgSklUV29y
a2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG15UGxhbnMpCiB7CkBAIC0zMTQsNyArMzQ1LDcg
QEAgdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYgbQogICAgICAgICBwbGFu
LT5maW5hbGl6ZSgpOwogICAgICAgICAKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9j
ayk7Ci0gICAgICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrKCkpOworICAgICAg
ICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9ja0tleSgpKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwb2xsKFZNJik7CiAgICAg
CiAgICAgdm9pZCBjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgdm9pZCBjb21waWxl
Tm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIAogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCYgZW5zdXJl
R2xvYmFsV29ya2xpc3QoKTsKICAgICBzdGF0aWMgSklUV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFs
V29ya2xpc3RPck51bGwoKTsKQEAgLTY2LDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBU
aHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKICAgICAKKyAgICAvL3ZvaWQgY29tcGls
ZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApKTsKICAgICB2b2lkIGZpbmFsaXplUGxhbnMoUGxhbnMmKTsKICAg
ICAKICAgICBQbGFucyBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJNYXAuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIp
XTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUo
KTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9Cisg
ICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ld
OyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxO
dW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAg
ICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5v
dCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNl
dCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBt
X2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjcwNzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYyLDggKzM2MiwxMCBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoQ29kZUJs
b2NrKiBjb2RlQmxvCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9T
Ui4KLWlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCkpCitpbmxpbmUgQ29kZUJsb2NrKiBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKQogeworICAgIC8vIE9PUFM6
IEltcGxlbWVudCB0aGlzIHcuci50IExPTC4KKwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyh2bS5oZWFwKTsgLy8gTXkgY2FsbGVycyBkb24ndCBzZXQgdG9wIGNhbGxmcmFtZSwgc28gd2Ug
ZG9uJ3Qgd2FudCB0byBHQyBoZXJlIGF0IGFsbC4KICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklU
KCkpOwogICAgIApAQCAtMzcyLDI5ICszNzQsNDUgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFu
ZFNldEhldXJpc3RpY3MoVgogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xk
UmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVs
YXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2Rl
QmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICAKICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5wb2xsKHZtKTsK
LSAgICAKKworICAgIGF1dG8gbG9sQ29kZUJsb2NrID0gWyZdIHsKKyAgICAgICAgaWYgKENvZGVC
bG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xD
b2RlQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJs
b2NrLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJl
YWR5IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJl
R2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUOworICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2Nr
KCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4gY29k
ZUJsb2NrOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJs
b2NrLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygiVW5l
eHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1z
dGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5
cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksCiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFt
ZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKQEAgLTQwNSwxOCArNDIzLDIxIEBAIHN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVUVVJO
X1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52
bSgpOwotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykp
CisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVy
aXN0aWNzKHZtLCBjb2RlQmxvY2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAg
ICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJM
T0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOwor
ICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAo
ImluIHByb2xvZ3VlIikpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRD
b2RlQmxvY2spOwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBMTElO
VF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBu
dWxscHRyKTsKKyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0
Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9
PSBBcml0eUNoZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgp
LT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVs
bHB0cik7CisgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgp
LT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVs
bHB0cik7CiB9CiAjZWxzZSAvLyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlw
ZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkK
K3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5k
b250SklUQW55dGltZVNvb24oKTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxw
dHIpOwpAQCAtNDI2LDMxICs0NDcsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRy
eU9TUihDb2RlQgogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVOVVNF
RF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCks
ICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJ
TlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVO
VVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwo
KSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4g
ZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVu
dHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7
Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0Nh
bGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5
T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkp
LT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RF
Q0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAi
ZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAg
ICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkt
PmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJh
bWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRh
YmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9j
b25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhf
REVDTChsb29wX29zcikKQEAgLTQ3OSwxOSArNTAwLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KGxvb3Bfb3NyKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwog
ICAgIH0KICAgICAKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2Rl
QmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29tcGls
ZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQog
ICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENP
REVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29k
ZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsK
IAotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7CisgICAgQVNTRVJUKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQgfHwgY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpM
T0xKSVQpOwogCi0gICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0
Q29kZU1hcCgpOworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVC
bG9jay0+aml0Q29kZU1hcCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsK
ICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2Rl
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisK
KyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAg
ICAgTExJTlRfUkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7
CiAjZWxzZSAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBA
IHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNv
bXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICAvL09wdGlvbnM6OnVzZURGR0pJVCgpID0g
MDsKKyAgICAvL09wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOworICAgIC8vT3B0aW9uczo6dXNlTExJ
bnQoKSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVE
RkdFeGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MjcsNiArNTI3LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdl
KCk7CiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoQm9vbCwgdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5v
cm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMg
ZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0
YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwg
dW5kZXJzdGFuZCBwcml2YXRlIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBc
CisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBP
cHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9m
aWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExM
SW50J3MgbGxpbnRfaGFuZGxlX3VjYXVnaHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3Qg
YWdhaW5zdCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAg
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsK
LSAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCkgeworICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkxPTEpJVCkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3Rh
Y2tUcmFjZS5sbGludFBDKSk7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0
cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0
aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOSBAQCBKU1ZhbHVlIG51bWJlck9m
REZHQ29tcGlsZXMoSlNWYWx1ZSB0aGVGCiB7CiAgICAgYm9vbCBwcmV0ZW5kVG9IYXZlTWFueUNv
bXBpbGVzID0gZmFsc2U7CiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFPcHRpb25zOjp1
c2VERkdKSVQoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOyAvLyBPT1BTCisKICAgICBp
ZiAoIU9wdGlvbnM6OnVzZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VCYXNlbGluZUpJVCgpIHx8ICFP
cHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAgICAgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9
IHRydWU7CiAjZWxzZQpJbmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5q
cwkocmV2aXNpb24gMjcwNzg5KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUt
cHJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwog
CiBzZWxmLnRlc3RSdW5uZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxp
bmVGdW5jdGlvbiwKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVz
LAorICAgIG51bWJlck9mREZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1h
cDsKKyAgICAgICAgcmV0dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVk
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAg
ICAgICAgICAgIC8vIEVtdWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBn
ZXQgc29tZSB0aWVyaW5nIGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICgh
bWFwKQorICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0
IGNvdW50ID0gbWFwLmdldChmKSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAg
ICAgICAgIG1hcC5zZXQoZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQw
MDApIHwgMDsKKyAgICAgICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2Nr
OiBmYWlsTmV4dE5ld0NvZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9u
IGRmZ1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5w
cm90b3R5cGUucHVzaDsKICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0
aGVGdW5jdGlvbn0pKQorICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkg
ewogICAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChl
dmFsKF9hKSk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcg
KzM2MSw3IEBAIGZ1bmN0aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFp
bFNvbWVUZXN0cykKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFk
ZmdDb21waWxlZChhcmd1bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYg
aXNERkdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJn
dW1lbnQuc3RhcnQgOiAwOwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416616</attachid>
            <date>2020-12-21 12:09:38 -0800</date>
            <delta_ts>2020-12-21 15:55:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>517711</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY0Niw5ICsxNjQ2
LDkgQEAgbGV0IHJ1bldhc20gPSB0cnVlOwogaWYgKHR5cGVvZiBXZWJBc3NlbWJseSA9PT0gInVu
ZGVmaW5lZCIpCiAgICAgcnVuV2FzbSA9IGZhbHNlOwogCi1pZiAoZmFsc2UpIHsKK2lmICh0cnVl
KSB7CiAgICAgcnVuT2N0YW5lID0gZmFsc2U7Ci0gICAgcnVuQVJFUyA9IGZhbHNlOworICAgIHJ1
bkFSRVMgPSB0cnVlOwogICAgIHJ1bldTTCA9IGZhbHNlOwogICAgIHJ1blJleEJlbmNoID0gZmFs
c2U7CiAgICAgcnVuV1RCID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5o
YW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZh
dGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9u
QXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFi
bGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlm
IChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkp
IHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0p
KTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNt
U2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25B
bmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkK
QEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3Rv
cjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1
bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBA
QCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0
LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGlj
dGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVh
ZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9u
c0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlv
bnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxh
dGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fs
cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAg
ICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAg
ICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkg
ewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0
KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVj
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBj
bGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBl
cjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNN
YXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91
dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVh
bSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01h
cCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3Rh
bnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUdyYXBoLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZv
aWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+
PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxl
KCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRl
ciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0
aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFu
ZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgT3BlcmFuZCBkZXN0aW5hdGlvbkZvcihjb25zdCBCeXRl
Y29kZSYgYgogICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBv
cF9pdGVyYXRvcl9uZXh0KSB7CiAgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CiAg
ICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiB7Ci0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpERkdKSVQpCisg
ICAgICAgICAgICBpZiAodHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgdHlwZSA9PSBKSVRUeXBl
OjpGVExKSVQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChPcEl0ZXJhdG9y
TmV4dDo6bmV4dFJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGUubV92YWx1ZTsg
Ly8gV2UgcmV1c2UgdmFsdWUgYXMgYSB0ZW1wIGJlY2F1c2UgaXRzIGVpdGhlciBub3QgdXNlZCBp
biBzdWJzZXF1ZW50IGJ5dGVjb2RlcyBvciB3cml0dGVuIGFzIHRoZSB0ZW1wIG9iamVjdCAuCiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7
CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCkKKyAgICBpZiAoKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8
fCB0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsK
ICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5w
cmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwog
ICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0
aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8
Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBz
dGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBH
cmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0
dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYg
c3RhdHVzTWFwKQpAQCAtMTA1OCw2ICsxMDU4LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2
ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAg
ICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc2LDggQEAgc3RhdGljIFNl
Y29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAx
MCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJ
bnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsK
KyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgpAQCAtMTU0OCw2ICsxNTUyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIuY291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJh
c2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNv
dW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgpAQCAtMTg2Nyw3ICsxODcyLDcgQEAgQ29kZUJs
b2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkg
ewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgewor
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBl
KSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3Zl
IGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8v
IGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpj
bGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2Rl
QmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJ
VApAQCAtMjIzMSw1MSArMjIzNiw1NSBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmls
ZXI6OkpldHRpCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwogICAgIAog
ICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6Ci0gICAgLy8gMSkg
TWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5v
dywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAxKSBJZiB3ZSdyZSBERkcvRlRMLCBt
YWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93
LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAogICAgIC8vICAgIHdlIHNob3VsZCBPU1IgZXhpdCBh
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRoZSByZXR1
cm4uCiAgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIgZXhlY3V0
YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4KIAogI2lmIEVOQUJM
RShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoSklUQ29kZTo6aGFzREZHQ29tbW9uKGppdFR5cGUoKSkpIHsKICAgICAgICAgaml0
Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlmIChy
ZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNv
bXBpbGF0aW9uLmdldCgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQotICAg
ICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRz
IG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4K
LSAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKLSAg
ICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJl
bnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7
Ci0gICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb09sZEFnZSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgp
OworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAgICAg
ICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0
cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQu
CisgICAgICAgICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkg
eworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZt
LmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhl
Y3V0YWJsZSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHko
KSkKICAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVvcHRp
bWl6YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2RlID09
IENvdW50UmVvcHRpbWl6YXRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hv
dWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCkt
PmNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYg
KERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
RGlkIGNvdW50IHJlb3B0aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYKICAg
ICB9CiAgICAgCiAgICAgaWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgd2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFw
cGVuIGZvciBPU1IgZW50cnkgY29kZQogICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8vIE9y
LCB3ZSdyZSBhbiBMT0wgQ29kZUJsb2NrIGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAgICBh
bHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29uICE9
IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0
dGlzb25EdWVUb1ZNVHJhcHMpCisgICAgaWYgKEpJVENvZGU6Omhhc0RGR0NvbW1vbihqaXRUeXBl
KCkpICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24g
IT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50
RXhpdFNpdGVzKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNv
biBjYW4gaGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8g
YSBkZWFkIGV4ZWN1dGFibGUKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBv
YmplY3QgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgpAQCAtMjQ4Myw2ICsyNDkyLDggQEAgdW5zaWdu
ZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVzKAogewogICAgIEFTU0VSVChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZU
TCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAg
ICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGlsZWRXaXRo
RlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKQEAgLTI3MDksNyAr
MjcyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQg
Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1
bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5
cGUoKTsKLSAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0
eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7
CiAgICAgICAgIGRhdGFMb2dMbigqdGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBj
b2RlIGJ1dCBoYXZlICIsIHR5cGUpOwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oaml0Q29kZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlw
ZSkpOwogICAgIH0KQEAgLTI5NDgsNiArMjk1OSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRP
cHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFsbHlG
cmVxdWVudEV4aXRTaXRlcygpCiB7CisgICAgLy8gT09QUwogICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIApAQCAtMzA1MCw2ICszMDYy
LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5B
QkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlw
ZTo6TE9MSklUOgogICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhp
cyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApAQCAtMzQyMSw3ICszNDM0LDcgQEAgT3B0aW9u
YWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVj
b2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAgICAgSklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0
VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwg
aml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICBpZiAoaml0VHlwZSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQg
fHwgaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQpCiAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBj
YWxsU2l0ZUluZGV4LmJ5dGVjb2RlSW5kZXgoKTsKICAgICBlbHNlIGlmIChqaXRUeXBlID09IEpJ
VFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCkgewogI2lmIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRU
eXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBF
TkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2Zp
bGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0
YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQorewor
ICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAg
ICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5n
SklUVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4aXRpbmdKSVRUeXBlLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpCiAgICAg
Y2FzZSBFeGl0RnJvbUFueXRoaW5nOgogICAgICAgICBvdXQucHJpbnQoIkZyb21Bbnl0aGluZyIp
OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0RnJvbUxPTDoKKyAgICAgICAgb3V0LnBy
aW50KCJGcm9tTE9MIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRGcm9tREZHOgog
ICAgICAgICBvdXQucHJpbnQoIkZyb21ERkciKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHJldmlz
aW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklU
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiAgICAgRXhpdEZyb21Bbnl0aGluZywK
KyAgICBFeGl0RnJvbUxPTCwKICAgICBFeGl0RnJvbURGRywKICAgICBFeGl0RnJvbUZUTAogfTsK
QEAgLTM4LDYgKzM5LDggQEAgZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogaW5saW5l
IEV4aXRpbmdKSVRUeXBlIGV4aXRpbmdKSVRUeXBlRm9yKEpJVFR5cGUgdHlwZSkKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJu
IEV4aXRGcm9tTE9MOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4g
RXhpdEZyb21ERkc7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBA
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5k
c0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRz
IHsKIHB1YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJh
bmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3Vt
ZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6
ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAh
IXRyYWNrQ2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAo
IVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAg
bV92YWx1ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBU
JiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50
cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMs
IGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1
bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVt
Q29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVt
QXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3co
bnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJh
Y2tDYWxsZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQog
ICAgIApAQCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhP
cGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlh
bFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJn
dW1lbnRzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkK
KyAgICAgICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAg
IHsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVl
cy5maWxsKGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAg
ICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50
czsgfQogICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9j
YWxzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAg
c2l6ZV90IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6
ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNv
bnN0YW50cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0g
dHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+Cisg
ICAgc2l6ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlcy5zaXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAg
ICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsK
KyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5k
ZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6
ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
ZHggPCBudW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRz
KCkgKyBpZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7Cisg
ICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlk
eDsKKyAgICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1t0bXBJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBl
IGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wg
Zm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxl
ZT4+CisgICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAg
ICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3Qg
aWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZU
eXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgo
aWR4KV07IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92
YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9
CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90
IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSAr
IHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mVG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXpl
OwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAg
ICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMu
Z3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkg
KyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUg
KyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChl
bnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFs
aXphdGlvbikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5k
ZXgoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29u
c3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2Fs
KCkpOwogICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7
CiAgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0z
MzgsNiArMzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2Nh
bHMoKTsKICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0z
NjQsOSArNDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwg
bnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsK
LSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFy
Z3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJh
Y2tDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkp
OwogICAgIH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHBy
aXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBh
cmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBh
cmUgdG1wcy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9u
dW1Db25zdGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0
b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAg
dW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMg
eyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBA
IC01NywxMCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0
cgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIs
IHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAg
fQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgImNhbGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBP
cGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudElu
ZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiAr
ODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgs
ICI6IiwgdG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3Vs
YXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAK
K2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3Vi
bGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVz
IHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMg
ZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAg
ICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90
YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwog
ICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNs
dWRpbmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZh
bGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
OwpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0K
ICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2Fs
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAg
Ym9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVu
dChtX3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFk
ZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJl
Z2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0
YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwo
KSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2
ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9w
ZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRv
QXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQg
YXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5k
ZXgpIHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsg
fQogCiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBp
bmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSAr
IG9mZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9y
Q29uc3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFi
bGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9u
T2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0
cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhl
YWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1
bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0s
IENhbGxGcmFtZSoKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVC
bG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7
Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9j
ay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1
bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhpdElubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgLy8gT09QUzogTWFrZSB0aGlzIGRvIHRoZSBy
aWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Igbm90LgogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
Rm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAg
ICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVW
ZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tG
b3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJl
YW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0gICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWduZWQgbnVtVG1wczsK
QEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0
cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkg
KyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgp
ICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5saW5lQ2Fs
bEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7IC8vIE9PUFM6IGJ5
dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+
bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1
Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
LCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwx
MyArNTUsMTUgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlTwogICAg
IHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuazoKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2Ug
SklUVHlwZTo6TE9MSklUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVFR5cGU6
OkRGR0pJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1
bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcyLDYgKzc0LDEwIEBAIGJvb2wg
Q2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKIHsKICAgICBBU1NFUlQoY29kZUJs
b2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgeworICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklU
OgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Y2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNzksOCArODUsNiBAQCBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXJlQ29kZU9yaWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNiBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgog
I2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzUzLDgg
QEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2lt
cGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1l
c3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjYsODY4IEBAIFNlY29uZHMgdG90
YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29u
ZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlv
bihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0g
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAg
IG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAg
IGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisg
ICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkg
eworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkg
cmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXBy
ZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8g
dHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBl
IHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7
CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2Fz
ZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
YWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxW
YXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJn
czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5
X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9y
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BC
aXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVj
b2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxl
Lm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0
YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29k
ZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRp
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rp
b24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdo
dCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRh
dGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEo
bGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFO
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVy
CisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmln
SW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3Ry
aW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2Jq
ZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bf
c3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRv
IGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBl
Rm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0g
dHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmln
aHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAg
IGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21O
b25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAg
ICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVy
ZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4g
cHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIH07CisKKyAg
ICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAgICAgICAgICAg
IGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcERp
dj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb2Q6IHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBT
cGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAg
IGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYg
KGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhp
dHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5
IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNv
ZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNC
eXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdW5z
aWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBleGl0IHNpdGUg
ZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUlu
dEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3BlY0ludDMyT25s
eSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6
CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBw
cm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3Jj
KTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAg
ICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgPyBTcGVj
QW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91Ymxl
UmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVyZU5hTikKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAg
ICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlv
bihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNl
dFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BE
ZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1f
c3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOwor
ICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX25lZ2F0ZSkg
eworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4o
KTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5k
LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAg
ICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9wb3c6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgIGlm
ICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChp
c0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAg
ICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byBs
ZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0g
dHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1i
ZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7CisgICAgICAg
IH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9sc2hpZnQpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAg
ICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisKKyAgICAgICAgaWYg
KCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVjT2Jq
ZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJv
cGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BU
b1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3Ny
Yyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAo
ISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CisgICAgICAgIFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAg
ICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVy
Z2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBo
YXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAgICBicmVhazsgLy8gVGhpcyBjYXRjaCBo
YXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBt
YWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHNldFR5
cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2st
Pm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9uZXdf
YXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCks
IFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZl
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4o
KSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0
aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4o
KSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0
aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlX
aXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hh
c19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBk
byBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNF
eHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dl
bmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dl
bmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9w
YXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFy
ZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9w
ZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1
cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigp
LCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1
Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3Bl
Y1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5k
ZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhT
dHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9y
ZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0
TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9y
ZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNs
SW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3Bl
Y1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0Nl
bGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21p
c2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5l
cmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNH
ZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmlu
Zz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmls
ZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxT
cGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0
PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
aXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxs
YWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAg
IGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAg
IGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3By
b2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBv
cF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoK
KyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5j
dGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9k
ZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0
eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3Bf
anRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBj
YXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBj
YXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBv
cF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToK
KyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pn
cmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAg
ICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bf
am5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToK
KyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNl
IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAg
IGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9w
X3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfcHJp
dmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRv
cl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dp
ZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9n
dWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAg
Y2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2Ug
bGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3Ny
X2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29w
X2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2Nv
bnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV9p
ZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9u
X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIHdh
c21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgorICAgIGNhc2Ugbm9ybWFs
X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVy
bl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb246CisgICAg
Y2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jf
b3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX2V2
YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9u
ZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3Rh
aWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rfc2xvdzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0
b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuX3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNh
c2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93
YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRp
cmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBX
VEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAg
ICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBw
cm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hD
YXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2Zp
bGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNF
bnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkg
PT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAw
OyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkp
OyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+
dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYg
KHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAg
ICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0
SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAg
ICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNG
dW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6
IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBP
T1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRo
bSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBi
eXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/
CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdz
IHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAg
ICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmlu
ZGV4KCldOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9j
ay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSkucHRyKCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29y
IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgc3VjY2Vzc29y
T3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nl
c3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9p
ZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTY3LDcgKzkzNSwxMyBAQCB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1
bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKK2Jvb2wgSklUOjp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRy
dWU7CisgICAgcmV0dXJuIG1fdXNlTE9MOworfQorCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxv
Y2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMo
Y29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUs
NiArOTQ5LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAg
ICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhm
YWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQorICAgICwgbV91c2VMT0woY29tcGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxP
TCkKIHsKIH0KIApAQCAtMTM3LDExICsxMDEyLDE3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQogICAgICAgICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBc
CiAgICAgTkVYVF9PUENPREUobmFtZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBc
CisjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3Bf
IyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2Rl
SW5kZXgpIHsgXAorICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsgXAorICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAog
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgaWYgKHVzZUxP
TCgpICYmIGRzdC5pc1ZhbGlkKCkpIHtcCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gdHlwZTsgXAorICAgICAgICAgICAgICAgIHdpbGxEZWYoZHN0KTsgXAorICAgICAgICAgICAg
fSBcCiAgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7
IFwKICAgICB9CkBAIC0xNTYsMjYgKzEwMzcsMzIgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBj
YXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9u
LCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZp
bmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7
IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNs
b3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xv
d0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJl
c3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0
LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nh
c2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBO
RVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAg
CkBAIC0yMzEsMTggKzExMTgsODQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBm
b3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICB1bnNpZ25lZCBwcmV2aW91
c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7Ci0gICAgICAgIGlmIChtX2J5dGVj
b2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5z
dHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8g
TGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KLSAgICAgICAg
ICAgIGJyZWFrcG9pbnQoKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRF
bmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6
ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgp
IHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRC
bG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRv
IHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgo
KSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5h
cHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAK
LSAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIt
PnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgp
KTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3Ry
dWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgICAgICBBU1NFUlQoY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpOworICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFk
ZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAg
ICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmFs
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGF0IGVu
ZCBvZiBiYiMiLCBtX2N1cnJlbnRCbG9jay0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0gPSBX
VEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJl
bnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4aXRCbG9jaygp
KTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJlZGVj
ZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAg
ICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNzb3JzKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29y
XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNlc3NvcnNTZXQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0ZUF0RW5kW3By
ZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUubWVyZ2Uo
Km1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rp
b25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nh
c2VzLnNpemUoKTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2Rl
SW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAgICAgICAgICAg
Ly8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBh
cmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFz
aGluZyBpZiBpdCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3Nl
bWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBs
YWJlbCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBBU1NFUlQo
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
KTsKIApAQCAtMjc4LDQ2ICsxMjMxLDUzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgfQogI2VuZGlmCiAKKworICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpOworICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigpOworICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewot
ICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGxlc3MpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoZ3JlYXRlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChpc19jYWxsYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNf
Y29uc3RydWN0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlw
ZW9mX2lzX2Z1bmN0aW9uKQotICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9i
eV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRfd2l0aF90
aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2lu
X2V2YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotICAg
ICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCi0gICAgICAgIERF
RklORV9TTE9XX09QKHVucmVhY2hhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19z
dGF0aWNfZXJyb3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVh
ZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJs
ZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9TTE9XX09QKGhhc19nZW5lcmljX3Byb3BlcnR5KQot
ICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Nj
b3BlZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJn
dW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZs
eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlz
ZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRvcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobmV3X2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocG93KQorICAgICAgICBE
RUZJTkVfU0xPV19PUChpbl9ieV92YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFs
PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcywgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcExlc3M+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChsZXNzZXEsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+
KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisg
ICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdyZWF0ZXJlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09Q
KGlzX2NhbGxhYmxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKS5tX2Rz
dCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwgU3BlY0Jvb2xl
YW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZiwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFR5cGVvZj4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dHlwZW9mX2lzX29iamVjdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0
PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lz
X2Z1bmN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKS5t
X2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05v
bmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLm1fZHN0
LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0
aF90aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2Rz
dCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3Ro
aXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
cHV0X2J5X3ZhbF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2lu
X2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1
bmNEZWNsSW5FdmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZGVmaW5lX2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBW
aXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93
X3N0YXRpY19lcnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5QnVmZmVyPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNw
cmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxP
dGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKS5tX2RzdCwgU3BlY0lu
dDMyT25seSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHksIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCkubV9kc3QsIFNwZWNC
b29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwg
U3BlY0NlbGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0
QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2Rz
dCwgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1
bWVudHM+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVBcmd1bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
UmVzdD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVf
cHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3Qs
IFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNl
T2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3Ro
ZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09i
amVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIp
CisgICAgICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBv
dz4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBE
RUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcg
KzEzNTgsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBE
RUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1
cGVyX3NhbXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShY
ODZfNjQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVf
U0xPV19PUChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9w
X21vdikKICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25l
Z2F0ZSkKQEAgLTQ3OCw2ICsxNDQyLDM5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkg
eworICAgICAgICAgICAgaWYgKCFtX2NoZWNrZWRVc2VMT0wpIHsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgICAgICAgICAgY2FzZSBvcF9jaGVja190cmFwczoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rocm93OgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
am1wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6
CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaWRl
bnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBl
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVf
Y29udHJvbF9mbG93OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBM
T0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5z
dHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAg
ICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXpl
KCksICJcbiIpOwogICAgIH0KQEAgLTUxNiwxMiArMTUxMywxNCBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRl
ZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwog
ICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAg
Zm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5i
ZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nh
c2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7
CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXgg
Zmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGlu
ayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJ
bmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAg
ICAgICAgIApAQCAtNTgwLDcgKzE1NzksNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2NoZWNrX3RyYXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9k
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbmVnYXRlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpA
QCAtNTk5LDYgKzE1OTcsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZW5kaWYKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjM1LDE1
ICsxNjM2LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmly
c3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5k
KCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZz
ZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAg
ICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRl
ciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9m
ZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkg
PT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xv
dyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2Zp
bGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJl
c3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlz
LCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
OwogICAgIH0KQEAgLTc3OCw2ICsxNzgyLDc3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExp
bmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgo
bGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJl
bCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisg
ICAgaWYgKCFtX2V4aXRKdW1wcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSnVtcExpc3QgZXhpdENv
bW1vbjsKKyAgICAgICAgZm9yIChhdXRvJiBleGl0IDogbV9leGl0SnVtcHMpIHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQuZmlyc3Q7CisgICAgICAgICAgICBhdXRvIGp1
bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgICAgICBqdW1wcy5saW5rKHRoaXMpOworCisgICAg
ICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAg
YnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0cy4KKworICAgICAg
ICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICAgICAgZXhpdENvbW1vbi5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCghZXhpdENvbW1vbi5l
bXB0eSgpKTsKKyAgICAgICAgZXhpdENvbW1vbi5saW5rKHRoaXMpOworCisgICAgICAgIHN0YXRp
Y19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOworICAgICAgICBBU1NF
UlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhudW1iZXJUYWdS
ZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBiZWluZyBhIGNhbGxl
ZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAg
ICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNh
dmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJlZ2lzdGVyIGlzIGEg
dGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVC
YXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBwcmVw
YXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgbm9u
QXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAg
ICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBudW1iZXJUYWdS
ZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
KworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkp
LCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7CisgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkpOworCisgICAgICAg
IGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
bV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkpKTsKKyAg
ICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAv
LyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBp
cyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRyaWdn
ZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJlcGFyZUNh
bGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0
aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93
KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRh
Zyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBj
R1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVt
YmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0aGlzKTsKKyAgICAg
ICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGpp
dC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAvL0Fzc2Vt
Ymx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMyKAorICAgICAgICAv
LyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgLy8gICAg
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhp
dFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVu
aygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAgICAvLyBPT1BTCisg
ICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBk
ZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNv
ZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50
Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAgICAgICBtb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRhdGFUYWJsZSgpKSwg
TExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJU
YWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0b3JlIExMSW50IGNv
ZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29uIGlmIHdlIGV4Y2Nl
ZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExMSW50IGNvZGUgYmxv
Y2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCkBAIC05NjcsNyArMjA0Miw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGlu
aygpCiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9D
T0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2Vs
aW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxp
bmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29k
ZUJsb2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVX
b3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1
bHQuc2l6ZSgpKSAvCkBAIC05NzgsNyArMjA1Myw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6
bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9j
azo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRK
SVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRo
QXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAgIGFkb3B0UmVmKCpu
ZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5
cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAl
cCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgp
LnVudGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMTQ3LDcxMyBAQCBTZWNvbmRzIEpJVDo6dG90
YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSAr
IHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6
OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBF
eGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0
KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQo
eyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgp
LnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVn
aXN0ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0
ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9y
IHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5l
ZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0
YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lz
dGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9
IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFp
bnMocmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAg
IGFsbG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0
aWMgUmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0
ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9y
ICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBu
ZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29y
dGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7
CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChj
b21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3Vs
dC5nZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAg
Ly8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZm
ZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwg
d2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAv
LyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0
ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAg
IHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0p
OworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQ
YXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJy
aWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2Fu
IGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkg
JiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQor
ICAgIC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBo
aW50KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFs
aWRHUFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAg
ICAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAg
ICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1
ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAg
ICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdw
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChy
ZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAg
ICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8g
YWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFs
dWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21l
IGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBh
Z3JlZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVn
Rm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0
aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAg
IC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAg
ICAgICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlr
ZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFs
bG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRl
bXAuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQg
Y2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVu
dCBzdGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOwor
ICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJ
bXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7
CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVl
U2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBk
b0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZl
UGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBT
YXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykg
eworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAg
IGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5v
cGVyYW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisg
ICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQ
UnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKCkKK3sK
KyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxs
UmVjb3JkIHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElm
TmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAg
ICAgICAgICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
cmVzdWx0LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihyZWcsIHJlZ1ZhbHVlLm9wZXJh
bmQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxlZFJl
Z2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisK
KyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVkUmVn
aXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50Rmls
bEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKnRo
aXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JTcGls
bCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCks
IHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJl
ZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2
ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFuKSB7Cisg
ICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHJlZ1RvSWdub3JlKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvcGVyYW5kID09IG9wZXJhbmRUb0lnbm9y
ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVnLmlzRlBSKCkpOworICAgICAgICAg
ICAgbm9wKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3Rlcigp
OworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7Cisg
ICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAg
ICAgICAgICAgbm9wKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIHJl
c3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5kc3QsIHNsb3dDYXNl
LnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJp
dHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2Nh
dGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdp
c3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIGdw
ckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNw
ZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKK30KKwor
dm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBH
UFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisg
ICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7
CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihv
cGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3IgYnl0ZWNvZGVzICgvY2hlY2twb2lu
dHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgorICAgIGFzc2lnblJlZyhncHIsIG9w
ZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NG
b3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwg
b3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6
OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3Vu
dDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFuZC5pc1Zh
bGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRl
bXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAgIGlmICho
aW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJ
VDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5H
UFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklU
JiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZw
cigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnByID0gbV9q
aXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBt
X2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30K
KworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOwor
fQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9
IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
ICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAg
bV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZSht
X29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpD
ZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+
Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVl
KG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3Bl
cmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZO
b3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBl
KG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sK
KyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlm
IChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2Vs
bE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsK
K30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dw
ciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIp
OworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisg
ICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJh
bmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5h
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBt
X2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRl
R1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBt
X2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAg
IH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklU
OjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorewor
ICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVP
cGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30K
KworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0g
SW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0
Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsK
KyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7
CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAg
dGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9j
YXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAg
IG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdz
IHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJh
ZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7
IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91
YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBt
X29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0g
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJ
Zk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAg
ICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJv
bFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xl
YW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUs
IHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9v
bGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0
Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2
YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9p
ZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCks
IFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RD
ZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOwor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0lu
dDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
YnJhbmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNCeXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vs
c2UKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAg
ICAgICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAg
ICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgewor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQz
MihvcGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRj
aEdQUik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUp
KTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1
ZSkpOworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2Nr
U3RhdGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
Y3VycmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+
KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9w
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92
ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVu
dFN0YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwg
bV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1
cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQs
ICIsICIsIGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRl
KCkKK3sKKyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1
dG8gcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0Fs
bG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBm
b3IgKGF1dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVn
KS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAg
IGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBkYXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5j
bHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklU
LmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1h
cC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVk
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxs
TGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0
YWJsZTsKQEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAg
ICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0
KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcg
U2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAg
ICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQg
c3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAg
ICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDog
Ynl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAg
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBC
dXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25l
IHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1h
eWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhz
LgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAg
ICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxs
b2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3Qg
U3dpdGNoUmVjb3JkIHsKQEAgLTE5Nyw2ICsyMTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJ
VF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAg
IHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklU
U2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIw
NCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3Ry
dWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0
Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGlu
aXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFs
dWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlz
cGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0
LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0
ID0gMjU2OwotCiAgICAgcHVibGljOgotICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVs
bHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2Rl
SW5kZXgoMCkpOworICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVUeXBlIHsKKyAgICAgICAgICAg
IEJhc2VsaW5lLAorICAgICAgICAgICAgTE9MCisgICAgICAgIH07CisgICAgICAgIAorICAgICAg
ICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7
CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBA
IC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZv
cmVDb21waWxlKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQg
Y29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDAp
KQorCisgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUlu
ZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ss
IGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0
dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBjb21waWxlVHlwZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZh
dGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAg
ewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGpp
dC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAg
ICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwor
ICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUp
OwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxE
aXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAg
ICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdp
dGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
LCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRl
eCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1
dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBj
b21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29k
ZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRy
ZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6
QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0K
QEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9y
Q2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsK
KworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAg
IH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNh
bGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAg
ICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbikKICAgICAgICAgewpAQCAtMzIzLDkgKzM1MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dD
YXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0g
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCks
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
eyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAg
ICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzMzLDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxl
T3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
c3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zNTAsNyAr
MzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNv
bnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAg
dm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRD
YWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTM2MCw3ICszOTIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9w
U3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsK
ICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAg
IHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGls
ZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQp
OwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7
CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01MDgsOCArNTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9u
KiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWdu
ZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNTE3LDEyICs1NDksMjEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERv
dWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9v
bCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVy
YXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90
IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQg
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAg
ICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIENQVShY
ODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNl
bmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjc4LDc4ICs3MjEsODEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9u
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlv
biosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBi
b29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdpc3Rl
cigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOworICAg
ICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJh
bmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
SlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODEwLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsK
LQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZy
b20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODIyLDE4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0
aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElD
U2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
LCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0
aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRv
cj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93
KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dD
YXNlJik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5m
cm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhT
bG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNT
ZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAg
ICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5r
QWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dD
YXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2Fz
ZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0
ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNs
b3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAg
ICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xv
d0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsK
KyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAg
ICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBt
X2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+KTsKQEAgLTk2MSw2ICs5ODUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisg
ICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3Rl
cE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBi
b29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29t
cGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTcxLDYgKzk5OCwyNTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlB
cml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFz
cyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBH
UFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBS
VGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAg
ICAgICAgICB+RlBSVGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2Zw
ciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBp
bnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQg
bm90IGJlLgorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAg
ICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpOworICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91
YmxlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQo
SklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJh
bmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJv
dmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmls
dGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAg
ICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9j
b2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAg
R1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQo
b3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAg
ICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFs
bG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJl
Z1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdW
YWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVn
VmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUFJSZWcmIGZw
ciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJ
bnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFu
ZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlk
RlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOwor
ICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZnBy
OworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RDZWxs
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3Bl
Y0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VMT0woKTsKKworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9y
IHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoR1BSUmVnIGhp
bnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7CisgICAg
ICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lk
IHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0SlNW
YWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2UgdGhpcyB0YWtlIHRo
ZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNldCBpdC4KKyAgICAg
ICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFNh
dmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50U3BpbGxSZWNvcmQgc2ls
ZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2FsbChj
b25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2
ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBj
b25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAg
ICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4gbV9mYXJDYWxsczsKQEAgLTk5MCw3ICsxMjYzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7
CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNs
b3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0
Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQ
dXRJbmZvczsKQEAgLTEwMjcsNiArMTMwMCw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1p
dFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9y
IGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAg
ICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBS
UmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisg
ICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAg
aWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRG
UFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1Zh
bHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAg
ICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRl
ZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90
aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVy
Lm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tD
b3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9j
YXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9Owor
CisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisg
ICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRS
ZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVl
PiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4g
cHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1Jl
Zy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0p
OworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5w
cm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5
cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5
cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90
aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3Rl
cnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHZvaWQg
cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3Rh
dGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsK
KyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsK
KyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0
aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3Vy
cmVudFByZWRpY3Rpb25zOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOwor
CisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAg
ICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAg
Ym9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9MIHsg
ZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29kZUluZGV4LCBKdW1wTGlz
dD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw4MiArNDYsODIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklU
OjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExl
c3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFs
QW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4s
IERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pn
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVh
dGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0
ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhh
bk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5n
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9y
VW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
LCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0
ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRl
cmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEs
IGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
dHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxP
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwg
dHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE1MSwzMiArMTUxLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3Ry
dWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRy
dXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAg
c3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAg
ICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdU
MCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVn
VDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwg
Y29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24s
IERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUg
aW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAg
ICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0g
Y29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1t
ZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBkaXNh
bGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIo
b3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTIyOSwxNyArMjgx
LDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY28KIAogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAg
ICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9w
MSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxoc0dQ
UiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQ
Uik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7
CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDAp
OworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJl
Z1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihj
b25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQzMl90IG9w
MWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0z
MihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgICAgIGdldExIUygp
OworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKICAgICB9CiB9CiAKQEAgLTI1NSw0MyArMzMzLDg5
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIAogdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAg
bGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMSkgJj0g
U3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxoc0dQUiA9IHJl
Z1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQUik7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAg
ICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
b3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmhz
R1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhz
R1BSKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVz
dWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOwor
ICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKwogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdl
dE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBy
ZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9u
LCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMCk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9
IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJl
MzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSksIHJlc3VsdEdQUik7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdU
MCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdU
MSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAg
IGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwogICAgIH0K
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBi
b29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdl
dCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGlu
c3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNl
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgYXV0byBmYWxsdGhyb3VnaCA9IGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGZhbGx0aHJvdWdoLmxpbmsodGhpcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgogICAgIC8vIC0gZmxvYXRp
bmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0
YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9h
dGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEpOwpAQCAtMzAwLDggKzQyNCw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlm
IChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lz
dGVyLCByZWdUMCk7CkBAIC0zMjYsOCArNDQ4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QxKTsKQEAgLTM1MSwxMiArNDcxLDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1Bv
aW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAg
SnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0g
YnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMy
KHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAg
ICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3Vi
bGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY5LDkgKzQ4OCw5IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAg
ICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAg
ZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJI
UyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC0zODEsMTEgKzUwMCw0NyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5
dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAg
Ym94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBw
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNl
cnZlSW50MzJPdmVyZmxvdygpKSB7IC8vIE9PUFM6IGVuc3VyZSBmb3IgYWxsIG9wY29kZXMgcHJv
dmVuVHlwZSBhZ3JlZXMgdy8gdGhlIHByZWRpY3Rpb24gcHJvcGFnYXRpb24uCisgICAgICAgICAg
ICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnBy
ID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1
dEdQUiwgZnByKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEu
MDsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIp
OworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAg
ICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
RlBSUmVnIGZwciA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUp
LCBmcHIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
aW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
aW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3cs
IFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0
R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShz
cmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNC
aWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQz
MihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTMsMTEgKzU0OCw1MyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAg
ICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCByZXN1bHRGUFIpOworICAgICAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGxvYWRE
b3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICAgICAgc3Vi
RG91YmxlKHJlc3VsdEZQUiwgdGVtcEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBz
ZXREb3VibGUoc3JjRHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
c3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3Zl
cmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVk
SW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwg
dGVtcEZQUiwgaW5wdXRGUFIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRG
UFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJ
bnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAg
ICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7
CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KQEAgLTQwNyw1NCArNjA0LDg5IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
Yyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhz
OwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElESVYg
aW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7Cisg
ICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBhdXRvIGVkeCA9IFg4NlJlZ2lz
dGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAgQVNTRVJU
KHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7CiAgICAgQVNTRVJUKHJl
Z1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1Q0LCBv
cDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlYXhUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
ZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNHUFI7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAgICBjbG9iYmVyKGVkeCk7
CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5lbXBsYWNlKCp0aGlzLCBl
YXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7CisgICAgICAgIGVjeFRl
bXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1wLT5ncHIoKTsKKyAgICAg
ICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigpOworCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVjeFRl
bXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBsaHMp
OworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7CisgICAgICAgIGxoc0dQUiA9
IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7
CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBs
aHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92
ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAg
ICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5v
bWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigt
MjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRy
dXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5r
KHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVj
eCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2
ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0
b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAotI2Vs
c2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJF
QUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlm
IC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArNjk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUg
PHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25k
aXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50
MzJPcDI7CkBAIC00NzQsNiArNzA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1Qw
KTsKQEAgLTU2MiwxNSArNzk1LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChj
b25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0
aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
ICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVy
dCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICs5NTUsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVtaXRNYXRoSUNG
YXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRO
ZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSwgc2xvd0Nhc2UpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAg
LTc0MSwxOCArOTcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0
IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7Ci0jZW5kaWYKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwog
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKIApAQCAtNzYwLDMzICs5NzcsMTA2IEBA
IHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAgbGVmdE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAgICAgZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNl
dENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVMRUFTRV9B
U1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7
CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisg
ICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAg
ICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAg
IGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAg
aWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCi0g
ICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlwcGV0R2Vu
ZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVt
cExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExp
c3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxpbmdQb2xp
Y3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5ncHIoKSk7
CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOwor
ICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJ
bnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1bHRJc0lu
dDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7Cisg
ICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09Q
UzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisKKyAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVzdWx0R1BS
KTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChyZXN1
bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seTsg
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9u
bHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAj
ZWxzZQpAQCAtODAzLDcgKzEwOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3Qg
SW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShi
eXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3Mp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtODQ5LDIwICsxMTM5LDYgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgo
Y29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsK
LSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgotCiAgICAgU25pcHBl
dE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwog
CkBAIC04NzMsMjEgKzExNDksNzcgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgo
Y29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAh
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3Jh
dGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFsaWRGUFJSZWc7CisKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRj
aFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJl
LgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hU
ZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAg
ICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsK
KyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcg
c2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYg
KCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmlnaHRTaGlmdEdlbmVyYXRvciBn
ZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgc25pcHBldFNo
aWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIyLCBz
bmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQog
ICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgp
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3Mu
Z3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikp
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0Fu
eUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1
bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcnNoaWZ0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIsMTggKzEyMzQsNTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
QWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJ
QyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2
ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAg
ICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRG
UFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVz
dWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0
KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIG1vdmUobGhz
LmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2lu
ZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIo
KSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3By
KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUo
bGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3Vi
bGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRk
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFk
ZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAg
ICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRk
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBz
bG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9u
PgpAQCAtOTI0LDE1ICsxMjkyLDM1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFy
eU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJv
bSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSBy
ZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIg
dG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNy
Y1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3Bl
cmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7
IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJl
c3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1
c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2Ug
cmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVy
IHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MSwxOSArMTMyOSwyMiBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJh
dG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0
aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNv
ZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUp
OwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5h
cml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0g
ICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhf
SUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtOTYzLDcgKzEzNTQs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwog
I2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRS
ZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdz
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05
NzQsMzkgKzEzNzIsODIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJ
QwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0
T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNl
dENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdElu
dDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsK
KyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBG
UFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRG
UFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBS
VGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAg
ICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdU
MTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBw
ZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwot
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5z
ZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxl
ZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5l
cmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAg
ICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0
Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50
MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNj
cmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7
CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9
IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9
IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8
ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVm
dE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjpp
c1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAotICAgIG1hdGhJ
Qy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVz
dWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0
T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBs
ZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNT
RVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkg
JiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkp
OwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdo
dE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBs
YWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3ICsxNDU2LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9
IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAg
ICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAg
ICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICAg
ICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAg
ICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAg
cmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICAgICAgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRo
UHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNl
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAg
ICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNSwxMSArMTQ5MywyMCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgfSk7CiAjZW5kaWYKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkp
OworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lX3Y8T3AsIE9w
QWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24s
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZv
aWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMs
IGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVk
RnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAg
ICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3Ry
dWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52
YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7
CkBAIC0xMDQ4LDggKzE1MTUsOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1Jl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTA4NSw3ICsxNTUyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlv
bj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiog
bWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBw
cm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVj
dGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE1NjIsNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAg
IFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNv
bmQoKSk7CiAKQEAgLTExMTUsMTUgKzE1NzIsMzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5k
VmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZh
bGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0
T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
IH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpIH07CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdo
dFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUMyA6IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChH
ZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7Cisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9
PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07
CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5k
aWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5k
VmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBAIC0xMTU2LDIzICsxNjM0LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBG
UFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAg
ICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQg
bGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBl
dE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsK
IApAQCAtMTE4OCw2MiArMTY0OSwyMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IElu
c3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAg
ICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3Vi
bGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBG
UFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRG
UFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBS
VGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZw
cigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0
RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQ
UiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAo
IWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAg
IH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwor
ICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJl
Z1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXND
b25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsK
KyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVs
bHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5k
LCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAg
IGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0
aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYg
KGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5r
KHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVn
cyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJl
Z3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cExpc3QoKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
cmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJU
KGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjQmlnSW50OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBh
cml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZU5lZ1plcm9E
b3VibGUoKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBs
aHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSBy
aHNUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHRU
ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxoc0dQUiwg
bGhzRlBSKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHNHUFIsIHJo
c0ZQUik7CisgICAgICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRG
UFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBS
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNo
TXVsMzIoT3ZlcmZsb3csIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoVGVzdDMyKFplcm8s
IHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAg
ICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAg
ICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11
bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0
PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24p
KTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11
bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9w
dGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGlt
aXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJp
dGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKwor
ICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7
CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJl
c3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
bGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3Vi
bGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91
YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxv
dywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3By
KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3Vi
bGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4o
c3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJ
VFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
LSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4o
c3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXpl
LCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6
IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lk
IEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxEZWYoZHN0
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2
LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAg
ICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAg
LSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICov
CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxw
dHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsK
QEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2Fs
bF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0
cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIp
OworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4o
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
b25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAor
ICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0
aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4g
RWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZp
Z3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVj
dGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1
bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAog
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0
OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBK
dW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3Bv
aW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7
CisKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRo
aXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0VGVtcC5n
cHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdUMCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3Zl
blR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAg
ZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAg
IHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIg
PSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0p
KCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQg
ZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29k
ZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0
Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0
LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDAp
OwogCkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0g
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAg
ICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9p
bnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAg
ICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7Cisg
ICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIg
fSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRo
KTsKKworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05l
eHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAgICAgY29u
c3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAg
ICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5h
bWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7
CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAg
d2lsbERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmso
dGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0
PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1NSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRl
clJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5v
dE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJl
c3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0
ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAg
ICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRDb2RlOjp0
eXBlTmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAgIGNhc2UgSklU
VHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAgIGNhc2Ug
SklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJ
VDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyNzA3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90IHsKICAgICBIb3N0
Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxpbmVKSVQsCisgICAg
TE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02NywzNiArNjgsMjMgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJVFR5cGUpOwogCi0g
ICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewotICAgICAgICByZXR1cm4g
SklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBKSVRUeXBlIHRv
cFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKICAgICB9
CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRUeXBlKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6
QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6REZHSklUOwotICAgICAg
ICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpGVExK
SVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0KEpJVFR5cGUgaml0
VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBjYXNlIEpJ
VFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAgICAgICBjYXNlIEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVK
SVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAgICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZh
dWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6
SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTExNiw2ICsxMDgsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAg
ICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJ
VDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ1LDcgKzEzOCwxNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwg
ZXhwZWN0ZWRIaWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBib29sIHVzZXNSZXBsYWNlbWVu
dENvZGVCbG9jayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlw
ZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0
VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAorICAgIHN0YXRpYyBib29sIGhh
c0RGR0NvbW1vbihKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlw
ZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAg
fQorCiAgICAgc3RhdGljIGJvb2wgaXNPcHRpbWl6aW5nSklUKEpJVFR5cGUgaml0VHlwZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBl
ID09IEpJVFR5cGU6OkZUTEpJVDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRo
aW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBz
dGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3LDYgKzE1OCw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAg
ICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBw
YXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY3LDI1
ICsxNjksNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAg
cmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxS
ZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkK
LSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4m
IHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5l
bmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVy
ICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6
YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9i
eXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBo
b3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIp
OwpAQCAtMjA3LDI3ICsxOTAsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hv
dEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBT
bG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dD
YXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRl
Y29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgp
OworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCku
c2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEh
ZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5y
ZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAg
ICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1w
JiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBE
b2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAo
Y29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1
bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVt
cChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTQwNiwxMSArMzk4LDYgQEAgQUxX
QVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDgg
KzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFBy
b3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZp
cnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisK
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBA
IHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElm
IHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBl
ciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVn
cy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09
IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50
KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE0LDUzIEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxs
b2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JO
b25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJ
RCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1Qx
OwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRS
ZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFs
bG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAg
ICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRS
ZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0
Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcp
OwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8g
YnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFs
bG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hS
ZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUu
bV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2Rl
Lm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBz
dHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDAp
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAg
IEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9w
ZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0lu
c3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRl
bXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAu
ZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAt
PmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOwor
ICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdl
IGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4K
LSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Q
cm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVj
dG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhh
dCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2Jq
ZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFk
ZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwor
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAK
ICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUx
LDQwICsyMjMsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRo
ZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8g
cmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxs
IGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUg
cmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sg
dGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNo
ZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAg
ICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVn
VDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2Vs
bE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBw
cm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsK
KyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BS
VGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAg
eyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAg
ICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAg
ICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAg
ICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
dmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1
ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENl
bGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVl
VGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5n
cHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOwor
CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBw
cm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNl
KHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJ
bnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAg
ICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVz
dWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9H
UFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7
CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5j
ZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5n
cHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZh
bHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdU
MCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQg
d2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJl
IGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBn
ZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Ig
Z2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJl
c3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8g
cHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChn
ZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdl
biA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8o
KS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNF
bXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2Vs
bChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwot
ICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJl
Z1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAg
ICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5w
dXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRv
IG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2Vs
bChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVt
cCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdU
MCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKwor
ICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
MCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090
aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1
LDEyICs0NjIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworI2lm
IENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVzdDY0
KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0
ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVy
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1Jl
Z2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVT
RShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI4LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jp
Z19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwg
PSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJ
bnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUp
LCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qmln
SW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0Nl
bGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVU
VVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAt
MzEzLDE4ICs1OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29u
cwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBp
bnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlw
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0
eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDMsNjEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmpl
Y3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8v
IHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92
ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXgu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI3LDQxIEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAg
ICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0g
YnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0u
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
SnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAg
ICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcwLDIwMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRv
bmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
dHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BS
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVl
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5j
aElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQot
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5
bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qw
KSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1
bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFt
ZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Tm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCBy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRp
bnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50
IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZh
bHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRz
IHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxs
IGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAv
LyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0
YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDAp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBi
b29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhh
biB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5w
dXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1
ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93
IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRp
b24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVl
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBS
ID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZw
U2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCks
IEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RF
cXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9
OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBT
Y3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRj
aDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQ
Uiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFf
bnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90
aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1l
ZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8g
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAg
ICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxp
bmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAg
IEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlz
KTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAg
ICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5k
bGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlz
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAg
YWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRh
cmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5k
ZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0
byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhl
cikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNTAwLDEwICsxMTM0LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251
bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAg
ICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
IAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTY1
LDMxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNT
RVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNw
ZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1l
dGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7Cisg
ICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQp
OworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1
YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBz
dGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEg
PyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVx
dWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlw
ZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVl
RmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVP
YmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBj
b21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisg
ICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOwor
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21w
YXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKwor
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpq
ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJU
KHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlz
RXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1Qx
KSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFs
OworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERv
dWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAg
ICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5n
KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJo
cykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVt
cC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIs
IHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQg
ZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BS
KTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAs
IGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwg
cmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pu
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdl
dCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0
aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJu
VmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
c2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAor
CiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VGhyb3c+KCk7CkBAIC01ODksNzQgKzE0ODgsMTQ2IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJp
Y3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0g
aXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/
IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3Zl
blR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJo
cykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAg
ICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURv
dWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJs
ZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShC
SUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0
byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJs
ZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7
Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENl
bGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgot
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVt
ZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBi
cmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYg
d2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlz
IHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3
aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8g
SWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5
IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFs
IDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1
KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0g
ICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVn
VDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1
KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1
bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRv
IGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0g
ICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0
aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBi
b3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Cisg
ICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVz
dGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7
IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAg
ICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0
RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAg
ICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQp
OworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBp
ZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQ
YXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLwor
CisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwg
cmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0
aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2Jy
YW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBu
dW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Cisg
ICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAg
ICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJl
Z1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAg
IG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVP
ckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVy
bywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVt
cCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJp
Z0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTog
d2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmln
SW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmlu
Z3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVT
RShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVy
IHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUu
Ci0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBK
dW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93
IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdo
aWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4K
KyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhp
cyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxp
bmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAg
IGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjQ1LDEzNSBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3Jo
czsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdU
MSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAg
ICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVO
b3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHBy
b3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0Vx
KQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJo
cykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9i
amVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wo
cmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBP
T1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIp
KTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMy
KQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0
cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAg
ICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0
YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290
byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZy
YWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdp
dGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5
IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8v
IFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcg
MTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMg
YXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2ls
bCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBh
Ym92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShy
ZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGln
aEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdU
NSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9y
NjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3Ry
aWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7
Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVz
cyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBp
ZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNF
KEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0
eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0
ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBD
ZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAg
IGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBp
bXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2lu
Z2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJl
ZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhl
IHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0
OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAw
CisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2ls
bCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJs
ZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAg
ICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVn
VDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisg
ICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAg
ICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAo
dG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNF
KEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIg
c3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1Qy
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4K
LSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVt
cCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAg
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91
YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGlu
ayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0
T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzg2LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3Rl
cT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBs
aHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7Cisg
ICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBh
dXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
YykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0
KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsK
LQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0g
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3Bl
Y0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55
QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7Cisj
aWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgor
CisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVT
RShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihp
bnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlu
cHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1i
ZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmln
SW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5s
aW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0
cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAg
ICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmlu
ZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
U3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1Qw
KTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChz
cmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJl
Zyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChz
cmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9i
amVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQor
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1Qw
KSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsg
Ly8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5
cGUgc3RhdGUuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwNjUsMjMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9y
ZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUo
Y3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAg
ICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAg
R1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
c3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwor
ICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtOTA1LDkgKzIwOTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25z
dCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsK
ICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIs
IHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0
clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1X
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjEyMSwxNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
aW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtOTM4LDkzICsyMTQ1LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5l
ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigp
OworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxv
YWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAg
IEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50Pihi
eXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0
aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVx
TnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29u
c3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAg
ICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2Ny
YXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BS
LCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1w
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21w
YXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0g
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
Y29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21w
YXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9p
ZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
LQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1w
bDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2
ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2Ug
QyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBp
bml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBs
aWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50
OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAg
YXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9y
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAg
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3Bl
Y090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBA
IC0xMDM1LDkgKzIyOTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IElu
c3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBH
UFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUg
PSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBz
Y29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0
T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIzMjAsODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
dGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZt
ZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0g
Ynl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1v
ZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAg
bG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9U
aGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhp
cyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8g
Tm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisg
ICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVj
T2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNh
Y2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAg
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUg
cHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChp
c1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBs
b2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1Ro
aXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1Nl
dCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0
OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwor
ICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMy
KGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjQwMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1
bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVl
UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2
OCw3ICsyNDExLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QK
ICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
Z3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9w
ZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1w
My5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRv
clJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDIt
PmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICBy
YXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcg
PSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxl
ZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVl
UmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI0NTMsMzMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVn
LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8v
IFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhp
bmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CkBAIC0xMTYyLDggKzI0OTgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8g
TWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUg
c3RhdGUuCisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpy
ZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAv
LyBPT1BTOiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVu
dGVyLgogICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNv
dW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAg
IGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTEx
ODcsMTMgKzI1MjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRo
ZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5C
ZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAg
ICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0x
MjA2LDExICsyNTQzLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7Cisg
ICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3
b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEy
MzMsMTAgKzI1NjksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25z
CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0
PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNTc5LDE4
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
Z2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2Fz
dDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1
cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI2MDAs
NDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Qw
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Nj
b3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4
ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsK
IAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsK
ICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsy
NjY0LDQ2IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRl
Y29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAg
IHNjb3BlLnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQu
ZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRp
ZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5j
dGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI3MzQsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVz
U3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlv
blByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjc1NSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKwor
ICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVt
cC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAt
PmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdH
UFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4
LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMjc4OCwz
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZh
bHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1
ZSB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYg
KzI4MzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODY2LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNw
aWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5Pigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4
OTMsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFy
cmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1
bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUw
MzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVu
dEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1w
KTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNs
b3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAog
ICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMjkxMCwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0
aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1
bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbElu
Zm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwg
cHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRl
eGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwz
NyArMjk0Myw4MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENo
ZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBl
bnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJh
bmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VW
YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFs
dWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwot
Ci0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRv
cidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAg
ICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCBy
ZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mg
b3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91
dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwg
cmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRo
YW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBp
bmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2ln
bkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFz
ZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAg
ICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7Cisg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwg
VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBh
IGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsK
KyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVk
IGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1w
IG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisg
ICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJm
bHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9w
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSAr
MzAyNyw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3cs
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBH
UFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRl
eFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRl
eFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBs
YWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhH
UFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRv
clRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9
CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
c2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAog
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDgxLDUxIEBAIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhP
ZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtu
b3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhp
cywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJh
dG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdw
cigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJl
Z1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91
bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwg
cmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5r
KHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNW
ZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTU5OCw2ICszMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
cwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBl
TG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBM
aXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE5Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2Fs
bCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25B
cmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJv
YmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICsz
MjE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNr
ZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgp
OwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9
IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5U
YWlsPigpOwpAQCAtMTcwMiwxMSArMzI0NywyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVu
dF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2
YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQz
Mihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Cisg
ICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1Qx
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNzE0LDI5ICszMjY4LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChj
b25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJl
c3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1Rv
U2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1Qw
LCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1Nr
aXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NU
aGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAg
c3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
OworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJl
Z1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFy
YW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAg
IHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7
CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE3NDQsNDkgKzMzMTcsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5k
ZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsK
KworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1Qw
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlm
CiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFu
Y2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBs
b2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwot
Ci0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShqc1Vu
ZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAg
ICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAg
ICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5
cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVl
R1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2Vz
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxz
ZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09
IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRh
Z0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwor
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJv
dG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQxOSw2ICszNDE5LDM4IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja0kKICAgICByZXR1cm4gMDsKIH0KIAorSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5v
dywgdm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSkKK3sKKyAgICAvLyBJdCdzIHNvcnQg
b2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRv
aW5nIHNvIHdvdWxkbid0CisgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCisgICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlckdDKGxvbENvZGVCbG9jay0+dm0oKS5oZWFwKTsKKyAgICAKKyAgICAv
LyBPT1BTOiBwcm9jZXNzIHZhbHVlIHByb2ZpbGVzIGhlcmUsIHNpbmNlIHdlJ3JlIGpldHRpc29u
aW5nLCBob3BlZnVsbHkgdGhleSB1cGRhdGUgdy8gdGhpbmdzIHdlIGNhcmUgYWJvdXQuCisKKyAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0obG9sQ29kZUJsb2NrLT52bSgpKTsKKworICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxvbENvZGVCbG9jaywgIjogRW50ZXJlZCByZW9w
dGltaXplIGZyb20gTE9MIik7CisKKyAgICBDb2RlQmxvY2sqIGxsaW50Q29kZUJsb2NrID0gbG9s
Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIC8vIFdlIG11c3QgYmUgY2FsbGVkIHdpdGgg
dGhlIGJhc2VsaW5lIGNvZGUgYmxvY2suCisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGxsaW50Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgIENvZGVCbG9jayogcmVwbGFj
ZW1lbnQgPSBsbGludENvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlcGxhY2Vt
ZW50IHx8IHJlcGxhY2VtZW50ID09IGxsaW50Q29kZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxsaW50Q29kZUJsb2NrLCAiOiBOb3QgcmVvcHRp
bWl6aW5nIExPTCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1lbnQg
bXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKKyAgICAv
LyB0byBjaGVjayBvdXIgbG9naWMuCisgICAgQVNTRVJUKGxsaW50Q29kZUJsb2NrLT5oYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGxvbENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQg
c3R1Y2sgaW4gYSBsb29wIGxvZ2ljCisgICAgbG9sQ29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25EdWVUb09TUkV4aXQsIENvdW50UmVvcHRpbWl6YXRpb24pOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTgsNiArMzE4LDggQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25WYWx1ZQog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9n
LCB2b2lkLCAoVk0qKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nl
c3NTaGFkb3dDaGlja2VuTG9nLCB2b2lkLCAoVk0qKSk7CiAKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJs
b2NrKiBsb2xDb2RlQmxvY2spKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI4MSw4ICsyNzcsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0
QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAtNTU4LDcgKzU1Miw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFi
ZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rp
b24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBA
IC01OTgsOCArNTkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNjM5LDggKzYzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKQEAgLTY4Niw4ICs2NzUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTcyOSw4ICs3MTYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc3OCw4ICs3NjMsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC04MTksOCArODAyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwpAQCAtMTEwMCw4ICsxMDgxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJl
bnRJbnN0cnVjdGlvbik7CkBAIC0xMjU3LDggKzEyMzYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3Bl
PigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRl
Y29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNs
dWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFt
Lmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpT
QyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTIsNTEgKzU0LDExNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAo
bV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAK
ICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6Omdl
dEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5v
dENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChu
b3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9
CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3Vs
ZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQ
UiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVj
SW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisg
ICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwor
ICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkp
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAg
ICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xv
d0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAg
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5k
ZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNSw0MSArMTczLDczIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVy
dHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MpOworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRC
eVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Nyw2ICsyNTcsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3Bp
bGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0lu
dGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKICAgICBpZiAo
cHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTksOCArNDIxLDExIEBAIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyByZWxvYWQgdGhlIHJl
Z2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUs
IHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFpbGFibGVSZWdpc3RlcnMubWVy
Z2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlOYW1lLAogICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVj
b2RlKSwgcHV0S2luZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIC8v
IElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJh
c2UgaXMgY2VsbC4KQEAgLTMzOSw3ICs0NDQsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpA
QCAtMzQ3LDcgKzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBF
Q01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkg
eworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1NSwxMyArNDYwLDEy
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAg
ICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGgg
PSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBA
IC0zODEsNiArNDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0
ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogRG8gYmV0dGVyIGlm
IHdlIGNhbiEKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKIApAQCAtMzk0LDEzICs1
MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5m
bywgbV9ieXRlY29kZUluZGV4LCBmYXN0UGF0aEptcCwgZG9uZSwgZG9uZSkpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CiAgICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4XS5ieVZhbEluZm87CiAgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNv
ZGUubV9wdXRLaW5kOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwpAQCAtNDIw
LDQ5ICs1MjUsMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAq
dGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7
ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7
CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNl
R1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29k
ZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50
MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNj
ZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVy
U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlz
LCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlz
LCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1
dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BS
LCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
cHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5n
cHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRl
ckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkg
eyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNj
ZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAg
ICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVn
VDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTggKzYzMyw1
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlm
ICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdl
IHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3
cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ5MiwyNSArNjg3LDI3IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQ
UikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MjAsMTkgKzcxNyw3MCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFz
ZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJv
cGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBH
UFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJv
cGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSBy
ZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAg
IH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0
IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3Rl
cnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTQxLDIyMSArNzg5LDM2OCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1tt
X2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBi
YXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2Rl
ID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5h
cnJheVByb2ZpbGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNlTE9MKCkg
PyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFy
cmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUu
bGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0
UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1
bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRo
aXMsIHRoaXNWUmVnKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1Zh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJl
Z1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0
aGlzVlJlZywgdGhpc0dQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZCh0aGlzR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwodGhpc1ZSZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
ciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBy
ZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlz
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNv
ZGUubV9mbGFncy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJ
biBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBv
YmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVy
IHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJl
Z2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVy
ZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCBy
ZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZh
bHVlKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1Qx
OworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1v
ZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5k
OjpOb3REaXJlY3QpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAg
LTc2NSw3NyArMTE2MCw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdy
aXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAg
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5k
ZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdl
bi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBK
SVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVElu
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1p
dFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxS
ZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVj
dGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZh
ckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
ODQ3LDE3ICsxMjYwLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7
CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFk
ZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRk
cmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVzdWx0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtODY3LDIxICsx
Mjg4LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNj
b3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1
bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2Fs
RW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9s
ZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04OTQsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
LCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0
R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTA5LDI5ICsxMzQ1LDI5IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BS
LCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtOTQwLDE1ICsxMzc2LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBicmVh
azsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHNjcmF0Y2hHUFIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUikpOworICAgIGxvYWQz
MihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNj
b3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVn
IHJlZykKQEAgLTk2MiwxMiArMTQwMyw2IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRH
ZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKQEAgLTk3OCw1MSArMTQxMyw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBz
d2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
ICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8v
IFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNo
ZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25h
bGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9u
LgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZz
ZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJl
ZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAg
ICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZz
ZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2Nv
cGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUt
PmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QyOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAg
ICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQ
UiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8
SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAg
ICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKICAgICAgICAgICAgIGlmIChB
U1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMy
KEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNO
b3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQp
OwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBuZWczMihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0R1BSLCBvZmZzZXRHUFIpOworICAg
ICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsK
KyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRT
bG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBk
c3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTEwMzYsMTAgKzE1MDQsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtMTA1
MiwyNyArMTUyMCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsK
IAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDgy
LDQwICsxNTUwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5
dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3Bl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1Zh
bHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
LXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5v
dGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBK
SVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNo
cG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAg
ICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRk
cmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMTI5LDIxICsxNTc5LDQ5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEu
bV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgR1BSUmVn
IHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7
CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdmFsdWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3Qp
OyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3Qg
Y2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0
aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVj
dGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsK
KyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7Cisg
ICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgR1BSUmVnIGJ1dHRlcmZs
eUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3Bl
VmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseVZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAg
ICAgICBvZmZzZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBy
ZWdUMzsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRHUFIpOyAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KICAgICAgICAg
ICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0
cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBs
b2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNl
dEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZs
eUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExNTQsMjggKzE2MzIsNTcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29w
ZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVz
b2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0
YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdw
cigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0
aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7
CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1
c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRp
Y2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93
YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUo
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQo
dmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAg
ICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5k
U2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNj
b3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisg
ICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAg
ICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAg
ICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAg
ICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdp
c3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwpAQCAtMTE5MCwxMiArMTY5NywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNo
R1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNl
dCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJv
bSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBh
bnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBj
YW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFs
aXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOwpAQCAtMTIwOSwyMyArMTcyNSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8g
YmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJl
Z2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24n
dCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRj
aEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTI0MiwxMCArMTc2Nyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+
KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVj
b2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsK
QEAgLTEyNjEsNjEgKzE3ODQsMTc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3Vt
ZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGlu
dCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRz
KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50
c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90
b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRz
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50
czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50
c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1
bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJn
dW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFy
Z3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQg
d2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3Qu
IElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9j
IHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAg
Ly8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBt
YXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2gg
dG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICAvLyB2YWx1
ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2Vs
bCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVt
cCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVW
YWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQo
dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1
ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwg
cmVnVDApOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KworICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZChvd25lcikgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgIG93bmVyR1BSID0gZ3ByRm9yT3BlcmFuZChvd25lcik7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIG93
bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG93bmVyLCBvd25lckdQUik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CisKICAgICBKdW1w
IG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0wo
KSB8fCAhIShwcm92ZW5UeXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25l
ck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwob3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAm
dm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
KyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCks
IG93bmVyR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4g
c2lsZW50U3BpbGxSZWNvcmQ7CisgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQg
dG8gc2lsZW50IHNhdmUgdGhpcy4KKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNw
aWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3Jk
KTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2UpCisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOworICAgIGlmIChvd25lck5vdENlbGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQo
KSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUgbW9kZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBp
ZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2gg
YXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBp
dCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0
ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0
ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUg
Zm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFs
dWVHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGdwckZvck9w
ZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgdmFsdWVHUFIg
PSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIg
PSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VM
T0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2
YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVt
aXRXcml0ZUJhcnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2Vs
bC5saW5rKHRoaXMpOwogfQogCkBAIC0xMzI3LDExICsxOTY3LDI2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9P
UFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0Nl
bGw7CisKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9i
amVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwg
cmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNDEsMTAgKzE5OTYs
MjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0
b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46
Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1w
LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHBy
b3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIs
IEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgp
KSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8
T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTE0NDcsOCArMjExNSwyNSBAQCB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7
CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVj
b3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxl
bnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
c2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0xNDY2LDYgKzIxNTEsOCBAQCB2
b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsK
KwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICAKQEAg
LTE1NjcsNiArMjI1NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1l
V2kKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgQVNTRVJUKChwdXRLaW5kID09
IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Qp
IHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3Bf
cHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUX1VOVVNF
RChwcm9maWxlZERGR0NvZGVCbG9jaywgIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywg
IiBkaWQgYmVjb21lIHJlYWR5LiIpOwogICAgIApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCkKIHsKICAgICBBU1NFUlQoIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
OworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1
bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwyMiBAQAog
I2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3Rm
L1Njb3BlLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6UGxhbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4gewogcHVibGlj
OgotICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAg
ICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCisgICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlw
ZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQor
ICAgICAgICA6IG1fbGxpbnRDb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1fY29kZUJs
b2NrVG9Db21waWxlKGNvbXBpbGVUeXBlID09IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA/IG1fbGxp
bnRDb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkgOiBtX2xsaW50Q29kZUJsb2NrKSAKKyAgICAg
ICAgLCBtX2ppdChtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKSwgbV9jb2RlQmxvY2tUb0NvbXBp
bGUsIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAg
ICAgbV9qaXQuZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CisgICAgICAg
IC8vIE9PUFM6IHZpc2l0IHRoaXMgaW4gY29uY3VycmVudCBnYworICAgICAgICBpZiAobV9jb2Rl
QmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9jaykgeworICAgICAgICAgICAgbV9jb2Rl
QmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVhcC5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsK
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZCgpCkBAIC01
MywxNyArNjAsMjMgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoKQogICAgIHsKICAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQubGluaygpOworCisgICAgICAgIGF1
dG8gc2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICAgICAgaWYgKG1fY29k
ZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRDb2RlQmxvY2spCisgICAgICAgICAgICAgICAgbV9j
b2RlQmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVhcC51bnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBp
bGUpOworICAgICAgICB9KTsKKwogICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgICAgICBj
YXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVCht
X2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwor
ICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2xsaW50Q29kZUJsb2NrLCAiZGVsYXlK
SVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CiAgICAgICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIGZhaWxlZC4i
KTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7CisgICAg
ICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKKyAgICAgICAg
ICAgIG1fbGxpbnRDb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CiAg
ICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNv
bXBpbGF0aW9uIHN1Y2Nlc3NmdWwuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5qaXRTb29uKCk7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+b3du
ZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAg
ICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC03MSw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgVk0m
IHZtKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPnZtKCk7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9ja0tleSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2s7IH0KKyAgICBWTSYgdm0oKSB7IHJl
dHVybiBtX2xsaW50Q29kZUJsb2NrLT52bSgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0ZpbmlzaGVk
Q29tcGlsaW5nKCkKICAgICB7CkBAIC04MCwxNSArOTMsMTYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9pc0ZpbmlzaGVkQ29tcGlsaW5nOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9p
ZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAgUGxhbiBwbGFuKGNvZGVC
bG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFBsYW4gcGxhbihjb2Rl
QmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAg
cGxhbi5jb21waWxlSW5UaHJlYWQoKTsKICAgICAgICAgcGxhbi5maW5hbGl6ZSgpOwogICAgIH0K
ICAgICAKIHByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxv
Y2sqIG1fbGxpbnRDb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9ja1RvQ29tcGls
ZTsKICAgICBKSVQgbV9qaXQ7CiAgICAgTG9jayBtX2xvY2s7CiAgICAgYm9vbCBtX2lzRmluaXNo
ZWRDb21waWxpbmcgeyBmYWxzZSB9OwpAQCAtMjMzLDkgKzI0NywxMSBAQCB2b2lkIEpJVFdvcmts
aXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFu
eXRpbWVTb29uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBKSVQ6OkNvbXBpbGVU
eXBlIGNvbXBpbGVUeXBlID0gT3B0aW9uczo6Zm9yY2VMT0woKSA/IEpJVDo6Q29tcGlsZVR5cGU6
OkxPTCA6IEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lOwogICAgIAogICAgIGlmICghT3B0aW9u
czo6dXNlQ29uY3VycmVudEpJVCgpKSB7Ci0gICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJs
b2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgUGxhbjo6Y29tcGlsZU5v
dyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI0OSw3ICsyNjUsNyBAQCB2b2lkIEpJVFdv
cmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgICAgIAogICAgICAgICBpZiAobV9u
dW1BdmFpbGFibGVUaHJlYWRzKSB7CiAgICAgICAgICAgICBtX3BsYW5uZWQuYWRkKGNvZGVCbG9j
ayk7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNv
ZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgUmVmUHRy
PFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICBtX3BsYW5zLmFwcGVuZChw
bGFuKTsKICAgICAgICAgICAgIG1fcXVldWUuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9j
b25kaXRpb24tPm5vdGlmeUFsbChsb2NrZXIpOwpAQCAtMjczLDE0ICsyODksMjQgQEAgdm9pZCBK
SVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgIC8vIFRoaXMgd29ya3MgYXJv
dW5kIHRoZSBpc3N1ZS4gSWYgdGhlIGNvbmN1cnJlbnQgSklUIHRocmVhZCBpcyBjb252b3llZCwg
d2UgcmV2ZXJ0IHRvIG1haW4KICAgICAvLyB0aHJlYWQgY29tcGlsZXMuIFRoaXMgaXMgcHJvYmFi
bHkgbm90IGFzIGdvb2QgYXMgaWYgd2UgaGFkIG11bHRpcGxlIEpJVCB0aHJlYWRzLiBNYXliZSB3
ZQogICAgIC8vIGNhbiBkbyB0aGF0IHNvbWVkYXkuCi0gICAgUGxhbjo6Y29tcGlsZU5vdyhjb2Rl
QmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIFBsYW46OmNvbXBpbGVOb3co
Y29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiB9CiAK
Ky8qCiB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0g
Y29kZUJsb2NrLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKworICAg
IGF1dG8gaXNDb21waWxlZCA9IFsmXSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUo
KSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAg
ICBpZiAoaXNDb21waWxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYm9vbCBpc1Bs
YW5uZWQ7CkBAIC0yOTYsMTcgKzMyMiwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93
KENvZGVCbG9jayogCiAgICAgfQogICAgIAogICAgIC8vIE5vdyBpdCBtaWdodCBiZSBjb21waWxl
ZCEKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuaykKKyAgICBpZiAoaXNDb21waWxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
Ly8gV2UgZG8gdGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRo
ZW4gZmFpbGVkLCB0byBjb21waWxlIHdpdGggdGhlCi0gICAgLy8gYmFzZWxpbmUgSklULgotICAg
IGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7Ci0gICAgCi0gICAgLy8gT0ssIGp1c3QgY29tcGls
ZSBpdC4KLSAgICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0
U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0gICAgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKworICAgIGlmIChPcHRpb25z
Ojpmb3JjZUxPTCgpKSB7CisgICAgICAgIENvZGVCbG9jayogbG9sQ29kZUJsb2NrID0gY29kZUJs
b2NrLT5uZXdSZXBsYWNlbWVudCgpOworICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGxvbENvZGVC
bG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBsb2xDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShsb2xDb2RlQmxvY2spOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBhdHRlbXB0
ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRoIHRoZQorICAgICAgICAvLyBiYXNl
bGluZSBKSVQuCisgICAgICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7CisgICAgICAgIAor
ICAgICAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgorICAgICAgICBKSVQ6OmNvbXBpbGUodm0s
IGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgIH0KIH0KKyov
CiAKIHZvaWQgSklUV29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG15UGxhbnMpCiB7CkBA
IC0zMTQsNyArMzQ3LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYg
bQogICAgICAgICBwbGFuLT5maW5hbGl6ZSgpOwogICAgICAgICAKICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29kZUJs
b2NrKCkpOworICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9ja0tleSgpKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
b2xsKFZNJik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiwgQnl0ZWNv
ZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0g
ICAgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIAogICAgIHN0YXRpYyBKSVRX
b3JrbGlzdCYgZW5zdXJlR2xvYmFsV29ya2xpc3QoKTsKICAgICBzdGF0aWMgSklUV29ya2xpc3Qq
IGV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKTsKQEAgLTY2LDYgKzY1LDcgQEAgcHJpdmF0
ZToKICAgICBjbGFzcyBUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKICAgICAKKyAg
ICAvL3ZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAgICB2b2lkIGZpbmFsaXplUGxh
bnMoUGxhbnMmKTsKICAgICAKICAgICBQbGFucyBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2
NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVn
aXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJu
IG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsg
cmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fz
c2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjcw
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwo
KQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0
aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNh
bGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+
bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
CiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYyLDggKzM2MiwxMCBAQCBpbmxpbmUgYm9vbCBz
aG91bGRKSVQoQ29kZUJsb2NrKiBjb2RlQmxvCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBz
aG91bGQgdHJ5IHRvIE9TUi4KLWlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNz
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCitpbmxpbmUgQ29kZUJsb2NrKiBqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKQog
eworICAgIC8vIE9PUFM6IEltcGxlbWVudCB0aGlzIHcuci50IExPTC4KKwogICAgIERlZmVyR0NG
b3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsgLy8gTXkgY2FsbGVycyBkb24ndCBzZXQgdG9wIGNh
bGxmcmFtZSwgc28gd2UgZG9uJ3Qgd2FudCB0byBHQyBoZXJlIGF0IGFsbC4KICAgICBBU1NFUlQo
T3B0aW9uczo6dXNlSklUKCkpOwogICAgIApAQCAtMzcyLDI5ICszNzQsNDUgQEAgaW5saW5lIGJv
b2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIGlmICghY29kZUJsb2NrLT5jaGVj
a0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNv
dW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91
bGQgYmUgbGlmdGVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xp
c3QoKS5wb2xsKHZtKTsKLSAgICAKKworICAgIGF1dG8gbG9sQ29kZUJsb2NrID0gWyZdKCkgLT4g
Q29kZUJsb2NrKiB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gY29kZUJs
b2NrLT5vcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAocmVwbGFjZW1l
bnQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlcGxhY2VtZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH07
CisKKyAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisKICAgICBzd2l0Y2ggKGNvZGVCbG9jay0+aml0VHlwZSgpKSB7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDogewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICIgICAgQ29kZSB3YXMgYWxyZWFkeSBjb21waWxlZC4iKTsKICAgICAgICAg
Y29kZUJsb2NrLT5qaXRTb29uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gY29kZUJsb2NrOwogICAgIH0KICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6
IHsKICAgICAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGlsZUxh
dGVyKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIHJldHVy
biBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKKyAgICAgICAg
aWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9jaygpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQg
Y29kZSBibG9jayBpbiBMTEludDogIiwgKmNvZGVCbG9jaywgIlxuIik7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBMTElu
dDogIiwgKmNvZGVCbG9jaywgIlxuIik7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBl
bnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5k
IGtpbmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5k
IGtpbmQpCiB7CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLAogICAgICAg
ICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5hbWUsICIgd2l0aCBleGVjdXRlQ291bnRlciA9
ICIsCkBAIC00MDUsMTggKzQyMywyMSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5
T1NSKENvZGVCCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAg
ICAgfQogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKLSAgICBpZiAoIWppdENvbXBpbGVB
bmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spKQorICAgIENvZGVCbG9jayogY29tcGlsZWRD
b2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKTsKKyAg
ICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxw
dHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAi
T1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
bXBpbGVkQ29kZUJsb2NrLCAiT1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIpKTsKKworICAgIGNh
bGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAgICBpZiAo
a2luZCA9PSBQcm9sb2d1ZSkKLSAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmpp
dENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CisgICAgICAgIExMSU5UX1JF
VFVSTl9UV08oY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKGtpbmQgPT0gQXJpdHlDaGVjayk7Ci0gICAgTExJTlRf
UkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNr
QXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgIExMSU5UX1JFVFVSTl9U
V08oY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNr
QXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOwogfQogI2Vsc2UgLy8gRU5BQkxF
KEpJVCkKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGVudHJ5T1NSKENhbGxGcmFtZSosIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwg
RW50cnlLaW5kKQogewogICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAg
TExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKQEAgLTQyNiwzMSArNDQ3LDMxIEBA
IHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKGVudHJ5X29zcikKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBl
bnRyeU9TUihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOwor
ICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJl
bnRyeV9vc3IiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY2FsbCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVy
biBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpz
RXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NhbGwiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29k
ZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0
IiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9s
b2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVu
dHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVj
dXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2Fs
bF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFt
ZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFi
bGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2Fy
aXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURfUEFS
QU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwg
ImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNr
KTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNh
bGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2siLCBBcml0
eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCkBAIC00NzksMTkg
KzUwMCwyMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAgICAgTExJTlRf
UkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0gaml0Q29tcGlsZUFu
ZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7
CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhu
dWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9j
aywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAg
Q09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAi
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb21waWxlZENv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvbXBpbGVkQ29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKIAotICAgIGNvbnN0IEpJVENv
ZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKTsKKyAgICBjb25zdCBKSVRD
b2RlTWFwJiBjb2RlTWFwID0gY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGVNYXAoKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZp
bmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7
CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxv
Y2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRh
cmdldCwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOwogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMywxMCBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxsSklU
T3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiB7
CisgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkg
PSAxOworICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmluZWQoTkRFQlVH
KQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3Qu
aAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNyw3IEBAIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgdXNlSklUQ2FnZSwgY2Fu
VXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZVB1YmxpY1N0
YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwg
dW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwK
ICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHJpdmF0ZSBzdGF0aWMgZGF0YSBm
aWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRp
b24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw3ICs1
OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAg
ICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGxsaW50X2hhbmRsZV91Y2F1Z2h0X2V4Y2Vw
dGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8v
IGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8
fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0b3BD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8
dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogICAgICAgICAgICAg
ICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2Rl
QmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
OCw3ICszOTgsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cExMSW50KENvZGVCbG9jayogY29kZUJsCiBz
dGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lm
IEVOQUJMRShKSVQpCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxl
KHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIC8vIE9PUFM6
IEZpZ3VyZSBvdXQgd2hhdCB3ZSB3YW50IHRvIGRvIHdpdGggdGhlIG5vIExMSW50IG9wdGlvbi4u
Li4KKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVC
bG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCShyZXZpc2lvbiAyNzA3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBAIEpTVmFsdWUgbnVtYmVyT2ZERkdDb21waWxl
cyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29sIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSBm
YWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgp
KQorICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7IC8vIE9PUFMKKwogICAgIGlmICghT3B0aW9u
czo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVzZUJhc2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6OnVz
ZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsKICNl
bHNlCkluZGV4OiBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lv
biAyNzA3ODkpCisrKyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTQsNyArNCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVz
dFJ1bm5lciA9IHsKICAgICBuZXZlcklubGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9u
LAotICAgIG51bWJlck9mREZHQ29tcGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVt
YmVyT2ZERkdDb21waWxlczogKGZ1bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAg
ICByZXR1cm4gKGYpID0+IHsKKyAgICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAg
Ly8gRW11bGF0ZSBydW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRp
ZXJpbmcgYmVmb3JlIHJldHVybmluZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAg
ICAgICAgICAgICAgbWFwID0gbmV3IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBt
YXAuZ2V0KGYpIHx8IDA7CisgICAgICAgICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFw
LnNldChmLCBjb3VudCk7CisgICAgICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOwor
ICAgICAgICB9OworICAgIH0pKCksCiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0
TmV3Q29kZUJsb2NrCiB9OwogCkBAIC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxk
QmUodGhlRnVuY3Rpb24sIF9hLCBfYgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5w
dXNoOwogICAKICAgdHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9u
fSkpCisgICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2
YWx1ZXMucHVzaChldmFsKF9hKSk7CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsK
ICAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAg
ZnVuY3Rpb24gZGZnSW5jcmVtZW50KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3Rz
KQogICAgICAgICByZXR1cm4gYXJndW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVk
KGFyZ3VtZW50KSkKKyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFy
dCA6IDA7CiAgICAgCiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416642</attachid>
            <date>2020-12-21 15:55:11 -0800</date>
            <delta_ts>2021-01-06 13:29:26 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>537268</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCisvL3ZhciBkdW1wSlNPTlJlc3VsdHMgPSB0cnVlOworCiAvLyBVc2VkIGZvciB0
aGUgcHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgYmVuY2htYXJrIHJ1bi4KIHRoaXMu
Y3VycmVudFJlc29sdmUgPSBudWxsOwogdGhpcy5jdXJyZW50UmVqZWN0ID0gbnVsbDsKSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
OCBAQCBpZiAoaXNEOCkKIGlmICh0eXBlb2YgdGVzdExpc3QgPT09ICJ1bmRlZmluZWQiKQogICAg
IHRlc3RMaXN0ID0gdW5kZWZpbmVkOwogCit0ZXN0TGlzdCA9IFsnY2RqcyddOworCiBpZiAodHlw
ZW9mIHRlc3RJdGVyYXRpb25Db3VudCA9PT0gInVuZGVmaW5lZCIpCiAgICAgdGVzdEl0ZXJhdGlv
bkNvdW50ID0gdW5kZWZpbmVkOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
MjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5j
dGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5oYW5k
bGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZhdGU6
CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9uQXNE
b3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFibGVk
IiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
ZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlmIChP
cHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkpIHsK
QEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25B
c0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0pKTsK
IH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKQorICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChj
b2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
OCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsK
IAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEs
NyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBs
YXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1
bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1
c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ss
IGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9j
a0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBi
bG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsK
KyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAg
ICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0SGVhZC0+YXQoYmxv
Y2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZBcmd1
bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRp
Y3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmlu
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1w
U3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewogICAgICAgICAgICAg
YXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkgKyBibG9jay5sZWFk
ZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2RlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFzcyBDb2RlQmxvY2tC
eXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxCbG9jaz4gewogcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNN
YXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZp
bGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZv
aWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdy
YXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHBy
ZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpk
YXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKIAogICAgIHZv
aWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlz
aW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQgZHVtcChDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMs
IE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0
SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCisgICAgdm9pZCBk
dW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGlu
c3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVl
Pj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZp
bGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9ja1R5
cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlzLCBzcGVjdWxhdGlv
bkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyAr
MTAwLDcgQEAgT3BlcmFuZCBkZXN0aW5hdGlvbkZvcihjb25zdCBCeXRlY29kZSYgYgogICAgIH0g
ZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0
KSB7CiAgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CiAgICAgICAgIGNhc2UgT3BJ
dGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBKSVRU
eXBlOjpERkdKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpERkdKSVQpCisgICAgICAgICAgICBpZiAo
dHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpGVExKSVQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChPcEl0ZXJhdG9yTmV4dDo6bmV4dFJlc3Vs
dCk7CiAgICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGUubV92YWx1ZTsgLy8gV2UgcmV1c2UgdmFs
dWUgYXMgYSB0ZW1wIGJlY2F1c2UgaXRzIGVpdGhlciBub3QgdXNlZCBpbiBzdWJzZXF1ZW50IGJ5
dGVjb2RlcyBvciB3cml0dGVuIGFzIHRoZSB0ZW1wIG9iamVjdCAuCiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
QXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
CiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnByaW50
KCIsICIsIGluc3RydWN0aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBpZiAo
KHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAg
ICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3duZXJF
eGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZlcklu
bGluZSkiKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2Rl
KFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVz
TWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0
cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVt
cEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAg
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0
cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2
b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAt
ODUwLDcgKzg1MCw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gdG8gdGhlIENv
ZGVCbG9jay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBD
b2RlQmxvY2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIHdoZW4g
dGhlIENvZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkK
ICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwogI2Vu
ZGlmCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7CkBAIC0xMDM3LDcg
KzEwMzcsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zCiAgICAg
Ly8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8g
YmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxl
LiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAgLy8gc2Nhbm5lZCwgd2Ug
Y2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCi0gICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZH
T3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xMDQ1LDcgKzEwNDUsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJv
bmdseShjb25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVy
ZW5jZShWTSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKIH0KQEAg
LTEwNTgsNiArMTA1OCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRU
eXAKICAgICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNl
bGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAgICAgIGNhc2UgSklUVHlw
ZTo6REZHSklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAgICAgICBjYXNlIEpJVFR5
cGU6OkZUTEpJVDoKQEAgLTEwNzQsNiArMTA3Niw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xp
dmUoSklUVHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBz
ZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8gSW50ZXJwcmV0ZXJUaHVu
ayBzaGFyZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7CisgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNhc2UgSklUVHlwZTo6REZH
SklUOgogICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAg
LTExNjksNyArMTE3Myw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b24KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQotICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAKICAgICAgICAgZGZn
Q29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpAQCAtMTIxNyw3
ICsxMjIxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAg
IC8vIEluIHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGJh
c2VsaW5lIENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAgICAvLyB0aGF0IHdlIG1p
Z2h0IGRlY2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpldHRpc29uZWQgZHVlIHRv
IG9sZCBhZ2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRvZXNuJ3QgcHJvdGVjdCB1
cy4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlm
ICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigp
OwpAQCAtMTUxOSw4ICsxNTIzLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnBy
ZXRlZChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0
VHlwZSgpKSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7CisgICAgICAgIC8vIE9P
UFM6IFNlcGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3duIGZ1bmN0aW9uIGZvciBK
SVQgSUNzLiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3QganVzdCBmb3IgTExJbnQu
CiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB9CiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyArMTUzNCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7
CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAg
IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7CiAgICAgfQpAQCAtMTU0
OCw2ICsxNTU0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAog
ICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAg
ICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50ID0gbV9qaXRFeGVjdXRl
Q291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlw
ZTo6REZHSklUOgpAQCAtMTU5MCw3ICsxNTk3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmdldElDU3Rh
dHVzTWFwKGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoQ29kZU9yaWdpbihi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuYnlW
YWxJbmZvID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBp
ZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgICAgICBERkc6OkNv
bW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgICAg
ICBmb3IgKGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMuY2FsbHMpCiAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0YXR1cygpKS5pdGVyYXRv
ci0+dmFsdWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpAQCAtMTgxMCw3ICsxODE3
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAg
ICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24o
KTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CkBA
IC0xODIzLDcgKzE4MzAsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZl
cmVuCiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAg
LTE4NjcsNyArMTg3NCw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24o
KQogICAgICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2Vt
ZW50KCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZXNSZXBsYWNl
bWVudENvZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRoZSByZXBsYWNl
bWVudCBjYW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAgYW5kIHRoZSBl
eGVjdXRhYmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRzIGNvZGVCbG9j
a3MgKHNlZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNzLAogICAgICAg
ICAgICAgLy8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24gdGhlIHN0YWNr
LCBhbmQgYXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTkzOCw3IEBAIEhhbmRsZXJJ
bmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4
IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5k
ZXggb3JpZ2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBSRUxFQVNF
X0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBSRUxFQVNFX0FT
U0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBBU1NFUlQoISFo
YW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBDb2RlT3JpZ2lu
IG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKQEAgLTIyMzEs
NTEgKzIyMzgsNTUgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQog
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAgICAvLyBXZSB3
YW50IHRvIGFjY29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgotICAgIC8vIDEpIE1ha2Ugc3VyZSB0
aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYg
d2UgcmV0dXJuIHRvIGl0CisgICAgLy8gMSkgSWYgd2UncmUgREZHL0ZUTCwgbWFrZSBzdXJlIHRo
YXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3
ZSByZXR1cm4gdG8gaXQKICAgICAvLyAgICB3ZSBzaG91bGQgT1NSIGV4aXQgYXQgdGhlIHRvcCBv
ZiB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0dXJuLgogICAgIC8v
IDIpIE1ha2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1dGFibGUsIHRoZW4g
d2Ugc2hvdWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2suCiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBqaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7Ci0gICAgCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRp
b24qIGNvbXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0
KCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCi0gICAgICAgICAgICBjb21w
aWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOwotICAgICAgICAKLSAg
ICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2Vl
cGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgotICAgICAgICBpZiAo
IWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewotICAgICAgICAgICAgLy8g
V2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3ko
KSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKLSAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T2xkQWdlKSB7CisgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9u
ID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9u
LT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtl
ZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KKyAgICAgICAgICAg
IGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJl
bnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICBk
YXRhTG9nKCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogICAgIAogICAgIC8vIENvdW50IHRoZSByZW9wdGltaXphdGlvbiBpZiB0
aGF0J3Mgd2hhdCB0aGUgdXNlciB3YW50ZWQuCiAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGlt
aXphdGlvbikgewogICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRl
cm5hdGl2ZSgpLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIzNjc3CiAgICAgICAgIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGlt
aXphdGlvbigpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoREZHOjpzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgY291bnQgcmVv
cHRpbWl6YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAg
ICBpZiAodGhpcyAhPSByZXBsYWNlbWVudCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB3ZSB3ZXJlIG5ldmVyIHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4gZm9yIE9TUiBl
bnRyeSBjb2RlCiAgICAgICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgLy8gT3IsIHdlJ3JlIGFuIExP
TCBDb2RlQmxvY2sgYW5kIHdlcmUgYWxyZWFkeSBqZXR0aXNvbmVkLgogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKGFsdGVybmF0aXZlKCkpCiAgICAgICAgIGFsdGVybmF0aXZlKCkt
Pm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1U
cmFwcykKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpICYmIHJlYXNvbiAh
PSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7Ci0j
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1
cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFi
bGUKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJl
bWVtYmVyZWQgc2V0LgpAQCAtMjM5MCw3ICsyNDAxLDcgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGlj
ZUluY29taW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlm
IChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7
CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KSB7CiAgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpLCAiICAgIENsZWFyaW5nIFNBQkkg
YmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuIik7CiAgICAgICAgIHJldHVybjsK
QEAgLTI0ODMsMTIgKzI0OTQsMTQgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0Nv
bXBpbGVzKAogewogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkp
KTsKICAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAgIGlmICghT3B0aW9u
czo6dXNlREZHSklUKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAg
IHJldHVybiAobV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcjsKICAgICB9CiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IHRo
aXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CisgICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklU
Q29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogfQogCiBpbnQzMl90IENvZGVCbG9jazo6Y29kZVR5
cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKQEAgLTI3MDksNyArMjcyMiw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQgQ29kZUJsb2NrOjpzZXRP
cHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKLSAgICBpZiAo
dHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0eXBlICE9IEpJVFR5cGU6
OkJhc2VsaW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7CiAgICAgICAgIGRhdGFM
b2dMbigqdGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBjb2RlIGJ1dCBoYXZlICIs
IHR5cGUpOwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
aml0Q29kZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkpOwogICAgIH0KQEAg
LTI3MjcsNyArMjc0MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hv
bGQKICAgICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNj
ZXNzZnVsOgotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5q
aXRUeXBlKCkpKTsKICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKQEAgLTI3NTYsNyArMjc2OSw4IEBA
IHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICAKIHVpbnQzMl90
IENvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRo
cmVzaG9sZCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpOworICAgIC8vQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsg
Ly8gT09QUzogV2UgY2FsbCB0aGlzIGZyb20gdGhlIExPTCBjb21waWxlciB0aHJlYWQgYmVmb3Jl
IGluc3RhbGwuCisKICAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5IHNvIHdlIGRvbid0
IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKICAgICAvLyBlbm91Z2ggdGhh
dCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4KICAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNpcmVk
VGhyZXNob2xkOwpAQCAtMjgzNiw3ICsyODUwLDcgQEAgREZHOjpDb2RlT3JpZ2luUG9vbCYgQ29k
ZUJsb2NrOjpjb2RlT3JpZwogCiBzaXplX3QgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0lkZW50aWZp
ZXJzKCkgY29uc3QKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRl
bnRpZmllcnMuc2l6ZSgpOwpAQCAtMjg0Nyw3ICsyODYxLDcgQEAgY29uc3QgSWRlbnRpZmllciYg
Q29kZUJsb2NrOjppZGVudGlmaWVyKAogICAgIHNpemVfdCB1bmxpbmtlZElkZW50aWZpZXJzID0g
bV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmllcnMpCiAgICAgICAgIHJldHVy
biBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdP
ckZUTChqaXRUeXBlKCkpKTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZn
SWRlbnRpZmllcnNbaW5kZXggLSB1bmxpbmtlZElkZW50aWZpZXJzXTsKIH0KICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKQEAgLTI5NDgsNyArMjk2Miw4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91
bGRPcHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFs
bHlGcmVxdWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKTsKKyAgICAvLyBPT1BTCisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZH
T3JGVEwoaml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jayA9IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUwLDYgKzMwNjUsNyBAQCB1bnNpZ25lZCBDb2Rl
QmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2Ug
SklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAg
IHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogCkBAIC0zMjI2LDE0ICszMjQyLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjphZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJyZWFrcG9pbnRzICs9IG51bUJyZWFrcG9p
bnRzOwogICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzKTsKLSAgICBpZiAoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0
VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dl
ckJyZWFrcG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVC
bG9jazo6U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOwot
ICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAm
JiBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpldHRpc29uKFByb2Zp
bGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7CiB9CiAKQEAgLTM0MjEsOSArMzQz
Nyw5IEBAIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6Ynl0ZWMKIHsKICAgICBP
cHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlw
ZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgaWYgKEpJ
VENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChqaXRUeXBlKSkKICAgICAgICAgYnl0
ZWNvZGVJbmRleCA9IGNhbGxTaXRlSW5kZXguYnl0ZWNvZGVJbmRleCgpOwotICAgIGVsc2UgaWYg
KGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklU
KSB7CisgICAgZWxzZSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2lu
IG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7CkBAIC0zNDY2LDcgKzM0ODIsNyBA
QCBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwCiAgICAgLy8gVGhpcyBm
dW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBi
ZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFs
IGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVm
Q291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+aGFz
SW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9pbnRzKCk7CiAjZWxzZQpAQCAtMzQ4MCw3ICszNDk2LDcg
QEAgYm9vbCBDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cwogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8g
YmUKICAgICAvLyBjYXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25h
bCBoYW5kbGVyIHNhZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJl
ZkNvdW50IG9mIG1faml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgY29tbW9uRGF0YSA9ICptX2ppdENvZGUtPmRm
Z0NvbW1vbigpOwogICAgIGNvbW1vbkRhdGEuaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKHRoaXMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDggQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRUeXBlIHR5cGUg
PSBqaXRUeXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
IHx8IHR5cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklU
KQpAQCAtNTExLDYgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBy
b2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3Qg
RnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3ICs1NDEsNyBA
QCBwdWJsaWM6CiAgICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUg
aGFzIGJlZW4gc29tZSBpbmxpbmluZy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAg
ICAgICAgcmV0dXJuIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAgICB9CiAgICAg
ICAgIAogICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lk
IENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1l
dGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKK30K
IAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoQ2F0
Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMp
Cit7CisgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAg
ICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKQor
ICAgICAgICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRpbmdKSVRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFeGkK
ICAgICBjYXNlIEV4aXRGcm9tQW55dGhpbmc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbUFueXRo
aW5nIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRGcm9tTE9MOgorICAgICAgICBv
dXQucHJpbnQoIkZyb21MT0wiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdEZyb21E
Rkc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbURGRyIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRp
bmdKSVRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKICAgICBFeGl0RnJvbUFueXRo
aW5nLAorICAgIEV4aXRGcm9tTE9MLAogICAgIEV4aXRGcm9tREZHLAogICAgIEV4aXRGcm9tRlRM
CiB9OwpAQCAtMzgsNiArMzksOCBAQCBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiBp
bmxpbmUgRXhpdGluZ0pJVFR5cGUgZXhpdGluZ0pJVFR5cGVGb3IoSklUVHlwZSB0eXBlKQogewog
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBy
ZXR1cm4gRXhpdEZyb21MT0w7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJl
dHVybiBFeGl0RnJvbURGRzsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZp
cnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMzQsNyArMTM1
LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVtIE9w
ZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgogY2xhc3MgT3Bl
cmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8
c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGljOgogCiAgICAg
T3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVt
QXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBleHBsaWNp
dCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3Qg
bnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9udW1Bcmd1bWVu
dHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAg
ICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBzaXplX3Qg
c2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIHNpemVf
dCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1w
cyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAg
IGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAg
ICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNv
bnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0
YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMu
Z3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsg
ISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAg
ICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE9wZXJh
bmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBp
bml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVy
T2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2Fs
cygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29uc3RhbnRzKCkp
CiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAgICAgICAgIG1f
dmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBAIHB1YmxpYzoK
IAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJn
dW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0K
KyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX251bUNvbnN0
YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51bWJl
ck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBm
b28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVl
Pj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRleChzaXplX3Qg
aWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygpKTsK
LSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXplX3QgYXJndW1l
bnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51
bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KLSAgICAKICAg
ICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90IGlk
eCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNvbnN0YW50cygp
KTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fscygp
ICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1f
dmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3QgaWR4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAogICAgIFJl
ZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRl
eChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0ZSA8
Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNr
Q2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsg
fQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxsZWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBlIGxvY2FsKHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICBDb25z
dFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJ
bmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGNvbnN0
YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4
KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBz
aXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGljOgogICAgICAg
ICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1w
cygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSAr
IHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOwog
ICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3Zh
bHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsK
LSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZM
b2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0Nh
bGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAg
aWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0lu
aXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAogICAgIHNpemVf
dCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAg
ICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9
PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxs
ZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5k
ZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5k
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4KG9wZXJhbmQu
dG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5kLnRv
TG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0Fy
Z3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkg
PT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fs
bGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFu
ZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29uc3RhbnRJbmRl
eCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAK
QEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4o
b3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygpOwogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1iZXJP
ZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29uc3QK
QEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwg
bnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChpbmRleCA8
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICBpZiAoaW5k
ZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRz
KCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxz
KCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9m
QXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkKKyAg
ICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRleCAtIG51bWJl
ck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYgY29uc3RleHBy
ICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxlZUluZGV4KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAo
bnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50
cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQzNywx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAg
IAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMg
YXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSBy
ZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVl
cyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4
dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAg
ICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsK
ICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0
YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24gMjcw
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFja0Nh
bGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXpl
X3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTsp
IHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
dG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsK
ICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRleHQpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2
b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3Vt
ZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC03
OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJ
bmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFj
a0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxsZWUo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgY29uc3QgUmVnaXN0ZXJTZXQm
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZQogICAgICAgICBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZl
QXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlID0gaml0LT5jb2RlQmxvY2soKS0+aml0Q29kZSgp
LT5saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShqaXQt
PmNvZGVCbG9jaygpLCBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCk7CiAgICAgICAgIG1fbmVlZHNU
b1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbiA9IG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVB
dEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSA+IDA7CiAg
ICAgICAgIGlmIChtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24pCi0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjpp
c0RGR09yRlRMKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAgICAgICAgIG1fbGl2
ZVJlZ2lzdGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZl
QXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKSk7
CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwpAQCAtNzEwLDcgKzcxMCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1v
cnBoaWNBY2Nlc3MKICAgICAgICAgLy8gV2Ugc2V0IHRoZXNlIHRvIGluZGljYXRlIHRvIHRoZSBz
dHViIHRvIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgQ29kZUJsb2NrJ3MKICAgICAgICAgLy8gZXhj
ZXB0aW9uIGhhbmRsZXIgdGFibGUgd2hlbiBpdCBpcyBkZWFsbG9jYXRlZC4KICAgICAgICAgY29k
ZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycyA9IGNvZGVCbG9jazsKLSAgICAgICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhh
bmRsZXJzLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwo
Y29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0VHlwZSgpKSk7CiAgICAgICAg
IGNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9IHN0YXRlLmNhbGxTaXRlSW5kZXhG
b3JFeGNlcHRpb25IYW5kbGluZygpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI3MDc4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxhdGlv
bihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5
KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRl
Y29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihTcGVj
dWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJ
bnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8v
IFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNh
bGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUg
Y29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNzA3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1
YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7
IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAgYm9v
bCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92
aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29s
IGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQo
aXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpA
QCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2Nh
bChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBv
cGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVy
YW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQgY29u
c3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFu
dEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEz
NSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJn
dW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJbmRl
eCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAgICAg
LCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2
YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBpbnRl
cnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZh
bHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBPU1JFbnRyeURhdGE6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFyZU9TUkVudHJ5
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0RG
R09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NF
UlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQCB2b2lk
IGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGV4aXRJbmxpbmVD
YWxsRnJhbWUpCiAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoZXhpdElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgLy8gT09QUzogTWFrZSB0
aGlzIGRvIHRoZSByaWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Igbm90LgogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29k
ZU9yaWdpbik7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhp
dC0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24g
MjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlh
YmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFz
ZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWdu
ZWQgbnVtVG1wczsKQEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjpyZWNvbnN0cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCkudG9Mb2NhbCgpICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygp
ICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7
IC8vIE9PUFM6IGJ5dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUzLDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1l
bnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAg
IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2Fs
bEZyYW1lRgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHN3aXRjaCAoY29kZUJsb2Nr
KCktPmppdFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBj
YXNlIEpJVFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBK
SVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoY29kZUJsb2NrKCktPmppdFR5cGUo
KSk7CiB9CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgo
KSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgor
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICBj
YXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03OSw4ICs3MCw2
IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKICAgICBjYXNlIEpJ
VFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDEwICs0NTYsMTAgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRFeAogCiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICB1bnNpZ25lZCBleGNlcHRpb25I
YW5kbGVySW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+
Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNlCisgICAgaWYgKEpJVENvZGU6OmNhbGxT
aXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIGV4
Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgp
OworICAgIGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5j
YWxsU2l0ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aGFuZGxlckZv
ckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE2
IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgi
CisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAi
TExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5o
IgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQQ1RvQ29k
ZU9yaWdpbk1hcC5oIgpAQCAtNDksNiArNTMsOCBAQAogI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVX
b3JrbGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgogCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogbmFtZXNwYWNlIEpJVElu
dGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CkBA
IC02MCw2ICs2Niw4NjggQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwogU2Vjb25kcyB0
b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGlsZVRpbWU7CiAK
K3ZvaWQgSklUOjpzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKK3sKKyAgICBhdXRvIHNldFR5cGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFu
ZChyZWcpID0gdHlwZTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlID0gWyZdIChhdXRv
IGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV9kc3QsIHR5cGUpOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgIC8vc2V0RHN0VHlwZShieXRl
Y29kZSwgcHJvZmlsZXMuZ2V0KCZieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9m
aWxlKSk7CisgICAgICAgIC8vIFdlIHJhY2lseSByZWFkIHRoaXMsIHNpbmNlIGl0IHNob3VsZCBv
bmx5IGdyb3cgaW4gdGhlIHR5cGVzIGl0IHJlcHJlc2VudHMuCisgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUubV9wcmVk
aWN0aW9uKTsKKyAgICB9OworCisgICAgYXV0byB0eXBlRm9yID0gWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgLT4gU3BlY3VsYXRlZFR5cGUgeworICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudFBy
ZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgfTsKKworICAgIHN3aXRjaCAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGw6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGw+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhp
cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0
X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Nv
bnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJv
bV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Rv
X3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhp
cz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJv
ZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9w
X2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRv
ciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0
VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9u
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+
KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJv
ZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1l
dGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoK
KyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1l
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90
b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2Zp
ZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93
aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVt
YmVyOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90
b19udW1lcmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRk
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsK
KyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsK
KworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91
YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8
ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJl
c3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8g
RklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9u
KGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJl
dHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVj
Qnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAg
ICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKwor
ICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBy
b2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0Rv
dWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAg
ICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25O
YU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3Vi
bGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJl
TmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNC
eXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50
MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjQmlnSW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211
bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAg
ICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAg
ICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZv
cihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZv
cihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNh
biBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVp
bGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50
MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+
KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAg
ICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNBbnlJbnRBc0RvdWJsZSA6IFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgICAgIGlmIChp
bnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAg
IHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0VHlw
ZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICB9OworCisg
ICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAg
ICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVj
b2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYg
aXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNC
aWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0Ogor
ICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5
dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAg
ICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlv
bi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5
dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRv
IHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVj
U3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
KiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZmZXI7CisgICAg
ICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQg
ZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3
ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAg
ICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhp
cyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAgICB9CisgICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQorICAgICAgICAg
ICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9i
amVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAg
ICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0
eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNv
bHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRo
aXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5f
YnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlz
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigp
LCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKSwgU3BlY1N0
cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9u
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5j
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3lu
Y19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3lu
Y0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhf
c2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4o
KSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19w
cm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmlj
UHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNT
dHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1
bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJl
c29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwg
U3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50
c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
QXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3Vu
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50Pigp
LCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVj
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVx
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dy
ZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
RW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBl
b2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5
cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJ
bnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmpl
Y3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1
bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVu
Y3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19j
b25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0
cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFf
bnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3Rv
cFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1f
Ym90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1
bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hh
c19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlk
ZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lu
c3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
PigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Nl
bGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2Vs
bFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ug
b3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2Fz
ZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9z
dXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAg
Y2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3Bf
dW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRp
Y19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ug
b3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRf
c2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNh
c2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6Cisg
ICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToK
KyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ug
b3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoK
KyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2pu
ZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2Fz
ZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRl
cmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2Fz
ZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pi
ZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAg
IGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ug
b3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNh
c2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6Cisg
ICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNl
IG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAg
IGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVy
X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNh
c2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgor
ICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9l
dmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6Cisg
ICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoK
KyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0
aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5l
OgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2Ug
ZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Bl
bl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9w
cm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRp
cmVjdF9ub190bHM6CisgICAgY2FzZSBub3JtYWxfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBj
YXNlIGxsaW50X2dldF9ob3N0X2NhbGxfcmV0dXJuX3ZhbHVlOgorICAgIGNhc2UgbGxpbnRfaGFu
ZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfc2xvd19yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2Fs
bF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfZXZhbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
dGFpbF9jYWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Q6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2l0ZXJhdG9yX29wZW46CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX2NvbnN0cnVjdF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9j
YWxsX3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3Zh
cmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJh
cmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfZXZhbF9zbG93OgorICAg
IGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0X3Nsb3c6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW5fc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVf
bGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3RhZzoKKyAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVj
a191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxs
OgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9ub190bHM6CisgICAgY2FzZSB3
YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9w
YWdhdGlvbigpCit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBo
PihtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRp
Y3Rpb25zQXRIZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVk
aWN0aW9uc0F0SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAs
IDAsIFNwZWNOb25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1
ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAg
IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOwor
ICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAg
IGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9m
aWxlKSB7CisgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9ncmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4o
KTsKKworICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4o
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJv
ZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcp
OworICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxl
Lm1fcHJlZGljdGlvbjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0
YUxvZygiYXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RG
OjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3ByZWRpY3Rp
b25zQXRIZWFkWzBdLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9vbCBjaGFuZ2Vk
OworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZl
cnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cg
d2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMg
YSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQg
b24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzogSG93IGlzIGNh
dGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgor
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2Nr
JiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9
IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAgIGlmICgh
YmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaSArIGJsb2NrLmxlYWRlck9mZnNl
dCgpKS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhl
YWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Y3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFBy
ZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNo
YW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBt
X2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1f
cHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
YWxsKApAQCAtNjcsNyArOTM1LDEzIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRy
VGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0
ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorYm9vbCBKSVQ6OnVzZUxPTCgp
Cit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9
CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNv
bXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAg
OiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0u
aW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03NSw2ICs5NDksNyBAQCBKSVQ6OkpJVChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQog
ICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgLCBtX3VzZUxPTChj
b21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6TE9MKQogewogfQogCkBAIC0xMzcsMTEgKzEwMTIs
MTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0j
ZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFt
ZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9i
eXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisgICAgICAgICAgICBtX2No
ZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAg
ICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOyBcCisgICAgICAgICAgICBpZiAodXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAg
d2lsbERlZihkc3QpOyBcCisgICAgICAgICAgICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5F
WFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTAzNywz
MiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJ
TkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRT
bG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93
XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09Q
Q09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChu
YW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAg
ZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBc
CisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAg
ICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNs
b3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAg
ICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcg
IiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxOCArMTExOCw4NCBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNv
dW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2Vz
LnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5k
ZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8g
V2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUg
dW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGlu
ZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAg
Ly8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsK
KyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAg
IGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlz
RW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNj
ZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3Nv
ckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9w
cmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIp
Ci0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAg
Zm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7
CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2st
PnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5p
bmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9j
dXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5k
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9Owor
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9j
a0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAh
bV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1
cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVG
cm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vz
c29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNz
b3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJl
ZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQ
cmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZy
b21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3Jz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRT
dGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVu
dEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmlu
ZGV4KCldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcHJl
dmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAgICBpZiAobV9i
eXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2Rl
IGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAgICAgICAgICAg
IC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCisgICAg
ICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kaXNhc3Nl
bWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0
aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7
CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCkBAIC0yNzgsNDYgKzEyMzEsNTMgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAor
CisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mg
YmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1w
UmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwog
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5
X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxl
KQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0
KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERF
RklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Nj
b3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERF
RklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Nj
b3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9h
Y2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChu
ZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJp
bmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2Vu
ZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4o
KS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVh
dGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRl
cmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Nv
bnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLm1fZHN0LCBTcGVjU3Ry
aW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0LCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAg
ICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0Pigp
Lm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2Nv
cGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNO
b25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVh
bFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Nj
b3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNI
ZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVf
YWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3Nw
cmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2Rz
dCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJh
eSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19P
UChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVt
ZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAgICAgICBERUZJTkVfU0xP
V19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dl
bmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RB
cmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90
aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2Rz
dCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAg
IERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5l
cmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFz
eW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9T
TE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0
b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERF
RklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTM1OCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2Jl
Z2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERF
RklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9w
X21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkK
KyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3Bf
bXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc4LDYgKzE0NDIsNDAgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tl
ZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1
dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbF92YXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ug
b3BfcHJvZmlsZV90eXBlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
IkRpZG4ndCBjaGVjayBMT0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBt
X3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUxNiwxMiArMTUxNCwxNCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2Zp
bGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2
aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAg
ICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93
Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNl
LmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAg
IEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nh
c2UuanVtcHNbMF0ubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RU
byA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIApAQCAtNTgwLDcgKzE1ODAsNiBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5z
dHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3RyYXBzKQotICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbW9kKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVnYXRlKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfbmVxKQpAQCAtNTk5LDYgKzE1OTgsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3Bl
bikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBD
UFUoWDg2XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZW5kaWYK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
ZGVjKQpAQCAtNjM1LDE1ICsxNjM3LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0
YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4o
KSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0g
bV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQo
KSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRl
ciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2Ug
Y29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9X
SVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgp
ICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZp
cnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1w
cyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMg
YWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTc3OCw2ICsxNzgzLDc5IEBAIHZvaWQgSklUOjpj
b21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
YXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2Rl
T3JpZ2luKCkpOwogCisgICAgaWYgKCFtX2V4aXRKdW1wcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
SnVtcExpc3QgZXhpdENvbW1vbjsKKyAgICAgICAgZm9yIChhdXRvJiBleGl0IDogbV9leGl0SnVt
cHMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQuZmlyc3Q7CisgICAg
ICAgICAgICBhdXRvIGp1bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgICAgICBqdW1wcy5saW5r
KHRoaXMpOworCisgICAgICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisg
ICAgICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBl
eGl0cy4KKworICAgICAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICAg
ICAgZXhpdENvbW1vbi5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VS
VCghZXhpdENvbW1vbi5lbXB0eSgpKTsKKyAgICAgICAgZXhpdENvbW1vbi5saW5rKHRoaXMpOwor
CisgICAgICAgIC8vcHJpbnQoImV4aXQgYXQgYmMjIiwgIExMSW50OjpSZWdpc3RlcnM6OnBjR1BS
LCAiXG4iKTsKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6OnBjR1BS
ID09IHJlZ1Q0KTsKKyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkuY29udGFpbnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVsb3cgcmVs
aWVzIG9uIHRoaXMgYmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwg
bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRo
ZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uT1NSV3JpdGVCYXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQ
UjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExM
SW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIocmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigp
KSwgcmVnVDIpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsKKyAgICAg
ICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4
aXRDb3VudGVyKCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5jaDMyKEJl
bG93LCByZWdUMiwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hvbGRG
b3JSZW9wdGltaXphdGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIsIG51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5j
ZSB0aGUgTExJbnQgUEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPihtX2NvZGVC
bG9jayk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRy
aWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChu
b25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJlclRhZ1JlZ2lz
dGVyLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6Ok51bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgc2tpcEpl
dHRpc29uLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6ZU5vdyA9
IGppdC5icmFuY2gzMigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVyVGhh
bk9yRXF1YWwsCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAorICAgICAg
ICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6Om5v
cm1hbE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhpdFB0clRh
Zz4oKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9T
UkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAgICAgICAg
Ly8gICAgZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygp
LmNvZGUoKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVH
UFIpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOwor
ICAgICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQ
UkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6IAorICAg
ICAgICAvLyAxLiBTdG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAgICAgICAv
LyAyLiBqZXR0aXNvbiBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8gMy4gd3Jp
dGUgYmFycmllciBMTEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5s
aW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAg
aWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIwNDUsNyBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8SlNFbnRyeVB0
clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50
cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmco
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xK
SVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFj
aGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAg
IHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIwNTYsNyBA
QCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9jay0+c2hy
aW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwogICAg
IH0KICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBE
aXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJp
dHlDaGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0Yo
IkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywg
cmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQu
ZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIsNiArMjE1
MCw3MTMgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0
b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExD
b21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkK
K3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5z
aXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0p
OworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2VkUmVncygpCit7
CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUg
YSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0
dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcwor
ICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgUmVnaXN0
ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdp
c3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3Rl
clNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyAr
K2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBp
ZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxlZVNhdmVzLmNv
bnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAgIH0KKyAgICBy
ZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkR1BScygpCit7
CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUg
YSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1
dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMK
KyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Cisg
ICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOwor
ICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBSZWdpc3RlclNl
dCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJl
LiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAv
LyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hl
bmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3Ig
YXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2Vk
UmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQor
Cit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgLy8gT09QUzogdGhpcyBicmVh
a3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmllci4gQnV0IGdlbmVyYWxseSBzZWVtcyBsaWtlIGEg
bmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBmaWd1cmUgc29tZXRoaW5nIG91dC4uLgorCisgICAg
Ly9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUlu
ZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAvLyAgICBDUkFTSCgpOworfQorCitHUFJSZWcg
SklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0g
dGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5p
c0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgewor
ICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcg
SklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8g
T09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAg
ICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5m
cHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJz
KCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAg
ICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwo
cmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykK
K3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhh
dCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUub3BlcmFuZDsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisg
ICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9y
T3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAgICAg
IC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIGlzQWxsb2NhdGVkL2xvY2tDb3VudCB2YWx1ZXMg
YmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAvLyBoYXZlIGNvZGUgdGhhdCBkb2VzOgorICAgICAg
ICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vIC0gc3BpbGxGb3JDYWxsCisgICAgICAg
IC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vCisgICAgICAgIC8vIEFuZCB3aGVuIHdl
IGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2UgdGhlIFZhbHVlT3BlcmFuZCwgd2Ugd2lsbCBlbmQg
dXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxvY2F0aW5nIHRoZSByZWdpc3RlciwgZXNzZW50aWFs
bHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1wLgorICAgICAgICAvLyBPdGhlcndpc2UsIHdoZW4g
flZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNhbGxzIHVubG9jaygpLCB3ZSdkIGVuZCB1cCBpbgor
ICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuCisgICAgICAgIHJlZ1ZhbHVlLm9wZXJh
bmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQp
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IGZhbHNlOworICAgIH0KKworfQor
Cit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVl
U2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9D
bG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7
CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAg
ICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2Ji
ZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitT
YXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291
bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5k
SWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVn
VmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgIH07CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNp
bGVudFNwaWxsQmVmb3JlQ2FsbCgpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxv
dCBmYXN0ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29yZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2
ZVBsYW47CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtl
X3BhaXIocmVnLCByZWdWYWx1ZS5vcGVyYW5kKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5k
SWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAg
ICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0g
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNv
cmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdp
c3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9
LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4o
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpLCByZWNvcmQuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJ
VDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBzYXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gcGFpci5maXJzdDsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgaWYg
KHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
b3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAgIG5vcCgpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQ
UnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwg
c2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgIG5vcCgpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dD
YXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKHNsb3dDYXNlLnJlc3Vs
dCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJ
bnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BT
OiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVl
UmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVz
c0ZvcihvcGVyYW5kKSk7CisKKyAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAg
IHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworICAgIHJlZ1ZhbHVlKGdwciku
b3BlcmFuZCA9IG9wZXJhbmQ7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUo
ZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJS
ZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7IC8vIE9PUFM6IFZhbGlkYXRlIHRoYXQg
Zm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykgdGhhdCBkZWYsIHdpbGxEZWYgd2FzIGNhbGxl
ZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZnByLCBvcGVy
YW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9
CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
Z3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOwor
ICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICB3aWxsRGVmKG9wZXJh
bmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6bG9jayhS
ZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5s
b2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFs
dWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7
CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQg
JiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICByZWdWYWx1ZSA9IHsgfTsK
K30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6
IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sK
KyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOwor
CisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxv
Y2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dw
cjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKwor
SklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQor
CitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlk
RlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9j
ayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRl
bXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAg
IG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpn
cHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4g
bV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVn
ID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3By
ID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBt
X29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFp
c0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsK
KworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICBy
ZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBp
ZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9j
YXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5k
LCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3By
OworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAg
ICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRl
KEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykp
OworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQo
SklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQorewor
ICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5k
OjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1
cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcg
cmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1f
Z3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3By
LCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYg
KG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdS
ZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxD
aGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVP
cGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGpp
dCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQor
eworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIG1faml0LmFzc2lnblJl
ZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAg
ICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAg
ZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAg
IG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZw
cigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAg
RlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYg
KHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAg
ICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAg
ICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBt
X29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIg
PSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwor
CisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIp
OworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlw
ZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQu
YnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtu
b3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAg
ICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAg
ICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKworICAg
IG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsK
K30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQorewor
ICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07
CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRl
ZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJ
Zk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVj
dWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkK
K3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkp
OworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXND
ZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lk
IEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5k
KSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
YnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVP
dGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICgh
aXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNW
YWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVj
dFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklU
OjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkK
KyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29s
IHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50
MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFu
ZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFs
dWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJ
TlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5j
aElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRo
aXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQor
I2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3Zv
aWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAg
ICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29u
c3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNw
ZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxB
bGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCks
IEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQor
Cit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoIigiLCBvcGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3Zv
aWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mg
c3RhdGUgPSBbIik7CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAg
ICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
Ilx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRh
dGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUo
cmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFw
LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgi
CisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlv
blByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVj
b2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsK
ICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRy
eSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2Rl
SW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAg
ICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6cGFpcjxSZWcs
IFZpcnR1YWxSZWdpc3Rlcj4+OworCisgICAgc3RydWN0IFNpbGVudFNwaWxsUmVjb3JkIHsKKyAg
ICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgICAgIFJlZ2lzdGVyU2V0IHNwaWxsZWRSZWdp
c3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZUZvclNwaWxsOworICAgIH07CisKKyAg
ICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0LCAxPiBqdW1wczsgLy8g
VXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZvciB0aGluZ3Mgd2l0aCBjaGVja3BvaW50cywg
d2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgSnVtcExpc3RzCisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZv
ciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBT
b21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVu
Y2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xOTcsNiArMjEyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0yMDQsMTQgKzIyMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRy
X3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAg
ICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50
YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAg
IC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJs
ZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKLSAgICAgICAg
SklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKKyAgICAgICAgZW51bSBjbGFzcyBD
b21waWxlVHlwZSB7CisgICAgICAgICAgICBCYXNlbGluZSwKKyAgICAgICAgICAgIExPTAorICAg
ICAgICB9OworICAgICAgICAKKyAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiwgQ29tcGlsZVR5
cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwogCiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpK
U0ludGVyZmFjZUpJVDo6dm0oKTsgfQpAQCAtMjIwLDIyICsyMzYsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGxpbmsoKTsKIAogICAgICAgICB2b2lkIGRv
TWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwotICAgICAgICAKLSAgICAgICAg
c3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKKworICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBj
b21waWxlVHlwZSwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUo
ZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgY29tcGlsZVR5
cGUsIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpC
YXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQ
dXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRC
eVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9j
aywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5k
ZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQpAQCAtMjQzLDIxICsyNTksMjEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkK
ICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4oYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElk
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hl
ZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQog
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yODYsNiArMzAyLDIwIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAg
dm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBj
bG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVn
KTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFu
IGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMyMyw5ICszNTMs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7
CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93
Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
SnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAg
ICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWco
KSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVT
bG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBh
ZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYs
IGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMz
Myw3ICszNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwpAQCAtMzUwLDcgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zNjAs
NyArMzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbios
IENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFU
eXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJn
ZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxl
T3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJh
cnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwg
U2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtNTA4LDgg
KzU0MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKQEAgLTUxNywxMiArNTQ5LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJv
b2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25k
aXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlv
biwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wg
aW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAg
IHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChj
b25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAg
LTU0Niw5ICs1ODcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lk
ZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTYxMCw3ICs2NTEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfYmVnaW4oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5k
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sc2hpZnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKyNpZiBDUFUoWDg2XzY0KQogICAgICAgICB2b2lkIGVtaXRfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKik7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0X29wX21vdihj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKQEAgLTY3OCw3OCArNzIxLDgxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0
cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2
b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29s
IGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRH
UFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2
ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAt
NzY0LDggKzgxMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAg
IEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NzgsMzgg
KzgyMiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRG
dW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+
Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
LCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2Fz
ZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAg
ICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlv
biwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxp
bmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAg
ICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJv
bS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZv
aWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwot
ICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdp
c3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAg
ICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRl
Y29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBz
bG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05NjEsNiArOTg1LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdh
dGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTk3MSw2
ICs5OTgsMjUyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50
ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25s
eSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5n
LiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1f
Z3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAg
ICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2pp
dDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
RlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJv
dmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAg
ICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVy
YW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
OworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3Ry
dWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VMT0wpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR1BSUmVnJiBncHIg
PSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52
YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQg
PSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAg
ICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3By
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByRm9y
T3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFu
ZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcg
ZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnBy
Rm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3Bl
cmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5U
MzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVD
ZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXND
ZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1
bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJs
eSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BS
UmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQ
UlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3Rl
ciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJS
ZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAv
LyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0
IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lk
IHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAg
ICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgICAgICB2
b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAg
ICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0
ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0
ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1fZmFy
Q2FsbHM7CkBAIC05OTAsNyArMTI2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0
b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRl
Y29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7Cisg
ICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZl
Y3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25l
ZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzMDAsODMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsK
ICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2Vk
UmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1
bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGlt
ZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAg
ICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdl
KGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlk
R1BSUmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAg
ICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAg
ICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lk
IG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8
IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNB
bGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlz
ID0geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0
IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAg
ICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAgICAg
ICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lk
IG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5z
aXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRv
UmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVy
Z2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92
ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3Zl
blR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJl
bnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKworICAg
ICAgICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9j
dXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKworICAgICAgICBWZWN0
b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tT
dGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1f
cHJlZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAg
ICBib29sIG1fY2hlY2tlZFVzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Qnl0ZWNvZGVJbmRleCwgSnVtcExpc3Q+PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsODIgKzQ2LDgyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFu
ZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEps
ZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1
YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9y
RXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVh
dGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExl
c3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxl
c3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Nl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEps
ZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
SmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRl
clRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwg
ZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgc2xvd0Nhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRy
dWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBz
bG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsMzIgKzE1MSw4NCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICBib3hJbnQzMihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworCisgICAgICAgIGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgcmVzdWx0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AxKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRH
UFIpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCBpbnB1dEdQUiwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBi
b3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24pOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
KQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNh
c2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50
IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGlt
bWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzLmdwcigp
LCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCks
IHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CkBAIC0yMjksMTcgKzI4MSw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRBbmRKdW1wKGNvCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQ
UjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVt
cDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMg
PSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1w
bGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRv
IGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhz
VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+
Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9Owor
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGlu
dDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkp
LCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRS
SFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ax
KTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJ
bW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRl
KGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdU
MSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0
YXJnZXQpOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAg
fQogfQogCkBAIC0yNTUsNDMgKzMzMyw4OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWQoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAg
ICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0g
eworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgq
dGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJI
UyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5l
bXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDI7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAg
ICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAg
ICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAg
ICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRH
UFIpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsK
ICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAg
ICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSks
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJ
bW0zMihvcDFpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJl
MzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7Cisg
ICAgICAgIGdldFJIUygpOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKICAgICB9Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBT
bG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBT
bG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlv
biwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9w
ZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dP
cGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90
IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBp
bnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24g
b3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdw
cigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8g
ZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNl
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBm
YWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8g
V2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNs
b3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQg
aW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBv
aW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0MjQs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzQ0OCw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTEsMTIgKzQ3MSwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qx
KTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBK
dW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs0
ODgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZh
aWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDEx
ICs1MDAsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBl
bnN1cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9u
IHByb3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFi
c29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3Jj
RHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJ
bnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0z
MigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91
YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShz
cmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBz
b21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7Cisg
ICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMzkzLDExICs1NDgsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3Ry
dWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVj
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkg
eworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1
bHRGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEu
MDsKKyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBG
UFIpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBGUFIsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BS
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlu
cHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAu
ZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAg
ICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAg
ICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVn
cyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qp
OworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBP
UF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzYwNCw4
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMg
YXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAg
PT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7
CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJl
Z2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdU
NCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBH
UFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4
KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAg
IGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0
aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAg
ICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hU
ZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBl
YXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxo
c1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlz
LCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwg
ZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJo
c0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJo
c0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAK
LSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1
YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAg
ICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVX
b3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOwor
ICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJ
bnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
bW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQorICAgIGJveEludDMyKGVkeCwgSlNW
YWx1ZVJlZ3MgeyBlYXggfSk7CiAKLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjpl
bWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBlYXgpOworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
ICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBT
cGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNC
aWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUoWDg2XzY0KQpAQCAtNDY0LDcgKzY5Niw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBE
b3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMy
T3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDc0LDYgKzcwNiw3IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChp
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3Rl
ciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBl
bWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjIsMTUgKzc5NSwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwg
U2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0
aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKQEAgLTcyNCwxMyArOTU1LDExIEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJ
bnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5l
Z0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAg
ICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFs
dWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRo
SUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRl
PihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03NDEsMTggKzk3MCw2IEBAIHZvaWQgSklUOjplbWl0
Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0KICAgICBTbmlw
cGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7
CiAKQEAgLTc2MCwzMyArOTc3LDEwNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBh
dGgoY29uc3QgCiAgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMSkpOwogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
CiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudElu
dChvcDIpKTsKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwg
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdo
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBh
dGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1w
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRl
bXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRl
bXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9
CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJpZ2h0UmVncyk7CisjZW5kaWYKIAotICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0
Y2hHUFIpOwogCisgICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3Bl
cmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFz
dFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7
CisKICAgICBpZiAocHJvZmlsaW5nUG9saWN5ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1p
dFByb2ZpbGluZykKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoYnl0ZWNvZGUpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MuZ3ByKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBw
cm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGJvb2wgcmVzdWx0SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7
CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIG5vdDMyKHJlc3VsdEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBpZiAocmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTgwMyw3ICsxMDkzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgbGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0OSwyMCArMTEzOSw2IEBAIHZvaWQgSklU
OjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlk
RlBSUmVnOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVn
VDI7Ci0jZW5kaWYKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKIApAQCAtODczLDIxICsxMTQ5LDc3IEBAIHZvaWQgSklU
OjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIg
PSBJbnZhbGlkRlBSUmVnOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAg
IE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlBSOworCisgICAgLy8gT09QUzogZ2V0IHNv
bWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlBSLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAt
PmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAt
PmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQUi0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOwor
CisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQ
UiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gZnBSZWdUMjsKKwogICAgIGlm
ICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAogICAg
IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIsIHNuaXBwZXRTaGlmdFR5cGUpOworICAgICAgICBzY3JhdGNoRlBSLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSMiwgc25pcHBldFNoaWZ0VHlwZSk7CiAKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSks
IFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7
CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwog
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3JzaGlmdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtOTAyLDE4ICsxMjM0LDU0IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5z
dHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFk
ZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhz
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCBy
aHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxo
c0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdw
cigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnBy
KCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBtb3ZlKGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxv
dywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRkSUMq
IGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBh
ZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQo
Y3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CisgICAg
ZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlw
ZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTkyNCwxNSArMTI5MiwzNSBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8v
IEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3Jj
IGFuZCBkc3QuCi0gICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEg
YXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KLSAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHNyY1RlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cmNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wZXJhbmQpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzcmNUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3Jh
dGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFy
aXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFu
ZCBkc3QuCisgICAgICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1Qx
IGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCisgICAgICAg
IHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKKyAgICB9CiAjZWxzZQogICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kLCBzcmNSZWdzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC05
NDEsMTkgKzEzMjksMjIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElD
PAogCiAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNS
ZWdzLCBzY3JhdGNoR1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwg
c3JjUmVncyk7Ci0KICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudElu
c3RydWN0aW9uLCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwogCiAg
ICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhp
cywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUp
IHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHNyY1JlZ3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChzcmNSZWdzLmdwcigpKTsKICAg
ICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwor
ICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0g
bGFiZWwoKTsKQEAgLTk2Myw3ICsxMzU0LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRVbmFyeU1hdGhJQzwKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQor
ICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBO
b25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTc0LDM5ICsxMzcyLDgyIEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
CisgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMu
Zmlyc3QoKSk7CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLnNlY29uZCgpKTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KQorICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudElu
dChvcDEpKTsKKyAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQorICAgICAg
ICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7
CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBGUFJS
ZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxl
ZnRGUFI7CisgICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBG
UDsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwogICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAg
IEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CiAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOwogI2VuZGlmCiAKLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpKSB7CisgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAg
ICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAg
ICAgICB9CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkgeworICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMik7CisgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgfQogCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
Ci0gICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMSkpOwotICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAg
IHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsK
KyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGxlZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3Vs
dFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7
CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVm
dEZQUiA9IGxlZnRUZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQ
LT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOworICAgICAgICBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDM7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBS
ZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOwogCi0gICAgUkVMRUFTRV9BU1NFUlQo
IWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisgICAg
ICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFu
ZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwor
ICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0
T3BlcmFuZCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKKyAgICB9CiAKLSAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRP
cGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGZw
UmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hGUFIpOwogICAgIAogICAgIEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZh
bGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxp
ZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKICAgICAKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNM
ZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0
T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
ICAgICBhdXRvIGlubGluZVN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgpAQCAtMTAxNSwxNyArMTQ1
NiwzNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAKICAgICBi
b29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewot
ICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVy
YW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSkgeworICAgICAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOwor
ICAgICAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIo
KSB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIH0KKwogICAg
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdz
LCByaWdodFJlZ3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsZWZ0UmVncy5ncHIoKSk7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmlnaHRSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAg
LTEwMzUsMTEgKzE0OTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQwogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
cmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2Ug
aWYgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEFkZD4pCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0hlYXBCaWdJbnQ7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRj
aEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElD
R2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZp
bmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA0OCw4ICsxNTE1LDggQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vs
c2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
QEAgLTEwODUsNyArMTU1Miw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzwKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
QmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9u
IHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJv
ZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1
bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRl
JiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDk1LDE2ICsxNTYyLDYgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0j
ZW5kaWYKLSAgICAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTE1LDE1ICsxNTcyLDM2IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKIAogICAgIEFTU0VSVCgh
KEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdl
bmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKIAot
ICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBl
bHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJh
bmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKIAor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OworICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRSZWdzLmdwcigpID09IHJlZ1QyID8gcmVnVDMgOiBy
ZWdUMiB9OworICAgIH0gZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29u
c3RhbnQocmlnaHRPcGVyYW5kKSkgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsg
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzIHsgbGVmdFJlZ3MuZ3ByKCkgPT0gcmVnVDAgPyByZWdUMSA6IHJlZ1QwIH07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOworI2VuZGlmCisgICAgCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgogCisgICAgaWYg
KEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgIGVsc2UgaWYg
KEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCiAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwog
ICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
IGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQpAQCAtMTE1
NiwyMyArMTYzNCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotCi0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwotICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLQogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5
cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExODgsNjIgKzE2NDksMjE2IEBAIHZvaWQg
SklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbHNlIGlmIChpc09wZXJh
bmRDb25zdGFudERvdWJsZShvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3REb3Vi
bGUoZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpOwogI2VuZGlmCi0KICAgICBSRUxFQVNF
X0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgp
KTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxl
ZnRGUFI7CisgICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBG
UDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxl
ZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07
CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxlZnRUZW1w
RlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9
IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9
IGZwUmVnVDE7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAo
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7Cisg
ICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKKwogICAgIGlmICghbGVmdE9wZXJhbmQuaXND
b25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwog
ICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKKyAgICAKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
aXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogCiAgICAgSklURGl2
R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOworICAgICAgICBsZWZ0RlBSLCByaWdodEZQUiwgc2Ny
YXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKIAogICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpIHsKICAgICAg
ICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwogCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgICAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCku
ZW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkp
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9kaXYpOwogICAgICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAg
IEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOwor
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwgYXJpdGhQ
cm9maWxlLmRpZE9ic2VydmVOZWdaZXJvRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBGUFJU
ZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzVGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBG
UFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0VGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShsaHNHUFIsIGxoc0ZQUik7CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUocmhzR1BSLCByaHNGUFIpOworICAgICAgICAgICAgICAgIG11bERvdWJs
ZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpO
ZWdhdGl2ZVplcm8sIGJyYW5jaDMyKEJlbG93LCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gz
MihCZWxvdywgcmhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZw
cigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAg
ICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVs
PihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTXVs
PihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1p
emUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0
aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisg
ICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShs
aHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1YkRvdWJs
ZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAg
ICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3Vi
bGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93
LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIo
KSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3By
KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJs
ZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihz
dWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklU
U3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwot
ICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihz
dWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1p
emUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUs
IHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDog
T1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgd2lsbERlZihkc3Qp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsK
ICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yMTYs
NiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAg
ICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAt
IENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8K
KworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0
cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAgICAgICBpbmZvID0gbV9j
b2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwpA
QCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlE
IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxs
X2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3LDQ0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3Ry
dWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4o
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWls
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7
CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENv
bnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4OSwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisg
ICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRp
cGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBF
YWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisgICAgLy8gT09QUzogZmln
dXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPworCisgICAgc3BpbGxGb3JD
YWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0
aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgSnVt
cCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJp
YykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QwCiAK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7
Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgIEp1
bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbmV4dENoZWNrcG9p
bnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENoZWNrcG9pbnRTbG93KTsK
KwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhp
cywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAgPSByZXN1bHRUZW1wLmdw
cigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1QwID09IHJlZ1QwKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAgcHJvdmVu
VHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAKICAgICBm
YXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0
ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAg
c2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9
IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzQsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAgICAgfSko
KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBm
ZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2Rl
cyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRj
Li4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQs
IHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7
CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAgIHsKLSAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAg
ICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hlY2twb2lu
dFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogCi0gICAg
ICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAg
ICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgp
LnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiks
IEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9
KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgp
OworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25z
dCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAg
ICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFt
ZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAgICAgICB3
aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0
aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+
KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVy
UmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVz
dWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRl
clJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAg
ICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGNvbnN0IGNoYXIqIEpJVENvZGU6OnR5
cGVOYW1lKEpJVFR5cGUgamkKICAgICAgICAgcmV0dXJuICJMTEludCI7CiAgICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgcmV0dXJuICJCYXNlbGluZSI7CisgICAgY2FzZSBK
SVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAiTE9MIjsKICAgICBjYXNlIEpJVFR5cGU6
OkRGR0pJVDoKICAgICAgICAgcmV0dXJuICJERkciOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklU
OgpAQCAtMTA4LDcgKzExMCw3IEBAIEpJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2Rl
UmVmKEMKIAogSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKCkKIHsKLSAg
ICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChpc09wdGltaXppbmdKSVQoaml0
VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCisgICAgaWYgKChPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNERkdPckZUTChqaXRUeXBlKCkpICYmIE9wdGlv
bnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKSkKICAgICAgICAgJiYgbV9yZWYuZXhlY3V0YWJsZU1l
bW9yeSgpKQogICAgICAgICBkYXRhTG9nKCJEZXN0cm95aW5nIEpJVCBjb2RlIGF0ICIsIHBvaW50
ZXJEdW1wKG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSksICJcbiIpOwogfQpAQCAtMjM3LDYgKzIz
OSwxMSBAQCBOYXRpdmVET01KSVRDb2RlOjpOYXRpdmVET01KSVRDb2RlKENvZGVSCiAjaWYgRU5B
QkxFKEpJVCkKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRF
eGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpCiB7Cisg
ICAgLy8gRm9yIEJhc2VsaW5lIEpJVCwgdGhpcyBpcyB0cml2aWFsbHkgdHJ1ZS4KKyAgICAvLyBG
b3IgTE9MIEpJVCwgZXZlcnl0aGluZyBpcyBhbHJlYWR5IHNwaWxsZWQgdG8gdGhlIHN0YWNrIGF0
IGVhY2ggb3Bjb2RlLCBzbyB3aGVuIHdlCisgICAgLy8gZ28gdG8gdGhlIG9wX2NhdGNoLCB0aGUg
bGl2ZSBzdGF0ZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRoZSBzdGFj
ay4KKyAgICAvLyBBbHNvLCBvcF9jYXRjaCBoYXMgbm8gaW5jb21pbmcgcmVnaXN0ZXIvdHlwZSBw
cm9vZiBzdGF0ZSwgc28gaXQncyB0cml2aWFsIHRvIGNhdGNoCisgICAgLy8gYW4gZXhjZXB0aW9u
IGluIExPTCBqdXN0IGJ5IGp1bXBpbmcgdG8gb3BfY2F0Y2guCiAgICAgcmV0dXJuIHsgfTsKIH0K
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3QgewogICAg
IEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVuaywKICAgICBCYXNlbGluZUpJVCwK
KyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJVAogfTsKQEAgLTY3LDM2ICs2OCwy
MyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogdHlwZU5hbWUoSklUVHlwZSk7
CiAKLSAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKSVRUeXBlOjpCYXNlbGluZUpJVDsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIEpJVFR5
cGUgdG9wVGllckpJVCgpCiAgICAgewogICAgICAgICByZXR1cm4gSklUVHlwZTo6RlRMSklUOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJVChKSVRUeXBlIGppdFR5
cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAgICAgICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpERkdKSVQ7Ci0g
ICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6
OkZUTEpJVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6Tm9uZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKICAgICBzdGF0aWMgYm9vbCBpc0V4ZWN1dGFibGVTY3JpcHQoSklUVHlw
ZSBqaXRUeXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CiAgICAgICAgIGNh
c2UgSklUVHlwZTo6Tm9uZToKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0OgorCisgICAgICAgIGNh
c2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNl
bGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNhc2UgSklU
VHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA3LDcgKzk1LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgogICAgICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE2LDYgKzEw
OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJ
VDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjQsNiArMTE3LDI0IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGNhbGxTaXRlQml0c0Fy
ZUJ5dGNvZGVJbmRleChKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGpp
dFR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgICAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJ
VDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJ
VDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgorICAgICAgICBjYXNlIEpJVFR5cGU6
Okhvc3RDYWxsVGh1bms6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHN0YXRpYyBib29s
IGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklUVHlwZSBleHBlY3RlZEhpZ2hl
cikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhlY3V0YWJsZVNjcmlwdChleHBl
Y3RlZExvd2VyKSk7CkBAIC0xNDUsOSArMTU2LDE5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBpc0xvd2VyT3JTYW1lVGllcihleHBlY3RlZExvd2VyLCBleHBlY3RlZEhpZ2hlcik7
CiAgICAgfQorCisgICAgc3RhdGljIGJvb2wgdXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKEpJVFR5
cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6OkxP
TEpJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6
OkZUTEpJVDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaXNPcHRpbWl6aW5nSklUKEpJ
VFR5cGUgaml0VHlwZSkKICAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6
OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCB8fCBqaXRUeXBlID09IEpJVFR5
cGU6OkxPTEpJVDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RGR09yRlRMKEpJVFR5cGUg
aml0VHlwZSkKKyAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJ
VCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYQogICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRoZSBt
YWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKICAgICAgICAgLy8gYW5kIGNhbiBj
YXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+dGFy
Z2V0CiAgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0gICAgICAgIGlmICghSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCisg
ICAgICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5q
aXRUeXBlKCkpKQogICAgICAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+dGFyZ2V0KS5wdHIoKTsK
ICNpZiBFTkFCTEUoSklUKQogICAgICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5uYXRpdmVD
b2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBz
byB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0
aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1Nyw2ICsxNTgsNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZh
c3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTE2
NywyNSArMTY5LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6Ogog
ICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJl
ZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50
cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2Fz
ZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMo
VmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAo
aXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQiKTsKQEAgLTIwNywyNyArMTkwLDM2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJ
TkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChT
bG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9z
bG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1f
Ynl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFz
dCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0
KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0
OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0IHsgfSk7
CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3Qg
SnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dD
YXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsg
Ly8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisK
KyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBm
b3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2Fz
ZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFk
ZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC00MDYsMTEgKzM5OCw2IEBA
IEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3Jl
VHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgICAgICB9OwogCi0gICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkp
OworICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNERkdPckZU
TChjb2RlQmxvY2stPmppdFR5cGUoKSk7CiAKICAgICAgICAgaWYgKG1fZ2VuZXJhdGVGYXN0UGF0
aE9uUmVwYXRjaCkgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4
ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAj
aW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgi
CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTEsNiArNTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzogSWYgd2UgY2hhbmdlIHJlZ2Fs
bG9jIHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUgTiByZWdpc3RlcnMgcGVyIGxvY2FsLCB3ZSBjYW4g
bWFrZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIHR3byByZWdzLgorICAgICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNyYykgPT0gSW52YWxpZEdQUlJlZykg
eworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMTQsNTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJy
ZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJl
Z1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcg
YWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJl
ZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAg
ICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOwor
ICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRS
ZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
ICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0Zp
bmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTcwLDUwIEBAIHZvaWQgSklUOjpl
bWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNl
R1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52
ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0
b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlz
LCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBo
YXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAg
IGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNl
R1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5j
ZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3
ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9t
aGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJh
bmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAg
ICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVj
dG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1B
UEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1l
bnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3Rv
ckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsNDAgKzIyMyw5MyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8g
PSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNl
VmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAg
Ly8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRo
aXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBj
ZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0
X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZh
bHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBz
Y3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VP
ZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVU
ZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7Cisg
ICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAg
eyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJv
dG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdw
cigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFj
ZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlz
LCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7
CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAg
ICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9U
ZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIo
KSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVl
R1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJv
dG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAor
ICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAg
IHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4p
OworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
TG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5
KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNp
bmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2Ug
aXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwg
bXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3lt
Ym9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBw
cm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAg
ICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAg
ICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0
YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9m
c1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlw
ZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMjQsMjkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzU0LDcyIEBAIHZvaWQgSklUOjpl
bWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxs
LmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVt
cCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVz
dWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVV
bmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI4LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUsMTIgKzQ2MiwzNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisjaWYgQ1BVKEFSTTY0KQorICAg
ICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB0ZXN0NjQoWmVybywgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFpl
cm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTI2OCwxMSArNDk4LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJ
bnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVt
YmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCBy
ZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVz
dDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAt
MjgyLDIxICs1MjgsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0
cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFs
LCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChp
bnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0lu
dDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAK
LSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJl
Z1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2sp
LCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMTMsMTggKzU5NCw0NyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNv
ZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90
Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAg
ICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzY0Myw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19v
YmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNP
YmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFs
dWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3Qp
KQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJl
OChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
dmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVz
cyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihP
YmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTM1NSw3ICs3MDgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29k
ZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVl
R1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MjcsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJ
bW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2Jq
ZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3Jj
KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykg
JiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwo
dmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1By
aW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3Qo
cmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9
IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NzAsMjAzIEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3lt
Ym9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2
YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
eW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVH
UFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAg
ICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0
aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlz
LCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5j
dGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5j
dGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVu
Y3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFu
KHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAg
ICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3Vs
ZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0
IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAg
ICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFs
dWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8v
IGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBm
YWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFn
YWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQg
ZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFs
dWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxs
IGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3
aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5
KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3
aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRp
b24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1
ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAg
ICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9
IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRj
aDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZw
cigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2
YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNo
MkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
R1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBH
UFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNv
bnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0
ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNv
bmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBG
UFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0
Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3By
KCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVn
IHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDQwLDQ2ICs5NzUsMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3Ry
dWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3Jj
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBz
Y3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
c2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0
aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0
Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24u
bGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
KyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9
Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1w
IG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklU
OjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51
bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
T3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3Qs
IGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBv
biB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFs
LCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBz
Y3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRo
ZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRK
dW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAg
ICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAg
ICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRl
ZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDg4LDEwICsxMTA2LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChj
b24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMzQs
MjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikp
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3Ro
aW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNjUsMzE0IEBAIHZvaWQgSklU
OjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50
ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXND
ZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihF
cXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsK
KyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBl
ZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0wo
KSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwg
T3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1
YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDog
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1
ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhz
KSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJo
c0dQUikpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAg
SW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
IGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBD
b3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2Ft
ZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAg
IGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENv
bXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwg
cHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsK
KworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBE
b3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0
aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQ
Uik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwor
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRh
cmdldCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwg
cmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1Qx
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIHhvcjMyKFRy
dXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6
ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
amVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IFdlIGNhbiBtYWtlIHRoaXMgYSBzaW5nbGUgYnJh
bmNoIGlmIHRoZSByZXN0b3JlIGRvZXNuJ3QgY2xvYmJlciByZXR1cm5WYWx1ZUdQUi4KKyAgICAg
ICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhz
R1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
ICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4
OSw3NCArMTQ4OCwxNDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3Ry
dQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBO
b3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRP
cmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92
ZW5UeXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFs
dWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIp
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BS
KSk7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9
IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhz
RlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8q
IEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToK
LSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3Rv
IHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0
KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBD
ZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERv
dWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9m
IHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElm
SW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFs
dWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVy
ZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBu
dW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0g
ICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92
ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJl
Z1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNo
VGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAv
LyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBh
bmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2Ug
Y291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50
MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGNvbXBh
cmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVn
VDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAs
IHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElm
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNs
b3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwg
fHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRv
bmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhp
cyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUp
LCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFp
dmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAg
ICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVu
IGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhp
Z2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRo
ZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmlu
ZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAs
IHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2
NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBs
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVn
VDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCBy
ZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVh
c3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAg
IGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQor
ICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAg
IC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAg
bW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIg
aXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5l
LCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEp
KTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3Ro
IGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEg
ZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5k
IHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxl
ZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVt
cCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAg
IGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBj
b21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJl
NjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE2NDUsMTM1IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBi
eXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BD
b21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJl
ID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBw
cm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxv
dCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhy
aHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQo
bGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhz
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21w
YXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBo
aWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElm
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290byBzbG93UGF0
aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwotICAgIGlmIChs
ZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAg
IGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50
cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFu
Y2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2Ug
dXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRo
YXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxs
IG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYg
aXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhp
Z2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8
PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsK
LSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7
Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Ci0g
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAg
YWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAg
ICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5n
cyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTog
d2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmln
SW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmlu
Z3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMs
IHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAg
ICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmlj
dEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAg
ICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAg
ICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMg
Q2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsK
KyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3Rl
YWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJh
bmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYg
aXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhp
Z2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1Qx
LCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGln
aEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFk
ZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVn
VDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVF
cXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChh
cmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdz
IGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8g
RklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBp
cyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFy
ZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisg
ICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Cisg
ICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFs
LmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAg
Ly8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBp
cyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUs
IGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFu
Y2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkp
OwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdU
MSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIg
aXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5l
LCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1
bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
NDgsODkgKzE3ODYsMjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNy
YywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29k
ZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJl
ZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJ
bnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsK
LSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1
dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOwor
I2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19z
dHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJl
ZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1
dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3
aXRoIHRoaXMuCisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdl
IGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAg
ICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjA2NSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3Vy
cmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29w
ZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5t
X2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9
IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5k
IHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIg
PSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
aW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjA5
NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+
ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7Cisg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTkyMiw5ICsyMTIxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxl
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
KSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJ
bmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwg
cmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5n
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIxNDUs
MTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJp
bmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1w
VGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIs
IHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0
clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJp
bmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JD
YWxsKCk7IC8vIE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVCbG9jaygp
LT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2Vy
UmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdI
b29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1
bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBK
dW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0Vx
ID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOworICAgIGF1dG8gY29tcGFyZU9w
ID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChj
b21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBp
bnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9w
LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAKLSAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9w
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFO
dWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUu
bGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3Vy
cmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0
YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAg
Ly8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNv
bnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQg
dW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNy
ZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1W
YXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAg
ZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChz
aXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQog
CiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjI5Niwy
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1Qw
KTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2Nv
cGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29w
ZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTA0NSwxMyArMjMyMCw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0Rz
dCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0Rz
dDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BS
LCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0
ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlm
IChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHBy
b3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5j
ZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAg
ICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIs
IHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAg
ICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRo
aXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShy
ZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBy
ZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFs
dWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUo
cmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJl
SUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyNDAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0
ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRh
dGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAg
ICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI0MTEsMzEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQg
Y2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBy
ZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1w
NDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0
aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
Z3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcg
PSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEt
PmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3By
VGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0ciha
ZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkp
OwpAQCAtMTA4Niw2NCArMjQ1MywzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5s
aW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0K
LQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVx
PigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIo
VHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BS
LCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7
Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90
YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgh
IShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRH
UFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3Ig
TE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBo
ZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjIs
OCArMjQ5OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAK
IHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNh
biBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUlu
ZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFyIHJl
Z2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAgIHVp
bnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlv
bik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlS
ZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJs
eVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjUyNiwxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3Ig
dGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2
ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXpl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI1NDMsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAg
IG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6
IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28u
CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAg
ICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjU2OSw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVy
U2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI1NzksMTggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUu
bV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVn
ZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsK
KyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjYwMCw0MiBAQCB2b2lkIEpJVDo6
ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBz
Y29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVz
ZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIp
OwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2Nr
LT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5j
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9w
Y29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI2NjQsNDYgQEAgdm9pZCBK
SVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2Nv
cGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOwor
ICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVzZXQoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAg
fQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19n
ZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5j
X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9u
KTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fz
eW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNG
dW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjczNCwxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2Rl
Lm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAs
IHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQ
UiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0
YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdH
UFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5t
X2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJy
YXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MzYwLDE0ICsyNzU1LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQ
UiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMs
IHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQor
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRl
eCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFu
ZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJy
YXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7
CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBh
cmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyNzg4LDM2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51
bWVyYXRvciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2Ug
fTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgZW51
bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMjgzNyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91
c2VMT0wgPSBmYWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZv
LT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7
CkBAIC0xNDM2LDYgKzI4NjYsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8v
IE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMjg5MywxNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBj
aG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAg
IFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1v
ZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlN
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwogICAgIAogICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDAp
OwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZUp1
bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTGFiZWwgZG9uZSA9
IGxhYmVsKCk7CkBAIC0xNDc4LDEzICsyOTEwLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGMKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAg
ICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5m
byhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUlu
ZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9maWxlLCBkb25lLCBu
ZXh0SG90UGF0aCkpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICsyOTQzLDgxIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7
ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsg
KnRoaXMsIGluZGV4IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywg
YmFzZSB9OworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAg
ICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0g
ICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGlu
ZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5l
QWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkp
LCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAg
IG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BS
LCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRv
cidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAg
ICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4
R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihp
bmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwg
c2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVB
Y2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3Ry
dWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIp
OworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBp
bmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2Us
IHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5l
QWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVy
dHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGlu
ZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJl
Z1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMDI3LDUxIEBAIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9y
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzog
S25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JU
ZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0
aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1l
cmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+
Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0g
cmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1w
IGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9m
ZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91
bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEp
OwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIs
IHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE1NzQsMjEgKzMwODEsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBp
bkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAg
R1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAg
ICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihC
ZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAg
ICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJv
cGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVz
RWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQp
LCByZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5n
IHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMxMzUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0
aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlcjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpA
QCAtMTY1OCw2ICszMTk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0
IElucwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRh
dGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAg
JiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlz
IHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BM
b2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMyMTQsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fz
c2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxs
IGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNzAy
LDExICszMjQ3LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50
Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdU
MCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFs
dWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJ
bnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzMyNjgs
NDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVt
UGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVy
b0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFt
c1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1
bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1Q
YXJhbXNUb1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNl
dEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1Qw
KTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAg
emVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBh
cmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdU
MCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAj
ZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5r
KHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCks
IHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1Qx
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVn
VDEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9h
cmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0
OSArMzMxNyw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVn
VDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkp
LCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91
dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3Vs
dFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIp
OworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNV
bmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAj
ZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRj
aEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFs
dWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsK
LSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2
bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3Mp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODcxLDcgKzE4NzEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VSVChvcHRpbWl6ZWRD
b2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+
aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgaWYg
KHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBv
cHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIENPREVCTE9DS19M
T0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIsIGJ5dGVj
b2RlSW5kZXgpKTsKQEAgLTM0MTksNiArMzQxOSw0MSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2Rl
QmxvY2sqIGxvbENvZGVCbG9jaykpCit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUg
dGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4n
dAorICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVm
ZXJHQyhsb2xDb2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBkYXRhTG9nTG4oInJlb3B0IG5v
dzogIiwgKmxvbENvZGVCbG9jayk7CisgICAgbG9sQ29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVBy
b2ZpbGVQcmVkaWN0aW9ucygpOworICAgIAorICAgIC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJv
ZmlsZXMgaGVyZSwgc2luY2Ugd2UncmUgamV0dGlzb25pbmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0
ZSB3LyB0aGluZ3Mgd2UgY2FyZSBhYm91dC4KKworICAgIHNhbml0aXplU3RhY2tGb3JWTShsb2xD
b2RlQmxvY2stPnZtKCkpOworCisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCAqbG9sQ29kZUJsb2NrLCAiOiBFbnRlcmVkIHJlb3B0aW1pemUgZnJvbSBMT0wiKTsKKworICAg
IENvZGVCbG9jayogbGxpbnRDb2RlQmxvY2sgPSBsb2xDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7
CisgICAgLy8gV2UgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBibG9jay4K
KyAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUobGxpbnRDb2RlQmxvY2stPmppdFR5
cGUoKSkpOworCisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGxsaW50Q29kZUJsb2NrLT5y
ZXBsYWNlbWVudCgpOworICAgIGlmICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxp
bnRDb2RlQmxvY2spIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCAqbGxpbnRDb2RlQmxvY2ssICI6IE5vdCByZW9wdGltaXppbmcgTE9MIGJlY2F1c2Ugd2UndmUg
YWxyZWFkeSBiZWVuIGpldHRpc29uZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBPdGhlcndpc2UsIHRoZSByZXBsYWNlbWVudCBtdXN0IGJlIG9wdGltaXplZCBjb2RlLiBV
c2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eQorICAgIC8vIHRvIGNoZWNrIG91ciBsb2dpYy4KKyAg
ICBBU1NFUlQobGxpbnRDb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOworICAg
IEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQobG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KTsKKworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBzdHVjayBpbiBhIGxvb3AgbG9naWMKKyAg
ICBsb2xDb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwg
Q291bnRSZW9wdGltaXphdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVf
V0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw2ICszMTgsOCBAQCBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblZhbHVlCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csIHZvaWQsIChWTSopKTsKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQs
IChWTSopKTsKIAorSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9M
UmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDgg
KzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwpAQCAtMjgxLDggKzI3Nyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNv
bnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CkBAIC01NTgsNyArNTUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAg
ICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVk
dWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzksOCArNjMwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3
NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpA
QCAtNzc4LDggKzc2Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4
ICs4MDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMTAwLDggKzEw
ODEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyNTcs
OCArMTIzNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4K
ICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQog
CkBAIC01Miw1MSArNTQsMTE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFj
ZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQ
UiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5J
ZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRp
ZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBw
cm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VM
T0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxD
aGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdU
eXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAg
ICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BS
KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50
MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5
KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkK
KyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVT
eW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
cmVzdWx0UmVncyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQog
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAg
ZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNT
dHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5n
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZh
bEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBy
ZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTA1LDQxICsxNzMsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJv
cGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRH
UFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
IHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0
UmVncyk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NF
UlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsK
ICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTU3LDYgKzI1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJ
bmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5
YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5k
Q29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25z
dGFudCkKQEAgLTMxOSw4ICs0MjEsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQ
dXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2
YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
cHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0
NCw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1
cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJl
Y3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJl
Y3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsm
XShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
ICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtMzU1LDEzICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAg
IGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAg
ICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsK
ICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
PigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxs
Rm9yQ2FsbCgpOyAvLyBPT1BTOiBEbyBiZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOwogCkBAIC0zOTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQ
YXRoSm1wLCBkb25lLCBkb25lKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRQcml2YXRlTmFtZT4oKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2
YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwot
ICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNz
b3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJS
ZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25z
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBy
ZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQ
UiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
KyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBh
dHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0
dGVyR1BSID0gZ2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVy
LmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQz
Ml90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUu
bV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29k
ZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBi
eXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3Bl
cnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5t
X2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBh
Y2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1
dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOCArNjMzLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCBiYXNlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVs
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmll
ciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVn
aXN0ZXJzLgpAQCAtNDkyLDI1ICs2ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5
SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFs
dWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIo
KTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTUyMCwxOSArNzE3LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
cHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJh
c2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsK
KyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkp
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVy
dHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8v
IFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5j
ZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBA
IC01NDEsMjIxICs3ODksMzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NU
eXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsK
KyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAg
IHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
fQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9
CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywg
QWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5
cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFz
ZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVl
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
ICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEu
bV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQ
UlJlZyBpbmRleGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBl
R1BSLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmls
ZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSwgdGhpc1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0
aFRoaXMuYXBwZW5kKGdlbik7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4o
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRo
aXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0
aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQ
UiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlz
VlJlZyk7CisgICAgfQogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNX
aXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlz
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwog
ICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlz
W21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhp
c09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0
Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9u
ZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4g
bG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29k
ZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQg
dGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0g
cmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFs
dWUsIHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNt
YU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRp
cmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAg
ICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVm
ZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZS
ZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
dmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qx
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2lu
QnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5
SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3Vs
dEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1
cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNz
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsK
LSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5h
ZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BS
LCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1l
dGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisK
ICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAg
ICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25z
dGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCkpLCByZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC04NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNj
b3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJl
KGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgp
OworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
ICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUo
c2NvcGVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BS
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAg
LTg5NCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogCkBAIC05MDksMjkgKzEzNDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC05NDAsMTUgKzEzNzYsMjAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQor
dm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0
cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIo
c3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3Ry
dWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9t
UG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAzLDYg
QEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIo
cmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUxICsx
NDEzLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwog
ICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+
KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFs
dWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFz
ZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBy
ZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhp
cywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
ICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAg
b2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAg
ICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVt
cCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9h
ZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90
LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAg
ICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
b2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZz
ZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAg
ICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAg
ICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNj
cmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1Qx
OworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BS
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtMTAzNiwxMCArMTUwNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1Qw
KTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lk
IEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9y
ZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxl
SW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNo
cG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQ
dHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
IHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMjksMjEgKzE1Nzks
NDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAg
dWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1l
dGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2
YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1
ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQor
CiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wg
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zm
c2V0VmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRH
UFI7CisgICAgICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29w
ZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICAgICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAg
c2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIg
PSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0
dGVyZmx5VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOwor
ICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAor
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2Nv
cGVHUFIsIG9mZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJk
YTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVH
UFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAg
ICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5k
U2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0
b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgYnV0dGVyZmx5R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNl
dEdQUik7CisgICAgICAgICAgICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3Jl
UHRyKHZhbHVlR1BSLCBCYXNlSW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtMTE1NCwyOCArMTYzMiw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zCiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgICAgIGlmICgh
aXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUg
d2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAgICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFs
dWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICBsb2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBsb2FkUHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIs
IGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Nl
bGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0g
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUs
IG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
cmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBB
ZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAg
IGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkw
LDEyICsxNjk3LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
ICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8g
YmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJl
Z2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24n
dCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRj
aEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzR2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0
byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCiAKICAg
ICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1LDMy
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hW
YWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFs
dWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRD
b2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdv
IGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVz
b2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwog
ICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CkBAIC0xMjQyLDEwICsxNzY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAg
aWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTI2MSw2MSArMTc4NCwxNzggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVu
dHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRz
R1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9y
YWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVn
VDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxv
YWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0
KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdU
MSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
dmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgq
dGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1
ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBh
cmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisg
ICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2Vs
bCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0
ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQog
eworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2Ug
bWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291
bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVl
ZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVn
YWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQu
CisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBj
YWxsICsgc2lsZW50IGZpbGwKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxS
ZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmls
dGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlm
ICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAg
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gb3duZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVy
YW5kKG93bmVyKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJG
b3JPcGVyYW5kKG93bmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
d25lciwgcmVnVDApOworICAgIH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZSkgeworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIp
ICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChvd25lckdQUik7CisgICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBz
Y3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJl
Zm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50
RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2Vs
bC5pc1NldCgpKQogICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxs
LmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtl
IGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQg
dGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBp
bnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8g
c2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1
bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBz
byB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisK
ICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHZhbHVlVmFsdWU7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVn
VDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAK
LSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2Vs
bC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEz
MjcsMTEgKzE5NjcsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhp
cywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAg
ICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46
Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTM0MSwxMCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGlu
ZGV4KSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1w
IHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09Q
UzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2Vs
bDsKKworICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAg
IHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxh
dGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtMTQ0Nyw4ICsyMTE1LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNo
KHZtKCksIG93bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
OworICAgIHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDA7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVy
QnJhbmNoKHZtKCksIG93bmVyLCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxT
aWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25l
cik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxl
bnRTcGlsbFJlY29yZCk7CisKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhp
cyk7CiB9CiAKQEAgLTE0NjYsNiArMjE1MSw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlm
aWVyQ2hlY2soUmVnaXMKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIApAQCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtp
bmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0g
ZmFsc2U7CisKICAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpv
cGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6
Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERG
R0NvZGVCbG9jaykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHByb2ZpbGVkREZHQ29kZUJsb2NrLCAh
cHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8
IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7
CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemlu
ZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7CiAg
ICAgCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0Nv
ZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEFTU0VSVCghcHJvZmls
ZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAg
CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0KTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDIyIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVk
ZSAiVk1JbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIEpJVFdvcmtsaXN0OjpQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPEpJVFdvcmtsaXN0OjpQbGFuPiB7CiBwdWJsaWM6Ci0gICAgUGxhbihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgICAg
ICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZt
KCksIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBQbGFuKENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDogbV9sbGludENvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgICAgICwgbV9jb2RlQmxvY2tUb0NvbXBpbGUoY29tcGlsZVR5cGUg
PT0gSklUOjpDb21waWxlVHlwZTo6TE9MID8gbV9sbGludENvZGVCbG9jay0+bmV3UmVwbGFjZW1l
bnQoKSA6IG1fbGxpbnRDb2RlQmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2NrVG9D
b21waWxlLT52bSgpLCBtX2NvZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVw
YXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBpbiBj
b25jdXJyZW50IGdjCisgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50
Q29kZUJsb2NrKSB7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFw
LnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBmaW5hbGl6ZSgpCiAgICAgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBtX2ppdC5saW5rKCk7CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVF
eGl0KFsmXSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGlu
dENvZGVCbG9jaykKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5o
ZWFwLnVucHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAgICAg
ICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0g
ICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21w
aWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKG1fbGxpbnRDb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9u
IGZhaWxlZCIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxv
Y2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlk
RmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2st
PmRvbnRKSVRBbnl0aW1lU29vbigpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+bV9k
aWRGYWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
bV9jb2RlQmxvY2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAg
ICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENv
ZGUobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+
aml0U29vbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkg
eyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9j
ay0+dm0oKTsgfQorICAgIENvZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9sbGlu
dENvZGVCbG9jazsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2stPnZt
KCk7IH0KICAgICAKICAgICBib29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTgw
LDE1ICs5MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxp
bmc7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBz
dGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVU
eXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
CiAgICAgewotICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKKyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwog
ICAgICAgICBwbGFuLmZpbmFsaXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsKKyAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAgICBM
b2NrIG1fbG9jazsKICAgICBib29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07CkBA
IC0yMzMsOSArMjQ3LDExIEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxv
Y2sKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KKworICAgIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRpb25z
Ojpmb3JjZUxPTCgpID8gSklUOjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlwZTo6
QmFzZWxpbmU7CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsK
LSAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUs
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IApAQCAtMjQ5LDcgKzI2NSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2Rl
QmxvY2sKICAgICAgICAgCiAgICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsKICAg
ICAgICAgICAgIG1fcGxhbm5lZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQ
bGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KSk7CisgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5l
dyBQbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
KTsKICAgICAgICAgICAgIG1fcGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9xdWV1
ZS5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tl
cik7CkBAIC0yNzMsMTQgKzI4OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIo
Q29kZUJsb2NrCiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29u
Y3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8v
IHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBo
YWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29t
ZWRheS4KLSAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCk7CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6OmNv
bXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZdIHsK
KyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVy
VGh1bmspCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIyLDI0
IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAgICAg
CiAgICAgLy8gTm93IGl0IG1pZ2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBpbGVk
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2Ug
aGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0
aCB0aGUKLSAgICAvLyBiYXNlbGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEo
KTsKLSAgICAKLSAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2
bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KTsKLSAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29k
ZShjb2RlQmxvY2spOworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAgICAg
Q29kZUJsb2NrKiBsb2xDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7Cisg
ICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpC
YXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIGxvbENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxD
b2RlKGxvbENvZGVCbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBp
biBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBj
b21waWxlIHdpdGggdGhlCisgICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29kZUJs
b2NrLT5yZXNldEpJVERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNvbXBp
bGUgaXQuCisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVU
eXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3Rh
bGxDb2RlKGNvZGVCbG9jayk7CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6Zmlu
YWxpemVQbGFucyhQbGFucyYgbXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lkIEpJ
VFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFsaXpl
KCk7CiAgICAgICAgIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAg
ICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxhbm5l
ZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw3ICs1NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lk
IGNvbXBpbGVMYXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29kZUJs
b2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKSk7CiAgICAgCiAgICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3Jr
bGlzdCgpOwogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9y
TnVsbCgpOwpAQCAtNjYsNiArNjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsKICAg
ICBmcmllbmQgY2xhc3MgVGhyZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENvZGVC
bG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgIHZvaWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAgIFBs
YW5zIG1fcXVldWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5o
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0K
IAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAg
VCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBU
JiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJp
dmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVn
aXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lk
IGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxs
VG9Db2RlUHRyLmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJs
eSB8fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KQorICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNl
CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhl
cigpLmxhYmVsQXRPZmZzZXQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
bG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJs
aWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAg
ICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAg
ICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1Q
TElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0
cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRl
Y29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIs
OCArMzYyLDEwIEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KIH0K
IAogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wg
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KSkKK2lubGluZSBDb2RlQmxvY2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMg
dy5yLnQgTE9MLgorCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBN
eSBjYWxsZXJzIGRvbid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdD
IGhlcmUgYXQgYWxsLgogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBAIC0z
NzIsMjkgKzM3NCw0NSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhW
CiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAg
ICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAo
InRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVj
dXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJVFdv
cmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAgYXV0
byBsb2xDb2RlQmxvY2sgPSBbJl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENvZGVC
bG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xD
b2RlQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJs
b2NrLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJl
YWR5IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJl
R2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUOworICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2Nr
KCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4gY29k
ZUJsb2NrOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJs
b2NrLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygiVW5l
eHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1z
dGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5
cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksCiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFt
ZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKQEAgLTQwNSwxOCArNDIzLDIxIEBAIHN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVUVVJO
X1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52
bSgpOwotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykp
CisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVy
aXN0aWNzKHZtLCBjb2RlQmxvY2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAg
ICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJM
T0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOwor
ICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAo
ImluIHByb2xvZ3VlIikpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRD
b2RlQmxvY2spOwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBMTElO
VF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBu
dWxscHRyKTsKKyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0
Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9
PSBBcml0eUNoZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgp
LT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVs
bHB0cik7CisgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgp
LT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVs
bHB0cik7CiB9CiAjZWxzZSAvLyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlw
ZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkK
K3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5k
b250SklUQW55dGltZVNvb24oKTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxw
dHIpOwpAQCAtNDI2LDMxICs0NDcsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRy
eU9TUihDb2RlQgogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVOVVNF
RF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCks
ICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJ
TlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVO
VVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwo
KSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4g
ZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVu
dHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7
Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0Nh
bGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5
T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkp
LT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RF
Q0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAi
ZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAg
ICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkt
PmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJh
bWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRh
YmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9j
b25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhf
REVDTChsb29wX29zcikKQEAgLTQ3OSwxOSArNTAwLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KGxvb3Bfb3NyKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwog
ICAgIH0KICAgICAKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2Rl
QmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29tcGls
ZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQog
ICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENP
REVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29k
ZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsK
IAotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7CisgICAgQVNTRVJUKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQgfHwgY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpM
T0xKSVQpOwogCi0gICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0
Q29kZU1hcCgpOworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVC
bG9jay0+aml0Q29kZU1hcCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsK
ICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2Rl
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisK
KyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAg
ICAgTExJTlRfUkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7
CiAjZWxzZSAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBA
IHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNv
bXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7
CisgICAgT3B0aW9uczo6Zm9yY2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9
IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNl
cHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MjcsNiArNTI3LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAg
ICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoQm9vbCwgdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwg
IklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0YSBm
aWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRpY0Ns
YXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJz
dGFuZCBwcml2YXRlIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAg
dihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25F
cXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3Mg
bGxpbnRfaGFuZGxlX3VjYXVnaHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5z
dCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAg
ICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJw
cmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkgeworICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkxPTEpJVCkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFj
ZS5sbGludFBDKSk7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRC
eXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVw
TExJbnQoQ29kZUJsb2NrKiBjb2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25N
dXN0U3VjY2VlZCk7CisgICAgLy8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdhbnQgdG8gZG8g
d2l0aCB0aGUgbm8gTExJbnQgb3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGlu
ZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJV
dGlscy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAg
SlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJl
dGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShERkdfSklUKQorICAg
IGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBqc051bWJlcigwKTsg
Ly8gT09QUworCiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFz
ZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hh
dmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0
MCw3IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoZm91bmRD
b2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3Vu
ZENvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRM
b2NrKCptX2xvY2spOwogICAgICAgICBpZiAoIWxvY2tlcikKICAgICAgICAgICAgIHJldHVybjsg
Ly8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3
IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxl
IChjYWxsRnJhbWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYg
SklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBj
b2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAg
ICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAg
fQpJbmRleDogVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFRvb2xzL1Nj
cmlwdHMvY29tcGFyZS1yZXN1bHRzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsOCArMTczLDggQEAg
ZGVmIGNvbXB1dGVNdWx0aXBsZUh5cG90aGVzZXNTaWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFr
ZG93bnMoYSwgYik6CiAgICAgbmFtZUxlbmd0aCA9IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0
aCA9IGxlbihhW3VuaXRNYXJrZXJdKQotICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkK
KyAgICBhTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMworICAgIGJMZW5ndGggPSBsZW4o
YVt1bml0TWFya2VyXSkgKyAzCiAgICAgcmF0aW9MZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAg
IHBWYWx1ZUhlYWRlciA9ICJwVmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3Zl
cnkgUmF0ZSkiCkBAIC0yMDMsNyArMjAzLDcgQEAgZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgog
ICAgIHBMZW5ndGggKz0gMgogCiAgICAgc3RyaW5ncyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQo
Inx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVu
Z3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZv
cm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9YVt1bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1h
cmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJM
ZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2Vy
PXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtr
ZXk6XntuYW1lTGVuZ3RofX18e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9
fSB8e2NvbXBhcmU6XntyYXRpb0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0
KGtleT0ic3VidGVzdCIsIGFTY29yZT0iYTogIiArIGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjog
IiArIGJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3Ro
LCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVu
Z3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5
IGluIGEua2V5cygpOgogICAgICAgICBpZiBrZXkgPT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAg
IGNvbnRpbnVlCkluZGV4OiBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNl
bGYudGVzdFJ1bm5lciA9IHsKICAgICBuZXZlcklubGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1
bmN0aW9uLAotICAgIG51bWJlck9mREZHQ29tcGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisg
ICAgbnVtYmVyT2ZERkdDb21waWxlczogKGZ1bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFwOwor
ICAgICAgICByZXR1cm4gKGYpID0+IHsKKyAgICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyhmKTsKKworICAgICAg
ICAgICAgLy8gRW11bGF0ZSBydW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBz
b21lIHRpZXJpbmcgYmVmb3JlIHJldHVybmluZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFtYXAp
CisgICAgICAgICAgICAgICAgbWFwID0gbmV3IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQgY291
bnQgPSBtYXAuZ2V0KGYpIHx8IDA7CisgICAgICAgICAgICBjb3VudCArPSAxOworICAgICAgICAg
ICAgbWFwLnNldChmLCBjb3VudCk7CisgICAgICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkg
fCAwOworICAgICAgICB9OworICAgIH0pKCksCiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZh
aWxOZXh0TmV3Q29kZUJsb2NrCiB9OwogCkBAIC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZn
U2hvdWxkQmUodGhlRnVuY3Rpb24sIF9hLCBfYgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3Rv
dHlwZS5wdXNoOwogICAKICAgdHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1
bmN0aW9ufSkpCisgICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAg
ICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwo
X2EpKTsKICAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYx
LDcgQEAgZnVuY3Rpb24gZGZnSW5jcmVtZW50KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWlsU29t
ZVRlc3RzKQogICAgICAgICByZXR1cm4gYXJndW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0Nv
bXBpbGVkKGFyZ3VtZW50KSkKKyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVu
dC5zdGFydCA6IDA7CiAgICAgCiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417123</attachid>
            <date>2021-01-06 13:29:26 -0800</date>
            <delta_ts>2021-01-06 14:25:41 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>551288</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ3N0YW5mb3JkLWNyeXB0by1zaGEy
NTYnXTsKKwogaWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQog
ICAgIHRlc3RJdGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3RpbwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2
NjMsOCBAQCBwcml2YXRlOgogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1i
ZXIiLCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2
bSwgImlzREZHRW5hYmxlZCIsIGZ1bmN0aW9uSXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBh
ZGRGdW5jdGlvbih2bSwgImRyb3BBbGxMb2NrcyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsK
IAogICAgICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0
Rm9yVGVzdGluZygpKSB7CkBAIC0yNjUzLDYgKzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uQXNEb3VibAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3Vi
bGVOdW1iZXIobnVtKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklz
REZHRW5hYmxlZCwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oT3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwog
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxv
Y2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBP
cHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENv
ZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2Fz
bVNpZ25hdHVyZUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwog
bmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9u
QW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3Ap
CkBAIC0yNjksNyArMjcxLDcgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46
OmR1bQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29k
ZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0
b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBk
dW1wSGVhZGVyKGJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMg
QEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91
dC5wcmludCgiYmIjIiwgYmxvY2suaW5kZXgoKSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRp
Y3Rpb25zQXRIZWFkKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhl
YWQ6IFsiKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlv
bnNBdEhlYWQtPmF0KGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIsICIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rp
b25zLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3Vs
YXRpb24ob3V0LCBwcmVkaWN0aW9ucy5hcmd1bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2Nh
bHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAg
ICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyAp
IHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5h
dChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpOwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRl
Y29kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGljU3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgog
Y2xhc3MgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1w
ZXI8QmxvY2s+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVz
TWFwJiA9IElDU3RhdHVzTWFwKCkpOwotICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayos
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBv
dXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkp
OworICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJl
YW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNN
YXAoKSk7CiAKICAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0
YW50cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHcmFwaC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAg
cHVibGljOgogCiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2
b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+
Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmls
ZSgpKQorICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50
ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCiAgICAgewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxDb2RlQmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAq
dGhpcywgc3BlY3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIE9wZXJhbmQgZGVzdGluYXRpb25Gb3IoY29uc3QgQnl0
ZWNvZGUmIGIKICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0g
b3BfaXRlcmF0b3JfbmV4dCkgewogICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgewog
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dDogewotICAgICAgICAgICAg
aWYgKHR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6REZHSklUKQor
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IHR5cGUgPT0gSklUVHlw
ZTo6RlRMSklUKQogICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoT3BJdGVyYXRv
ck5leHQ6Om5leHRSZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlLm1fdmFsdWU7
IC8vIFdlIHJldXNlIHZhbHVlIGFzIGEgdGVtcCBiZWNhdXNlIGl0cyBlaXRoZXIgbm90IHVzZWQg
aW4gc3Vic2VxdWVudCBieXRlY29kZXMgb3Igd3JpdHRlbiBhcyB0aGUgdGVtcCBvYmplY3QgLgog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVV
c2VEZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcg
KzgwLDYgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8v
IE5vIHVzZXMuCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0g
ICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICBjYXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9w
X2ptcDoKICAgICBjYXNlIG9wX25ld19vYmplY3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3Bl
OgogICAgICAgICByZXR1cm47CiAKKyAgICBVU0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQ
b2ludGVyKQogICAgIFVTRVMoT3BUb1RoaXMsIHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHos
IHRhcmdldFZpcnR1YWxSZWdpc3RlcikKICAgICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwg
c3JjRHN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsK
ICAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkKQorICAgIGlmICgodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8
IHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKQogICAgICAgICBvdXQucHJpbnQoIiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwog
ICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnBy
aW50KCIgKE5ldmVySW5saW5lKSIpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAg
ICAgZ2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRo
aXMsIHRoaXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxD
b2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0
YXR1c01hcCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdy
YXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1
c01hcCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBz
dGF0dXNNYXApCkBAIC0yOTUsNiArMjk1LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIAogICAgICwgbV9vd25lckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywg
b3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAg
ICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2lu
dGVyKQorICAgICwgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMpCiAgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdp
c3RlcnMpCiAgICAgLCBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5t
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNs
cyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCkBAIC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIu
aXNMb2NhbCgpKTsKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXRO
dW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRl
cnMgPSBvdGhlci5udW1QYXJhbWV0ZXJzKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tT
ZXQoKS5hZGQodGhpcyk7CiB9CkBAIC04NTAsNyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJs
b2NrKCkKICAgICAvLyB0byB0aGUgQ29kZUJsb2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlz
IHRpZWQgZGlyZWN0bHkgdG8gdGhlIENvZGVCbG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRv
bWF0aWNhbGx5IGNsZWFyZWQgd2hlbiB0aGUgQ29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlm
IChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6
aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5j
bGVhcldhdGNocG9pbnRzKCk7CiAjZW5kaWYKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJl
bW92ZSh0aGlzKTsKQEAgLTEwMzcsNyArMTAzOSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRW
aXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENv
ZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdl
dHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0
J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFw
LmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMg
dGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAg
ICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21z
OworICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9t
czsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBf
bXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAg
c3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZl
Y3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAg
ICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1
cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7
CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNh
c2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAg
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CiAgICAgICAgIAogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hl
YXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEyMjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJt
aW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMg
Y291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5k
IHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQgZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91
bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xkIGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQg
Y2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAo
SklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6
OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpM
T0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzogU2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRv
IGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJQ3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVz
IGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hl
cygpOworICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAt
MTUyOCw3ICsxNTM2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2Rl
LT5kZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFs
aXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYgKzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRl
Q291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAg
ICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2
b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAg
cmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVz
KCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkp
IHsKICAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5k
ZmdDb21tb24oKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVj
b3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmly
c3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQu
Z2V0KCk7CkBAIC0xODEwLDcgKzE4MTksNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFN0cm9uZ1JlZmVyCiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24g
PSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3Rh
dHVzZXMudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHZpc2l0T1NSRXhpdFRhcmdl
dHMobG9ja2VyLCB2aXNpdG9yKTsKQEAgLTE4MjMsNyArMTgzMiw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW4KICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMTg2Nyw3ICsxODc2LDcgQEAgQ29kZUJsb2NrKiBDb2Rl
QmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIENvZGVC
bG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgeworICAgICAgICBp
ZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBlKSkgewogICAg
ICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3ZlIGhhZCBhIG1l
bW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8vIGhhcyBiZWVu
IHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUo
KSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2RlQmxvY2sgaXMg
c3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJVApAQCAtMTkz
MSw3ICsxOTQwLDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckluZGV4KAog
RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0Nh
bGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKQogewogI2lmIEVOQUJM
RShERkdfSklUKQotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3JpZ2luYWxDYWxs
U2l0ZSkpOwogICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENhbGxTaXRlLmJp
dHMoKSkpOwogICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdp
bmFsQ2FsbFNpdGUpOwpAQCAtMjIzMSw1MSArMjI0MCw1NSBAQCB2b2lkIENvZGVCbG9jazo6amV0
dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFw
KCkpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6
Ci0gICAgLy8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0
YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAxKSBJZiB3ZSdy
ZSBERkcvRlRMLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3Rh
Y2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAogICAgIC8vICAgIHdlIHNob3Vs
ZCBPU1IgZXhpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFm
dGVyIHRoZSByZXR1cm4uCiAgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUg
b3duZXIgZXhlY3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4K
IAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAg
ICAgICAgIGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKLSAgICAK
LSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKSB7Ci0gICAg
ICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0
aW9uKSkKLSAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24s
IGRldGFpbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFu
ZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkg
aGFwcGVuZWQuCi0gICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0
ZSgpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhl
YXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0
YWJsZSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWFzb24gIT0g
UHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpD
b21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxh
dGlvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCisgICAg
ICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWls
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBh
bmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5
IGhhcHBlbmVkLgorICAgICAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZh
bGlkYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxp
ZGF0ZWQuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVu
dCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtl
ZChvd25lckV4ZWN1dGFibGUoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERp
c2Fzc2VtYmx5KCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgaW52YWxpZGF0ZSAiLCAqdGhp
cywgIlxuIik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCiAgICAgLy8gQ291bnQg
dGhlIHJlb3B0aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KICAgICBp
ZiAobW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7CiAgICAgICAgIC8vIEZJWE1FOiBNYXli
ZSB0aGlzIHNob3VsZCBjYWxsIGFsdGVybmF0aXZlKCkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICAgICAgYmFzZWxpbmVBbHRl
cm5hdGl2ZSgpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICAgICAgZGF0
YUxvZygiICAgIERpZCBjb3VudCByZW9wdGltaXphdGlvbiBmb3IgIiwgKnRoaXMsICJcbiIpOwor
I2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmICh0aGlzICE9IHJlcGxhY2VtZW50KCkpIHsKICAg
ICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhlIGVudHJ5cG9pbnQuIFRo
aXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKICAgICAgICAgLy8gYmxvY2tzLgorICAg
ICAgICAvLyBPciwgd2UncmUgYW4gTE9MIENvZGVCbG9jayBhbmQgd2VyZSBhbHJlYWR5IGpldHRp
c29uZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYWx0ZXJuYXRpdmUoKSkK
ICAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogCi0gICAgaWYg
KHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJv
ZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYm
IHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCiAgICAgICAgIHRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgIC8v
IEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwg
Y29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQg
YSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCkBAIC0yMzkwLDcgKzI0MDMsNyBA
QCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxGCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJD
b2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChjYWxs
ZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgPSBmYWxzZTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5r
KCksICIgICAgQ2xlYXJpbmcgU0FCSSBiY2F1c2UgY2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXpl
ZC4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ4MywxMiArMjQ5NiwxNCBAQCB1bnNpZ25lZCBD
b2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMoCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6Omlz
QmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwogICAgIGlmIChPcHRpb25zOjp0ZXN0VGhlRlRMKCkp
IHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICBpZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICBy
ZXR1cm4gMTAwMDAwMDsKICAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwg
PyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogICAgIH0KICAgICBDb2Rl
QmxvY2sqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gKChy
ZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5
cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKyAgICByZXR1
cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRU
eXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiB9CiAKIGlu
dDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdApAQCAt
MjcwOSw3ICsyNzI0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1Bh
dAogdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxh
dGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgSklUVHlwZSB0eXBl
ID0gaml0VHlwZSgpOwotICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7Cisg
ICAgaWYgKHR5cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgdHlwZSAhPSBKSVRUeXBlOjpM
T0xKSVQpIHsKICAgICAgICAgZGF0YUxvZ0xuKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJh
c2VsaW5lIGNvZGUgYnV0IGhhdmUgIiwgdHlwZSk7CiAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihqaXRDb2RlKCkuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1aW50
OF90Pih0eXBlKSk7CiAgICAgfQpAQCAtMjcyNyw3ICsyNzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnNldE9wdGltaXphdGlvblRocmVzaG9sZAogICAgIAogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAg
ICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
cGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlw
ZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6Omlz
REZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJ
bnZvY2F0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVk
OgpAQCAtMjc1Niw3ICsyNzcxLDggQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRo
cmVzaG9sZAogICAgIAogdWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVz
aG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogewotICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgLy9BU1NFUlQoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpOyAvLyBPT1BTOiBXZSBjYWxsIHRoaXMgZnJvbSB0aGUgTE9M
IGNvbXBpbGVyIHRocmVhZCBiZWZvcmUgaW5zdGFsbC4KKwogICAgIC8vIENvbXB1dGUgdGhpcyB0
aGUgbGFtZSB3YXkgc28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRoaXMgaXMgY2FsbGVkIGluZnJlcXVl
bnRseQogICAgIC8vIGVub3VnaCB0aGF0IHRoaXMgbG9vcCB3b24ndCBodXJ0IHVzLgogICAgIHVu
c2lnbmVkIHJlc3VsdCA9IGRlc2lyZWRUaHJlc2hvbGQ7CkBAIC0yODM2LDcgKzI4NTIsNyBAQCBE
Rkc6OkNvZGVPcmlnaW5Qb29sJiBDb2RlQmxvY2s6OmNvZGVPcmlnCiAKIHNpemVfdCBDb2RlQmxv
Y2s6Om51bWJlck9mREZHSWRlbnRpZmllcnMoKSBjb25zdAogewotICAgIGlmICghSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHJldHVybiBtX2ppdENv
ZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVycy5zaXplKCk7CkBAIC0yODQ3LDcgKzI4NjMs
NyBAQCBjb25zdCBJZGVudGlmaWVyJiBDb2RlQmxvY2s6OmlkZW50aWZpZXIoCiAgICAgc2l6ZV90
IHVubGlua2VkSWRlbnRpZmllcnMgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVy
cygpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVu
dGlmaWVycykKICAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4
KTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAg
IEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIHJldHVybiBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRp
ZmllcnNdOwogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpAQCAtMjk0OCw3ICsyOTY0LDgg
QEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIHZvaWQgQ29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkKIHsKLSAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIC8vIE9PUFMKKyAg
ICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAgCiAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsKQEAgLTMwNTAsNiAr
MzA2Nyw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJ
VFR5cGU6OkxPTEpJVDoKICAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9y
KHRoaXMpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTMyMjYsMTQgKzMyNDQsMTQgQEAg
dm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbgogewogICAgIG1fbnVtQnJl
YWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7CiAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMp
OwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAo
SklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25EdWVUb0RlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKIHZvaWQgQ29kZUJsb2Nr
OjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGUgbW9kZSkKIHsKICAgICBt
X3N0ZXBwaW5nTW9kZSA9IG1vZGU7Ci0gICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxl
ZCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAobW9kZSA9
PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkK
ICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5n
KTsKIH0KIApAQCAtMzQyMSw5ICszNDM5LDkgQEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29k
ZUJsb2NrOjpieXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5k
ZXg7CiAgICAgSklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRU
eXBlID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCkKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4
KGppdFR5cGUpKQogICAgICAgICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0
VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKKyAgICBlbHNlIHsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KSk7CiAgICAgICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KTsKQEAgLTM0NjYsNyArMzQ4NCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3AKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25h
bCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAgICAgLy8gY2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0
aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFuZGxlciBzYWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hv
dWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBtX2ppdENvZGUuCi0gICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZH
T3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpLT5oYXNJbnN0YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMoKTsKICNl
bHNlCkBAIC0zNDgwLDcgKzM0OTgsNyBAQCBib29sIENvZGVCbG9jazo6aW5zdGFsbFZNVHJhcEJy
ZWFrcG9pbnRzCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWdu
YWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55
dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNo
b3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBjb21t
b25EYXRhID0gKm1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgY29tbW9uRGF0YS5pbnN0YWxs
Vk1UcmFwQnJlYWtwb2ludHModGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzOCw3ICs0Mzgs
OCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7
CisgICAgICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CiAgICAg
fQogICAgIAogI2lmIEVOQUJMRShKSVQpCkBAIC01MTEsNiArNTEyLDcgQEAgcHVibGljOgogICAg
IFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2Zp
bGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5j
dG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOwpAQCAtNTM5LDcgKzU0MSw3IEBAIHB1YmxpYzoKICAgICAvLyBIYXZpbmcgY29kZSBvcmln
aW5zIGltcGxpZXMgdGhhdCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wg
aGFzQ29kZU9yaWdpbnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpOworICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNERkdPckZUTChq
aXRUeXBlKCkpOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENh
bGxTaXRlSW5kZXggaW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNv
bnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAg
ICAgICAgfSk7CiAgICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9p
ZCBDb2RlQmxvY2s6OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3Jh
cmVEYXRhLmdldCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVE
YXRhLT5tX2NhdGNoUHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsK
KyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhpdEZyb21Bbnl0aGluZzoKICAgICAg
ICAgb3V0LnByaW50KCJGcm9tQW55dGhpbmciKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RXhpdEZyb21MT0w6CisgICAgICAgIG91dC5wcmludCgiRnJvbUxPTCIpOworICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tREZHIik7
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0aW5nSklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4
X3QgewogICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21MT0wsCiAgICAgRXhpdEZy
b21ERkcsCiAgICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2ICszOSw4IEBAIGVudW0gRXhpdGlu
Z0pJVFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5nSklUVHlwZSBleGl0aW5nSklUVHlw
ZUZvcihKSVRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbUxPTDsKICAgICBjYXNlIEpJVFR5
cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9tREZHOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5k
KSA9PSBzaXplb2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2Fs
bGVlID0gZmFsc2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFn
ZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZl
Y3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0
NCwyMyBAQCBwdWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxp
Y2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVf
dCBudW1UbXBzKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNp
emVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkK
ICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1M
b2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykK
ICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsg
bnVtVG1wczsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMg
KyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1
ZXMuZ3JvdyhzaXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJ
bml0aWFsaXphdGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAK
LSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9j
YWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0
IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBu
dW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAg
ICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxz
KG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAg
ewotICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRt
cHMpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51
bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMu
ZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5k
czxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251
bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9j
YWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1Db25zdGFudHMob3Ro
ZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3Ro
ZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcy
LDMzICsxNzYsNTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2Nh
bHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRt
cHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygp
IC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBu
dW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0K
IAorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAg
c2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJP
ZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAg
ICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVy
biBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAg
ICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3Qg
Y29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlk
eCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25z
dFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4
KGlkeCldOyB9CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KKworICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjpl
bmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyBy
ZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29u
c3RSZWZUeXBlIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAg
IAogICAgIFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0
YW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0K
KyAgICBDb25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRL
aW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsy
NzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6
ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2Fs
cyA9IG51bWJlck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVy
T2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkw
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRT
aXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9m
QXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9m
Q29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhuZXdTaXplKTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpW
ZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUg
QEAgcHVibGljOgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIo
KSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGNvbnN0YW50SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCAr
MzQ4LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVy
KCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50
KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFu
ZC50b0xvY2FsKCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJl
ck9mQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJh
bmQudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3Bl
cmFuZChPcGVyYW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0g
ICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1l
bnRzKCkpCisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFy
Z3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGlu
ZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAo
aW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAg
ICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBu
dW1iZXJPZkNvbnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZv
ckNvbnN0YW50KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAo
aW5kZXggPT0gY2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2
YWx1ZSkKQEAgLTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251
bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2Fs
cyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1f
bnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9j
YWxzIGFyZSBsb2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFu
ZCB0aGUgcmVzdCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVk
IG1fbnVtQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9Owor
ICAgIHVuc2lnbmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAg
aW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJp
bnQodmlydHVhbFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBP
cGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2
b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVu
dHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFu
ZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1w
KHRtcEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2Fs
bGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChj
YWxsZWUoKSwgY29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVy
YW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7
CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFy
Z3VtZW50SW5kZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0K
KyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJjYWxsZWUiLCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQs
NyBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgIG1f
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUgPSBqaXQt
PmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlKGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLT5jYWxsU2l0ZUlu
ZGV4KTsKICAgICAgICAgbV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uID0gbV9s
aXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5udW1iZXJP
ZlNldFJlZ2lzdGVycygpID4gMDsKICAgICAgICAgaWYgKG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3Rl
cnNJZkV4Y2VwdGlvbikKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0LT5jb2RlQmxvY2soKS0+aml0VHlw
ZSgpKSk7CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1f
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9j
YXRvci0+dXNlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5l
eGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC03MTAsNyArNzEwLDcgQEAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAvLyBXZSBzZXQgdGhl
c2UgdG8gaW5kaWNhdGUgdG8gdGhlIHN0dWIgdG8gcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBDb2Rl
QmxvY2sncwogICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciB0YWJsZSB3aGVuIGl0IGlzIGRl
YWxsb2NhdGVkLgogICAgICAgICBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzID0g
Y29kZUJsb2NrOwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVC
bG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOworICAgICAgICBBU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJz
LT5qaXRUeXBlKCkpKTsKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
ID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
aAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5l
IGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAh
KHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVl
ICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNO
b3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2
YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJu
cyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRo
YXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lz
dGVyLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFz
cyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAg
ZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2Zm
ZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVy
ICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3Qg
eyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFp
c0NvbnN0YW50KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0
dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRv
TG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwo
bV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJh
bmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJl
dHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0
YXRpYyBpbnQgYXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVu
dCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNv
bnN0YW50VG9PcGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdp
c3RlcjsKIH07CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
Ojphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4
KQoreworICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFu
dFRvT3BlcmFuZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2so
Qnl0ZWNvZGVJbmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51
bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAg
ICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzLCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25D
b3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBA
QCB2b2lkIE9TUkVudHJ5RGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FO
CiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBB
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7Cisg
ICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAg
IEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpMT0xKSVQpOwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAg
IEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk0LDYgKzM5NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0Nh
bGwKICAgICBpZiAoZXhpdElubGluZUNhbGxGcmFtZSkKICAgICAgICAgaml0LmFkZFB0cihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CiAKKyAgICAvLyBPT1BTOiBNYWtlIHRoaXMgZG8gdGhlIHJpZ2h0IHRoaW5nIGJhc2VkIG9uIExP
TCBvciBub3QuCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9y
RXhpdCA9PSBjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyAr
MTIxLDYgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAg
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51
bVZhcmlhYmxlczsKICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVu
c2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFi
bGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBz
ID0gY29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAg
ICB9IGVsc2UgeworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKTsgLy8gT09QUzogYnl0ZWNvZGVWZXJzaW9uCiAgICAgICAg
IG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKICAg
ICAgICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgcHVibGljOgogCiAgICAg
ICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5jbGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVy
YW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOwor
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFi
aWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDAsIDApOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykg
ewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkp
ID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNW
YWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI2ICs1MiwxNyBAQCB2b2lkIENhbGxG
cmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGCiBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7
Ci0gICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rOgotICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKLSAgICBjYXNlIEpJVFR5
cGU6Okhvc3RDYWxsVGh1bms6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRl
eChjb2RlQmxvY2soKS0+aml0VHlwZSgpKTsKIH0KIAogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRl
Qml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygp
KTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVFR5
cGU6OkludGVycHJldGVyVGh1bms6CisgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAg
ICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2Ug
SklUVHlwZTo6REZHSklUOgogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTc5LDggKzcwLDYgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0Fy
ZUNvZGVPcmlnaQogICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTYsMTAgKzQ1NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBIYW5kbGVySW5mbyogZmlu
ZEV4CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwog
ICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleDsKLSAgICBpZiAoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgZXhjZXB0aW9uSGFu
ZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwotICAgIGVsc2UK
KyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jay0+
aml0VHlwZSgpKSkKICAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5i
eXRlY29kZUluZGV4KCkub2Zmc2V0KCk7CisgICAgZWxzZQorICAgICAgICBleGNlcHRpb25IYW5k
bGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiAKICAgICByZXR1
cm4gY29kZUJsb2NrLT5oYW5kbGVyRm9ySW5kZXgoZXhjZXB0aW9uSGFuZGxlckluZGV4LCByZXF1
aXJlZEhhbmRsZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMiArMzAsMTcgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUg
IkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJCeXRl
Y29kZVVzZURlZi5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2lu
Y2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50
VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNp
bmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmln
aW5NYXAuaCIKQEAgLTQ5LDYgKzU0LDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5h
bCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAs
NiArNjcsODg4IEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxG
VExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lk
IEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxh
dGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVn
KSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRl
Y29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
ZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUs
IHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkp
OworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBn
cm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0
aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRh
bmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFt
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92
YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGly
ZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlz
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7
CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUu
bV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVy
YXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1l
dGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUo
Ynl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwor
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUu
bV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0
YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BN
b3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAg
Y2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBl
T2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90
aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29i
amVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9O
dW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50
czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVt
ZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAg
ICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChp
c0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJl
YWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShy
aWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3Bl
Y0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURv
dWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1F
OiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0
KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIg
aGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAg
ICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0
aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxl
LmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUp
OworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2Vy
dmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQg
JiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0
KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0
LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFu
ZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNv
ZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRl
Y29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmln
SW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBj
YXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29k
ZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0
aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29k
ZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBl
ID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJv
bCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVm
ZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBp
ZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEg
dGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUg
bmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAg
ICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9h
ZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2Zp
bGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNl
dFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmplY3Qp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAgIC8v
IEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlwZSBp
ZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
dGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigp
LCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3Zh
bDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwgU3Bl
Y1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJpbmcp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5j
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4oKSwg
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVu
Y19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5j
RXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19h
c3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3Bl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2xl
eGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0
dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVy
dHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3Bl
cnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3By
b3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5n
IHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2Rl
Y2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZl
U2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNE
aXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29w
ZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0
dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3Vt
ZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNz
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJ
c1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNO
dW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19i
aWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlv
bjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9u
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3Ry
dWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rv
cj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50
aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3Bl
Y3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9m
aWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRv
bVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFz
SW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
bnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNl
b2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5j
ZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwg
U3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dp
dGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRo
VHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5
X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1
dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3Bf
cHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJf
c2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ug
b3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVh
Y2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJy
b3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3Jl
dDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRl
cl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9w
X2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNh
c2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAg
Y2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1
bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAg
Y2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgor
ICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bf
amxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToK
KyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bf
am5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6
CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNl
IG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3
aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9w
X3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNh
c2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9w
dXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNl
IG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92
YWw6CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9w
X3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBj
YXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9w
cm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNh
c2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAg
Y2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9j
YWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToK
KyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enpl
cl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25z
dHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rf
bm9fdGxzOgorICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF9nZXRfaG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91
bmNhdWdodF9leGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9j
b25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxf
Y2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9p
dGVyYXRvcl9vcGVuOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9jb25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92
YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdz
X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50c19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19z
bG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9pdGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50
YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
YXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAg
ICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90
cmFtcG9saW5lX3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRp
b24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9j
b2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9u
c0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlv
bnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBT
cGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9m
aWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9m
aWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZm
ZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkg
eworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
cik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisK
KyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUm
IHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAg
ICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3By
ZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
ImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0
YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0
SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAg
ICBib29sIGNvbXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRzLnJlc2l6ZSht
X2dyYXBoLT5zaXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8g
REZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVy
IGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4K
KyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0
IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8g
T09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlm
IHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0
ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJl
bnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAg
ICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAgIG1fdXNlQ291
bnRzW2Jsb2NrLmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9j
b2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAgIGlmICghYmxv
Y2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7IGkgKyBibG9j
ay5sZWFkZXJPZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1
dGVVc2VDb3VudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV91c2VDb3VudHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAxOworICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDaGVj
a3BvaW50IGNoZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2lu
dHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1
dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBj
aGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNr
cG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNj
ZXNzb3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50
UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlv
bnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcHV0ZVVzZUNv
dW50cyA9IGZhbHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNyArOTU2LDEzIEBAIHZv
aWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVl
RnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0g
dHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVC
bG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVs
cyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03
NSw2ICs5NzAsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAg
ICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5n
KGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6
TE9MKQogewogfQogCkBAIC0xMzcsMTEgKzEwMzMsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7
IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUp
IFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBv
cF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNv
ZGVJbmRleCkgeyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAg
ICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBc
CiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNl
TE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAg
ICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1l
KTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA1OCwzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAg
IGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2Rl
ZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6
IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBz
bG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2Uu
cmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5k
c3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93
Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAg
IE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQg
SklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1
blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAg
ICAKQEAgLTIzMSwxNyArMTEzOSw4NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAg
IGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZp
b3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0
ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9m
ZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBp
bnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAv
LyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAg
ICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVB
dEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVz
aXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFw
aCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhp
dEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1
dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRl
eCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhd
LmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0K
IAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVs
KCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5z
dHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJy
ZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
ZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmlu
ZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2Nr
LT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2st
PmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3Mg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVk
ZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRF
bmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFBy
ZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0g
cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJs
b2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9u
cyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3VzZUNvdW50c1ttX2N1
cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3BpbGxDYW5kaWRhdGVz
LmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBw
cmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlmICht
X2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSA+IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAgICAg
ICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KKyAg
ICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5Q
YXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNzgsNDYgKzEyNTUsNTMgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAor
CisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mg
YmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1w
UmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwog
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5
X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxl
KQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0
KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERF
RklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Nj
b3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERF
RklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Nj
b3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9h
Y2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChu
ZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJp
bmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2Vu
ZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4o
KS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVh
dGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRl
cmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Nv
bnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLm1fZHN0LCBTcGVjU3Ry
aW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0LCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAg
ICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0Pigp
Lm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2Nv
cGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNO
b25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVh
bFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Nj
b3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNI
ZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVf
YWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3Nw
cmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2Rz
dCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJh
eSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19P
UChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVt
ZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAgICAgICBERUZJTkVfU0xP
V19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dl
bmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RB
cmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90
aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2Rz
dCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAg
IERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5l
cmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFz
eW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9T
TE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0
b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERF
RklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTM4MiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2Jl
Z2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERF
RklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9w
X21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkK
KyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3Bf
bXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc4LDYgKzE0NjYsNjYgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tl
ZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1
dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbF92YXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ug
b3BfcHJvZmlsZV90eXBlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
IkRpZG4ndCBjaGVjayBMT0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBzdGVwT3Zlckluc3Ry
dWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgIGF1dG8gY291bnQgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQm
IGNvdW50ZXIgPSBtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAtLWNvdW50ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFjb3VudGVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE9PUFM6IERvIHRoaXMgbGF6aWx5IGluIHNsb3cgcGF0aCBjcmVh
dGlvbi9zcGlsbEZvckNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy9tX3NwaWxsQ2FuZGlkYXRl
cy5hcHBlbmQob3BlcmFuZCk7CisKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvYmJlcihncHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBm
cHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwciAh
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZnBy
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3VycmVudElu
c3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAg
ICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBj
aGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBp
ZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRl
Y29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC00
OTgsNiArMTU0NiwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCiAgICAg
bV9qbXBUYWJsZS5jbGVhcigpOwogfQogCitzdGF0aWMgdm9pZCBzbG93Q2FzZVJhbihTdHJpbmcg
a2V5KQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVp
bnQ2NF90Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5Owor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0
cnVjdCgpOworICAgIH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAg
IHVpbnQ2NF90IHZhbHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAg
IGlmICgodmFsdWUgJSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2
YWx1ZSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiB7CiAgICAg
bV9nZXRCeUlkSW5kZXggPSAwOwpAQCAtNTE2LDE0ICsxNTc4LDI1IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3Vu
dGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7
CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAg
ICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2Vz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93
Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRl
eDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRl
eCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5s
aW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29k
ZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsK
KworICAgICAgICBpZiAoZ2V0ZW52KCJwcmludFNsb3dDYXNlcyIpICYmIGF0b2koZ2V0ZW52KCJw
cmludFNsb3dDYXNlcyIpKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gbmFtZTsK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKG5hbWUpOworICAgICAgICAgICAgU3RyaW5n
IGtleSA9IG5hbWUudG9TdHJpbmcoKSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkgKyAiICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCldOworICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0Jikgewor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlUmFuKGtleSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUg
PSBudWxscHRyOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQpAQCAtNTgwLDcg
KzE2NTMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3Ry
YXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVnYXRl
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk5LDYgKzE2NzEsOSBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChtb2QpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
dW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluYykKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjM1LDE1ICsxNzEwLDE4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBp
dGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZz
ZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNs
b3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
Zmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAg
ICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5l
bmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3Vn
aCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8u
b2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmls
ZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3Qg
cmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dD
YXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7
CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTY4OCw2
ICsxNzY2LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9
CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBPT1BTOiBoZWxwZnVsIGZv
ciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNoIChtX2NvZGVCbG9jay0+
Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3OCw2ICsxODU4LDg4IEBA
IHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgYm9vbCBwcmludEVhY2hPU1IgPSBnZXRlbnYo
InByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaE9TUiIpKTsKKworICAg
IGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1bXBMaXN0IGV4aXRDb21t
b247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBzKSB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICAgICAgYXV0byBqdW1w
cyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0aGlzKTsKKworICAgICAg
ICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAgICAgICAgICAgICAgIFN0cmluZ1ByaW50U3Ry
ZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKHByaW50
U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHByaW50U3RyZWFtLnRvQ1N0
cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVmKCk7IC8vIGxlYWsgaXQu
CisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBleGl0IGF0IGJjIyIsICBi
eXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGJyZWFr
cG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMuCisKKyAgICAgICAgICAg
IG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSks
IExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4aXRDb21tb24uYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4aXRDb21tb24uZW1wdHko
KSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0aGlzKTsKKworCisgICAgICAgIHN0YXRpY19h
c3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOworICAgICAgICBBU1NFUlQo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhudW1iZXJUYWdSZWdp
c3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBiZWluZyBhIGNhbGxlZSBz
YXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBt
b3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUg
dGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVt
cC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJy
aWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBwcmVwYXJl
Q2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVu
Y3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJn
R1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAg
ICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBudW1iZXJUYWdSZWdp
c3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpLCBy
ZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7CisgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkpOworCisgICAgICAgIGF1
dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9j
b2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkpKTsKKyAgICAg
ICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBz
YXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBh
IHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRyaWdnZXJM
T0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJlcGFyZUNhbGxP
cGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9u
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93KSks
IG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BS
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVy
VGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0aGlzKTsKKyAgICAgICAg
CisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5i
YXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAvL0Fzc2VtYmx5
SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMyKAorICAgICAgICAvLyAg
ICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgLy8gICAgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0
clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygp
LmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAgICAvLyBPT1BTCisgICAg
ICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBkZXN0
aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUo
KTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpu
b3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAgICAgICBtb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkp
LCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcp
OworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0b3JlIExMSW50IGNvZGVi
bG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29uIGlmIHdlIGV4Y2NlZWQg
ZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExMSW50IGNvZGUgYmxvY2sK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC05NjcsNyArMjEyOSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygp
CiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RF
KAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5l
IEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUg
SklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJs
b2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3Jk
Rm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQu
c2l6ZSgpKSAvCkBAIC05NzgsNyArMjE0MCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGlu
aygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6
U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRD
b2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJp
dHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcg
RGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5cGU6
OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjM0LDg2NiBAQCBTZWNvbmRzIEpJVDo6dG90YWxD
b21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRv
dGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNw
ZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0
S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCku
Zmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBt
X2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNl
Y29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0
ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIg
c3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVy
U2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJh
bms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMo
cmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFs
bG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMg
UmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIg
c3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0
aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVk
IHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEg
aG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21w
dXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8g
T09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJl
bnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBP
T1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJT
ZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJl
c3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOwor
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRo
KCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVy
LiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZp
Z3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYg
bV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAg
IC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50
KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRH
UFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAg
ICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShy
ZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkg
eworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAg
IGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcp
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBh
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxs
b2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50
KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUu
aXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNv
bnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3Jl
ZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9y
T3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFs
aWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUg
aXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8v
IGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAg
ICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0
aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9j
YXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAu
CisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2Fs
bHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBz
dGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBs
KCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7Cisg
ICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxh
bigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZl
UGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
IChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVy
YW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0
b0lnbm9yZSwgRlBSUmVnIHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQg
YmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVy
YW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAg
ICAgaWYgKHJlZy5mcHIoKSAhPSB0b0lnbm9yZUZQUikKKyAgICAgICAgICAgIGFwcGVuZElmTmVl
ZGVkKHJlZyk7CisgICAgfQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAg
ICAgICAgaWYgKHJlZy5ncHIoKSAhPSB0b0lnbm9yZSkKKyAgICAgICAgICAgIGFwcGVuZElmTmVl
ZGVkKHJlZyk7CisgICAgfQorCisgICAgcmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlz
LCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmIHJl
Y29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9LCByZWNv
cmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpLCByZWNvcmQuc2F2ZVBsYW4pOworfQorCitzdGF0aWMgdm9pZCBh
ZGRMb2FkQ291bnQodWludDY0X3QgY291bnQpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvdW50
ZXI7CisgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
Kytjb3VudGVyOworICAgICAgICBpZiAoY291bnRlciAlIDEwMDAwID09IDApCisgICAgICAgICAg
ICBkYXRhTG9nTG4oIlJ1bnRpbWUgbG9hZCBjb3VudDogIiwgY291bnRlcik7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAg
ICB1aW50NjRfdCBsb2FkQ291bnQgPSAwOworICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFu
KSB7CisgICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHJlZ1RvSWdub3Jl
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvcGVyYW5kID09IG9wZXJhbmRU
b0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigp
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVnLmlzRlBSKCkpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAg
IEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5i
b3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgfQorCisgICAg
ICAgICsrbG9hZENvdW50OworICAgIH0KKworICAgIGlmIChmYWxzZSAmJiBsb2FkQ291bnQpIHsK
KyAgICAgICAgcHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgIGFkZExv
YWRDb3VudChsb2FkQ291bnQpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewor
ICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5kc3QsIHNs
b3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQg
dG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlz
QWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKwor
ICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsK
K30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVn
IGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsK
KyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigp
OworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lz
dGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2ls
bERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3IgYnl0ZWNvZGVzICgvY2hl
Y2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgorICAgIGFzc2lnblJlZyhn
cHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOworCisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpT
VmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFk
ZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVn
KGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9p
ZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVn
VmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxv
Y2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFu
ZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6
OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAg
IGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BS
UmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRl
bXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRl
bXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRl
bXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnBy
ID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJl
dHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnBy
KTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3Bl
cmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJ
VDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9n
cHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0
LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBt
X2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQ
UigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9n
cHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQor
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVy
VHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKwor
SklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVy
YW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQ
UlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJl
Z1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0Lmxv
Y2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBl
KG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJh
bmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0
ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQor
CitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFu
ZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6
Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
Z3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0
ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwg
bV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAg
bV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4g
bV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlm
IChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAg
ICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQp
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30K
KworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpE
b3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnBy
KTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9m
cHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQu
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQu
ZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJS
ZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayht
X2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQ
UlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIo
KTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0
LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7Cisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFs
dWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVl
UmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5
cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVu
Ym94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1f
ZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Ok51bWJlck9w
ZXJhbmQ6Ok51bWJlck9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVn
IHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6On5O
dW1iZXJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcg
SklUOjpOdW1iZXJPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBS
UmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAg
ICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVl
T3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBt
X2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJv
dmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
Z3ByLCBtX2Zwcik7CisgICAgZWxzZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1f
aml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCB0ZW1wIHsgbV9q
aXQgfTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgICAgIG1f
aml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVt
cC5ncHIoKTsKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1Zh
bHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICBpZiAoIWlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAg
ICAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91Ymxl
S25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAgICAgICBh
dXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7
CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGdwciwgbV9mcHIpOworCisgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworCisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnBy
LCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkludDMyQ29udmVy
dGluZ09wZXJhbmQ6OkludDMyQ29udmVydGluZ09wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
Cit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAg
ICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Oklu
dDMyQ29udmVydGluZ09wZXJhbmQ6On5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAo
bV9qaXQuc2hvdWxkU3BlY3VsYXRlSW50MzIobV9vcGVyYW5kKSkgeworICAgICAgICBJbnQzMk9w
ZXJhbmQgb3AgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIG1fZ3ByID0gb3AuZ3ByKCk7
CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIEZQ
UlRlbXAgdGVtcEZQUiB7IG1faml0IH07CisgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRlBSLmZw
cigpOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgaWYgKCFpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAg
ICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJs
ZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBtX2dwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1fZ3ByLCBmcHIpOworICAg
ICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3Jp
cHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJV
c2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7Cisg
ICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIo
ZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1
dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7
CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9u
Q2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxl
U2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQu
c2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIG1fZ3ByKTsKKworICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK1JlZ2lz
dGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3Rl
clNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisK
KyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7Cisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJl
Zyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5n
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYg
KCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVT
eW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAg
ICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAg
IHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1
bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsg
dmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2Jq
ZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRl
QW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAg
aWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHJl
dHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQz
MiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFsc2U7
CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1c2VC
aWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAg
ICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSGVh
cEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hlYXBC
aWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
aWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0ludDMy
KHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RI
ZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNlCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit2b2lkIEpJVDo6cmVz
ZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBT
cGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2N1cnJlbnRT
dGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0YW50cygpOyArK2kpCisgICAgICAgIG1fY3Vy
cmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUo
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7
CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247
CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZywg
dHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxvY2VkUmVn
KCkpOworICAgIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVycyA9IHsgfTsKK30KKwordm9pZCBKSVQ6
OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0NvdW50LCAiKSIpOworfQorCit2b2lkIEpJVDo6ZHVt
cFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIHN0YXRlID0gWyIp
OworICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWdW
YWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJcdCIpOworICAg
ICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9
CisgICAgfQorICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlm
IChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJcdCIp
OworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJlZykpOworICAg
ICAgICB9CisgICAgfQorICAgIGRhdGFMb2dMbigiXSIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyAr
NDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUg
PHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwor
ICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwog
ICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTA2LDE1ICsxMTAsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwot
ICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBC
eXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8o
dCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnBhaXI8UmVnLCBWaXJ0dWFsUmVn
aXN0ZXI+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAg
ICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNs
b3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQor
ICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAg
ICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVz
dCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZl
IG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxh
bjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3
ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsK
IAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTk3LDYgKzIxMiw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJl
c3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwog
CiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNl
SklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHVi
Q2FsbDsKIApAQCAtMjA0LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0
QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFn
aWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBz
aWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNv
bXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEg
cGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJ
ZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVChWTSYsIENv
ZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZVR5cGUg
eworICAgICAgICAgICAgQmFzZWxpbmUsCisgICAgICAgICAgICBMT0wKKyAgICAgICAgfTsKKyAg
ICAgICAgCisgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayosIENvbXBpbGVUeXBlLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAg
ICAgICAgIH5KSVQoKTsKIAogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VK
SVQ6OnZtKCk7IH0KQEAgLTIyMCwyMiArMjM2LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5
dGVjb2RlSW5kZXgoMCkpCisKKyAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUs
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7Cisg
ICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBieXRlY29k
ZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxv
Y2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVU
eXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlW
YWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI0MywyMSArMjU5LDIxIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RhdGljIHZvaWQgY29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtp
bmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0
dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAg
ICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAg
IGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ss
IENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4
ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKICAgICAgICAgfQpAQCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZv
ckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxG
b3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwo
cmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzUzLDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyBy
ZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQg
YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVn
IHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1w
LCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyArMzY1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lk
IGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlE
ICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKQEAgLTM1MCw3ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM5Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BT
dHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBO
RXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAg
ICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRl
clZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1NDAsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC01MTcs
MTIgKzU0OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93
T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVy
YXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xv
d0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0
KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1w
bChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYsOSArNTg3
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRo
X3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVn
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02MTAsNyArNjUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3RydWN0aW9u
Kik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02Nzgs
NzggKzcyMSw4MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1l
bnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90
b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNs
b3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNv
bnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0Umln
aHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hp
ZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVk
KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3
RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
VmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNl
bHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
SlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTc2NCw4ICs4MTAs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdl
dENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzc4LDM4ICs4MjIsMTggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5v
blByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2
b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7Ci0KLSAgICAgICAgSnVt
cCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAg
ICAgICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwot
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFp
dGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAg
ICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVj
b2RlSW5kZXgpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsK
IAotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2Fz
ZXMoU2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlT
bG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBi
b29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtODkxLDYgKzkxNSwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAg
ICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVw
ZGF0ZVRvcENhbGxGcmFtZSgpOworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb24pOworICAgICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiBjYWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwpAQCAtOTYxLDYg
Kzk5NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxp
bmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0
aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0
IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVz
KCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAg
CkBAIC05NzEsNiArMTAwOCwyODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJp
dGhQcm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRH
UFJSZWcpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIo
R1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVn
IH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOwor
ICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsK
KyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdw
cigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4g
YmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7
CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIo
KTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAg
ICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVy
YW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7
CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAg
ICAgflZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE51
bWJlck9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5OdW1iZXJPcGVy
YW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICAvLyBTcGVjdWxhdGUgbnVtYmVyLCBhbmQgY29udmVydCB0byBpMzIuIFVz
ZWZ1bCBmb3IgYml0b3BzLgorICAgICAgICBjbGFzcyBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIHsg
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQoSklU
JiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyQ29udmVydGlu
Z09wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAg
ICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmls
dGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRl
cjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAg
ICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9w
ZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRS
ZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJh
bmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAg
ICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAg
ICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAg
ICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZvck9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3Rlcigp
OworICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcmIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGZw
ciAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGZwciku
b3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBmcHIgPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFu
ZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnBy
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByRm9y
T3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFu
ZCA9IG9wZXJhbmQ7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIGlmICghbV9jdXJy
ZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNC
eXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNC
aWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisj
aWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNC
aWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9Cisj
ZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRl
SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZv
aWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVB
bnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09Q
UzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMu
CisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcp
OworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxS
ZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3Rl
ciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlw
ZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsK
KyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZl
UGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwo
R1BSUmVnIHRvSWdub3JlID0gSW52YWxpZEdQUlJlZywgRlBSUmVnIHRvSWdub3JlRlBSID0gSW52
YWxpZEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxl
bnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVn
IHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZl
UGxhbiYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0
b3I8RmFyQ2FsbFJlY29yZD4gbV9mYXJDYWxsczsKQEAgLTk5MCw3ICsxMzA0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBt
X3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAog
ICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsK
QEAgLTEwMjcsNiArMTM0MSw4NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisK
KyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMs
IHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFs
bG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisK
KyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAg
ICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAh
PSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4
X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNl
IH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQK
KyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAg
ICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAg
ICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9OworCisgICAgICAg
IHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsK
KyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0
cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+
IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3Rl
cnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlw
ZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkg
PT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAg
ICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAg
ICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBl
cy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVu
VHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0g
bWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsK
KworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lz
dGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVn
aXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVy
Z2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAg
ICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHZvaWQgcmVzZXRDdXJy
ZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAg
VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVh
ZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3VycmVudFByZWRp
Y3Rpb25zOworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8dW5zaWduZWQsIHRydWU+PiBtX3VzZUNv
dW50czsKKyAgICAgICAgT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+IG1fY3VycmVudFVzZUNvdW50
czsKKyAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMTY+IG1fc3BpbGxDYW5kaWRhdGVz
OworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisKKyAgICAgICAgVmVj
dG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxW
ZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9M
IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVt
cHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDg2ICs0Miw4OCBAQAogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTbG93
UGF0aENhbGwuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRP
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFs
LCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVx
dWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVh
bE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNz
LCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpn
cmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZh
bHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xv
d0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDMyICsxNTMsOTEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMSkpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BS
KTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRy
dXN0ZWRJbW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94
SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikK
IHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNl
cyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBp
bnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1l
ZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwg
cmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCBy
aHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJo
cy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CkBAIC0yMjksMTcgKzI5MCw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGNvCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsK
KyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBb
Jl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdl
dFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3By
KCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMy
X3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0
YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMo
KTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0z
MihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNv
bmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJn
ZXQpOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQog
fQogCkBAIC0yNTUsNDMgKzM0Miw4OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQo
Y29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBH
UFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0gewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhp
cywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9
IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBs
YWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDI7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAg
ICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAg
Y29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAg
ICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIp
OwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAg
ICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAg
ICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0z
MihvcDFpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIo
Y29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAg
ICAgIGdldFJIUygpOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKICAgICB9Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwg
b3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVy
YXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGlu
c3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBv
cGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0
cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3Bl
cmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFs
bHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxs
dGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cg
cGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50
IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50
IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0MzMsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAg
ICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAg
ICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzQ1Nyw2IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAg
ICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFk
ZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTEsMTIgKzQ4MCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1w
IGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs0OTcs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZh
aWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwz
LmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1
MDksNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNy
Y0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3Qg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1
cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHBy
b3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFic29s
dXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0
LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRB
c0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91Ymxl
KEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNE
c3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21l
IEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAg
ICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzkzLDExICs1NTcsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0
aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxv
dywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgewor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRG
UFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5m
cHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwgcmVz
dWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsK
KyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIp
OworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBGUFIsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3Zl
cmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7
CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0
RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnBy
KCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAg
ICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAg
ICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
aW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7
IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwor
ICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9N
T0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzYxMyw4OSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1p
dF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByaHMgPSBieXRlY29kZS5tX3JoczsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJl
IGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0g
WDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAg
ICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lz
dGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAh
PSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJS
ZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsK
KyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVh
eFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlz
LCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAg
ZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hUZW1w
LT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxoc1Rl
bXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBy
aHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
aHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJoc0dQ
UiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAKLSAg
ICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8s
IGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1YWws
IGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBk
ZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3Jk
MzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOworICAg
IEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGxo
c0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVy
bywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJbnQz
MihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQpOwotfQorICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyBlYXggfSk7CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci19Ci0KLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0
X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYm
IGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVy
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAg
ICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVj
QmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJ
bnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwg
U3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUoWDg2XzY0KQpAQCAtNDY0LDcgKzcwNSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShK
U1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3Vi
bGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3Ax
OwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDc0LDYgKzcxNSw3IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBs
ZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjIsMTUgKzgwNCwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xv
d09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9u
IG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExv
YWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
QEAgLTcyNCwxMyArOTY0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdh
dGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAv
LyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVO
ZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNT
bG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihu
ZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
T3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03NDIsMTUgKzk4MCw0NiBAQCB2b2lkIEpJVDo6ZW1pdEJp
dEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGJpdE9wID0gWyZdIChHUFJSZWcgbGhzR1BSLCBH
UFJSZWcgcmhzR1BSKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJpdGFuZD4pIHsKKyAg
ICAgICAgICAgICAgICBhbmQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBwcmludCgiYW5kXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJpdG9yPikgeworICAgICAgICAgICAgICAgIG9yMzIobGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJpbnQoIm9yXG4iKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJp
dHhvcj4pIHsKKyAgICAgICAgICAgICAgICB4b3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBwcmludCgieG9yXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcExzaGlmdD4pIHsKKyAgICAgICAgICAg
ICAgICBsc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBwcmludCgibHNoaWZ0XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAgIHNldEludDMyKHJl
c3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAgICAg
ICAgYml0T3AobGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy9pZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgLy8gICAgSW50MzJDb252ZXJ0aW5nT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIC8vICAgIEludDMyQ29udmVydGluZ09wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAvLyAgICBHUFJSZWcgbGhzR1BSID0gbGhz
LmdwcigpOworICAgICAgICAvLyAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAg
ICAvLyAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIC8vICAgIHJldHVybjsKKyAg
ICAgICAgLy99CisgICAgfQogI2VuZGlmCiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFu
ZDsKQEAgLTc2MCwzMyArMTAyOSwxMDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQ
YXRoKGNvbnN0IAogICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRD
b25zdGFudEludChvcDEpKTsKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIp
KQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8
ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmln
aHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBw
YXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIp
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVm
dFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGlmICgh
bGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAg
fQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworI2VuZGlmCiAKLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3Bl
cmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3Jh
dGNoR1BSKTsKIAorICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZh
c3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7CisKKyAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQp
OworCiAgICAgaWYgKHByb2ZpbGluZ1BvbGljeSA9PSBQcm9maWxpbmdQb2xpY3k6OlNob3VsZEVt
aXRQcm9maWxpbmcpCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bj
b2RlKGJ5dGVjb2RlKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzLmdwcigpKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXBMaXN0KCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJl
c3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAg
cHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJlc3VsdElzSW50MzIgPSB0cnVl
OworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNlIGZvciBCaWdJbnQzMi4KKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAgICBib3hJbnQzMihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7IAorICAgICAgICByZXR1
cm47CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDMsNyArMTE0NSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGkKIAogICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIGxlZnRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDksMjAgKzExOTEsNiBAQCB2b2lkIEpJ
VDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxp
ZEZQUlJlZzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOwotI2VuZGlmCi0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlw
cGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CiAKQEAgLTg3MywyMSArMTIwMSw3NyBAQCB2b2lkIEpJ
VDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCgh
bGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIy
ID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBz
b21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRl
bXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1w
LT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1w
LT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAg
ICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsK
KworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hG
UFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBp
ZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAg
ICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNo
R1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgo
KSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEp
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0
KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50
OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
IAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTkwMiwxOCArMTI4Niw2MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IElu
c3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAg
cmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBs
aHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5n
cHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZw
cigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0
RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZs
b3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZw
cigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAg
ICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9u
VG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0
aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUgKzEzNTMs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJl
Z2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEs
IHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBh
dGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVz
dWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lz
dGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIx
LCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBw
YXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAg
fQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lD
X1NUQVRTKQpAQCAtOTQxLDE5ICsxMzkwLDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVz
dWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9y
LT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJh
dGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0
ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3Mu
Z3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVn
cy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTQxNSwxNCBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAg
ICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0J5dGVj
b2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29k
ZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0g
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3NCwzOSArMTQzMyw4MiBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOwor
ICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdo
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQ
OworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0RlBSID0g
ZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQg
cmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENv
bnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhp
cywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJh
bmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5l
bXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJh
bmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBy
aWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7
CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIg
PSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qy
KTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAg
bGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAotICAgIFJF
TEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRD
b25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdl
bmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAg
ICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6Omlz
TGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmln
aHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFH
ZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVy
YXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1B
VEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAg
LTEwMTUsMTcgKzE1MTcsMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlu
bGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElu
bGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2Ug
aWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgbGVmdFRl
bXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0
T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJp
Z2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXND
b25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0
UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAg
ICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJl
c3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsK
KyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9
IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNTU0LDIwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYg
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOwor
ICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAgICAgICAg
cHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNIZWFwQmln
SW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwg
cmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBh
dGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9u
U3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCArMTU3Niw4
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBz
cmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE2MTMsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Ns
b3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJv
ZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0
aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0
aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwx
NiArMTYyMyw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmln
aHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNSwx
NSArMTYzMywzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAK
ICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9w
ZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFu
dChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0
UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJh
dG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdU
MiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9w
ZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiBy
ZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5k
aWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
KyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdo
dE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVw
YXRjaCkKQEAgLTExNTYsMjMgKzE2OTUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0g
ZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0
cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYyICsxNzEw
LDIxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5k
LnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgot
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVy
YW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOwor
ICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdo
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQ
OworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAu
ZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
Mik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBG
UC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVm
dFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRG
UFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+
ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAg
IHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAg
ICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25z
dCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
KyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
NDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIg
PSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
IAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVz
dWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwg
c2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwg
cmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0
aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsK
IAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3Mu
Z3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5l
bmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExp
c3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
ZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Ax
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3Zl
blR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkg
eworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIo
KTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJU
ZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVt
cCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAg
ICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzR1BSLCBsaHNGUFIpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQUiwgcmhzRlBSKTsKKyAgICAgICAgICAg
ICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihCZWxvdywgbGhzR1BSLCBUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZl
WmVybywgYnJhbmNoMzIoQmVsb3csIHJoc0dQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAg
ICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJo
c0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQu
ZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVj
dGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0
aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0g
Yml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0
aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9
IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIo
KSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3Bl
Y0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRL
aW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigp
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
c3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0
d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElD
U2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQog
ewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihi
eXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCks
IHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNv
ZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAg
IHdpbGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0lu
Zm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVn
VDApOwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9j
ay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0
dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAg
ICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2Rl
SUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykK
ICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9w
Q2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2Fs
bD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
ICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nv
bnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAg
ICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91
bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBj
aGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAg
IC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKwor
ICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlv
bk1vZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBp
cyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0
eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9p
bnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
IG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVj
a3BvaW50U2xvdyk7CisKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uZXh0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHRUZW1wIHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0g
cmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9
PSByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7Cisg
ICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVn
VDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcg
aXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiAr
NDc0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAg
ICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExv
Z2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2Vz
IHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93
biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVn
KCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90
RW1wdHkocmVnVDApOwogCkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7
CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0
R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAg
ZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRH
UFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2
YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIp
OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVy
cywKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0
ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5h
cHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyB7IGRvbmVHUFIgfSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2tw
b2ludFNsb3dQYXRoKTsKKworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAg
IGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsK
ICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBm
YWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0
aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9p
bnRTbG93UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9
KTsKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRp
b25Eb25lLmxpbmsodGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
SXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2
LDcgKzU1NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAg
ICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAg
IEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5r
KHRoaXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcg
KzU5MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAg
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0K
LQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFy
KiBKSVRDb2RlOjp0eXBlTmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwog
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUi
OworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAg
Y2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJ
VFR5cGU6OkZUTEpJVDoKQEAgLTEwOCw3ICsxMTAsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJ
VENvZGVXaXRoQ29kZVJlZihDCiAKIEpJVENvZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29k
ZVJlZigpCiB7Ci0gICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQor
ICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKGlzREZHT3JGVEwoaml0VHlw
ZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCiAgICAgICAgICYmIG1fcmVm
LmV4ZWN1dGFibGVNZW1vcnkoKSkKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBKSVQgY29k
ZSBhdCAiLCBwb2ludGVyRHVtcChtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpLCAiXG4iKTsKIH0K
QEAgLTIzNyw2ICsyMzksMTEgQEAgTmF0aXZlRE9NSklUQ29kZTo6TmF0aXZlRE9NSklUQ29kZShD
b2RlUgogI2lmIEVOQUJMRShKSVQpCiBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJz
VG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0
ZUluZGV4KQogeworICAgIC8vIEZvciBCYXNlbGluZSBKSVQsIHRoaXMgaXMgdHJpdmlhbGx5IHRy
dWUuCisgICAgLy8gRm9yIExPTCBKSVQsIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBzcGlsbGVkIHRv
IHRoZSBzdGFjayBhdCBlYWNoIG9wY29kZSwgc28gd2hlbiB3ZQorICAgIC8vIGdvIHRvIHRoZSBv
cF9jYXRjaCwgdGhlIGxpdmUgc3RhdGUgbXVzdCBhbHJlYWR5IGJlIGluIHRoZSByaWdodCBwbGFj
ZSBvbiB0aGUgc3RhY2suCisgICAgLy8gQWxzbywgb3BfY2F0Y2ggaGFzIG5vIGluY29taW5nIHJl
Z2lzdGVyL3R5cGUgcHJvb2Ygc3RhdGUsIHNvIGl0J3MgdHJpdmlhbCB0byBjYXRjaAorICAgIC8v
IGFuIGV4Y2VwdGlvbiBpbiBMT0wganVzdCBieSBqdW1waW5nIHRvIG9wX2NhdGNoLgogICAgIHJl
dHVybiB7IH07CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1
aW50OF90IHsKICAgICBIb3N0Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAg
QmFzZWxpbmVKSVQsCisgICAgTE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBA
IC02NywzNiArNjgsMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVO
YW1lKEpJVFR5cGUpOwogCi0gICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAg
IHN0YXRpYyBKSVRUeXBlIHRvcFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5
cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQo
SklUVHlwZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAg
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlw
ZTo6REZHSklUOwotICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJl
dHVybiBKSVRUeXBlOjpGVExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5v
bmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxl
U2NyaXB0KEpJVFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkg
ewogICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9z
dENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoK
KworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAg
ICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5
NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoK
ICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAg
ICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpM
T0xKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0K
QEAgLTExNiw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5
cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBK
SVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBj
YXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDYg
KzExNywyNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBj
YWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBK
SVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBK
SVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBzdGF0aWMgYm9vbCBpc0xvd2VyVGllcihKSVRUeXBlIGV4cGVjdGVkTG93ZXIsIEpJVFR5cGUg
ZXhwZWN0ZWRIaWdoZXIpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0V4ZWN1dGFi
bGVTY3JpcHQoZXhwZWN0ZWRMb3dlcikpOwpAQCAtMTQ1LDkgKzE1NiwxOSBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwgZXhw
ZWN0ZWRIaWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBib29sIHVzZXNSZXBsYWNlbWVudENv
ZGVCbG9jayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9
PSBKSVRUeXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlw
ZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGlzT3B0
aW1pemluZ0pJVChKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICByZXR1cm4gaml0VHlw
ZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQgfHwgaml0
VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNERkdP
ckZUTChKSVRUeXBlIGppdFR5cGUpCisgICAgewogICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBK
SVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2lu
ZChWTSYgdm0sIENhbGxGcmFtZSogY2EKICAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9m
ZnNldCBpbiB0aGUgbWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCiAgICAgICAg
IC8vIGFuZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRv
IGhhbmRsZXItPnRhcmdldAogICAgICAgICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAg
ICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5q
aXRUeXBlKCkpKQorICAgICAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+aml0VHlwZSgpKSkKICAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRl
ciA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRh
cmdldCkucHRyKCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFu
ZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1
LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVu
Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9P
UFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9u
J3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTcs
NiArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0
aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CkBAIC0xNjcsMjUgKzE2OSw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0
ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFz
QW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Ci17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVj
b2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
aW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MCwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRo
aXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAp
CitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQs
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dD
YXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAK
KyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNv
ZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1f
c2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9z
bG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFz
dCgpLmRzdCA9IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChK
dW1wTGlzdCB7IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVt
cExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJl
ZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJ
bmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAg
ICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAg
ICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQs
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVt
cCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4K
LSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNv
ZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQs
IGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAg
ICAgICAgc2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtNDA2
LDExICszOTgsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkK
LXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkp
OwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgfTsKIAotICAgICAgICBib29s
IHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9j
ay0+aml0VHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENv
ZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpOwogCiAgICAgICAgIGlmIChtX2dl
bmVyYXRlRmFzdFBhdGhPblJlcGF0Y2gpIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0
YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5
Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3Bl
cnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1
YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5h
bWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdl
IGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBs
b2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4K
KyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IElu
dmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkp
IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2Nh
dGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCBy
ZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwot
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7
CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9j
YXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFs
bG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAg
ICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJl
ZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcg
PSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hS
ZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwog
ICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0
dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9j
YXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcs
IHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9k
c3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1f
ZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1
Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQ
UlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJh
bmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3Rh
bmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAu
ZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1w
bGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdw
cigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAg
ICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRv
bid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAg
ICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90
b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFu
Y2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1i
b2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9y
LCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBj
b25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0
IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJl
c3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQw
ICsyMjMsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBv
cGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVn
aXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJl
IGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVz
dWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhh
dCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNr
ZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAg
IHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMs
IHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9w
ZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90
b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVt
cCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAq
dGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAg
ICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAg
cmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBz
Y3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFs
dWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRl
bXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwu
ZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVt
cENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIo
KTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisg
ICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90
b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAg
ICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0
VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIs
CisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7Cisg
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIo
KSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVl
IHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBm
b3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2Ug
Y2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
dG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNl
bGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRf
YnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3Vs
dAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJv
dG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4p
OworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9
IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+
cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0
eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
RW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAg
IAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qx
LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5v
dENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
aW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAg
ICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRH
UFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0
byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWws
IHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAg
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVy
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNP
dGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Ym9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEy
ICs0NjIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQ
VShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVzdDY0KFpl
cm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAg
ICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAg
ICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19u
dW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0
NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lz
dGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShC
SUdJTlQzMikKQEAgLTI4MiwyMSArNTI4LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19p
bnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0g
YnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgewor
ICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBj
b21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBi
cmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlu
cHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwot
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQz
MlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCBy
ZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50
MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCBy
ZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJO
IHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEz
LDE4ICs1OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQg
dHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZh
bHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFs
dWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAot
ICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDMsNjEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3Qp
KQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNw
ZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9y
RXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0
VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNv
bXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI3LDQxIEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAK
LSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBp
ZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxs
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJh
bmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
T2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVt
cCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAg
ICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcwLDIwMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0K
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUg
PSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJp
bmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElm
U3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3lt
Ym9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJv
bChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7
CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVu
Y3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0
aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5n
cHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4
b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
T09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQs
IG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJl
bG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNl
KTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdp
bGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJl
IDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBU
aGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcg
YmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
KTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29s
ZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0
aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRz
IHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0
cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJp
dC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFs
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24s
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0g
ZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2Ny
YXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpT
VmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNo
MUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
fQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJl
Z3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
dGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNv
bmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUg
eyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVh
bCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9
IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3Jh
dGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIu
ZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwg
c2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVs
bChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVy
KHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
c3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BS
LCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8v
IE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAg
ICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0
KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1t
ZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBp
c0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmso
dGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1
bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
LQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsK
LX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVP
dGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAg
YXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAg
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAg
ICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAg
ICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
LSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
KyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBp
c0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBk
by4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikp
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRl
ZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NTAwLDEwICsxMTM0LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwo
Y28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTY1LDMx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJU
KHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNp
YWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFk
YXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVh
bC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAg
ICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwg
PSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVy
LmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjpl
bWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEs
IHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBB
U1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6
OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFs
QW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShy
aHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFs
c2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAg
ICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21w
YXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5n
KHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
SGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMp
KSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJl
MzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVz
ZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEg
PSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOwor
ICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJs
ZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92
ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAg
ICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAg
IENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxo
c0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykp
IHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBs
aHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5m
cHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJo
c0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2
YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
Owordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
Owordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSBy
ZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlz
IGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFs
dWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2
b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhy
b3c+KCk7CkBAIC01ODksNzQgKzE0ODgsMTQ2IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNF
cSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERv
dWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5
cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykp
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAg
Y29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVT
eW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFw
QmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNl
cyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVTRShCSUdJ
TlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBi
ZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkK
LSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0g
ICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwg
fHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50
cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFu
Y2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2Ug
dXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRo
YXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxs
IG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYg
aXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhp
Z2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8
PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsK
LSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7
Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNv
dmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAg
Ly8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVy
ZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3Ro
IGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAg
ICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVk
SW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJl
Z1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAg
LyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEp
OgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAg
ICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwor
ICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAo
bGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRo
OworICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisg
ICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0
IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5j
aElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBh
biBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBs
ZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAg
ICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qz
KTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9y
NjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVx
dWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBz
bG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0lu
dHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2Ug
Y291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50
MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShC
SUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0
cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNs
b3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwg
d2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0g
ICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAg
cmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNo
IGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAg
ICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7
CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmso
dGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVx
KQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVs
c2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjQ1LDEzNSBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
ICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBh
dXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3Zl
blR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykp
IHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhz
KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BT
OiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNl
cyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7
CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsK
KyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwogCi0jaWYgVVNFKEJJR0lOVDMyKQot
ICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmlj
dEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAg
IGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtl
bjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBz
bG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdt
ZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGgg
YSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJl
cXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRo
ZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8
NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQg
MAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBi
ZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92
ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdU
MSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJp
dHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwg
cmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQo
cmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJl
Z1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdU
MCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0
RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRv
IGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0g
ICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0
aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBi
b3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJ
R0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09
IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxs
IHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdv
dG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBs
ZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xl
IGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBp
ZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRy
aWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0
byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisg
ICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBi
ZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMg
YWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAg
ICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIp
OworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAg
ICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAg
ICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVn
VDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8g
Y292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7
CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1
bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBh
dGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5T
dHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
ICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJ
R0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3Ry
aW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xv
dyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3
aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBy
aWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8v
IEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNs
b3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwg
d2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0su
bGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpT
dHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdU
MCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNzQ4LDg5ICsxNzg2LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAg
ICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAg
R1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRv
IGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykg
JiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0g
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51
bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQor
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlz
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQot
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAg
aWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0Jp
Z0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55Qmln
SW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYg
VVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisg
ICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShC
SUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1
dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0
R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIu
bGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51
bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50
ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5r
KHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmlu
Zz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhz
cmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3Ry
aW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
LQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVj
dChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2Jq
ZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8v
IE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8g
TWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUg
c3RhdGUuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENh
dGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIwNjUsMjMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNl
bGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3Vy
cmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAg
ICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BS
UmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAg
ICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtOTA1LDkgKzIwOTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJ
bnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAg
ICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxl
SW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNj
cnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjEyMSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNv
cmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5w
dXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
OTM4LDkzICsyMTQ1LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0
IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0
Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwot
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwor
ICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQz
Mihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1
bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRl
Y29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlz
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVs
bEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQot
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3Rl
eHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBh
dXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5v
dENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRj
aEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCBy
ZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAg
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdh
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJl
UHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29t
cGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1l
ZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChO
b25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJl
UHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAK
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVO
dWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQot
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2Fz
Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxP
cE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBu
byByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBj
YWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0
aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRl
cnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2Nv
ZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyAr
K2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikp
OworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0
byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRy
dXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090
aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0x
MDM1LDkgKzIyOTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3Ry
dQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2Nv
cGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNo
YWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJS
ZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSBy
ZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29w
ZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3Bl
Q2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3Ro
ZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEwNDUsMTMgKzIzMjAsODAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhp
cyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRh
ZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0
ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUu
aXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9h
ZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlz
KSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyBy
aWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8g
bmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAg
ICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2Jq
ZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJv
dmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0
cmljdCkKKyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBsb2Fk
MzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMp
KSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgp
KQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAv
LyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAg
ICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNh
Y2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjQwMSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0
aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVn
ID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3
ICsyNDExLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAg
ICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwg
Y2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3By
VGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJh
bmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJl
ZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdw
cigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJl
RGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBn
cHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJl
Zyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJl
ZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVn
KSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI0NTMsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBT
dHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
aGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0
VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRo
aXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcg
ZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CkBAIC0xMTYyLDggKzI0OTgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFr
ZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3Rh
dGUuCisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1
cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29w
SGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBP
T1BTOiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVy
LgogICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50
ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1
dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
T3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcs
MTMgKzI1MjYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQog
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBz
bG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9w
dGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAg
Y29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2
LDExICsyNTQzLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4K
ICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAg
ICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3Jr
cyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0
cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMs
MTAgKzI1NjksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZv
aWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNTc5LDE4IEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4
cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVn
ZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxS
ZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5W
YWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChyZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI2MDAsNDIg
QEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3Bl
KTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMg
PSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAg
ICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNjY0
LDQ2IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29k
ZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNj
b3BlLnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1w
bGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQt
PmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgog
CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlv
bkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0g
T3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI3MzQsMTkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3Rh
cnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTM2MCwxNCArMjc1NSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJy
YXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAg
IEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5l
bXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdw
cigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCBy
ZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMjc4OCwzNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVl
IHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7
ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI4
MzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyODY2LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxs
Rm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI4OTMs
MTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5
TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAg
YmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVu
dHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQu
Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudElu
c3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0
TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsK
ICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dD
YXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAg
IExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMjkxMCwxNCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9
IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAo
KSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8s
IG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJv
ZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyAr
Mjk0Myw4MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVt
ZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQg
aW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZh
bHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0g
ICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidz
IGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBK
dW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdU
MSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdU
MCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0
IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBz
dWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVn
VDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAg
ICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBp
bnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNl
dEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNl
bGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8g
Q2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUg
b2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAg
ICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlu
bGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91
dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAg
ICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3Vi
MzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzAy
Nyw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRl
bXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRl
bXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNl
KCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIg
PSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRl
bXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9Cisg
ICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAg
IGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMDgxLDUxIEBAIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEp
OwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZz
ZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3du
SW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywg
aW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9y
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigp
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRz
ID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1Qw
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVz
dWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEs
IHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0
b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIs
IHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5
OCw2ICszMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwog
ICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9j
YXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90
YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0
IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzE5Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2Zp
bGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdH
UFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxl
bXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszMjE0
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4o
KSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwog
ICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJl
Z1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWls
PigpOwpAQCAtMTcwMiwxMSArMzI0NywyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9j
b3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWls
YWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQzMihk
c3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAg
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsK
KyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NzE0LDI5ICszMjY4LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25z
dCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RM
ZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tp
cDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
LSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJ
bW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXAp
LCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFu
T3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3Vi
MzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwor
ICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1Qw
LCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1z
VG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIHpl
cm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CiAj
ZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE3NDQsNDkgKzMzMTcsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50
KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgp
KSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5
dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAK
LSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2Fk
VmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0g
ICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShqc1VuZGVm
aW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNo
MzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAg
IGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAg
bW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVP
Zj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2
YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BS
KSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVl
R1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNj
cmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQ
UigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAg
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90
eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIs
IHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExv
YWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3MSw3ICsxODcxLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sq
IG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBBU1NF
UlQob3B0aW1pemVkQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sg
JiYgSklUQ29kZTo6aXNERkdPckZUTChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwog
ICAgIAogICAgIGlmICh2b2lkKiBkYXRhQnVmZmVyID0gREZHOjpwcmVwYXJlT1NSRW50cnkodm0s
IGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG9wdGltaXplZENvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJh
dCBiYyMiLCBieXRlY29kZUluZGV4KSk7CkBAIC0zNDE5LDYgKzM0MTksNDIgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrSQogICAgIHJldHVybiAwOwogfQogCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93
LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKQoreworICAgIC8vIEl0J3Mgc29ydCBv
ZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9p
bmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KKyAgICBEZWZlckdD
Rm9yQVdoaWxlIGRlZmVyR0MobG9sQ29kZUJsb2NrLT52bSgpLmhlYXApOworCisgICAgaWYgKGdl
dGVudigicHJpbnRFYWNoSmV0dGlzb24iKSAmJiAhIWF0b2koZ2V0ZW52KCJwcmludEVhY2hKZXR0
aXNvbiIpKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJqZXR0aXNvbiwgZm9yY2luZyByZW9wdCBub3c6
ICIsICpsb2xDb2RlQmxvY2spOworICAgIGxvbENvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9m
aWxlUHJlZGljdGlvbnMoKTsKKyAgICAKKyAgICAvLyBPT1BTOiBwcm9jZXNzIHZhbHVlIHByb2Zp
bGVzIGhlcmUsIHNpbmNlIHdlJ3JlIGpldHRpc29uaW5nLCBob3BlZnVsbHkgdGhleSB1cGRhdGUg
dy8gdGhpbmdzIHdlIGNhcmUgYWJvdXQuCisKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obG9sQ29k
ZUJsb2NrLT52bSgpKTsKKworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
KmxvbENvZGVCbG9jaywgIjogRW50ZXJlZCByZW9wdGltaXplIGZyb20gTE9MIik7CisKKyAgICBD
b2RlQmxvY2sqIGxsaW50Q29kZUJsb2NrID0gbG9sQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwor
ICAgIC8vIFdlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJhc2VsaW5lIGNvZGUgYmxvY2suCisg
ICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGxsaW50Q29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKKworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBsbGludENvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlcGxhY2VtZW50IHx8IHJlcGxhY2VtZW50ID09IGxsaW50
Q29kZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
KmxsaW50Q29kZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nIExPTCBiZWNhdXNlIHdlJ3ZlIGFs
cmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1lbnQgbXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4gVXNl
IHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKKyAgICAvLyB0byBjaGVjayBvdXIgbG9naWMuCisgICAg
QVNTRVJUKGxsaW50Q29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICBB
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGxvbENvZGVCbG9jay0+aml0VHlwZSgpKSk7
CisKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgc3R1Y2sgaW4gYSBsb29wIGxvZ2ljCisgICAg
bG9sQ29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09TUkV4aXQsIENv
dW50UmVvcHRpbWl6YXRpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dB
Uk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNiArMzE4LDggQEAgSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25WYWx1ZQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nLCB2b2lkLCAoVk0qKSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB2b2lkLCAo
Vk0qKSk7CiAKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJl
b3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsy
MDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
QEAgLTI4MSw4ICsyNzcsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dl
dEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwpAQCAtNTU4LDcgKzU1Miw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAg
IAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVj
ZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01OTgsOCArNTkxLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjM5LDggKzYzMCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY4Niw4ICs2NzUs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyOSw4ICs3MTYsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAg
LTc3OCw4ICs3NjMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC04MTksOCAr
ODAyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTEwMCw4ICsxMDgx
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjU3LDgg
KzEyMzYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApA
QCAtNTIsNTEgKzU0LDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJl
ZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BS
ID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVl
LT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIg
PSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAg
ICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAg
ICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRl
bnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZp
ZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJv
ZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hl
Y2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlw
ZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkp
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJl
c3VsdFJlZ3MpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAg
ICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9
IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJ
bmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwor
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBw
cm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEwNSw0MSArMTczLDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVy
dHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3Bl
cnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZh
dGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJl
Z3MpOworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJU
KGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAg
ICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1Nyw2ICsyNTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5m
byhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJl
IGRvIGJldHRlciBoZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENv
bnN0YW50SW50KHByb3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3Rh
bnQpCkBAIC0zMTksOCArNDIxLDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0
QnlWYWxXaXQKICAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFp
bGFibGVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7
CisgICAgdW5hdmFpbGFibGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHBy
b3BlcnR5TmFtZSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
cywgcHJvcGVydHlOYW1lLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzOSw3ICs0NDQs
NyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJu
IGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0
ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQ3LDcgKzQ1Miw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBh
dXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0o
YXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAg
ICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTM1NSwxMyArNDYwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBs
b2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAg
IGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAg
ICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4o
KSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4o
KSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0zODEsNiArNDg1LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZv
ckNhbGwoKTsgLy8gT09QUzogRG8gYmV0dGVyIGlmIHdlIGNhbiEKKwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKIApAQCAtMzk0LDEzICs1MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBmYXN0UGF0
aEptcCwgZG9uZSwgZG9uZSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
UHJpdmF0ZU5hbWU+KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgUHJpdmF0
ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwogCi0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwpAQCAtNDIwLDQ5ICs1MjUsMTA1IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29y
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIg
PSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Cisg
ICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0
cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRl
ckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5n
cHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1f
YmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUu
bV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0
ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBH
UFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwg
YXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQz
Ml90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1
dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0
eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9h
Y2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNj
ZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRl
cywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTggKzYzMyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsK
KyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIg
YXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lz
dGVycy4KQEAgLTQ5MiwyNSArNjg3LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlk
c1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC01MjAsMTkgKzcxNyw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7
CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BS
UmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHBy
b3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNl
R1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5
R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5k
KGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBX
ZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ug
d3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAt
NTQxLDIyMSArNzg5LDM2OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlw
ZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdp
c3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5
SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQog
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAot
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1f
bW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBHUFJS
ZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNlTE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQ
UiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUp
OwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhU
aGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlz
VlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4Kytd
OwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdGhp
c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgfQor
CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZS
ZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzV2l0
aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKICAg
ICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1tt
X2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNo
IGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUg
cG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxv
YWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUK
LSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRo
ZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFN
b2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJl
Y3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIAogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTc2NSw3NyArMTE2MCw5NSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAg
IC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZl
Y3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVn
LCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZp
bHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZh
bHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlk
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQ
Uik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5
SWRzW21faW5CeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlk
c1ttX2luQnlJZEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwot
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRH
UFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJu
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0g
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRk
cmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwg
ZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ3LDE3ICsxMjYwLDI1IEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRh
ZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAg
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5n
RXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3Rh
bnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdF
cG9jaCgpKSwgcmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApAQCAtODY3LDIxICsxMjg4LDM2IEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29w
ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShk
c3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsK
KyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAg
ICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJS
ZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAg
ICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29w
ZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNj
b3BlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IGRlcHRoOyArK2kpCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04
OTQsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
IApAQCAtOTA5LDI5ICsxMzQ1LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsK
KyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5r
KHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTQwLDE1ICsxMzc2LDIwIEBA
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3Zv
aWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIo
c3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0g
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0
cnVjdHVyZVNsb3QsIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgc2NyYXRjaEdQUikpOworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBv
aW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAgLTk2MiwxMiArMTQwMyw2IEBA
IHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJl
ZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTk3OCw1MSArMTQx
Myw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFy
IGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBi
dXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMg
Y2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2Ug
PSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAg
IEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVn
VDI7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAg
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIG9m
ZnNldEdQUiA9IHJlZ1QyOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVy
ZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29s
dmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAg
ICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQz
MihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwg
b2Zmc2V0R1BSKTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAg
ICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9m
ZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0
R1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAg
ICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAg
ICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3Jh
dGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBuZWczMihvZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9Q
dHIob2Zmc2V0R1BSLCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChy
ZXN1bHRHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFu
ZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFu
ZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xv
c3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBE
eW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAg
LTEwMzYsMTAgKzE1MDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywg
cmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAg
SnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtMTA1MiwyNyArMTUyMCwyNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExv
YWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDgyLDQwICsxNTUwLDIyIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7
CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQ
dHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBv
aW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRy
KGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBz
ZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUo
c2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTI5LDIxICsxNTc5LDQ5
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVp
bnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRh
ZGF0YS5tX29wZXJhbmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFs
dWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwog
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhp
bmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5k
bGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNl
dFZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BS
OworICAgICAgICAgICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUp
OworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0g
b2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1dHRl
cmZseVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3Bl
R1BSLCBvZmZzZXRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8
SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BS
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAg
ICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNs
b3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9y
ZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRH
UFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0
cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
ICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTExNTQsMjggKzE2MzIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlz
SW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdl
IG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVl
LCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBt
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdw
cigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJl
Z1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFk
YXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRk
cmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBj
YXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTE5MCwx
MiArMTY5NywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJs
b2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdp
c3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3Qg
dXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hH
UFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBz
Y3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFy
KSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8g
cHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAg
ICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTIwOSwyMyArMTcyNSwzMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFs
dWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29k
ZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBk
b3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29s
dmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAg
ICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
LCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwpAQCAtMTI0MiwxMCArMTc2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlm
IChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyNjEsNjEgKzE3ODQsMTc4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9
IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRz
VmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQ
Uik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1Qw
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2Fk
NjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEs
IEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmll
cihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZh
bHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRo
aXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUp
OworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJn
dW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAg
IHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwp
KQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVy
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsK
KyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1p
Z2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5k
IGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRz
IHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2Fs
bG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0Lgor
ICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2Fs
bCArIHNpbGVudCBmaWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVn
aXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRl
ckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYg
KCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
ICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAg
ICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIGlm
IChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAg
IEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAgICBpZiAoZ3ByRm9yT3BlcmFu
ZChvd25lcikgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVyR1BSID0gZ3ByRm9y
T3BlcmFuZChvd25lcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3duZXJWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIG93bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBvd25lckdQUik7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3du
ZXIsIHJlZ1QwKTsKKyAgICB9CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
KQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93bmVyKSAm
IH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
b3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgc2Ny
YXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4KKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZv
cmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZp
bGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChvd25lck5vdENlbGwu
aXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
IAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5s
aW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8gT09QUzogTWFrZSBp
dCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRo
aXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50
byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNh
eSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50
aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28g
d2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAg
ICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUp
Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2
YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1Qw
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwogCi0g
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwu
aXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0xMzI3
LDExICsxOTY3LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25l
ZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMs
IGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAg
ICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+Ojpv
ZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEzNDEsMTAgKzE5OTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7
ICp0aGlzLCBiYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9PUFM6
IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7
CisKKyAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICBz
dG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRl
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKQEAgLTE0NDcsOCArMjExNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihW
aXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIp
CiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsK
KyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJy
YW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2ls
ZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50
U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMp
OwogfQogCkBAIC0xNDY2LDYgKzIxNTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmll
ckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICAKQEAgLTE1NjcsNiArMjI1NCw4IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2kKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5k
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZh
bHNlOworCiAgICAgQVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bj
b2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5v
dERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdD
b2RlQmxvY2spCiB7CiAgICAgQVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywgIXBy
b2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwog
ICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcg
Y29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBkaWQgYmVjb21lIHJlYWR5LiIpOwogICAg
IApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2Rl
QmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIXByb2ZpbGVk
REZHQ29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAog
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGls
YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcw
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDE1ICszMSwyMiBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUg
IlZNSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxKSVRXb3JrbGlzdDo6UGxhbj4gewogcHVibGljOgotICAgIFBsYW4oQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAg
OiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgp
LCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgUGxhbihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRl
eCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICA6IG1fbGxpbnRDb2RlQmxvY2so
Y29kZUJsb2NrKQorICAgICAgICAsIG1fY29kZUJsb2NrVG9Db21waWxlKGNvbXBpbGVUeXBlID09
IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA/IG1fbGxpbnRDb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50
KCkgOiBtX2xsaW50Q29kZUJsb2NrKSAKKyAgICAgICAgLCBtX2ppdChtX2NvZGVCbG9ja1RvQ29t
cGlsZS0+dm0oKSwgbV9jb2RlQmxvY2tUb0NvbXBpbGUsIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgbV9qaXQuZG9NYWluVGhyZWFkUHJlcGFy
YXRpb25CZWZvcmVDb21waWxlKCk7CisgICAgICAgIC8vIE9PUFM6IHZpc2l0IHRoaXMgaW4gY29u
Y3VycmVudCBnYworICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENv
ZGVCbG9jaykgeworICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVhcC5w
cm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVJblRocmVhZCgpCkBAIC01MywxNyArNjAsMjMgQEAgcHVibGljOgogICAg
IHZvaWQgZmluYWxpemUoKQogICAgIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
ID0gbV9qaXQubGluaygpOworCisgICAgICAgIGF1dG8gc2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhp
dChbJl0geworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRD
b2RlQmxvY2spCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVh
cC51bnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9KTsKKwogICAgICAg
ICBzd2l0Y2ggKHJlc3VsdCkgewogICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAg
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGls
ZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOworICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19F
VkVOVChtX2xsaW50Q29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBm
YWlsZWQiKSk7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
ICIgICAgSklUIGNvbXBpbGF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5kb250SklUQW55dGltZVNvb24oKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2RpZEZh
aWxKSVRDb21waWxhdGlvbiA9IHRydWU7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5k
b250SklUQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPm1fZGlk
RmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuIik7Ci0g
ICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1f
Y29kZUJsb2NrKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5qaXRTb29uKCk7CisgICAgICAg
ICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2Rl
KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmpp
dFNvb24oKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MSw4ICs4NCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsg
cmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgVk0mIHZtKCkgeyByZXR1cm4gbV9jb2RlQmxvY2st
PnZtKCk7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0tleSgpIHsgcmV0dXJuIG1fbGxpbnRD
b2RlQmxvY2s7IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2xsaW50Q29kZUJsb2NrLT52bSgp
OyB9CiAgICAgCiAgICAgYm9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5nKCkKICAgICB7CkBAIC04MCwx
NSArOTMsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0ZpbmlzaGVkQ29tcGlsaW5n
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgc3Rh
dGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlw
ZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQog
ICAgIHsKLSAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcGxhbi5jb21waWxlSW5UaHJlYWQoKTsKICAg
ICAgICAgcGxhbi5maW5hbGl6ZSgpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgQ29kZUJs
b2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fbGxpbnRDb2RlQmxvY2s7CisgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9ja1RvQ29tcGlsZTsKICAgICBKSVQgbV9qaXQ7CiAgICAgTG9j
ayBtX2xvY2s7CiAgICAgYm9vbCBtX2lzRmluaXNoZWRDb21waWxpbmcgeyBmYWxzZSB9OwpAQCAt
MjMzLDkgKzI0NywxMSBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2Nr
CiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisKKyAgICBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlID0gT3B0aW9uczo6
Zm9yY2VMT0woKSA/IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA6IEpJVDo6Q29tcGlsZVR5cGU6OkJh
c2VsaW5lOwogICAgIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSB7Ci0g
ICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
QEAgLTI0OSw3ICsyNjUsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJs
b2NrCiAgICAgICAgIAogICAgICAgICBpZiAobV9udW1BdmFpbGFibGVUaHJlYWRzKSB7CiAgICAg
ICAgICAgICBtX3BsYW5uZWQuYWRkKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBSZWZQdHI8UGxh
bj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkpOworICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcg
UGxhbihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7
CiAgICAgICAgICAgICBtX3BsYW5zLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fcXVldWUu
YXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9jb25kaXRpb24tPm5vdGlmeUFsbChsb2NrZXIp
OwpAQCAtMjczLDE0ICsyODksMjQgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENv
ZGVCbG9jawogICAgIC8vIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBpc3N1ZS4gSWYgdGhlIGNvbmN1
cnJlbnQgSklUIHRocmVhZCBpcyBjb252b3llZCwgd2UgcmV2ZXJ0IHRvIG1haW4KICAgICAvLyB0
aHJlYWQgY29tcGlsZXMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGFzIGdvb2QgYXMgaWYgd2UgaGFk
IG11bHRpcGxlIEpJVCB0aHJlYWRzLiBNYXliZSB3ZQogICAgIC8vIGNhbiBkbyB0aGF0IHNvbWVk
YXkuCi0gICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOworICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiB9CiAKKy8qCiB2b2lkIEpJVFdvcmtsaXN0Ojpjb21w
aWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklU
VHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKworICAgIGF1dG8gaXNDb21waWxlZCA9IFsmXSB7Cisg
ICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBpZiAoaXNDb21waWxlZCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgYm9vbCBpc1BsYW5uZWQ7CkBAIC0yOTYsMTcgKzMyMiwyNCBA
QCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogCiAgICAgfQogICAgIAog
ICAgIC8vIE5vdyBpdCBtaWdodCBiZSBjb21waWxlZCEKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAgICBpZiAoaXNDb21waWxlZCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdlIGhh
ZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdpdGgg
dGhlCi0gICAgLy8gYmFzZWxpbmUgSklULgotICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7
Ci0gICAgCi0gICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KLSAgICBKSVQ6OmNvbXBpbGUodm0s
IGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCk7Ci0gICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
Y29kZUJsb2NrKTsKKworICAgIGlmIChPcHRpb25zOjpmb3JjZUxPTCgpKSB7CisgICAgICAgIENv
ZGVCbG9jayogbG9sQ29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOworICAg
ICAgICBKSVQ6OmNvbXBpbGUodm0sIGxvbENvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFz
ZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBsb2xDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29k
ZShsb2xDb2RlQmxvY2spOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlIGRvIHRoaXMgaW4g
Y2FzZSB3ZSBoYWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29t
cGlsZSB3aXRoIHRoZQorICAgICAgICAvLyBiYXNlbGluZSBKSVQuCisgICAgICAgIGNvZGVCbG9j
ay0+cmVzZXRKSVREYXRhKCk7CisgICAgICAgIAorICAgICAgICAvLyBPSywganVzdCBjb21waWxl
IGl0LgorICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlw
ZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOworICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxs
Q29kZShjb2RlQmxvY2spOworICAgIH0KIH0KKyovCiAKIHZvaWQgSklUV29ya2xpc3Q6OmZpbmFs
aXplUGxhbnMoUGxhbnMmIG15UGxhbnMpCiB7CkBAIC0zMTQsNyArMzQ3LDcgQEAgdm9pZCBKSVRX
b3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYgbQogICAgICAgICBwbGFuLT5maW5hbGl6ZSgp
OwogICAgICAgICAKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgICAg
IG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrKCkpOworICAgICAgICBtX3BsYW5uZWQu
cmVtb3ZlKHBsYW4tPmNvZGVCbG9ja0tleSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwb2xsKFZNJik7CiAgICAgCiAgICAgdm9pZCBj
b21waWxlTGF0ZXIoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgdm9pZCBjb21waWxlTm93KENvZGVCbG9j
ayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCkpOwogICAgIAogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCYgZW5zdXJlR2xvYmFsV29ya2xp
c3QoKTsKICAgICBzdGF0aWMgSklUV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51
bGwoKTsKQEAgLTY2LDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBUaHJlYWQ7CiAgICAg
ZnJpZW5kIGNsYXNzIFRocmVhZDsKICAgICAKKyAgICAvL3ZvaWQgY29tcGlsZU5vdyhDb2RlQmxv
Y2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICB2b2lkIGZpbmFsaXplUGxhbnMoUGxhbnMmKTsKICAgICAKICAgICBQbGFu
cyBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAK
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQm
IG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYg
b3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZh
dGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lz
dGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9pZCBs
aW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRv
Q29kZVB0ci5jb2RlUHRyKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgaWYgKGlzV2ViQXNzZW1ibHkg
fHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkK
KyAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNvZGVC
bG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlu
a0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIo
KS5sYWJlbEF0T2Zmc2V0KDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xv
d1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93
UGF0aENhbGwuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGlj
OgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAg
ICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAg
ICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1
Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNv
ZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYyLDgg
KzM2MiwxMCBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoQ29kZUJsb2NrKiBjb2RlQmxvCiB9CiAK
IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9TUi4KLWlubGluZSBib29sIGpp
dENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkp
CitpbmxpbmUgQ29kZUJsb2NrKiBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApKQogeworICAgIC8vIE9PUFM6IEltcGxlbWVudCB0aGlzIHcu
ci50IExPTC4KKwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsgLy8gTXkg
Y2FsbGVycyBkb24ndCBzZXQgdG9wIGNhbGxmcmFtZSwgc28gd2UgZG9uJ3Qgd2FudCB0byBHQyBo
ZXJlIGF0IGFsbC4KICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIApAQCAtMzcy
LDI5ICszNzQsNDUgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVgog
ICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAg
ICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0
aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0
ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
ICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBKSVRXb3Jr
bGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5wb2xsKHZtKTsKLSAgICAKKworICAgIGF1dG8g
bG9sQ29kZUJsb2NrID0gWyZdKCkgLT4gQ29kZUJsb2NrKiB7CisgICAgICAgIGlmIChDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50ID0gY29kZUJsb2NrLT5vcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Cisg
ICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH07CisKKyAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29k
ZUJsb2NrKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKICAgICBzd2l0Y2ggKGNvZGVCbG9j
ay0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDogewogICAgICAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgQ29kZSB3YXMgYWxyZWFk
eSBjb21waWxlZC4iKTsKICAgICAgICAgY29kZUJsb2NrLT5qaXRTb29uKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOwogICAgIH0KICAgICBjYXNlIEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bms6IHsKICAgICAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUds
b2JhbFdvcmtsaXN0KCkuY29tcGlsZUxhdGVyKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVDsKKyAgICAgICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9jaygp
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVC
bG9jazsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBMTEludDogIiwgKmNvZGVCbG9j
aywgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGRhdGFMb2coIlVuZXhw
ZWN0ZWQgY29kZSBibG9jayBpbiBMTEludDogIiwgKmNvZGVCbG9jaywgIlxuIik7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29u
c3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGVudHJ5T1NSKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29u
c3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCiB7CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLAogICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5hbWUs
ICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCkBAIC00MDUsMTggKzQyMywyMSBAQCBzdGF0aWMg
U2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCCiAgICAgICAgIExMSU5UX1JFVFVSTl9U
V08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0o
KTsKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spKQor
ICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlz
dGljcyh2bSwgY29kZUJsb2NrKTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAg
ICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9D
S19MT0dfRVZFTlQoY29kZUJsb2NrLCAiT1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIpKTsKKyAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAiT1NSIGVudHJ5IiwgKCJp
biBwcm9sb2d1ZSIpKTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29k
ZUJsb2NrKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBQcm9sb2d1ZSkKLSAgICAgICAgTExJTlRf
UkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVs
bHB0cik7CisgICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29tcGlsZWRDb2RlQmxvY2stPmppdENv
ZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKGtpbmQgPT0g
QXJpdHlDaGVjayk7Ci0gICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+
YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxw
dHIpOworICAgIExMSU5UX1JFVFVSTl9UV08oY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGUoKS0+
YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxw
dHIpOwogfQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUg
ZW50cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCitz
dGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENhbGxGcmFtZSosIENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQogewogICAgIGNvZGVCbG9jay0+ZG9u
dEpJVEFueXRpbWVTb29uKCk7CiAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRy
KTsKQEAgLTQyNiwzMSArNDQ3LDMxIEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlP
U1IoQ29kZUIKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcikKIHsKICAgICBVTlVTRURf
UEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAi
ZW50cnlfb3NyIiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCkKIHsKICAgICBVTlVT
RURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNh
bGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCks
ICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVu
dHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVl
KCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwot
ICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9T
UihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+
anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrKQogewogICAgIFVOVVNFRF9Q
QVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVu
dHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAg
cmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUt
PmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJ
TlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlD
aGVjaykKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1l
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJs
ZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29u
c3RydWN0X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RF
Q0wobG9vcF9vc3IpCkBAIC00NzksMTkgKzUwMCwyMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChs
b29wX29zcikKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJs
b2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVk
Q29kZUJsb2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykKICAg
ICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KSk7CisgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVC
bG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAK
LSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
OworICAgIEFTU0VSVChjb21waWxlZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUIHx8IGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9M
SklUKTsKIAotICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2stPmppdENv
ZGVNYXAoKTsKKyAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29tcGlsZWRDb2RlQmxv
Y2stPmppdENvZGVNYXAoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBj
b2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAg
ICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxv
Y2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOworCisg
ICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAogICAg
IExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOwog
I2Vsc2UgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMywxMCBAQCBz
dGF0aWMgdm9pZCBkaXNhYmxlQWxsSklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21w
dXRlRGVwZW5kZW50T3B0aW9ucygpCiB7CisgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOwor
ICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOworICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAx
OworCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0
aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3
LDYgKzUyNyw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAg
IHYoQm9vbCwgdXNlSklUQ2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEJvb2wsIHVzZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJ
ZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmll
bGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWNDbGFz
c0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3Rh
bmQgcHJpdmF0ZSBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYo
Qm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9uRXF1
aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnBy
b2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGxs
aW50X2hhbmRsZV91Y2F1Z2h0X2V4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3Qg
dGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpM
T0xKSVQpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2Uu
bGxpbnRQQykpOwogICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0
ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcw
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cExM
SW50KENvZGVCbG9jayogY29kZUJsCiBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShKSVQpCi0gICAgQ29tcGlsYXRpb25SZXN1
bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQpOworICAgIC8vIE9PUFM6IEZpZ3VyZSBvdXQgd2hhdCB3ZSB3YW50IHRvIGRvIHdp
dGggdGhlIG5vIExMSW50IG9wdGlvbi4uLi4KKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQg
PSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUs
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9
PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRp
bHMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBAIEpT
VmFsdWUgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29sIHByZXRl
bmRUb0hhdmVNYW55Q29tcGlsZXMgPSBmYWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBp
ZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7IC8v
IE9PUFMKKwogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVzZUJhc2Vs
aW5lSklUKCkgfHwgIU9wdGlvbnM6OnVzZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5kVG9IYXZl
TWFueUNvbXBpbGVzID0gdHJ1ZTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTVRyYXBzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAs
NyBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoZm91bmRD
b2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9j
aygqbV9sb2NrKTsKICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8v
IExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3ICsxODIsNyBA
QCB2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjCiAKICAgICB3aGlsZSAo
Y2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJ
VENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29k
ZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwogICAgICAg
ICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIH0K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBUb29scy9TY3Jp
cHRzL2NvbXBhcmUtcmVzdWx0cwkod29ya2luZyBjb3B5KQpAQCAtMTczLDggKzE3Myw4IEBAIGRl
ZiBjb21wdXRlTXVsdGlwbGVIeXBvdGhlc2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1bXBCcmVha2Rv
d25zKGEsIGIpOgogICAgIG5hbWVMZW5ndGggPSBsZW4oInN1YnRlc3QiKQotICAgIGFMZW5ndGgg
PSBsZW4oYVt1bml0TWFya2VyXSkKLSAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pCisg
ICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKSArIDMKKyAgICBiTGVuZ3RoID0gbGVuKGFb
dW5pdE1hcmtlcl0pICsgMwogICAgIHJhdGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIpCiAKICAgICBw
VmFsdWVIZWFkZXIgPSAicFZhbHVlIChzaWduaWZpY2FuY2UgdXNpbmcgRmFsc2UgRGlzY292ZXJ5
IFJhdGUpIgpAQCAtMjAzLDcgKzIwMyw3IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhhLCBiKToKICAg
ICBwTGVuZ3RoICs9IDIKIAogICAgIHN0cmluZ3MgPSBbXQotICAgIHN0cmluZ3MuYXBwZW5kKCJ8
e2tleTpee25hbWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0
aH19IHx7Y29tcGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3Jt
YXQoa2V5PSJzdWJ0ZXN0IiwgYVNjb3JlPWFbdW5pdE1hcmtlcl0sIGJTY29yZT1iW3VuaXRNYXJr
ZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVu
Z3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1w
VmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCisgICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5
Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0g
fHtjb21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChr
ZXk9InN1YnRlc3QiLCBhU2NvcmU9ImE6ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2NvcmU9ImI6ICIg
KyBiW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwg
Ykxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0
aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCiAgICAgZm9yIGtleSBp
biBhLmtleXMoKToKICAgICAgICAgaWYga2V5ID09IHVuaXRNYXJrZXI6CiAgICAgICAgICAgICBj
b250aW51ZQpJbmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2
aXNpb24gMjcwNzg5KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxm
LnRlc3RSdW5uZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5j
dGlvbiwKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAg
IG51bWJlck9mREZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAg
ICAgICAgcmV0dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAg
ICAgIC8vIEVtdWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29t
ZSB0aWVyaW5nIGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQor
ICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50
ID0gbWFwLmdldChmKSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAg
IG1hcC5zZXQoZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwg
MDsKKyAgICAgICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWls
TmV4dE5ld0NvZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1No
b3VsZEJlKHRoZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5
cGUucHVzaDsKICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5j
dGlvbn0pKQorICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAg
ICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9h
KSk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3
IEBAIGZ1bmN0aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVU
ZXN0cykKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21w
aWxlZChhcmd1bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQu
c3RhcnQgOiAwOwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417130</attachid>
            <date>2021-01-06 14:25:41 -0800</date>
            <delta_ts>2021-01-06 16:42:21 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>551232</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ3N0YW5mb3JkLWNyeXB0by1zaGEy
NTYnXTsKKwogaWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQog
ICAgIHRlc3RJdGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3RpbwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2
NjMsOCBAQCBwcml2YXRlOgogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1i
ZXIiLCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2
bSwgImlzREZHRW5hYmxlZCIsIGZ1bmN0aW9uSXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBh
ZGRGdW5jdGlvbih2bSwgImRyb3BBbGxMb2NrcyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsK
IAogICAgICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0
Rm9yVGVzdGluZygpKSB7CkBAIC0yNjUzLDYgKzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uQXNEb3VibAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3Vi
bGVOdW1iZXIobnVtKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklz
REZHRW5hYmxlZCwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oT3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwog
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxv
Y2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBP
cHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENv
ZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2Fz
bVNpZ25hdHVyZUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwog
bmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9u
QW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3Ap
CkBAIC0yNjksNyArMjcxLDcgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46
OmR1bQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29k
ZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0
b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBk
dW1wSGVhZGVyKGJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMg
QEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91
dC5wcmludCgiYmIjIiwgYmxvY2suaW5kZXgoKSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRp
Y3Rpb25zQXRIZWFkKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhl
YWQ6IFsiKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlv
bnNBdEhlYWQtPmF0KGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIsICIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rp
b25zLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3Vs
YXRpb24ob3V0LCBwcmVkaWN0aW9ucy5hcmd1bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2Nh
bHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAg
ICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyAp
IHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5h
dChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkpOwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRl
Y29kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGljU3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgog
Y2xhc3MgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1w
ZXI8QmxvY2s+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVz
TWFwJiA9IElDU3RhdHVzTWFwKCkpOwotICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayos
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBv
dXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkp
OworICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJl
YW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNN
YXAoKSk7CiAKICAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0
YW50cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHcmFwaC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAg
cHVibGljOgogCiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2
b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+
Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmls
ZSgpKQorICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50
ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCiAgICAgewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxDb2RlQmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAq
dGhpcywgc3BlY3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIE9wZXJhbmQgZGVzdGluYXRpb25Gb3IoY29uc3QgQnl0
ZWNvZGUmIGIKICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0g
b3BfaXRlcmF0b3JfbmV4dCkgewogICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgewog
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dDogewotICAgICAgICAgICAg
aWYgKHR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6REZHSklUKQor
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IHR5cGUgPT0gSklUVHlw
ZTo6RlRMSklUKQogICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoT3BJdGVyYXRv
ck5leHQ6Om5leHRSZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlLm1fdmFsdWU7
IC8vIFdlIHJldXNlIHZhbHVlIGFzIGEgdGVtcCBiZWNhdXNlIGl0cyBlaXRoZXIgbm90IHVzZWQg
aW4gc3Vic2VxdWVudCBieXRlY29kZXMgb3Igd3JpdHRlbiBhcyB0aGUgdGVtcCBvYmplY3QgLgog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVV
c2VEZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcg
KzgwLDYgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8v
IE5vIHVzZXMuCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0g
ICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICBjYXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9w
X2ptcDoKICAgICBjYXNlIG9wX25ld19vYmplY3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3Bl
OgogICAgICAgICByZXR1cm47CiAKKyAgICBVU0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQ
b2ludGVyKQogICAgIFVTRVMoT3BUb1RoaXMsIHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHos
IHRhcmdldFZpcnR1YWxSZWdpc3RlcikKICAgICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwg
c3JjRHN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsK
ICAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkKQorICAgIGlmICgodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8
IHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKQogICAgICAgICBvdXQucHJpbnQoIiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwog
ICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnBy
aW50KCIgKE5ldmVySW5saW5lKSIpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAg
ICAgZ2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRo
aXMsIHRoaXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxD
b2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0
YXR1c01hcCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdy
YXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1
c01hcCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBz
dGF0dXNNYXApCkBAIC0yOTUsNiArMjk1LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIAogICAgICwgbV9vd25lckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywg
b3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAg
ICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2lu
dGVyKQorICAgICwgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMpCiAgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdp
c3RlcnMpCiAgICAgLCBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5t
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNs
cyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCkBAIC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIu
aXNMb2NhbCgpKTsKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXRO
dW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRl
cnMgPSBvdGhlci5udW1QYXJhbWV0ZXJzKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tT
ZXQoKS5hZGQodGhpcyk7CiB9CkBAIC04NTAsNyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJs
b2NrKCkKICAgICAvLyB0byB0aGUgQ29kZUJsb2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlz
IHRpZWQgZGlyZWN0bHkgdG8gdGhlIENvZGVCbG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRv
bWF0aWNhbGx5IGNsZWFyZWQgd2hlbiB0aGUgQ29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlm
IChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6
aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5j
bGVhcldhdGNocG9pbnRzKCk7CiAjZW5kaWYKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJl
bW92ZSh0aGlzKTsKQEAgLTEwMzcsNyArMTAzOSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRW
aXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENv
ZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdl
dHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0
J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFw
LmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMg
dGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAg
ICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21z
OworICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9t
czsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBf
bXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAg
c3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZl
Y3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAg
ICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1
cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7
CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNh
c2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAg
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CiAgICAgICAgIAogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hl
YXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEyMjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJt
aW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMg
Y291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5k
IHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQgZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91
bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xkIGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQg
Y2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAo
SklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6
OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpM
T0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzogU2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRv
IGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJQ3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVz
IGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hl
cygpOworICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAt
MTUyOCw3ICsxNTM2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2Rl
LT5kZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFs
aXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYgKzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRl
Q291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAg
ICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2
b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAg
cmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVz
KCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkp
IHsKICAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5k
ZmdDb21tb24oKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVj
b3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmly
c3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQu
Z2V0KCk7CkBAIC0xODEwLDcgKzE4MTksNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFN0cm9uZ1JlZmVyCiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24g
PSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3Rh
dHVzZXMudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHZpc2l0T1NSRXhpdFRhcmdl
dHMobG9ja2VyLCB2aXNpdG9yKTsKQEAgLTE4MjMsNyArMTgzMiw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW4KICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMTg2Nyw3ICsxODc2LDcgQEAgQ29kZUJsb2NrKiBDb2Rl
QmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIENvZGVC
bG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgeworICAgICAgICBp
ZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBlKSkgewogICAg
ICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3ZlIGhhZCBhIG1l
bW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8vIGhhcyBiZWVu
IHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUo
KSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2RlQmxvY2sgaXMg
c3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJVApAQCAtMTkz
MSw3ICsxOTQwLDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckluZGV4KAog
RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0Nh
bGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKQogewogI2lmIEVOQUJM
RShERkdfSklUKQotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3JpZ2luYWxDYWxs
U2l0ZSkpOwogICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENhbGxTaXRlLmJp
dHMoKSkpOwogICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdp
bmFsQ2FsbFNpdGUpOwpAQCAtMjIzMSw1MSArMjI0MCw1NSBAQCB2b2lkIENvZGVCbG9jazo6amV0
dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFw
KCkpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6
Ci0gICAgLy8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0
YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAxKSBJZiB3ZSdy
ZSBERkcvRlRMLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3Rh
Y2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAogICAgIC8vICAgIHdlIHNob3Vs
ZCBPU1IgZXhpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFm
dGVyIHRoZSByZXR1cm4uCiAgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUg
b3duZXIgZXhlY3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4K
IAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAg
ICAgICAgIGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKLSAgICAK
LSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKSB7Ci0gICAg
ICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0
aW9uKSkKLSAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24s
IGRldGFpbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFu
ZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkg
aGFwcGVuZWQuCi0gICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0
ZSgpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhl
YXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0
YWJsZSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWFzb24gIT0g
UHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpD
b21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxh
dGlvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCisgICAg
ICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWls
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBh
bmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5
IGhhcHBlbmVkLgorICAgICAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZh
bGlkYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxp
ZGF0ZWQuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVu
dCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtl
ZChvd25lckV4ZWN1dGFibGUoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERp
c2Fzc2VtYmx5KCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgaW52YWxpZGF0ZSAiLCAqdGhp
cywgIlxuIik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCiAgICAgLy8gQ291bnQg
dGhlIHJlb3B0aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KICAgICBp
ZiAobW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7CiAgICAgICAgIC8vIEZJWE1FOiBNYXli
ZSB0aGlzIHNob3VsZCBjYWxsIGFsdGVybmF0aXZlKCkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICAgICAgYmFzZWxpbmVBbHRl
cm5hdGl2ZSgpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICAgICAgZGF0
YUxvZygiICAgIERpZCBjb3VudCByZW9wdGltaXphdGlvbiBmb3IgIiwgKnRoaXMsICJcbiIpOwor
I2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmICh0aGlzICE9IHJlcGxhY2VtZW50KCkpIHsKICAg
ICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhlIGVudHJ5cG9pbnQuIFRo
aXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKICAgICAgICAgLy8gYmxvY2tzLgorICAg
ICAgICAvLyBPciwgd2UncmUgYW4gTE9MIENvZGVCbG9jayBhbmQgd2VyZSBhbHJlYWR5IGpldHRp
c29uZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYWx0ZXJuYXRpdmUoKSkK
ICAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogCi0gICAgaWYg
KHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJv
ZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYm
IHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCiAgICAgICAgIHRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgIC8v
IEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwg
Y29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQg
YSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCkBAIC0yMzkwLDcgKzI0MDMsNyBA
QCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxGCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJD
b2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChjYWxs
ZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgPSBmYWxzZTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5r
KCksICIgICAgQ2xlYXJpbmcgU0FCSSBiY2F1c2UgY2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXpl
ZC4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ4MywxMiArMjQ5NiwxNCBAQCB1bnNpZ25lZCBD
b2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMoCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6Omlz
QmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwogICAgIGlmIChPcHRpb25zOjp0ZXN0VGhlRlRMKCkp
IHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICBpZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICBy
ZXR1cm4gMTAwMDAwMDsKICAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwg
PyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogICAgIH0KICAgICBDb2Rl
QmxvY2sqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gKChy
ZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5
cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKyAgICByZXR1
cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRU
eXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiB9CiAKIGlu
dDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdApAQCAt
MjcwOSw3ICsyNzI0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1Bh
dAogdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxh
dGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgSklUVHlwZSB0eXBl
ID0gaml0VHlwZSgpOwotICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7Cisg
ICAgaWYgKHR5cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgdHlwZSAhPSBKSVRUeXBlOjpM
T0xKSVQpIHsKICAgICAgICAgZGF0YUxvZ0xuKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJh
c2VsaW5lIGNvZGUgYnV0IGhhdmUgIiwgdHlwZSk7CiAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihqaXRDb2RlKCkuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1aW50
OF90Pih0eXBlKSk7CiAgICAgfQpAQCAtMjcyNyw3ICsyNzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnNldE9wdGltaXphdGlvblRocmVzaG9sZAogICAgIAogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAg
ICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
cGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlw
ZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6Omlz
REZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJ
bnZvY2F0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVk
OgpAQCAtMjc1Niw3ICsyNzcxLDggQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRo
cmVzaG9sZAogICAgIAogdWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVz
aG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogewotICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgLy9BU1NFUlQoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpOyAvLyBPT1BTOiBXZSBjYWxsIHRoaXMgZnJvbSB0aGUgTE9M
IGNvbXBpbGVyIHRocmVhZCBiZWZvcmUgaW5zdGFsbC4KKwogICAgIC8vIENvbXB1dGUgdGhpcyB0
aGUgbGFtZSB3YXkgc28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRoaXMgaXMgY2FsbGVkIGluZnJlcXVl
bnRseQogICAgIC8vIGVub3VnaCB0aGF0IHRoaXMgbG9vcCB3b24ndCBodXJ0IHVzLgogICAgIHVu
c2lnbmVkIHJlc3VsdCA9IGRlc2lyZWRUaHJlc2hvbGQ7CkBAIC0yODM2LDcgKzI4NTIsNyBAQCBE
Rkc6OkNvZGVPcmlnaW5Qb29sJiBDb2RlQmxvY2s6OmNvZGVPcmlnCiAKIHNpemVfdCBDb2RlQmxv
Y2s6Om51bWJlck9mREZHSWRlbnRpZmllcnMoKSBjb25zdAogewotICAgIGlmICghSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHJldHVybiBtX2ppdENv
ZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVycy5zaXplKCk7CkBAIC0yODQ3LDcgKzI4NjMs
NyBAQCBjb25zdCBJZGVudGlmaWVyJiBDb2RlQmxvY2s6OmlkZW50aWZpZXIoCiAgICAgc2l6ZV90
IHVubGlua2VkSWRlbnRpZmllcnMgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVy
cygpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVu
dGlmaWVycykKICAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4
KTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAg
IEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIHJldHVybiBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRp
ZmllcnNdOwogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpAQCAtMjk0OCw3ICsyOTY0LDgg
QEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIHZvaWQgQ29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkKIHsKLSAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIC8vIE9PUFMKKyAg
ICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAgCiAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsKQEAgLTMwNTAsNiAr
MzA2Nyw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJ
VFR5cGU6OkxPTEpJVDoKICAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9y
KHRoaXMpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTMyMjYsMTQgKzMyNDQsMTQgQEAg
dm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbgogewogICAgIG1fbnVtQnJl
YWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7CiAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMp
OwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAo
SklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25EdWVUb0RlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKIHZvaWQgQ29kZUJsb2Nr
OjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGUgbW9kZSkKIHsKICAgICBt
X3N0ZXBwaW5nTW9kZSA9IG1vZGU7Ci0gICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxl
ZCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAobW9kZSA9
PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkK
ICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5n
KTsKIH0KIApAQCAtMzQyMSw5ICszNDM5LDkgQEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29k
ZUJsb2NrOjpieXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5k
ZXg7CiAgICAgSklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRU
eXBlID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCkKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4
KGppdFR5cGUpKQogICAgICAgICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0
VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKKyAgICBlbHNlIHsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KSk7CiAgICAgICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KTsKQEAgLTM0NjYsNyArMzQ4NCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3AKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25h
bCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAgICAgLy8gY2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0
aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFuZGxlciBzYWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hv
dWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBtX2ppdENvZGUuCi0gICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZH
T3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpLT5oYXNJbnN0YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMoKTsKICNl
bHNlCkBAIC0zNDgwLDcgKzM0OTgsNyBAQCBib29sIENvZGVCbG9jazo6aW5zdGFsbFZNVHJhcEJy
ZWFrcG9pbnRzCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWdu
YWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55
dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNo
b3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBjb21t
b25EYXRhID0gKm1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgY29tbW9uRGF0YS5pbnN0YWxs
Vk1UcmFwQnJlYWtwb2ludHModGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzOCw3ICs0Mzgs
OCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7
CisgICAgICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CiAgICAg
fQogICAgIAogI2lmIEVOQUJMRShKSVQpCkBAIC01MTEsNiArNTEyLDcgQEAgcHVibGljOgogICAg
IFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2Zp
bGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5j
dG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOwpAQCAtNTM5LDcgKzU0MSw3IEBAIHB1YmxpYzoKICAgICAvLyBIYXZpbmcgY29kZSBvcmln
aW5zIGltcGxpZXMgdGhhdCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wg
aGFzQ29kZU9yaWdpbnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpOworICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNERkdPckZUTChq
aXRUeXBlKCkpOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENh
bGxTaXRlSW5kZXggaW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNv
bnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAg
ICAgICAgfSk7CiAgICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9p
ZCBDb2RlQmxvY2s6OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3Jh
cmVEYXRhLmdldCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVE
YXRhLT5tX2NhdGNoUHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsK
KyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhpdEZyb21Bbnl0aGluZzoKICAgICAg
ICAgb3V0LnByaW50KCJGcm9tQW55dGhpbmciKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RXhpdEZyb21MT0w6CisgICAgICAgIG91dC5wcmludCgiRnJvbUxPTCIpOworICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tREZHIik7
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0aW5nSklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4
X3QgewogICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21MT0wsCiAgICAgRXhpdEZy
b21ERkcsCiAgICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2ICszOSw4IEBAIGVudW0gRXhpdGlu
Z0pJVFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5nSklUVHlwZSBleGl0aW5nSklUVHlw
ZUZvcihKSVRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbUxPTDsKICAgICBjYXNlIEpJVFR5
cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9tREZHOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5k
KSA9PSBzaXplb2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2Fs
bGVlID0gZmFsc2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFn
ZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZl
Y3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0
NCwyMyBAQCBwdWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxp
Y2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVf
dCBudW1UbXBzKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNp
emVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkK
ICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1M
b2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykK
ICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsg
bnVtVG1wczsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMg
KyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1
ZXMuZ3JvdyhzaXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJ
bml0aWFsaXphdGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAK
LSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9j
YWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0
IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBu
dW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAg
ICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxz
KG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAg
ewotICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRt
cHMpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51
bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMu
ZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5k
czxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251
bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9j
YWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1Db25zdGFudHMob3Ro
ZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3Ro
ZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcy
LDMzICsxNzYsNTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2Nh
bHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRt
cHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygp
IC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBu
dW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0K
IAorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAg
c2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJP
ZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAg
ICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVy
biBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAg
ICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3Qg
Y29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlk
eCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25z
dFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4
KGlkeCldOyB9CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KKworICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjpl
bmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyBy
ZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29u
c3RSZWZUeXBlIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAg
IAogICAgIFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0
YW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0K
KyAgICBDb25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRL
aW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsy
NzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6
ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2Fs
cyA9IG51bWJlck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVy
T2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkw
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRT
aXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9m
QXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9m
Q29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhuZXdTaXplKTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpW
ZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUg
QEAgcHVibGljOgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIo
KSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGNvbnN0YW50SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCAr
MzQ4LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVy
KCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50
KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFu
ZC50b0xvY2FsKCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJl
ck9mQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJh
bmQudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3Bl
cmFuZChPcGVyYW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0g
ICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1l
bnRzKCkpCisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFy
Z3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGlu
ZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAo
aW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAg
ICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBu
dW1iZXJPZkNvbnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZv
ckNvbnN0YW50KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAo
aW5kZXggPT0gY2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2
YWx1ZSkKQEAgLTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251
bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2Fs
cyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1f
bnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9j
YWxzIGFyZSBsb2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFu
ZCB0aGUgcmVzdCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVk
IG1fbnVtQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9Owor
ICAgIHVuc2lnbmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAg
aW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJp
bnQodmlydHVhbFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBP
cGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2
b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVu
dHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFu
ZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1w
KHRtcEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2Fs
bGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChj
YWxsZWUoKSwgY29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVy
YW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7
CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFy
Z3VtZW50SW5kZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0K
KyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJjYWxsZWUiLCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQs
NyBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgIG1f
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUgPSBqaXQt
PmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlKGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLT5jYWxsU2l0ZUlu
ZGV4KTsKICAgICAgICAgbV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uID0gbV9s
aXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5udW1iZXJP
ZlNldFJlZ2lzdGVycygpID4gMDsKICAgICAgICAgaWYgKG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3Rl
cnNJZkV4Y2VwdGlvbikKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0LT5jb2RlQmxvY2soKS0+aml0VHlw
ZSgpKSk7CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1f
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9j
YXRvci0+dXNlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5l
eGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC03MTAsNyArNzEwLDcgQEAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAvLyBXZSBzZXQgdGhl
c2UgdG8gaW5kaWNhdGUgdG8gdGhlIHN0dWIgdG8gcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBDb2Rl
QmxvY2sncwogICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciB0YWJsZSB3aGVuIGl0IGlzIGRl
YWxsb2NhdGVkLgogICAgICAgICBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzID0g
Y29kZUJsb2NrOwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVC
bG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOworICAgICAgICBBU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJz
LT5qaXRUeXBlKCkpKTsKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
ID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
aAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5l
IGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAh
KHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVl
ICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNO
b3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2
YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJu
cyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRo
YXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lz
dGVyLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFz
cyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAg
ZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2Zm
ZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVy
ICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3Qg
eyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFp
c0NvbnN0YW50KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0
dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRv
TG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwo
bV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJh
bmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJl
dHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0
YXRpYyBpbnQgYXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVu
dCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNv
bnN0YW50VG9PcGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdp
c3RlcjsKIH07CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
Ojphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4
KQoreworICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFu
dFRvT3BlcmFuZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2so
Qnl0ZWNvZGVJbmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51
bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAg
ICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzLCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25D
b3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBA
QCB2b2lkIE9TUkVudHJ5RGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FO
CiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBB
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7Cisg
ICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAg
IEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpMT0xKSVQpOwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAg
IEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk0LDYgKzM5NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0Nh
bGwKICAgICBpZiAoZXhpdElubGluZUNhbGxGcmFtZSkKICAgICAgICAgaml0LmFkZFB0cihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CiAKKyAgICAvLyBPT1BTOiBNYWtlIHRoaXMgZG8gdGhlIHJpZ2h0IHRoaW5nIGJhc2VkIG9uIExP
TCBvciBub3QuCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9y
RXhpdCA9PSBjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyAr
MTIxLDYgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAg
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51
bVZhcmlhYmxlczsKICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVu
c2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFi
bGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBz
ID0gY29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAg
ICB9IGVsc2UgeworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKTsgLy8gT09QUzogYnl0ZWNvZGVWZXJzaW9uCiAgICAgICAg
IG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKICAg
ICAgICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgcHVibGljOgogCiAgICAg
ICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5jbGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVy
YW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOwor
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFi
aWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDAsIDApOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykg
ewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkp
ID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNW
YWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI2ICs1MiwxNyBAQCB2b2lkIENhbGxG
cmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGCiBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVC
aXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7
Ci0gICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rOgotICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKLSAgICBjYXNlIEpJVFR5
cGU6Okhvc3RDYWxsVGh1bms6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRl
eChjb2RlQmxvY2soKS0+aml0VHlwZSgpKTsKIH0KIAogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRl
Qml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygp
KTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVFR5
cGU6OkludGVycHJldGVyVGh1bms6CisgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAg
ICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2Ug
SklUVHlwZTo6REZHSklUOgogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTc5LDggKzcwLDYgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0Fy
ZUNvZGVPcmlnaQogICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTYsMTAgKzQ1NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBIYW5kbGVySW5mbyogZmlu
ZEV4CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwog
ICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleDsKLSAgICBpZiAoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgZXhjZXB0aW9uSGFu
ZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwotICAgIGVsc2UK
KyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jay0+
aml0VHlwZSgpKSkKICAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5i
eXRlY29kZUluZGV4KCkub2Zmc2V0KCk7CisgICAgZWxzZQorICAgICAgICBleGNlcHRpb25IYW5k
bGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiAKICAgICByZXR1
cm4gY29kZUJsb2NrLT5oYW5kbGVyRm9ySW5kZXgoZXhjZXB0aW9uSGFuZGxlckluZGV4LCByZXF1
aXJlZEhhbmRsZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMiArMzAsMTcgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUg
IkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJCeXRl
Y29kZVVzZURlZi5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2lu
Y2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50
VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNp
bmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmln
aW5NYXAuaCIKQEAgLTQ5LDYgKzU0LDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5h
bCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAs
NiArNjcsODg4IEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxG
VExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lk
IEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxh
dGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVn
KSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRl
Y29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
ZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUs
IHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkp
OworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBn
cm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0
aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRh
bmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFt
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92
YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGly
ZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlz
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7
CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUu
bV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVy
YXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1l
dGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUo
Ynl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwor
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUu
bV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0
YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BN
b3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAg
Y2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBl
T2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90
aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29i
amVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9O
dW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50
czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVt
ZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAg
ICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChp
c0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJl
YWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShy
aWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3Bl
Y0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURv
dWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1F
OiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0
KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIg
aGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAg
ICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0
aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxl
LmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUp
OworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAg
IGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8
ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsK
KyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2Vy
dmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQg
JiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0
KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0
LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFu
ZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNv
ZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRl
Y29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmln
SW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBj
YXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29k
ZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0
aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29k
ZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBl
ID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJv
bCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVm
ZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBp
ZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEg
dGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUg
bmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAg
ICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9h
ZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2Zp
bGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNl
dFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmplY3Qp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAgIC8v
IEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlwZSBp
ZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
dGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigp
LCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3Zh
bDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwgU3Bl
Y1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJpbmcp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5j
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4oKSwg
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVu
Y19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5j
RXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19h
c3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3Bl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2xl
eGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCksIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0
dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVy
dHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3Bl
cnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3By
b3BlcnR5X2VudW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5n
IHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckdlbmVyaWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2Rl
Y2xfaW5fZXZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZl
U2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNE
aXJlY3RBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29w
ZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0
dGVyZmx5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3Vt
ZW50c0J1dHRlcmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3UHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2xlc3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNz
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEJlbG93ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc19lbXB0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJ
c1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lzX3VuZGVmaW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcElzVW5kZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pc19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNO
dW1iZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19i
aWdfaW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlv
bjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9u
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3Ry
dWN0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rv
cj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5vdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50
aXR5X3dpdGhfcHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wSWRlbnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3Bl
Y3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9m
aWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRv
bVByb2ZpbGUpOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFz
SW5zdGFuY2U+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
bnN0YW5jZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNl
b2Y+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5j
ZW9mX2N1c3RvbToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dHlwZW9mOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwg
U3BlY1N0cmluZ0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dp
dGhfdHlwZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRo
VHlwZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5
X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1
dF9ieV92YWxfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3Bf
cHV0X2ludGVybmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJf
c2FtcGxlcl9iZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ug
b3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVh
Y2hhYmxlOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJy
b3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3Jl
dDoKKyAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRl
cl9ieV92YWw6CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9w
X2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNh
c2Ugb3Bfam1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAg
Y2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1
bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAg
Y2FzZSBvcF9qZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgor
ICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bf
amxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToK
KyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bf
am5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6
CisgICAgY2FzZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNl
IG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3
aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9w
X3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNh
c2Ugb3BfcHJvZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9w
dXRfZ2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNl
IG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92
YWw6CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9w
X3lpZWxkOiAKKyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBj
YXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9w
cm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNh
c2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAg
Y2FzZSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9j
YWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToK
KyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enpl
cl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25z
dHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rf
bm9fdGxzOgorICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF9nZXRfaG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91
bmNhdWdodF9leGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9j
b25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxf
Y2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9p
dGVyYXRvcl9vcGVuOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9jb25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92
YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdz
X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50c19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19z
bG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9pdGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50
YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
YXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAg
ICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90
cmFtcG9saW5lX3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRp
b24oKQoreworICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9j
b2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9u
c0F0SGVhZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fcHJlZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlv
bnNBdEhlYWRbaV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBT
cGVjTm9uZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9m
aWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9m
aWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZm
ZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkg
eworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
cik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisK
KyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUm
IHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAg
ICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3By
ZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
ImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0
YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0
SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAg
ICBib29sIGNvbXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRzLnJlc2l6ZSht
X2dyYXBoLT5zaXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8g
REZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVy
IGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4K
KyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0
IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8g
T09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlm
IHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0
ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJl
bnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAg
ICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAgIG1fdXNlQ291
bnRzW2Jsb2NrLmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9j
b2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAgIGlmICghYmxv
Y2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7IGkgKyBibG9j
ay5sZWFkZXJPZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1
dGVVc2VDb3VudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV91c2VDb3VudHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAxOworICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDaGVj
a3BvaW50IGNoZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2lu
dHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1
dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBj
aGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNr
cG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNj
ZXNzb3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50
UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlv
bnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcHV0ZVVzZUNv
dW50cyA9IGZhbHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNyArOTU2LDEzIEBAIHZv
aWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVl
RnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0g
dHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVC
bG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVs
cyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03
NSw2ICs5NzAsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAg
ICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5n
KGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6
TE9MKQogewogfQogCkBAIC0xMzcsMTEgKzEwMzMsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7
IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUp
IFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBv
cF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNv
ZGVJbmRleCkgeyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAg
ICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBc
CiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNl
TE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAg
ICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1l
KTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA1OCwzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAg
IGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2Rl
ZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6
IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
c2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBz
bG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2Uu
cmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5k
c3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93
Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAg
IE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQg
SklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1
blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAg
ICAKQEAgLTIzMSwxNyArMTEzOSw4NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAg
IGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZp
b3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0
ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9m
ZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBp
bnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAv
LyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAg
ICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVB
dEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVz
aXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFw
aCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhp
dEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1
dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRl
eCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhd
LmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0K
IAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVs
KCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5z
dHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJy
ZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
ZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmlu
ZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2Nr
LT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2st
PmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3Mg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVk
ZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRF
bmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFBy
ZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICpt
X3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0g
cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJs
b2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9u
cyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3VzZUNvdW50c1ttX2N1
cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3BpbGxDYW5kaWRhdGVz
LmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBw
cmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlmICht
X2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSA+IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAgICAg
ICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KKyAg
ICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5Q
YXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNzgsNDYgKzEyNTUsNTMgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAor
CisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mg
YmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1w
UmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwog
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5
X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxl
KQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0
KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERF
RklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Nj
b3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERF
RklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Nj
b3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9h
Y2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChu
ZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJp
bmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2Vu
ZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4o
KS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVh
dGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRl
cmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Nv
bnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLm1fZHN0LCBTcGVjU3Ry
aW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0LCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAg
ICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0Pigp
Lm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2Nv
cGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNO
b25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVh
bFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Nj
b3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNI
ZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVf
YWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3Nw
cmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2Rz
dCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJh
eSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19P
UChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVt
ZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAgICAgICBERUZJTkVfU0xP
V19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dl
bmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0
cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RB
cmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90
aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2Rz
dCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAg
IERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5l
cmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFz
eW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9T
TE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0
b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERF
RklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTM4MiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2Jl
Z2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERF
RklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9w
X21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkK
KyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3Bf
bXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc4LDYgKzE0NjYsNjYgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tl
ZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1
dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbF92YXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ug
b3BfcHJvZmlsZV90eXBlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
IkRpZG4ndCBjaGVjayBMT0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBzdGVwT3Zlckluc3Ry
dWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgIGF1dG8gY291bnQgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQm
IGNvdW50ZXIgPSBtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAtLWNvdW50ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFjb3VudGVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE9PUFM6IERvIHRoaXMgbGF6aWx5IGluIHNsb3cgcGF0aCBjcmVh
dGlvbi9zcGlsbEZvckNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy9tX3NwaWxsQ2FuZGlkYXRl
cy5hcHBlbmQob3BlcmFuZCk7CisKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvYmJlcihncHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBm
cHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwciAh
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZnBy
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3VycmVudElu
c3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAg
ICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBj
aGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBp
ZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRl
Y29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC00
OTgsNiArMTU0NiwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCiAgICAg
bV9qbXBUYWJsZS5jbGVhcigpOwogfQogCitzdGF0aWMgdm9pZCBzbG93Q2FzZVJhbihTdHJpbmcg
a2V5KQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVp
bnQ2NF90Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5Owor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0
cnVjdCgpOworICAgIH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAg
IHVpbnQ2NF90IHZhbHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAg
IGlmICgodmFsdWUgJSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2
YWx1ZSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiB7CiAgICAg
bV9nZXRCeUlkSW5kZXggPSAwOwpAQCAtNTE2LDE0ICsxNTc4LDI1IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3Vu
dGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7
CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAg
ICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2Vz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93
Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRl
eDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRl
eCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5s
aW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29k
ZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsK
KworICAgICAgICBpZiAoZ2V0ZW52KCJwcmludFNsb3dDYXNlcyIpICYmIGF0b2koZ2V0ZW52KCJw
cmludFNsb3dDYXNlcyIpKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gbmFtZTsK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKG5hbWUpOworICAgICAgICAgICAgU3RyaW5n
IGtleSA9IG5hbWUudG9TdHJpbmcoKSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkgKyAiICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCldOworICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0Jikgewor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlUmFuKGtleSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUg
PSBudWxscHRyOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQpAQCAtNTgwLDcg
KzE2NTMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3Ry
YXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVnYXRl
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk5LDYgKzE2NzEsOSBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChtb2QpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
dW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluYykKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjM1LDE1ICsxNzEwLDE4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBp
dGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZz
ZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNs
b3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
Zmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAg
ICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5l
bmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3Vn
aCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8u
b2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmls
ZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3Qg
cmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dD
YXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7
CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTY4OCw2
ICsxNzY2LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9
CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBPT1BTOiBoZWxwZnVsIGZv
ciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNoIChtX2NvZGVCbG9jay0+
Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3OCw2ICsxODU4LDg4IEBA
IHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgYm9vbCBwcmludEVhY2hPU1IgPSBnZXRlbnYo
InByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaE9TUiIpKTsKKworICAg
IGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1bXBMaXN0IGV4aXRDb21t
b247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBzKSB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICAgICAgYXV0byBqdW1w
cyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0aGlzKTsKKworICAgICAg
ICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAgICAgICAgICAgICAgIFN0cmluZ1ByaW50U3Ry
ZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKHByaW50
U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHByaW50U3RyZWFtLnRvQ1N0
cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVmKCk7IC8vIGxlYWsgaXQu
CisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBleGl0IGF0IGJjIyIsICBi
eXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGJyZWFr
cG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMuCisKKyAgICAgICAgICAg
IG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSks
IExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4aXRDb21tb24uYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4aXRDb21tb24uZW1wdHko
KSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0aGlzKTsKKworCisgICAgICAgIHN0YXRpY19h
c3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOworICAgICAgICBBU1NFUlQo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhudW1iZXJUYWdSZWdp
c3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBiZWluZyBhIGNhbGxlZSBz
YXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBt
b3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUg
dGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVt
cC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJy
aWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBwcmVwYXJl
Q2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVu
Y3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJn
R1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAg
ICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBudW1iZXJUYWdSZWdp
c3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpLCBy
ZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7CisgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkpOworCisgICAgICAgIGF1
dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9j
b2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkpKTsKKyAgICAg
ICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBz
YXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBh
IHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRyaWdnZXJM
T0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJlcGFyZUNhbGxP
cGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9u
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93KSks
IG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BS
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVy
VGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0aGlzKTsKKyAgICAgICAg
CisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5i
YXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAvL0Fzc2VtYmx5
SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMyKAorICAgICAgICAvLyAg
ICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgLy8gICAgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0
clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygp
LmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAgICAvLyBPT1BTCisgICAg
ICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBkZXN0
aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUo
KTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpu
b3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAgICAgICBtb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkp
LCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcp
OworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0b3JlIExMSW50IGNvZGVi
bG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29uIGlmIHdlIGV4Y2NlZWQg
ZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExMSW50IGNvZGUgYmxvY2sK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC05NjcsNyArMjEyOSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygp
CiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RF
KAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5l
IEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUg
SklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJs
b2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3Jk
Rm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQu
c2l6ZSgpKSAvCkBAIC05NzgsNyArMjE0MCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGlu
aygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6
U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRD
b2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJp
dHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcg
RGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5cGU6
OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjM0LDg2NiBAQCBTZWNvbmRzIEpJVDo6dG90YWxD
b21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRv
dGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNw
ZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0
S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCku
Zmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBt
X2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNl
Y29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0
ZXJTZXQgY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIg
c3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVy
U2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJh
bms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMo
cmVnKSB8fCBhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFs
bG93ZWQuYWRkKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMg
UmVnaXN0ZXJTZXQmIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIg
c3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0
aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVk
IHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEg
aG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21w
dXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKTsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8g
T09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJl
bnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBP
T1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJT
ZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJl
c3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOwor
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRo
KCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVy
LiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZp
Z3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYg
bV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAg
IC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50
KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRH
UFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAg
ICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShy
ZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkg
eworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAg
IGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcp
OworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBh
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxs
b2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50
KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUu
aXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNv
bnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3Jl
ZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAo
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9y
T3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFs
aWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUg
aXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8v
IGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAg
ICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0
aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9j
YXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAu
CisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2Fs
bHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBz
dGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBs
KCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7Cisg
ICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Ns
b2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxh
bigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZl
UGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
IChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIocmVnLCByZWdWYWx1ZS5vcGVy
YW5kKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0
b0lnbm9yZSwgRlBSUmVnIHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQg
YmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVy
YW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHJlZywgcmVnVmFsdWUub3BlcmFuZCkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAg
ICAgaWYgKHJlZy5mcHIoKSAhPSB0b0lnbm9yZUZQUikKKyAgICAgICAgICAgIGFwcGVuZElmTmVl
ZGVkKHJlZyk7CisgICAgfQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAg
ICAgICAgaWYgKHJlZy5ncHIoKSAhPSB0b0lnbm9yZSkKKyAgICAgICAgICAgIGFwcGVuZElmTmVl
ZGVkKHJlZyk7CisgICAgfQorCisgICAgcmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlz
LCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmIHJl
Y29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9LCByZWNv
cmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpLCByZWNvcmQuc2F2ZVBsYW4pOworfQorCitzdGF0aWMgdm9pZCBh
ZGRMb2FkQ291bnQodWludDY0X3QgY291bnQpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvdW50
ZXI7CisgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
Kytjb3VudGVyOworICAgICAgICBpZiAoY291bnRlciAlIDEwMDAwID09IDApCisgICAgICAgICAg
ICBkYXRhTG9nTG4oIlJ1bnRpbWUgbG9hZCBjb3VudDogIiwgY291bnRlcik7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAg
ICB1aW50NjRfdCBsb2FkQ291bnQgPSAwOworICAgIGZvciAoYXV0byYgcGFpciA6IHNhdmVQbGFu
KSB7CisgICAgICAgIFJlZyByZWcgPSBwYWlyLmZpcnN0OworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IHBhaXIuc2Vjb25kOworICAgICAgICBpZiAocmVnID09IHJlZ1RvSWdub3Jl
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvcGVyYW5kID09IG9wZXJhbmRU
b0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigp
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVnLmlzRlBSKCkpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAg
IEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgdW5i
b3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgfQorCisgICAg
ICAgICsrbG9hZENvdW50OworICAgIH0KKworICAgIGlmIChmYWxzZSAmJiBsb2FkQ291bnQpIHsK
KyAgICAgICAgcHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgIGFkZExv
YWRDb3VudChsb2FkQ291bnQpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewor
ICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5kc3QsIHNs
b3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQg
dG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlz
QWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKwor
ICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzZXRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsg
KnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShm
cHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7IC8vIE9P
UFM6IFZhbGlkYXRlIHRoYXQgZm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykgdGhhdCBkZWYs
IHdpbGxEZWYgd2FzIGNhbGxlZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBh
c3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVj
Qnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdw
cikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsK
KyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQor
Cit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7
CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJl
ZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAg
ICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBH
UFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6Omdw
cihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDog
bV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBS
KCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJ
VDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJP
cGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fklu
dDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJ
VDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
YXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29w
ZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
Tm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
SW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNl
bGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFu
ZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlm
ICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwg
SGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNw
ZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFu
ZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90
Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxs
Q2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNl
bGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZh
bHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6
On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAg
ICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2pp
dC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFu
ZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
OiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVn
ID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJs
ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6
OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBt
X2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAg
cmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVl
T3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9
OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAg
IG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZl
VGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5i
cmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBH
UFIsIG1fZnByKTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKwor
ICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpOdW1iZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICBmcHIoKTsKK30KKworSklUOjpOdW1iZXJPcGVyYW5kOjp+TnVtYmVyT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6
ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBp
ZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAg
ICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQs
IG1fb3BlcmFuZCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAg
ICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisK
KyAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkp
CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGdwciwgbV9mcHIpOworICAgIGVs
c2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3Bl
cmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZShncHIs
IHRlbXBHUFIsIG1fZnByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBt
X2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1
dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1
bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1
ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC51bmJveERv
dWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVt
cCgpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShncHIsIG1fZnByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICB9CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2Rl
TnVtYmVyKTsKKworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAg
IHJldHVybiBtX2ZwcjsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpJbnQzMkNv
bnZlcnRpbmdPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6
IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5k
Ojp+SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsK
K30KKworR1BSUmVnIEpJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBp
ZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0
ZUludDMyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIG9wIHsgbV9qaXQsIG1f
b3BlcmFuZCB9OworICAgICAgICBtX2dwciA9IG9wLmdwcigpOworICAgICAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5k
IHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9w
ZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2pp
dCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBhdXRv
IGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwg
SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFs
dWVSZWdzIHsgbV9ncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgICAgIG1faml0LnVu
Ym94RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZTsK
KyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0
c0RvdWJsZVRvSW50MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAg
ICAgICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50
aWNzKGZwciwgbV9ncHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBl
bmQobV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElm
VHJ1bmNhdGVTdWNjZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9q
aXQuc2lsZW50U3BpbGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQu
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91
YmxlVG9JbnQoKSA/IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0lu
dDMyLCBtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwo
c3BpbGxSZWNvcmQpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5t
b3ZlKHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAg
ICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRl
ZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAg
ICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRG
UFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
YnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0
Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsK
K30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIp
KTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5k
KSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkp
OworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sK
KyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWND
ZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZh
bHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMyT25s
eTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCeXRl
Y29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQklH
SU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UKKyAg
ICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAgICAg
c3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAg
ICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICByZXR1
cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihvcGVy
YW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90QmlnSW50
MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3RhdGUo
KQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwg
MCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVt
YmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBl
cy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0YXRl
LnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2Rl
QmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJlbnRT
dGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIsICIs
IGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkKK3sK
KyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8gcmVn
IDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihy
ZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGF1
dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0Fs
bG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBk
YXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAi
SklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgog
I2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwog
CiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJh
c2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0lu
Zm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsK
QEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsK
IAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNs
b3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAg
ICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBs
YW4gPSBWZWN0b3I8c3RkOjpwYWlyPFJlZywgVmlydHVhbFJlZ2lzdGVyPj47CisKKyAgICBzdHJ1
Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAg
ICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tT
aXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNs
b3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9y
IHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBv
ZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhh
dmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAg
ICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBW
ZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlv
biBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNo
UmVjb3JkIHsKQEAgLTE5Nyw2ICsyMTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFT
U19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5n
IEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1Bh
dGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCAr
MjIxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
ID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRC
eUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwg
b2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9y
IHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2Vt
ZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2
OwotCiAgICAgcHVibGljOgotICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgo
MCkpOworICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2Vs
aW5lLAorICAgICAgICAgICAgTE9MCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqLCBDb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAg
ICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAs
MjIgKzIzNiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQg
bGluaygpOwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21w
aWxlKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGls
ZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisg
ICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDAp
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVj
b2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBjb21waWxlVHlwZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21w
aWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0
dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAg
ICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsK
ICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+
KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9
CkBAIC0yNDMsMjEgKzI1OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21w
aWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQs
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
UHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ss
IENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4
ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhh
c0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxp
bmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4
Niw2ICszMDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsK
IAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbElt
cGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAg
ICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1f
dXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAg
ICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0
IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxs
IGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikK
ICAgICAgICAgewpAQCAtMzIzLDkgKzM1MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1
bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1
bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsK
KyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdp
c3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9p
ZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzMzLDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjpl
bmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3Mg
JiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
JiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3Qg
T3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVz
dWx0KGNvbnN0IE9wJik7CiAKQEAgLTM2MCw3ICszOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0
RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAg
ICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQg
Y29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29t
cGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFK
dW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
ICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVC
YXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIH07CkBAIC01MDgsOCArNTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVs
YXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9u
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBs
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZl
cnQsIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+
Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRp
dGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1w
bChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAg
dm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRv
cihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiop
OwpAQCAtNjEwLDcgKzY1MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQp
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgog
ICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjc4LDc4ICs3MjEsODEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5
KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJn
dW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9v
cF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190
cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhG
dW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJv
b2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlz
VW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdpc3RlcigpLCBH
UFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAgICAgICB2b2lkIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRp
ZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2ln
bmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2
b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qs
IEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQ
UlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1
ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODEwLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFk
ZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVp
bnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
IAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAg
ICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZp
cnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODIyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsK
IAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAg
ICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25z
dCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9u
LCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgot
ICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBj
b25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0
aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwotCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2Fz
ZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZy
b20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2
b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsK
LSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVn
aXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0g
ICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAg
fQorICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4q
LCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAKLSAgICAgICAgYm9vbCBoYXNB
bnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAg
ICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2Vz
LCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIp
OworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVj
b2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+KTsKQEAgLTg5MSw2ICs5MTUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFu
ZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3Bl
cmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
KyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2Fs
bDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKQEAgLTk2MSw2ICs5OTUsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7
IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7Cisg
ICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAg
ICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTcxLDYgKzEwMDgsMjgz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4K
ICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7
CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAg
IH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxp
ZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJU
ZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50
MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5J
bnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAz
MiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBi
ZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNl
bGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52
YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAg
ICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVn
IGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVP
cGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1f
ZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOdW1iZXJPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgTnVtYmVyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+TnVtYmVyT3BlcmFuZCgpOworICAgICAgICAgICAg
RlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU3Bl
Y3VsYXRlIG51bWJlciwgYW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9yIGJpdG9wcy4KKyAg
ICAgICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJh
bmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlv
bnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9y
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsK
KyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAg
IHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFs
dWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
LnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVl
KEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1
ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VM
T0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdW
YWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykg
eworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFz
c2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJl
Z1ZhbHVlKGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAg
ICAgICAgIGlmICghbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBm
cHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFT
U0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5k
KG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090
aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9v
bCB1c2VMT0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4
aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQg
bW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxs
b2NhdGVHUFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFs
bG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJS
ZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7Cisg
ICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6
IE1ha2UgdGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0
IHRvIHNldCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2Nr
KFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2ls
ZW50U3BpbGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSA9IElu
dmFsaWRHUFJSZWcsIEZQUlJlZyB0b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOworICAgICAg
ICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAg
ICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVn
aXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJw
cmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1f
ZmFyQ2FsbHM7CkBAIC05OTAsNyArMTMwNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
ZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9i
eXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7
CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzNDEsODcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxv
Y2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBh
biB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUg
dGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAg
ICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsK
KyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAg
IHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwg
aXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0
aGlzID0geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9y
bWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7Cisg
ICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAg
ICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1Jl
Zy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFu
ZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0u
bWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChw
cm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHBy
b3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1
cnJlbnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKwor
ICAgICAgICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayog
bV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgVmVj
dG9yPE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAgIE9wZXJh
bmRzPHVuc2lnbmVkLCB0cnVlPiBtX2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDE2PiBtX3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBWZWN0b3I8
TG9nRW50cnk+IG1fZXhpdExvZzsKKworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0
YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9w
cmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxCeXRlY29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODggQEAKICNp
bmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAKKyNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVy
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
c0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE1MSwzMiArMTUzLDkxIEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IElu
c3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2ln
bmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1
bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShy
ZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwg
cmVnVDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
biwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdl
dCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJh
dGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoK
ICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8v
IC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQg
aW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAg
ICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1i
ZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJoc0dQUik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRp
c2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICsy
OTAsNDMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAg
ICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
b3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhz
R1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhz
R1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3Ay
KTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJh
bmRDb25zdGFudEludChvcDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
cmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJlZ1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qg
b3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIElt
bTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhT
KCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlv
biwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICszNDIs
ODkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAg
ICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAm
PSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0g
cmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAg
ICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
aHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
aHNHUFIpOworICAgICAgICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dDsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBy
ZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0g
Z2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihvcDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRp
b24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QwKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1t
ID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRl
KGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BS
KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJl
Z1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJl
Z1QxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAg
ICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAg
fQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24s
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24s
IGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwg
aW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nh
c2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJs
ZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVy
dCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVz
dDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJl
c3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2Rl
IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9h
dGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29u
c3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZs
b2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7
Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0zMDAsOCArNDMzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0g
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVn
aXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNiw4ICs0NTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAo
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFu
Y2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3Rl
ciwgcmVnVDEpOwpAQCAtMzUxLDEyICs0ODAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5n
UG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
OwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAg
ICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMg
PSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50
MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0Rv
dWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjksOSArNDk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAg
ICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAg
ICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
UkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTM4MSwxMSArNTA5LDQ3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0g
Ynl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwg
cmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAg
ICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8m
IHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBw
cm92ZW5UeXBlIGFncmVlcyB3LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBm
cHIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlu
cHV0R1BSLCBmcHIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MS4wOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZw
cik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAg
ICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3cs
IGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAg
ICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAg
ICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91
YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9u
ZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxv
dywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5w
dXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3Bl
Y0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveElu
dDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNTU3LDUzIEBA
IHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChw
cm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9h
ZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBz
dWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAg
IHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihP
dmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNl
dEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0
ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBS
LCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1
dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJp
Z0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAg
ICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2MTMsODkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJ
ViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVn
aXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NF
UlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQo
cmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQs
IG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4
KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMs
IGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4
VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAg
ICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4
VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxo
cyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BS
ID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIo
KTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShlYXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGxocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMs
IGxoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChsaHNHUFIpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocmhzLCByaHNHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKworICAgICAgICBt
b3ZlKGxoc0dQUiwgZWF4KTsKKyAgICAgICAgbW92ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbGhzR1BSID0gcmVnVDQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGxocywgbGhzR1BSLCByaHMsIGVjeCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAg
ICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDAp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRl
bm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigt
MSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwg
VHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxp
bmsodGhpcyk7CiAgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIo
ZWN4KTsKLSAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5P
ckVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0
aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigw
KSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVy
YXRvclBvc2l0aXZlLmxpbmsodGhpcyk7Ci0gICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBK
U1ZhbHVlUmVncyB7IGVheCB9KTsKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgZWF4KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUobGhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKHJocyksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0JpZ0ludCkgJiYgaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCaWdJbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgpOwogfQogCiAjZW5k
aWYgLy8gQ1BVKFg4Nl82NCkKQEAgLTQ2NCw3ICs3MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNv
bmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJ
bnQzMk9wMjsKQEAgLTQ3NCw2ICs3MTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVn
VDApOwpAQCAtNTYyLDE1ICs4MDQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVy
YXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9u
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1
Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03MjQsMTMgKzk2NCwxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFy
aXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJ
VE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJl
IGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3Bl
cmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGlt
aXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpA
QCAtNzQyLDE1ICs5ODAsNDIgQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNv
bnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYXV0byBiaXRPcCA9IFsmXSAoR1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQUikgeworICAg
ICAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXRhbmQ+KSB7CisgICAgICAgICAgICAgICAgYW5kMzIo
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB9IGVsc2UgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXRvcj4pIHsKKyAgICAgICAgICAgICAgICBvcjMy
KGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0eG9yPikgeworICAgICAgICAgICAgICAgIHhv
cjMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgfSBlbHNlIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wTHNoaWZ0PikgeworICAgICAgICAgICAgICAg
IGxzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAg
ICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICB9OworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMu
Z3ByKCk7CisgICAgICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyQ29u
dmVydGluZ09wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJDb252
ZXJ0aW5nT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsK
KyAgICAgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KICNlbmRpZgogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQ7CkBAIC03NjAsMzMgKzEwMjUsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0
UGF0aChjb25zdCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMikpOwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8
fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJp
Z2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3Qg
cGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5l
bXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ay
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxl
ZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAo
IWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAg
IH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9w
ZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2Ny
YXRjaEdQUik7CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRP
cGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRG
YXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0
KTsKKwogICAgIGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRF
bWl0UHJvZmlsaW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9w
Y29kZShieXRlY29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShi
eXRlY29kZSwgcmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wTGlzdCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShy
ZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1
ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzExNDEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDIwICsxMTg3LDYgQEAgdm9pZCBK
SVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFs
aWRGUFJSZWc7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMjsKLSNlbmRpZgotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwogCkBAIC04NzMsMjEgKzExOTcsNzcgQEAgdm9pZCBK
SVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQo
IWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBS
MiA9IEludmFsaWRGUFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1w
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7Cisg
ICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQg
c29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBs
YWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRU
ZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7
CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAg
aWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAg
ICAgSklUUmlnaHRTaGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwg
cmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRo
KCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Ax
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0lu
dDsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7
CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC05MDIsMTggKzEyODIsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJ
bnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAg
IGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAg
ICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwg
bGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMu
Z3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5m
cHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJm
bG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5m
cHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAg
ICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
TnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBhZGREb3VibGUobGhzRlBS
LCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlv
blRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxP
cEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9w
dGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFk
ZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxl
ZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxMzUy
LDM1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSBy
ZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIx
LCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBw
YXRoLgotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJl
c3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07
CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdp
c3RlciBhcyBzcmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BS
MSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cg
cGF0aC4KKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAg
IH0KICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKQEAgLTk0MSwxOSArMTM4OSwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUVW5hcnlNYXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJl
c3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0
aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRl
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRv
ci0+dmFsdWU7CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVy
YXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJh
dGVkSW5saW5lQ29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAg
ICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFy
aXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBl
bHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdz
LmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1Jl
Z3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0
byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtOTYzLDcgKzE0MTQsMTQgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAg
ICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRl
Y29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNv
ZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzE0MzIsODIgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25z
dGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0
KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsK
KyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmln
aHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBG
UDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRl
bXA+IHJpZ2h0VGVtcEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9
IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2Ny
YXRjaEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAt
PmdwcigpIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAu
ZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
cmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigp
OworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBS
ID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
Mik7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAg
IGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBS
RUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXND
b25zdCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0
YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBH
ZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7Cisg
ICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1Jp
Z2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICgh
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5l
cmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBA
IC0xMDE1LDE3ICsxNTE2LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUMKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJ
bmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJ
bmxpbmVDb2RlKSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNl
IGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMik7CisgICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBy
aWdodFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOworICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCBy
ZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigp
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwog
ICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7
CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQg
PSBsYWJlbCgpOwpAQCAtMTAzNSwxMSArMTU1MywyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUQmluYXJ5TWF0aElDCiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYm
IGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVy
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJp
Z0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElD
U2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hG
dW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVw
YXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlv
blN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5l
cmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE1NzUs
OCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mg
c3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0
LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOwpAQCAtMTA4NSw3ICsxNjEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNH
ZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUs
MTYgKzE2MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJp
Z2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUs
MTUgKzE2MzIsMzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwog
CiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVy
YXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAg
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07
CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVn
VDIgPyByZWdUMyA6IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDog
cmVnVDAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsg
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2Vu
ZGlmCiAKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CisgICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmln
aHRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CisKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJp
dGhQcm9maWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJl
cGF0Y2gpCkBAIC0xMTU2LDIzICsxNjk0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0
IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9
IGZwUmVnVDI7Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxw
dHI7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTcw
OSwyMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVs
c2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFu
ZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYK
LQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsK
KyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmln
aHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBG
UDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRl
bXA+IHJpZ2h0VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBv
cDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1w
RlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxl
ZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsK
KyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0
RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAt
PmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAg
ICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAg
ICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBS
ID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
CiAKICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIs
IHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBh
dGgoKSkgewogICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7
CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdz
LmdwcigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4u
ZW5kSnVtcExpc3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCkuZW1wdHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2Rpdik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQorCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
MSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BNdWw+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZs
b3coKSB8fCBhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZU5lZ1plcm9Eb3VibGUoKSkgeworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
VGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZw
cigpOworICAgICAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAg
ICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigpOworICAgICAg
ICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxoc0dQUiwgbGhzRlBSKTsKKyAgICAgICAg
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHNHUFIsIHJoc0ZQUik7CisgICAgICAgICAg
ICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIGxoc0dQUiwgVHJ1c3Rl
ZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2
ZVplcm8sIGJyYW5jaDMyKEJlbG93LCByaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAg
ICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRl
Y29kZS5tX2RzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0
LmZwcigpOworICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIp
OworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9
IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CisgICAgZW1pdE1h
dGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnBy
KCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBS
LmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0
S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIo
KSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1YklDID0g
bV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3Vi
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJQyA9IGJp
dHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudElu
c3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJ
Q1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3Vi
UHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9QT1cgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDExIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkK
IHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3Io
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rlcigp
LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0aW9uRm9yKGJ5dGVj
b2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5LDggQEAgYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxv
Y2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJl
dHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAg
ICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7
CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJUKG9wY29k
ZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICszMzcsNDQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVP
cENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWls
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWls
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
ICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYsNiArMzg5LDEz
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAgICAgfQog
ICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hv
dWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUg
Y2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAg
ICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhlcmU/CisK
KyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRp
b25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0IChpdGVyYXRvcikg
aXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVy
dHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5leHRDaGVja3Bv
aW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdp
c3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChuZXh0Q2hl
Y2twb2ludFNsb3cpOworCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0VGVtcCB7ICp0aGlzLCByZWdUMCB9OworICAgICAgICBHUFJSZWcgc2hvdWxkQmVSZWdUMCA9
IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNob3VsZEJlUmVnVDAg
PT0gcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwor
ICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJl
Z1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGlu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwogCiAgICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpAQCAtNDU2LDYg
KzQ3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAg
ICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAvLyBPT1BTOiBM
b2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNl
cyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBv
d24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nhc2UgPSBicmFuY2hJZk5v
dEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDM3ICs0OTksNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIp
OwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3Vs
dEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xvd1BhdGg7CisgICAgICAg
IGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0
R1BSKSk7CiAKLSAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQo
dmFsdWVHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCk7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKHZhbHVlR1BS
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVzZWRSZWdpc3Rl
cnMsCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhp
dGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGgu
YXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoZG9uZUNoZWNr
cG9pbnRTbG93UGF0aCk7CisKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX2RvbmUpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAg
ICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewogICAgICAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7
CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
ZmFsc2U7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CiAKKyAgICAgICAgSnVtcExpc3QgdmFsdWVDaGVja3BvaW50U2xvd1Bh
dGg7CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZt
KCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQodmFsdWVDaGVja3Bv
aW50U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSk7CisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV92YWx1ZSk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHZhbHVlR1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKICAgICAgICAgaXRlcmF0
aW9uRG9uZS5saW5rKHRoaXMpOwpAQCAtNTE1LDEwICs1NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKQEAgLTUy
Niw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKICAgICAg
ICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwogICAgICAg
ICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTc3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMl0ubGlu
ayh0aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKQEAgLTU2MSw3
ICs1OTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAKICAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9
Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgY29uc3QgY2hh
ciogSklUQ29kZTo6dHlwZU5hbWUoSklUVHlwZSBqaQogICAgICAgICByZXR1cm4gIkxMSW50IjsK
ICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICByZXR1cm4gIkJhc2VsaW5l
IjsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuICJMT0wiOwogICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gIkRGRyI7CiAgICAgY2FzZSBK
SVRUeXBlOjpGVExKSVQ6CkBAIC0xMDgsNyArMTEwLDcgQEAgSklUQ29kZVdpdGhDb2RlUmVmOjpK
SVRDb2RlV2l0aENvZGVSZWYoQwogCiBKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENv
ZGVSZWYoKQogewotICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKGlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKSkK
KyAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChpc0RGR09yRlRMKGppdFR5
cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQogICAgICAgICAmJiBtX3Jl
Zi5leGVjdXRhYmxlTWVtb3J5KCkpCiAgICAgICAgIGRhdGFMb2coIkRlc3Ryb3lpbmcgSklUIGNv
ZGUgYXQgIiwgcG9pbnRlckR1bXAobV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpKSwgIlxuIik7CiB9
CkBAIC0yMzcsNiArMjM5LDExIEBAIE5hdGl2ZURPTUpJVENvZGU6Ok5hdGl2ZURPTUpJVENvZGUo
Q29kZVIKICNpZiBFTkFCTEUoSklUKQogUmVnaXN0ZXJTZXQgSklUQ29kZTo6bGl2ZVJlZ2lzdGVy
c1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoQ29kZUJsb2NrKiwgQ2FsbFNp
dGVJbmRleCkKIHsKKyAgICAvLyBGb3IgQmFzZWxpbmUgSklULCB0aGlzIGlzIHRyaXZpYWxseSB0
cnVlLgorICAgIC8vIEZvciBMT0wgSklULCBldmVyeXRoaW5nIGlzIGFscmVhZHkgc3BpbGxlZCB0
byB0aGUgc3RhY2sgYXQgZWFjaCBvcGNvZGUsIHNvIHdoZW4gd2UKKyAgICAvLyBnbyB0byB0aGUg
b3BfY2F0Y2gsIHRoZSBsaXZlIHN0YXRlIG11c3QgYWxyZWFkeSBiZSBpbiB0aGUgcmlnaHQgcGxh
Y2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEFsc28sIG9wX2NhdGNoIGhhcyBubyBpbmNvbWluZyBy
ZWdpc3Rlci90eXBlIHByb29mIHN0YXRlLCBzbyBpdCdzIHRyaXZpYWwgdG8gY2F0Y2gKKyAgICAv
LyBhbiBleGNlcHRpb24gaW4gTE9MIGp1c3QgYnkganVtcGluZyB0byBvcF9jYXRjaC4KICAgICBy
ZXR1cm4geyB9OwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBjbGFzcyBKSVRUeXBlIDog
dWludDhfdCB7CiAgICAgSG9zdENhbGxUaHVuaywKICAgICBJbnRlcnByZXRlclRodW5rLAogICAg
IEJhc2VsaW5lSklULAorICAgIExPTEpJVCwKICAgICBERkdKSVQsCiAgICAgRlRMSklUCiB9OwpA
QCAtNjcsMzYgKzY4LDIzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBl
TmFtZShKSVRUeXBlKTsKIAotICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRvbVRpZXJKSVQoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkJhc2VsaW5lSklUOwotICAgIH0KLSAgICAKICAg
ICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKICAgICB7CiAgICAgICAgIHJldHVybiBKSVRU
eXBlOjpGVExKSVQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKSVRUeXBlIG5leHRUaWVySklU
KEpJVFR5cGUgaml0VHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewotICAg
ICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICAgICAgcmV0dXJuIEpJVFR5
cGU6OkRGR0pJVDsKLSAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gSklUVHlwZTo6RlRMSklUOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpO
b25lOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBib29sIGlzRXhlY3V0YWJs
ZVNjcmlwdChKSVRUeXBlIGppdFR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUp
IHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgogICAgICAgICBjYXNlIEpJVFR5cGU6Okhv
c3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRlZmF1bHQ6
CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAg
ICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklU
OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDcsNyAr
OTUsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6
CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgorICAg
ICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6
TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMTYsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChqaXRU
eXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6TE9MSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAg
Y2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyNCw2
ICsxMTcsMjQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgc3RhdGljIGJvb2wg
Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVy
VGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6TE9MSklUOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCiAg
ICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBlY3RlZExvd2VyLCBKSVRUeXBl
IGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNFeGVjdXRh
YmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKQEAgLTE0NSw5ICsxNTYsMTkgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIGlzTG93ZXJPclNhbWVUaWVyKGV4cGVjdGVkTG93ZXIsIGV4
cGVjdGVkSGlnaGVyKTsKICAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1c2VzUmVwbGFjZW1lbnRD
b2RlQmxvY2soSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGppdFR5cGUg
PT0gSklUVHlwZTo6TE9MSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5
cGUgPT0gSklUVHlwZTo6RlRMSklUOworICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBpc09w
dGltaXppbmdKSVQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGppdFR5
cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUIHx8IGpp
dFR5cGUgPT0gSklUVHlwZTo6TE9MSklUOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzREZH
T3JGVEwoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKICAgICAgICAgcmV0dXJuIGppdFR5cGUgPT0g
SklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUOwogICAgIH0KICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIGdlbmVyaWNVbndp
bmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhCiAgICAgICAgIC8vIHdpdGggdGhpcyBieXRlY29kZSBv
ZmZzZXQgaW4gdGhlIG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5nbGVzcwogICAgICAg
ICAvLyBhbmQgY2FuIGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJseSBleGl0cyB0
byBoYW5kbGVyLT50YXJnZXQKICAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFtZS4KLSAgICAg
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0
ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT50
YXJnZXQpLnB0cigpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGNhdGNoUm91dGluZSA9IGhh
bmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0
NSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBP
T1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRv
bid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3
LDYgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgogQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwg
dGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwpAQCAtMTY3LDI1ICsxNjksNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChp
dGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhh
c0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRl
Y29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA3LDI3ICsxOTAsMzYgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0
aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1w
KQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAg
CisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVj
b2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1f
c2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxh
c3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQo
SnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1
bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBS
ZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0g
ICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1
bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHku
Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVj
b2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisg
ICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTQw
NiwxMSArMzk4LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwog
ICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qp
Ci17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3Qp
KTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDEsNyArMTQxLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIH07CiAKLSAgICAgICAgYm9v
bCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxv
Y2stPmppdFR5cGUoKSk7CisgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRD
b2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKIAogICAgICAgICBpZiAobV9n
ZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoKSB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsx
OTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9w
ZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDYgKzQxLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0
dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01MSw2ICs1MywyOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBJZiB3
ZSBjaGFuZ2UgcmVnYWxsb2Mgc3VjaCB0aGF0IHRoZXJlIGNhbiBiZSBOIHJlZ2lzdGVycyBwZXIg
bG9jYWwsIHdlIGNhbiBtYWtlIHRoaXMgc3VjaCB0aGF0IHdlIGRvbid0IG5lZWQgdHdvIHJlZ3Mu
CisgICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJ
bnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzExNCw1MyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9u
VmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
LSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVn
OworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxv
Y2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBh
bGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAg
ICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hS
ZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVn
ID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNo
UmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsK
ICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1
dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxv
Y2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVn
LCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1f
ZHN0KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5t
X2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3Ry
dWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNzAsNTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxS
ZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBH
UFJSZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAg
ICAvLyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVy
YW5kPiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0
YW5jZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1w
LmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVt
cGxhY2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5n
cHIoKTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAg
ICAgICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBk
b24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0g
ICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJv
dG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3Rh
bmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQg
Y29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVj
dCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRy
ZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAg
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0
MCArMjIzLDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUg
b3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJl
Z2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBi
ZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJl
c3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRo
YXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVj
a2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAg
ICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Qz
LCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxP
cGVyYW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJv
dG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7Cisg
ICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRl
bXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAg
ICAgIEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAg
IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZh
bHVlKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVU
ZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxs
LmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRl
bXBDZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3By
KCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywg
dmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKwor
ICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJv
dG9HUFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAg
ICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3Vs
dFRlbXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BS
LAorICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOwor
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VP
ZnMuYXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3By
KCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1
ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAg
Zm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdl
IGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3RvLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBj
ZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0
X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdl
bigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1
bHQKKyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHBy
b3RvCisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2Vu
KTsKKyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4g
PSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCkt
PnJlZ3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMyNCwyOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1w
dHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNTQsNzIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
cmVnVDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAg
ICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAg
ICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0
R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1
dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFs
LCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
cmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDAp
OworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDAp
OworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MjgsMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhl
cikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwx
MiArNDYyLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyNpZiBD
UFUoQVJNNjQpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIGlucHV0R1BSLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHRlc3Q2NCha
ZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAg
ICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0OTgsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
bnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVz
dDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdp
c3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0Uo
QklHSU5UMzIpCkBAIC0yODIsMjEgKzUyOCw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdf
aW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0g
YnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChp
bnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0
Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50
MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwg
cmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBi
cmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0lu
dDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVS
TiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMx
MywxOCArNTk0LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50
IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZh
bHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlw
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAK
LSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAg
ICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjQzLDYxIEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1w
LmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0
KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBz
cGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVP
ckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVj
dFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBj
b21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzcwOCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4Lgog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcyNyw0MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAg
Ci0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAg
aWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJy
YW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1
bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAg
ICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIgKzc3MCwyMDMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25l
ID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkp
KSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJ
ZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5
bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1i
b2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5j
dGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1
bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5j
dGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUu
Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5v
dD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZh
bHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1
ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTogc3RyaW5ncywgYml0aW50
LCBvYmplY3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBi
ZWxvdy4KKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxz
ZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3
aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBi
ZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8g
VGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFn
IGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0
IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9v
bGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4g
dGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0
cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUo
dHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBi
aXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZh
bHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9u
LCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9
IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNj
cmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBK
U1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRj
aDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
IH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBj
b25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
IHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIg
PSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2Ny
YXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gy
LmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVl
UmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIs
IHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk3NSwxMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251
bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhl
cihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3Qs
IGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBv
biB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAv
LyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAg
ICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5v
dyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5r
KHRoaXMpOworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBK
dW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBu
dWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7
Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
T3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAg
IGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8v
IE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAg
ICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0
KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0Nl
bGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0
dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxl
IHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNr
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJn
ZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8vIE5v
dyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzExMDYsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVm
aW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8g
ZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIp
KQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTUwMCwxMCArMTEzNCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxs
KGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAK
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
LSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE2NSwz
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VS
VChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVj
aWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRh
ZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1
YWwubGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAg
ICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVxdWFs
ID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRl
ci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFk
YXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
QVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3Rk
Ojppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8g
RXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVh
bEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUo
cmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZh
bHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAg
ICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNH
UFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhz
KSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAg
ICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBD
b21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAg
ICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRo
OworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29tcGFy
ZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisKKyAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6amVx
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIEFTU0VSVCh1
c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0Vx
ID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSks
IHRhcmdldCk7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsK
KyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3Vi
bGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJv
dmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgIGlmICghaXNFcSkKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIp
OworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhs
aHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRh
cmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMp
KSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAg
ICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAu
ZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCBy
aHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRv
IG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wRXE+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAg
ICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUg
PSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRj
aDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwg
dmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7
CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BOZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
Y29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcg
cmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEplcT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzogV2UgY2FuIG1ha2UgdGhp
cyBhIHNpbmdsZSBicmFuY2ggaWYgdGhlIHJlc3RvcmUgZG9lc24ndCBjbG9iYmVyIHJldHVyblZh
bHVlR1BSLgorICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNs
b3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKKwog
dm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRo
cm93PigpOwpAQCAtNTg5LDc0ICsxNDg4LDE0NiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0
RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1Qx
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlz
RXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBE
b3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAg
IGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFw
QmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVh
cEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlMzIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUo
ZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2Fz
ZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CiAKLSNpZiBVU0UoQklH
SU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8g
YmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUp
Ci0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwot
ICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxs
IHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAg
ICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVu
dHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJh
bmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdl
IHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0
aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2ls
bCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElm
IGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBo
aWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAx
PDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7
Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1Qz
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkp
OwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1w
IGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwg
cmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBj
b3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhl
cmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90
aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAg
ICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3Rl
ZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAg
IC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVx
KToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAg
ICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsK
KyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYg
KGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93UGF0
aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKwor
ICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhh
dCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFu
Y2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMg
YW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywg
bGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVt
YmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAg
ICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAg
ICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7
CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdU
Myk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBv
cjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JF
cXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
cmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8s
IHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJ
bnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0lu
dDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdz
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0Uo
QklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBz
dHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBz
bG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIs
IHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgot
ICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1w
IHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVt
cCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92
ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisg
ICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMp
OworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5r
KHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBl
bHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTY0NSwxMzUgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAg
YXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90
RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92
ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkK
KyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmpl
Y3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJo
cykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgLy8gT09Q
UzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2Fz
ZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRo
OworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7
CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lmIFVTRShCSUdJTlQzMikK
LSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJp
Y3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAg
ICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFr
ZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8g
c2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFn
bWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRo
IGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSBy
ZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBU
aGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8
PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0
IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwg
YmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVn
VDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hC
aXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0
KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCBy
ZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVn
VDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdU
MCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0
byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwot
ICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3Mg
dGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYg
Ym90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShC
SUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlw
ZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQg
aXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVmdCA9
PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2Vs
bCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBn
b3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1w
bGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmds
ZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQg
aWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0
cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkg
dG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAor
ICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwg
YmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVz
IGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAg
ICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAg
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAg
ICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRv
IGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIp
OworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTog
dW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBw
YXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpO
U3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShC
SUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0
cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNs
b3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwg
d2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0g
ICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAg
cmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICAv
LyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBz
bG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIs
IHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJs
ZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmso
dGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9L
LmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVn
VDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0
KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTc0OCw4OSArMTc4NiwyMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhz
R1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
ICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVH
UFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0
byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
ICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwot
ICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0VlJlZyk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0K
LSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51
bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAg
IGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNC
aWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJp
Z0ludChzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lm
IFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKwor
ICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5w
dXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1
dEdQUiwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVy
LmxpbmsodGhpcyk7CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0lu
dCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGlu
ayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJp
bmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmco
c3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0
cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9i
amVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAv
LyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8v
IE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBl
IHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
YXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMDY1LDIzIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVD
ZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1
cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAg
ICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQ
UlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1
bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTkwNSw5ICsyMDk2LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3Qg
SW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAg
ICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJs
ZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
Y3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0
YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRp
bmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIxMjEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJl
Y29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlu
cHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTkzOCw5MyArMjE0NSwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25z
dCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsK
LSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUg
fTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsK
KyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBsb2Fk
MzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBK
dW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51
bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBy
ZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0K
LSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0
ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAg
YXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwg
cmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAg
ICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFy
ZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFy
ZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
TnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQg
SklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0K
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8
T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUg
bm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMg
Y2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5p
dGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50
ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlm
ZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9j
b2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsg
KytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGop
KTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1
dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVU
cnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNP
dGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAt
MTAzNSw5ICsyMjk2LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0
cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNj
b3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVD
aGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BS
UmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0g
cmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2Nv
cGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90
aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzIwLDgwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Ro
aXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0
YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5
dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2Rl
LmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxv
YWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhp
cykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMg
cmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90
Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5v
IG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAg
ICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09i
amVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHBy
b3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNT
dHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbG9h
ZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlz
KSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQo
KSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsg
Ly8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVk
U3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihj
YWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzI0MDEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5j
dGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJl
ZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgs
NyArMjQxMSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQg
c2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUs
IGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdw
clRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVPcGVy
YW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JS
ZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFy
ZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVS
ZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRS
ZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJl
ZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9m
RXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDUzLDMzIEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywg
U3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1p
dEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBU
aGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5n
IGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwpAQCAtMTE2Miw4ICsyNDk4LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1h
a2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0
YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0
dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8g
T09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRl
ci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3Vu
dGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBh
dXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0
KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3
LDEzICsyNTI2LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUg
c2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVP
cHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAg
IGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIw
NiwxMSArMjU0MywxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
CiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAg
ICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29y
a3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5z
dHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMz
LDEwICsyNTY5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwog
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2
b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjU3OSwxOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdl
eHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1Jl
Z2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8
UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJu
VmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyNjAwLDQy
IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29w
ZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVj
ID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9w
Y29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjY2
NCw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNv
ZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBz
Y29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVt
cGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIp
OwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwor
ICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYK
IAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rp
b25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29w
ZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0g
b3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsyNzM0LDE5IEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0
YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3NTUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAg
ICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAu
ZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5n
cHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BS
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI3ODgsMzYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1
ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUg
eyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChi
YXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICsy
ODM3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJs
ZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg2Niw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGls
bEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICsyODkz
LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJh
eU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1l
bnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0
LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7
CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93
Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI5MTAsMTQgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGgg
PSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFs
Q29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1w
KCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZv
LCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHBy
b2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhl
ZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcg
KzI5NDMsODEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAg
IFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVj
ayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51
bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5k
IGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VW
YWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFs
dWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVl
LmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQot
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3In
cyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVn
VDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVn
VDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKIAotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJl
Z1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJ
bmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAg
ICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOworICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
aW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZz
ZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRp
bWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAgIAor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBj
ZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIC8v
IENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1dGUgdGhl
IG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Cisg
ICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBv
dXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAg
ICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIHN1
YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOworICAgICAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMw
MjcsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihl
bnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBy
ZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BS
UmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhU
ZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhU
ZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFj
ZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BS
ID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JU
ZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQor
ICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQ
cm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNp
Z25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzA4MSw1MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qx
KTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zm
c2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hU
ZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93
bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMs
IGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRv
cik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hU
ZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIo
KTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdU
MDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5k
cyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdU
MCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJl
c3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qx
LCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVj
dG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQ
UiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1
OTgsNiArMzEzNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMK
ICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxv
Y2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1f
dGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlz
dCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzMxOTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5f
cHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwo
KTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJn
R1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2Js
ZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzIx
NCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklU
OjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2Vu
KCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSBy
ZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFp
bD4oKTsKQEAgLTE3MDIsMTEgKzMyNDcsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRf
Y291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFp
bGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAg
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIo
ZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAg
ICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7
CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTcxNCwyOSArMzI2OCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29u
c3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0
TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1Nr
aXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwg
SW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhh
bk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1
YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdU
MCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFt
c1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1Qw
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6
ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwog
I2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xNzQ0LDQ5ICszMzE3LDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVu
dChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAg
ICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJl
c3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4
KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
eXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgog
Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNo
MzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9h
ZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQot
ICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNVbmRl
ZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5j
aDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAg
ICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBl
T2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQ
UikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFs
dWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3QpOworCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2Ug
ewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVlUmVncy50YWdH
UFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAg
ICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0TG9hZFByb3Rv
dHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BS
LCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRM
b2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNj
cmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NzEsNyArMTg3MSw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2Nr
KiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgQVNT
RVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQob3B0aW1p
emVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQob3B0aW1pemVkQ29kZUJsb2Nr
ICYmIEpJVENvZGU6OmlzREZHT3JGVEwob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
ICAgICAKICAgICBpZiAodm9pZCogZGF0YUJ1ZmZlciA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KHZt
LCBjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCkpIHsKICAgICAg
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChvcHRpbWl6ZWRDb2RlQmxvY2ssICJvc3JFbnRyeSIsICgi
YXQgYmMjIiwgYnl0ZWNvZGVJbmRleCkpOwpAQCAtMzQxOSw2ICszNDE5LDQyIEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja0kKICAgICByZXR1cm4gMDsKIH0KIAorSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5v
dywgdm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSkKK3sKKyAgICAvLyBJdCdzIHNvcnQg
b2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRv
aW5nIHNvIHdvdWxkbid0CisgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCisgICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlckdDKGxvbENvZGVCbG9jay0+dm0oKS5oZWFwKTsKKworICAgIGlmIChn
ZXRlbnYoInByaW50RWFjaEpldHRpc29uIikgJiYgISFhdG9pKGdldGVudigicHJpbnRFYWNoSmV0
dGlzb24iKSkpCisgICAgICAgIGRhdGFMb2dMbigiamV0dGlzb24sIGZvcmNpbmcgcmVvcHQgbm93
OiAiLCAqbG9sQ29kZUJsb2NrKTsKKyAgICBsb2xDb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25zKCk7CisgICAgCisgICAgLy8gT09QUzogcHJvY2VzcyB2YWx1ZSBwcm9m
aWxlcyBoZXJlLCBzaW5jZSB3ZSdyZSBqZXR0aXNvbmluZywgaG9wZWZ1bGx5IHRoZXkgdXBkYXRl
IHcvIHRoaW5ncyB3ZSBjYXJlIGFib3V0LgorCisgICAgc2FuaXRpemVTdGFja0ZvclZNKGxvbENv
ZGVCbG9jay0+dm0oKSk7CisKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
ICpsb2xDb2RlQmxvY2ssICI6IEVudGVyZWQgcmVvcHRpbWl6ZSBmcm9tIExPTCIpOworCisgICAg
Q29kZUJsb2NrKiBsbGludENvZGVCbG9jayA9IGxvbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsK
KyAgICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrLgor
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShsbGludENvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CisKKyAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gbGxpbnRDb2RlQmxvY2stPnJl
cGxhY2VtZW50KCk7CisgICAgaWYgKCFyZXBsYWNlbWVudCB8fCByZXBsYWNlbWVudCA9PSBsbGlu
dENvZGVCbG9jaykgeworICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
ICpsbGludENvZGVCbG9jaywgIjogTm90IHJlb3B0aW1pemluZyBMT0wgYmVjYXVzZSB3ZSd2ZSBh
bHJlYWR5IGJlZW4gamV0dGlzb25lZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIE90aGVyd2lzZSwgdGhlIHJlcGxhY2VtZW50IG11c3QgYmUgb3B0aW1pemVkIGNvZGUuIFVz
ZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5CisgICAgLy8gdG8gY2hlY2sgb3VyIGxvZ2ljLgorICAg
IEFTU0VSVChsbGludENvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSk7CisgICAg
QVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChsb2xDb2RlQmxvY2stPmppdFR5cGUoKSkp
OworCisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IHN0dWNrIGluIGEgbG9vcCBsb2dpYworICAg
IGxvbENvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PU1JFeGl0LCBD
b3VudFJlb3B0aW1pemF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9X
QVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDYgKzMxOCw4IEBAIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVmFsdWUKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywgdm9pZCwg
KFZNKikpOwogCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJMT0xS
ZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCAr
MjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CkBAIC0yODEsOCArMjc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9n
ZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAg
ICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1
Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTk4LDggKzU5MSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzOSw4ICs2MzAsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02ODYsOCArNjc1
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjksOCArNzE2LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBA
IC03NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3Ry
dQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtODE5LDgg
KzgwMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTExMDAsOCArMTA4
MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTI1Nyw4
ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAg
aWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgog
I2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAK
QEAgLTUyLDUxICs1NCwxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJS
ZWcgaW5kZXhpbmdUeXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BS
ID0gcmVzdWx0R1BSOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7Cisg
ICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2Vlbklk
ZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlm
aWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHBy
b2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVzZUxP
TCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENo
ZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5
cGVHUFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
Mihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkp
KSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQor
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAg
ICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBl
bHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0
cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcg
PSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFs
SW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJl
Z1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
KworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhd
OworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9w
ZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIEFTU0VS
VChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAogICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwog
ICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xNTcsNiArMjU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25z
dCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbElu
Zm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXli
ZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRD
b25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0
YW50KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1
dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAKKyAgICBhdXRvIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
OworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBw
cm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1dEtpbmQpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0zMzksNyArNDQ0
LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVy
biBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVj
dCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Nyw3ICs0NTIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAg
YXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZd
KGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAg
ICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAg
bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAg
ICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwog
ICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+
KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+
KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzgxLDYgKzQ4NSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxG
b3JDYWxsKCk7IC8vIE9PUFM6IERvIGJldHRlciBpZiB3ZSBjYW4hCisKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5NCwxMyArNTAwLDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgZmFzdFBh
dGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFByaXZhdGVOYW1lPigpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIFByaXZh
dGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKQEAgLTQyMCw0OSArNTI1LDEwNSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0g
ICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3Nv
ciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BS
ID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwor
ICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IGF0
dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9Owor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBnZXR0
ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0ZXIu
Z3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5t
X2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIs
IGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVy
dHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1f
YWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFj
Y2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0
ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2MzMsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2g7
CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
IAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVy
IGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdp
c3RlcnMuCkBAIC00OTIsMjUgKzY4NywyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJ
ZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0Lmdwcigp
OworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVl
OworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBw
cm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5R1BS
ID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0
eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBu
ZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAg
LTU0MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFs
dWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BS
UmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5
cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpUcnlHZXRC
eUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGly
ZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9
CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAg
ICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBk
c3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0K
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hl
YXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAK
LSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICAKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJh
c2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgqaWRlbnQgPT0g
bV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29s
dXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRhZGF0YS5t
X21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgR1BS
UmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVnVDE7CisgICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVH
UFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxl
KTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRo
VGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRo
aXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNW
UmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dp
dGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAg
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNb
bV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRj
aCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25l
IHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBs
b2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2Rl
Ci0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0
aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1
ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21h
TW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGly
ZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03NjUsNzcgKzExNjAsOTUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBu
ZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAg
ICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZm
ZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJl
ZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRG
aWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
TGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2
YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJ
ZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7
CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNl
R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRH
UFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5C
eUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJ
ZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
LQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
LQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0
R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVy
bjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewot
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIs
IGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0NywxNyArMTI2MCwyNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0
YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwog
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0
YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5n
RXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKQEAgLTg2NywyMSArMTI4OCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUo
ZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7
CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisgICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShz
Y29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIs
IEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDAp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAt
ODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk0MCwxNSArMTM3NiwyMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2
b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRy
KHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihz
dHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Q
b2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05NjIsMTIgKzE0MDMsNiBA
QCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihy
ZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05NzgsNTEgKzE0
MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAg
ICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4o
Jm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNl
ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAg
ICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJl
Z1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJS
ZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2Fk
MzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3Qs
IG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAg
ICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBv
ZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAg
ICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNl
dEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAg
ICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAg
ICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2Ny
YXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENs
b3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhp
cywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ug
RHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBA
IC0xMDM2LDEwICsxNTA0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJl
c29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAg
IEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTEwNTIsMjcgKzE1MjAsMjcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJ
bmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBM
b2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Miw0MCArMTU1MCwyMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDAp
OworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQg
SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3Jl
UHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hw
b2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0
cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCog
c2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rlcikp
KTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTEyOSwyMSArMTU3OSw0
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1
aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0
YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZh
bHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVl
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisK
ICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZz
ZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOwor
ICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQ
UjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9
IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0
ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7Cisg
ICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisg
ICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29w
ZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQ
UiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAg
ICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRT
bG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3Rv
cmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgb2Zmc2V0
R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOworICAgICAgICAgICAgc3RvcmVQ
dHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAgaWYgKCFp
c0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3
ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCks
IHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1
ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFk
YXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwg
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2Vs
bCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFk
ZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAg
Y2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAgLTExOTAs
MTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBi
bG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVn
aXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0
IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
c2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZh
cikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRv
IHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KIAogICAg
ICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTEyMDksMjMgKzE3MjUsMzIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1
ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENv
ZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28g
ZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAg
ICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
ciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjYxLDYxICsxNzg0LDE3OCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMg
PSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50
c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNH
UFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywg
cmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdU
MCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgbG9h
ZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2
YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVl
KTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFy
Z3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKyAgICAKKyAg
ICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRz
OjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3Rl
ciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7
CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBt
aWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3Vu
ZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVk
cyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdh
bGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4K
KyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNh
bGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJl
Z2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0
ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgICAgIGlm
ICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgaWYg
KCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFs
dWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAg
ICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAgICAgaWYgKGdwckZvck9wZXJh
bmQob3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBvd25lckdQUiA9IGdwckZv
ck9wZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG93bmVyVmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgb3duZXJHUFIpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93
bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShvd25lcikg
JiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNj
cmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVm
b3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRG
aWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxs
LmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
KSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIC8vIE9PUFM6IE1ha2Ug
aXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0
aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGlu
dG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBz
YXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVu
dGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNv
IHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwog
ICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
KQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4g
dmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdU
MDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxs
LmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMTMy
NywxMSArMTk2NywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlz
LCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAg
ICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJu
YWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6
b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsxOTk2LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5k
ZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAg
eyAqdGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAvLyBPT1BT
OiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxs
OworCisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAg
c3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0ZW1wbGF0
ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0
aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
VmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
KQogewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2go
dm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW47
CisgICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlvbmFsPFNp
bGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVy
KTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVu
dFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlz
KTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUxLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZp
ZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNTY3LDYgKzIyNTQsOCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2lu
ZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VMT0wgPSBm
YWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9w
Y29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpO
b3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZH
Q29kZUJsb2NrKQogewogICAgIEFTU0VSVF9VTlVTRUQocHJvZmlsZWRERkdDb2RlQmxvY2ssICFw
cm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwg
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsK
ICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5n
IGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgZGlkIGJlY29tZSByZWFkeS4iKTsKICAg
ICAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29k
ZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgQVNTRVJUKCFwcm9maWxl
ZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICAK
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5nIGNvbXBp
bGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQpOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMjIgQEAKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRl
ICJWTUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgSklUV29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsKIHB1YmxpYzoKLSAgICBQbGFuKENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAg
IDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0o
KSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIFBsYW4oQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5k
ZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgOiBtX2xsaW50Q29kZUJsb2Nr
KGNvZGVCbG9jaykKKyAgICAgICAgLCBtX2NvZGVCbG9ja1RvQ29tcGlsZShjb21waWxlVHlwZSA9
PSBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgPyBtX2xsaW50Q29kZUJsb2NrLT5uZXdSZXBsYWNlbWVu
dCgpIDogbV9sbGludENvZGVCbG9jaykgCisgICAgICAgICwgbV9qaXQobV9jb2RlQmxvY2tUb0Nv
bXBpbGUtPnZtKCksIG1fY29kZUJsb2NrVG9Db21waWxlLCBjb21waWxlVHlwZSwgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBh
cmF0aW9uQmVmb3JlQ29tcGlsZSgpOworICAgICAgICAvLyBPT1BTOiB2aXNpdCB0aGlzIGluIGNv
bmN1cnJlbnQgZ2MKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRD
b2RlQmxvY2spIHsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAu
cHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlSW5UaHJlYWQoKQpAQCAtNTMsMTcgKzYwLDIzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGZpbmFsaXplKCkKICAgICB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IG1faml0LmxpbmsoKTsKKworICAgICAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4
aXQoWyZdIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50
Q29kZUJsb2NrKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhl
YXAudW5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfSk7CisKICAgICAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAg
ICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBp
bGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKKyAgICAgICAgICAgIENPREVCTE9DS19MT0df
RVZFTlQobV9sbGludENvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24g
ZmFpbGVkIikpOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCAiICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9j
ay0+ZG9udEpJVEFueXRpbWVTb29uKCk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRG
YWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+
ZG9udEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5tX2Rp
ZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIpOwot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSht
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+aml0U29vbigpOworICAgICAg
ICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29k
ZShtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5q
aXRTb29uKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzEsOCArODQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7
IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT52bSgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tLZXkoKSB7IHJldHVybiBtX2xsaW50
Q29kZUJsb2NrOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jay0+dm0o
KTsgfQogICAgIAogICAgIGJvb2wgaXNGaW5pc2hlZENvbXBpbGluZygpCiAgICAgewpAQCAtODAs
MTUgKzkzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNGaW5pc2hlZENvbXBpbGlu
ZzsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5
cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
ICAgICB7Ci0gICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7CiAg
ICAgICAgIHBsYW4uZmluYWxpemUoKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIENvZGVC
bG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2xsaW50Q29kZUJsb2NrOworICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2tUb0NvbXBpbGU7CiAgICAgSklUIG1faml0OwogICAgIExv
Y2sgbV9sb2NrOwogICAgIGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nIHsgZmFsc2UgfTsKQEAg
LTIzMyw5ICsyNDcsMTEgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9j
awogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSA9IE9wdGlvbnM6
OmZvcmNlTE9MKCkgPyBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgOiBKSVQ6OkNvbXBpbGVUeXBlOjpC
YXNlbGluZTsKICAgICAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgewot
ICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CkBAIC0yNDksNyArMjY1LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVC
bG9jawogICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewogICAg
ICAgICAgICAgbV9wbGFubmVkLmFkZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBs
YW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3
IFBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkp
OwogICAgICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX3F1ZXVl
LmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2Vy
KTsKQEAgLTI3MywxNCArMjg5LDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihD
b2RlQmxvY2sKICAgICAvLyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUuIElmIHRoZSBjb25j
dXJyZW50IEpJVCB0aHJlYWQgaXMgY29udm95ZWQsIHdlIHJldmVydCB0byBtYWluCiAgICAgLy8g
dGhyZWFkIGNvbXBpbGVzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhcyBnb29kIGFzIGlmIHdlIGhh
ZCBtdWx0aXBsZSBKSVQgdGhyZWFkcy4gTWF5YmUgd2UKICAgICAvLyBjYW4gZG8gdGhhdCBzb21l
ZGF5LgotICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKKyAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogfQogCisvKgogdm9pZCBKSVRXb3JrbGlzdDo6Y29t
cGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bmspCisKKyAgICBhdXRvIGlzQ29tcGlsZWQgPSBbJl0gewor
ICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuaykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZUJsb2NrLT5o
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGJvb2wgaXNQbGFubmVkOwpAQCAtMjk2LDE3ICszMjIsMjQg
QEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIAogICAgIH0KICAgICAK
ICAgICAvLyBOb3cgaXQgbWlnaHQgYmUgY29tcGlsZWQhCi0gICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisgICAgaWYgKGlzQ29tcGlsZWQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBo
YWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRo
IHRoZQotICAgIC8vIGJhc2VsaW5lIEpJVC4KLSAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0YSgp
OwotICAgIAotICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCi0gICAgSklUOjpjb21waWxlKHZt
LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOwotICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2Rl
KGNvZGVCbG9jayk7CisKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VMT0woKSkgeworICAgICAgICBD
b2RlQmxvY2sqIGxvbENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAg
ICAgICAgSklUOjpjb21waWxlKHZtLCBsb2xDb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJh
c2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgbG9sQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENv
ZGUobG9sQ29kZUJsb2NrKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBkbyB0aGlzIGlu
IGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNv
bXBpbGUgd2l0aCB0aGUKKyAgICAgICAgLy8gYmFzZWxpbmUgSklULgorICAgICAgICBjb2RlQmxv
Y2stPnJlc2V0SklURGF0YSgpOworICAgICAgICAKKyAgICAgICAgLy8gT0ssIGp1c3QgY29tcGls
ZSBpdC4KKyAgICAgICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5
cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KTsKKyAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFs
bENvZGUoY29kZUJsb2NrKTsKKyAgICB9CiB9CisqLwogCiB2b2lkIEpJVFdvcmtsaXN0OjpmaW5h
bGl6ZVBsYW5zKFBsYW5zJiBteVBsYW5zKQogewpAQCAtMzE0LDcgKzM0Nyw3IEBAIHZvaWQgSklU
V29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG0KICAgICAgICAgcGxhbi0+ZmluYWxpemUo
KTsKICAgICAgICAgCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAg
ICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9jaygpKTsKKyAgICAgICAgbV9wbGFubmVk
LnJlbW92ZShwbGFuLT5jb2RlQmxvY2tLZXkoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDcgKzU1LDYgQEAgcHVibGljOgogICAgIHZvaWQgcG9sbChWTSYpOwogICAgIAogICAgIHZvaWQg
Y29tcGlsZUxhdGVyKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxv
Y2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICAKICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmts
aXN0KCk7CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JO
dWxsKCk7CkBAIC02Niw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgVGhyZWFkOwogICAg
IGZyaWVuZCBjbGFzcyBUaHJlYWQ7CiAgICAgCisgICAgLy92b2lkIGNvbXBpbGVOb3coQ29kZUJs
b2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKSk7CiAgICAgdm9pZCBmaW5hbGl6ZVBsYW5zKFBsYW5zJik7CiAgICAgCiAgICAgUGxh
bnMgbV9xdWV1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQog
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBU
JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQm
IG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2
YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdp
c3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxU
b0NvZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5
IHx8IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkp
CisgICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2Rl
QmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVy
KCkubGFiZWxBdE9mZnNldCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xv
d1BhdGhDYWxsLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1Ymxp
YzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAg
ICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAg
ICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBM
SU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3Ry
dWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVj
b2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw4
ICszNjIsMTAgQEAgaW5saW5lIGJvb2wgc2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsbwogfQog
CiAvLyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCi1pbmxpbmUgYm9vbCBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDAp
KQoraW5saW5lIENvZGVCbG9jayogaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKKyAgICAvLyBPT1BTOiBJbXBsZW1lbnQgdGhpcyB3
LnIudCBMT0wuCisKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15
IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0Mg
aGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAKQEAgLTM3
MiwyOSArMzc0LDQ1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYK
ICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgi
dGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1
dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgSklUV29y
a2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucG9sbCh2bSk7Ci0gICAgCisKKyAgICBhdXRv
IGxvbENvZGVCbG9jayA9IFsmXSgpIC0+IENvZGVCbG9jayogeworICAgICAgICBpZiAoQ29kZUJs
b2NrKiByZXBsYWNlbWVudCA9IGNvZGVCbG9jay0+b3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewor
ICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklU
KQorICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisgICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENv
ZGVCbG9jaygpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCiAgICAgc3dpdGNoIChjb2RlQmxv
Y2stPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVh
ZHkgY29tcGlsZWQuIik7CiAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKICAgICB9CiAgICAgY2FzZSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rOiB7CiAgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVH
bG9iYWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRlcihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2so
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgICAgIHJldHVybiBjb2Rl
QmxvY2s7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBkZWZhdWx0OgotICAg
ICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxv
Y2ssICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBkYXRhTG9nKCJVbmV4
cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlw
ZSBlbnRyeU9TUihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQogewogICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCAiLCBuYW1l
LCAiIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLApAQCAtNDA1LDE4ICs0MjMsMjEgQEAgc3RhdGlj
IFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogICAgICAgICBMTElOVF9SRVRVUk5f
VFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZt
KCk7Ci0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKSkK
KyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3Modm0sIGNvZGVCbG9jayk7CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykKICAgICAg
ICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7Cisg
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgi
aW4gcHJvbG9ndWUiKSk7CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENv
ZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gUHJvbG9ndWUpCi0gICAgICAgIExMSU5U
X1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51
bGxwdHIpOworICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRD
b2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChraW5kID09
IEFyaXR5Q2hlY2spOwotICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxs
cHRyKTsKKyAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCkt
PmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxs
cHRyKTsKIH0KICNlbHNlIC8vIEVOQUJMRShKSVQpCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQor
c3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKIHsKICAgICBjb2RlQmxvY2stPmRv
bnRKSVRBbnl0aW1lU29vbigpOwogICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0
cik7CkBAIC00MjYsMzEgKzQ0NywzMSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5
T1NSKENvZGVCCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
ImVudHJ5X29zciIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOwogfQogCiBMTElO
VF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOworICAgIHJldHVybiBl
bnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxl
ZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50
cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsK
LSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9v
c3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlP
U1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSkt
PmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURf
UEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxG
cmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJl
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAg
IHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5
X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5
Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanND
YXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+
Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFt
ZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFi
bGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2Nv
bnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGxvb3Bfb3NyKQpAQCAtNDc5LDE5ICs1MDAsMjIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
bG9vcF9vc3IpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAg
ICAgfQogICAgIAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVC
bG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpCisgICAgQ29kZUJsb2NrKiBjb21waWxl
ZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAg
ICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2Rl
QmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwog
Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KTsKKyAgICBBU1NFUlQoY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCB8fCBjb21waWxlZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxP
TEpJVCk7CiAKLSAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrLT5qaXRD
b2RlTWFwKCk7CisgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvbXBpbGVkQ29kZUJs
b2NrLT5qaXRDb2RlTWFwKCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4g
Y29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwog
ICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVM
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKKwor
ICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAg
ICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJnZXQsIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsK
ICNlbHNlIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsMTAgQEAg
c3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29t
cHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIE9wdGlvbnM6OnVzZURGR0pJVCgpID0gMDsK
KyAgICBPcHRpb25zOjpmb3JjZUxPTCgpID0gMTsKKyAgICBPcHRpb25zOjp1c2VMTEludCgpID0g
MTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2Vw
dGlvbkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
Nyw2ICs1MjcsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAg
ICB2KEJvb2wsIHVzZUpJVENhZ2UsIGNhblVzZUpJVENhZ2UoKSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihCb29sLCB1c2VQdWJsaWNTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHVibGljIHN0YXRpYyBkYXRhIGZp
ZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCiAgICAgdihCb29sLCB1c2VQcml2YXRlU3RhdGljQ2xh
c3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0
YW5kIHByaXZhdGUgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAgICB2
KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKQogCiBlbnVtIE9wdGlvbkVx
dWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpw
cm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBs
bGludF9oYW5kbGVfdWNhdWdodF9leGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0
IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwotICAgICAg
ICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW5wcm9jZXNzZWRTdGFja1RyYWNl
LmxsaW50UEMpKTsKICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5
dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJsb2NrKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyArMzk4LDggQEAgc3RhdGljIHZvaWQgc2V0dXBM
TEludChDb2RlQmxvY2sqIGNvZGVCbAogc3RhdGljIHZvaWQgc2V0dXBKSVQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQotICAgIENvbXBpbGF0aW9uUmVz
dWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11
c3RTdWNjZWVkKTsKKyAgICAvLyBPT1BTOiBGaWd1cmUgb3V0IHdoYXQgd2Ugd2FudCB0byBkbyB3
aXRoIHRoZSBubyBMTEludCBvcHRpb24uLi4uCisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
ID0gSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5l
LCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQg
PT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0
aWxzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOSBAQCBK
U1ZhbHVlIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZSB0aGVGCiB7CiAgICAgYm9vbCBwcmV0
ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gZmFsc2U7CiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
aWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOyAv
LyBPT1BTCisKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VCYXNl
bGluZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAgICAgcHJldGVuZFRvSGF2
ZU1hbnlDb21waWxlcyA9IHRydWU7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQw
LDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChmb3VuZENv
ZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGZvdW5k
Q29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExv
Y2soKm1fbG9jayk7CiAgICAgICAgIGlmICghbG9ja2VyKQogICAgICAgICAgICAgcmV0dXJuOyAv
LyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCkBAIC0xODIsNyArMTgyLDcg
QEAgdm9pZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhYwogCiAgICAgd2hpbGUg
KGNhbGxGcmFtZSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7Ci0gICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBK
SVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgICAgIGNv
ZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKTsKICAgICAg
ICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICB9
CkluZGV4OiBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkocmV2aXNpb24gMjcwNzg5KQorKysgVG9vbHMvU2Ny
aXB0cy9jb21wYXJlLXJlc3VsdHMJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw4ICsxNzMsOCBAQCBk
ZWYgY29tcHV0ZU11bHRpcGxlSHlwb3RoZXNlc1NpZ25pZmljYW5jCiAKIGRlZiBkdW1wQnJlYWtk
b3ducyhhLCBiKToKICAgICBuYW1lTGVuZ3RoID0gbGVuKCJzdWJ0ZXN0IikKLSAgICBhTGVuZ3Ro
ID0gbGVuKGFbdW5pdE1hcmtlcl0pCi0gICAgYkxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKQor
ICAgIGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkgKyAzCisgICAgYkxlbmd0aCA9IGxlbihh
W3VuaXRNYXJrZXJdKSArIDMKICAgICByYXRpb0xlbmd0aCA9IGxlbigiYiAvIGEiKQogCiAgICAg
cFZhbHVlSGVhZGVyID0gInBWYWx1ZSAoc2lnbmlmaWNhbmNlIHVzaW5nIEZhbHNlIERpc2NvdmVy
eSBSYXRlKSIKQEAgLTIwMyw3ICsyMDMsNyBAQCBkZWYgZHVtcEJyZWFrZG93bnMoYSwgYik6CiAg
ICAgcExlbmd0aCArPSAyCiAKICAgICBzdHJpbmdzID0gW10KLSAgICBzdHJpbmdzLmFwcGVuZCgi
fHtrZXk6XntuYW1lTGVuZ3RofX18e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5n
dGh9fSB8e2NvbXBhcmU6XntyYXRpb0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9y
bWF0KGtleT0ic3VidGVzdCIsIGFTY29yZT1hW3VuaXRNYXJrZXJdLCBiU2NvcmU9Ylt1bml0TWFy
a2VyXSwgbmFtZUxlbmd0aD1uYW1lTGVuZ3RoLCBhTGVuZ3RoPWFMZW5ndGgsIGJMZW5ndGg9Ykxl
bmd0aCAsIGNvbXBhcmU9ImIgLyBhIiwgcmF0aW9MZW5ndGg9cmF0aW9MZW5ndGgsIHBNYXJrZXI9
cFZhbHVlSGVhZGVyLCBwTGVuZ3RoPXBMZW5ndGgpKQorICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tl
eTpee25hbWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19
IHx7Y29tcGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQo
a2V5PSJzdWJ0ZXN0IiwgYVNjb3JlPSJhOiAiICsgYVt1bml0TWFya2VyXSwgYlNjb3JlPSJiOiAi
ICsgYlt1bml0TWFya2VyXSwgbmFtZUxlbmd0aD1uYW1lTGVuZ3RoLCBhTGVuZ3RoPWFMZW5ndGgs
IGJMZW5ndGg9Ykxlbmd0aCAsIGNvbXBhcmU9ImIgLyBhIiwgcmF0aW9MZW5ndGg9cmF0aW9MZW5n
dGgsIHBNYXJrZXI9cFZhbHVlSGVhZGVyLCBwTGVuZ3RoPXBMZW5ndGgpKQogICAgIGZvciBrZXkg
aW4gYS5rZXlzKCk6CiAgICAgICAgIGlmIGtleSA9PSB1bml0TWFya2VyOgogICAgICAgICAgICAg
Y29udGludWUKSW5kZXg6IExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHJl
dmlzaW9uIDI3MDc4OSkKKysrIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDIxIEBAIHZhciBzZWxmID0gdGhpczsKIAogc2Vs
Zi50ZXN0UnVubmVyID0gewogICAgIG5ldmVySW5saW5lRnVuY3Rpb246IG5ldmVySW5saW5lRnVu
Y3Rpb24sCi0gICAgbnVtYmVyT2ZERkdDb21waWxlczogbnVtYmVyT2ZERkdDb21waWxlcywKKyAg
ICBudW1iZXJPZkRGR0NvbXBpbGVzOiAoZnVuY3Rpb24oKSB7CisgICAgICAgIGxldCBtYXA7Cisg
ICAgICAgIHJldHVybiAoZikgPT4geworICAgICAgICAgICAgaWYgKGlzREZHRW5hYmxlZCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkRGR0NvbXBpbGVzKGYpOworCisgICAgICAg
ICAgICAvLyBFbXVsYXRlIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiBmb3IgYSBiaXQgdG8gZ2V0IHNv
bWUgdGllcmluZyBiZWZvcmUgcmV0dXJuaW5nIHRydWUuCisgICAgICAgICAgICBpZiAoIW1hcCkK
KyAgICAgICAgICAgICAgICBtYXAgPSBuZXcgV2Vha01hcDsKKyAgICAgICAgICAgIGxldCBjb3Vu
dCA9IG1hcC5nZXQoZikgfHwgMDsKKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgICAg
ICBtYXAuc2V0KGYsIGNvdW50KTsKKyAgICAgICAgICAgIHJldHVybiAoY291bnQgLyA0MDAwKSB8
IDA7CisgICAgICAgIH07CisgICAgfSkoKSwKICAgICBmYWlsTmV4dE5ld0NvZGVCbG9jazogZmFp
bE5leHROZXdDb2RlQmxvY2sKIH07CiAKQEAgLTE0OSw4ICsxNjMsOSBAQCBmdW5jdGlvbiBkZmdT
aG91bGRCZSh0aGVGdW5jdGlvbiwgX2EsIF9iCiAgIHZhbHVlcy5wdXNoID0gQXJyYXkucHJvdG90
eXBlLnB1c2g7CiAgIAogICB0cnkgewotICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVu
Y3Rpb259KSkKKyAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpIHsKICAg
ICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKKyAgICB9CiAgICAgdmFsdWVzLnB1c2goZXZhbChf
YSkpOwogICB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0gZTsKQEAgLTM0Niw3ICszNjEs
NyBAQCBmdW5jdGlvbiBkZmdJbmNyZW1lbnQoYXJndW1lbnQpCiAgICAgaWYgKGRpZEZhaWxTb21l
VGVzdHMpCiAgICAgICAgIHJldHVybiBhcmd1bWVudC5pOwogICAgIAotICAgIGlmICghZGZnQ29t
cGlsZWQoYXJndW1lbnQpKQorICAgIGlmICghZGZnQ29tcGlsZWQoYXJndW1lbnQpICYmIGlzREZH
RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gInN0YXJ0IiBpbiBhcmd1bWVudCA/IGFyZ3VtZW50
LnN0YXJ0IDogMDsKICAgICAKICAgICByZXR1cm4gYXJndW1lbnQuaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417141</attachid>
            <date>2021-01-06 16:42:21 -0800</date>
            <delta_ts>2021-01-07 12:32:26 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>556195</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAorLy90ZXN0TGlzdCA9IFsnM2QtcmF5dHJhY2UtU1AnXTsK
KwogaWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRl
c3RJdGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3RpbwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
blNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2NjMsOCBA
QCBwcml2YXRlOgogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1iZXIiLCBm
dW5jdGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlz
REZHRW5hYmxlZCIsIGZ1bmN0aW9uSXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBhZGRGdW5j
dGlvbih2bSwgImRyb3BBbGxMb2NrcyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsKIAogICAg
ICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVz
dGluZygpKSB7CkBAIC0yNjUzLDYgKzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW9uQXNEb3VibAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1i
ZXIobnVtKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5h
YmxlZCwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oT3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwogSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVtcERpc2Fz
c2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxvY2sgJiYg
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25z
OjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6Omlz
REZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3Nl
bWJseSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25h
dHVyZUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFtZXNw
YWNlIEpTQyB7CiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3Ao
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCkBAIC0y
NjksNyArMjcxLDcgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBkdW1wSGVh
ZGVyKGJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMgQEAgdm9p
ZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91dC5wcmlu
dCgiYmIjIiwgYmxvY2suaW5kZXgoKSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRpY3Rpb25z
QXRIZWFkKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhlYWQ6IFsi
KTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlvbnNBdEhl
YWQtPmF0KGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIs
ICIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51
bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21t
YSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcyhpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24o
b3V0LCBwcmVkaWN0aW9ucy5hcmd1bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2NhbHMoKTsg
KytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAgICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKICAg
ICAgICAgICAgIGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChpICsg
YmxvY2subGVhZGVyT2Zmc2V0KCkpOwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShj
dXJyZW50SW5zdHJ1Y3Rpb24sIGljU3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgogY2xhc3Mg
Q29kZUJsb2NrQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8Qmxv
Y2s+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiA9
IElDU3RhdHVzTWFwKCkpOwotICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBvdXQgPSBX
VEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOworICAg
IHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwg
Qnl0ZWNvZGVHcmFwaCYsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwg
dHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJlYW0mIG91
dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7
CiAKICAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0YW50cygp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGlj
OgogCiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2b2lkIGR1
bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4gc3Bl
Y3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQor
ICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBX
VEY6OmRhdGFGaWxlKCkpCiAgICAgewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxD
b2RlQmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywg
c3BlY3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDcgKzEwMCw3IEBAIE9wZXJhbmQgZGVzdGluYXRpb25Gb3IoY29uc3QgQnl0ZWNvZGUm
IGIKICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRl
cmF0b3JfbmV4dCkgewogICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgewogICAgICAg
ICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dDogewotICAgICAgICAgICAgaWYgKHR5
cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6REZHSklUKQorICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6RlRM
SklUKQogICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoT3BJdGVyYXRvck5leHQ6
Om5leHRSZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlLm1fdmFsdWU7IC8vIFdl
IHJldXNlIHZhbHVlIGFzIGEgdGVtcCBiZWNhdXNlIGl0cyBlaXRoZXIgbm90IHVzZWQgaW4gc3Vi
c2VxdWVudCBieXRlY29kZXMgb3Igd3JpdHRlbiBhcyB0aGUgdGVtcCBvYmplY3QgLgogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYg
QEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8vIE5vIHVz
ZXMuCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0gICAgY2Fz
ZSBvcF9qbmVxX3B0cjoKICAgICBjYXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2ptcDoK
ICAgICBjYXNlIG9wX25ld19vYmplY3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAg
ICAgICByZXR1cm47CiAKKyAgICBVU0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQb2ludGVy
KQogICAgIFVTRVMoT3BUb1RoaXMsIHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHosIHRhcmdl
dFZpcnR1YWxSZWdpc3RlcikKICAgICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwgc3JjRHN0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSkKICAgICAgICAgb3V0LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBv
dXQucHJpbnQoIiwgIiwgaW5zdHJ1Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQor
ICAgIGlmICgodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRoaXMt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KQogICAgICAgICBvdXQucHJpbnQoIiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwogICAgIGlm
IChvd25lckV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnByaW50KCIg
KE5ldmVySW5saW5lKSIpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0
SUNTdGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRo
aXMtPmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxv
Y2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01h
cCk7CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRo
aXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNN
YXApCkBAIC0yOTUsNiArMjk1LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1
Y3R1cmUqIAogICAgICwgbV9vd25lckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywgb3RoZXIu
bV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKQor
ICAgICwgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVlUHJvZmls
ZXMpCiAgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMp
CiAgICAgLCBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5tX2NvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNscyhvdGhl
ci5tX2Z1bmN0aW9uRGVjbHMpCkBAIC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2Nh
bCgpKTsKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXROdW1QYXJh
bWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRlcnMgPSBv
dGhlci5udW1QYXJhbWV0ZXJzKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5h
ZGQodGhpcyk7CiB9CkBAIC04NTAsNyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkK
ICAgICAvLyB0byB0aGUgQ29kZUJsb2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlzIHRpZWQg
ZGlyZWN0bHkgdG8gdGhlIENvZGVCbG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRvbWF0aWNh
bGx5IGNsZWFyZWQgd2hlbiB0aGUgQ29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdP
ckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldh
dGNocG9pbnRzKCk7CiAjZW5kaWYKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJlbW92ZSh0
aGlzKTsKQEAgLTEwMzcsNyArMTAzOSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0
cm9uZ2x5KGNvbnMKICAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9j
a3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3ZWFrIHJl
ZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKICAg
ICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2
ZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlm
ICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29kZUJsb2Nr
OjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRp
c29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFy
a2VkKHRoaXMpOwogfQpAQCAtMTA1OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRv
TGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBj
YXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAg
ICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAg
ICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAg
ICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAgc3RhdGlj
IFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVs
eSAxMCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAv
LyBJbnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVf
czsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAg
Y2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklU
VHlwZTo6RlRMSklUOgpAQCAtMTE2OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAjaWYgRU5B
QkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBE
Rkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAg
ICAgIAogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlz
aXRvcik7CkBAIC0xMjE3LDcgKzEyMjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2
ZW5lc3MoY29uc3QgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQg
YmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwog
ICAgIC8vIHRoYXQgd2UgbWlnaHQgZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91bGQgYmUg
amV0dGlzb25lZCBkdWUgdG8gb2xkIGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQgY2hlY2sg
ZG9lc24ndCBwcm90ZWN0IHVzLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0
Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAoSklUQ29k
ZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxk
QmVJbnRlcnByZXRlZChqaXRUeXBlKCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQp
IHsKKyAgICAgICAgLy8gT09QUzogU2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRvIGl0cyBv
d24gZnVuY3Rpb24gZm9yIEpJVCBJQ3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVzIGFyZW4n
dCBqdXN0IGZvciBMTEludC4KICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwor
ICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTUyOCw3
ICsxNTM2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkp
KSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdD
b21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplKHZt
KTsKICAgICB9CkBAIC0xNTQ4LDYgKzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFz
ZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAgICAgY291
bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2b2lkIENv
ZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAgcmVzdWx0
LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVzKCkpLml0
ZXJhdG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAg
ICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21t
b24oKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRT
dGF0dXNlcy5jYWxscykKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmlyc3QsIElD
U3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQuZ2V0KCk7
CkBAIC0xODEwLDcgKzE4MTksNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9u
Z1JlZmVyCiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHZpc2l0T1NSRXhpdFRhcmdldHMobG9j
a2VyLCB2aXNpdG9yKTsKQEAgLTE4MjMsNyArMTgzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJv
bmdseVZpc2l0V2Vha1JlZmVyZW4KICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpOwpAQCAtMTg2Nyw3ICsxODc2LDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6
OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIENvZGVCbG9jayog
cmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgeworICAgICAgICBpZiAoSklU
Q29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBlKSkgewogICAgICAgICAg
ICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3ZlIGhhZCBhIG1lbW9yeSBj
bGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHB1cmdl
ZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKSkuIFJl
Z2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2RlQmxvY2sgaXMgc3RpbGwg
bGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJVApAQCAtMTkzMSw3ICsx
OTQwLDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckluZGV4KAogRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRl
SW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKQogewogI2lmIEVOQUJMRShERkdf
SklUKQotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSkp
OwogICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENhbGxTaXRlLmJpdHMoKSkp
OwogICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdpbmFsQ2Fs
bFNpdGUpOwpAQCAtMjIzMSw1MSArMjI0MCw1NSBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24o
UHJvZmlsZXI6OkpldHRpCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwog
ICAgIAogICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6Ci0gICAg
Ly8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJp
Z2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAxKSBJZiB3ZSdyZSBERkcv
RlRMLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmln
aHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAogICAgIC8vICAgIHdlIHNob3VsZCBPU1Ig
ZXhpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRo
ZSByZXR1cm4uCiAgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIg
ZXhlY3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4KIAogI2lm
IEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAg
IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKLSAgICAKLSAgICBp
ZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKSB7Ci0gICAgICAgIFBy
b2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5jb21waWxhdGlvbi5nZXQoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkK
LSAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFp
bCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2Vz
IGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVu
ZWQuCi0gICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7
Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXND
dXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgp
KSkpOwotICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWFzb24gIT0gUHJvZmls
ZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxh
dGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5n
ZXQoKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCisgICAgICAgICAg
ICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9l
cyBpdHMgb3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBl
bmVkLgorICAgICAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRl
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQu
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8
ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25l
ckV4ZWN1dGFibGUoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5KCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgaW52YWxpZGF0ZSAiLCAqdGhpcywgIlxu
Iik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCiAgICAgLy8gQ291bnQgdGhlIHJl
b3B0aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KICAgICBpZiAobW9k
ZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7CiAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlz
IHNob3VsZCBjYWxsIGFsdGVybmF0aXZlKCkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICAgICAgYmFzZWxpbmVBbHRlcm5hdGl2
ZSgpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAg
IGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICAgICAgZGF0YUxvZygi
ICAgIERpZCBjb3VudCByZW9wdGltaXphdGlvbiBmb3IgIiwgKnRoaXMsICJcbiIpOworI2VuZGlm
CiAgICAgfQogICAgIAogICAgIGlmICh0aGlzICE9IHJlcGxhY2VtZW50KCkpIHsKICAgICAgICAg
Ly8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhlIGVudHJ5cG9pbnQuIFRoaXMgY2Fu
IGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKICAgICAgICAgLy8gYmxvY2tzLgorICAgICAgICAv
LyBPciwgd2UncmUgYW4gTE9MIENvZGVCbG9jayBhbmQgd2VyZSBhbHJlYWR5IGpldHRpc29uZWQu
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYWx0ZXJuYXRpdmUoKSkKICAgICAg
ICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogCi0gICAgaWYgKHJlYXNv
biAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6
OkpldHRpc29uRHVlVG9WTVRyYXBzKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNv
biAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCiAgICAgICAgIHRhbGx5RnJlcXVl
bnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgIC8vIEpldHRp
c29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwgY29kZSB0
byBhIGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgYSBkZWFk
IG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCkBAIC0yMzkwLDcgKzI0MDMsNyBAQCB2b2lk
IENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxGCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxv
Y2stPmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2Rl
QmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBm
YWxzZTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICIg
ICAgQ2xlYXJpbmcgU0FCSSBiY2F1c2UgY2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXplZC4iKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjQ4MywxMiArMjQ5NiwxNCBAQCB1bnNpZ25lZCBDb2RlQmxv
Y2s6Om51bWJlck9mREZHQ29tcGlsZXMoCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKGppdFR5cGUoKSkpOwogICAgIGlmIChPcHRpb25zOjp0ZXN0VGhlRlRMKCkpIHsKKyAg
ICAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICBpZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICByZXR1cm4g
MTAwMDAwMDsKICAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwgPyAxIDog
MCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogICAgIH0KICAgICBDb2RlQmxvY2sq
IHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gKChyZXBsYWNl
bWVudCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkp
ID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKyAgICByZXR1cm4gKChy
ZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkp
KSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiB9CiAKIGludDMyX3Qg
Q29kZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdApAQCAtMjcwOSw3
ICsyNzI0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdAogdm9p
ZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJl
c3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgSklUVHlwZSB0eXBlID0gaml0
VHlwZSgpOwotICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgaWYg
KHR5cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgdHlwZSAhPSBKSVRUeXBlOjpMT0xKSVQp
IHsKICAgICAgICAgZGF0YUxvZ0xuKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5l
IGNvZGUgYnV0IGhhdmUgIiwgdHlwZSk7CiAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihqaXRDb2RlKCkuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0
eXBlKSk7CiAgICAgfQpAQCAtMjcyNyw3ICsyNzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9w
dGltaXphdGlvblRocmVzaG9sZAogICAgIAogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2Vt
ZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZHT3JG
VEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgpAQCAt
Mjc1Niw3ICsyNzcxLDggQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9s
ZAogICAgIAogdWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1
aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgLy9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpOyAvLyBPT1BTOiBXZSBjYWxsIHRoaXMgZnJvbSB0aGUgTE9MIGNvbXBp
bGVyIHRocmVhZCBiZWZvcmUgaW5zdGFsbC4KKwogICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFt
ZSB3YXkgc28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRoaXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQog
ICAgIC8vIGVub3VnaCB0aGF0IHRoaXMgbG9vcCB3b24ndCBodXJ0IHVzLgogICAgIHVuc2lnbmVk
IHJlc3VsdCA9IGRlc2lyZWRUaHJlc2hvbGQ7CkBAIC0yODM2LDcgKzI4NTIsNyBAQCBERkc6OkNv
ZGVPcmlnaW5Qb29sJiBDb2RlQmxvY2s6OmNvZGVPcmlnCiAKIHNpemVfdCBDb2RlQmxvY2s6Om51
bWJlck9mREZHSWRlbnRpZmllcnMoKSBjb25zdAogewotICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHJldHVybiBtX2ppdENvZGUtPmRm
Z0NvbW1vbigpLT5kZmdJZGVudGlmaWVycy5zaXplKCk7CkBAIC0yODQ3LDcgKzI4NjMsNyBAQCBj
b25zdCBJZGVudGlmaWVyJiBDb2RlQmxvY2s6OmlkZW50aWZpZXIoCiAgICAgc2l6ZV90IHVubGlu
a2VkSWRlbnRpZmllcnMgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOwog
ICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVudGlmaWVy
cykKICAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsKLSAg
ICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIEFTU0VS
VChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIHJldHVybiBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRpZmllcnNd
OwogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpAQCAtMjk0OCw3ICsyOTY0LDggQEAgYm9v
bCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICNpZiBFTkFCTEUoREZHX0pJVCkKIHZv
aWQgQ29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkKIHsKLSAgICBBU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIC8vIE9PUFMKKyAgICBBU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsKQEAgLTMwNTAsNiArMzA2Nyw3
IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKICAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMp
OwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTMyMjYsMTQgKzMyNDQsMTQgQEAgdm9pZCBD
b2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbgogewogICAgIG1fbnVtQnJlYWtwb2lu
dHMgKz0gbnVtQnJlYWtwb2ludHM7CiAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMpOwotICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29k
ZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0
dGlzb25EdWVUb0RlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzZXRT
dGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGUgbW9kZSkKIHsKICAgICBtX3N0ZXBw
aW5nTW9kZSA9IG1vZGU7Ci0gICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAobW9kZSA9PSBTdGVw
cGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAg
ICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5nKTsKIH0K
IApAQCAtMzQyMSw5ICszNDM5LDkgQEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2Nr
OjpieXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAg
ICAgSklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGppdFR5
cGUpKQogICAgICAgICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29kZUluZGV4
KCk7Ci0gICAgZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9
PSBKSVRUeXBlOjpGVExKSVQpIHsKKyAgICBlbHNlIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CiAg
ICAgICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKQEAg
LTM0NjYsNyArMzQ4NCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVh
a3AKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5k
bGVyLiBXZSBuZWVkIHRvIGJlCiAgICAgLy8gY2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0
aGF0IGlzIG5vdCBzaWduYWwgaGFuZGxlciBzYWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5v
dCBwZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBtX2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpLT5oYXNJbnN0YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMoKTsKICNlbHNlCkBA
IC0zNDgwLDcgKzM0OTgsNyBAQCBib29sIENvZGVCbG9jazo6aW5zdGFsbFZNVHJhcEJyZWFrcG9p
bnRzCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFu
ZGxlci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcg
dGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBu
b3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBjb21tb25EYXRh
ID0gKm1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgY29tbW9uRGF0YS5pbnN0YWxsVk1UcmFw
QnJlYWtwb2ludHModGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzOCw3ICs0MzgsOCBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAg
ICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CiAgICAgfQogICAg
IAogI2lmIEVOQUJMRShKSVQpCkBAIC01MTEsNiArNTEyLDcgQEAgcHVibGljOgogICAgIFNwZWN1
bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5jdG9yJik7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpA
QCAtNTM5LDcgKzU0MSw3IEBAIHB1YmxpYzoKICAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5zIGlt
cGxpZXMgdGhhdCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wgaGFzQ29k
ZU9yaWdpbnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpOworICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENhbGxTaXRl
SW5kZXggaW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDcgKzU3LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAg
ICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAg
fSk7CiAgICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2Rl
QmxvY2s6OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29u
c3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRh
LmdldCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5t
X2NhdGNoUHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhpdEZyb21Bbnl0aGluZzoKICAgICAgICAgb3V0
LnByaW50KCJGcm9tQW55dGhpbmciKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdEZy
b21MT0w6CisgICAgICAgIG91dC5wcmludCgiRnJvbUxPTCIpOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tREZHIik7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5n
SklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3Qgewog
ICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21MT0wsCiAgICAgRXhpdEZyb21ERkcs
CiAgICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2ICszOSw4IEBAIGVudW0gRXhpdGluZ0pJVFR5
cGUgOiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5nSklUVHlwZSBleGl0aW5nSklUVHlwZUZvcihK
SVRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKSVRUeXBlOjpM
T0xKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbUxPTDsKICAgICBjYXNlIEpJVFR5cGU6OkRG
R0pJVDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9tREZHOwogICAgIGNhc2UgSklUVHlwZTo6RlRM
SklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJl
dmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBlX3RyYWl0
cz4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBz
aXplb2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlID0g
ZmFsc2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFnZSA9IHN0
ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3Rvciwg
VmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0NCwyMyBA
QCBwdWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE9w
ZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1U
bXBzKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBu
dW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkKICAgICAg
ICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMo
bnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7
Ci0gICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1w
czsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1D
b25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhzaXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFs
aXphdGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBl
eHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBz
aXplX3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJh
bmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBz
LCBzaXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDog
bV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxv
Y2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAg
ICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOwor
ICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0
YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChp
bml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYg
b3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3Vt
ZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG90
aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1Db25zdGFudHMob3RoZXIubnVt
YmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6
ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcyLDMzICsx
NzYsNTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBj
b25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJP
ZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0KIAorICAg
IHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxm
b28gJiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAgc2l6ZV90
IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwg
bnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMo
KSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgfQog
ICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7
CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAg
ICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgIHJl
dHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3QgY29uc3Rh
bnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51
bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAoc2l6ZV90
IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5
cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCld
OyB9CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3Zh
bHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3VtZW50KHNp
emVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0K
KworICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29uc3RSZWZU
eXBlIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAgIAogICAg
IFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBD
b25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNzAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkg
KyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2FscyA9IG51
bWJlck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVyT2ZUbXBz
KCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkwLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRTaXplID0g
bV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdT
aXplKTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JU
cmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUgQEAgcHVi
bGljOgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRy
YWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBv
cGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0
YW50SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2Nh
bEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCArMzQ4LDE1
IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0
cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYg
b3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xv
Y2FsKCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJlck9mQ29u
c3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9M
b2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3BlcmFuZChP
cGVyYW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0gICAgICAg
IGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkp
CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50
cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0g
bnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXgg
LSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAgICAgaWYg
KGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJP
ZkNvbnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0
YW50KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkpOworICAg
ICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAoaW5kZXgg
PT0gY2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE9wZXJh
bmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkK
QEAgLTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3Vt
ZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUg
bG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJn
dW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFy
ZSBsb2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFuZCB0aGUg
cmVzdCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVkIG1fbnVt
QXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3BlcmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgaW5saW5l
IHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJpbnQodmly
dHVhbFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5k
czxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9w
ZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAi
KTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsg
YXJndW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFuZHM8VD46
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1wKHRtcElu
ZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChjYWxsZWUo
KSwgY29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxU
Pjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9v
bCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAg
Zm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50
SW5kZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChj
b21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0KKyAgICBp
ZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxs
ZWUiLCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBj
b25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgIG1fbGl2ZVJl
Z2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUgPSBqaXQtPmNvZGVC
bG9jaygpLT5qaXRDb2RlKCktPmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5k
bGluZ0NhbGxTaXRlKGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4KTsK
ICAgICAgICAgbV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uID0gbV9saXZlUmVn
aXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5udW1iZXJPZlNldFJl
Z2lzdGVycygpID4gMDsKICAgICAgICAgaWYgKG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4
Y2VwdGlvbikKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7
CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJl
Z2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+
dXNlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5leGNsdWRl
KGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC03MTAsNyArNzEwLDcgQEAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAvLyBXZSBzZXQgdGhlc2UgdG8g
aW5kaWNhdGUgdG8gdGhlIHN0dWIgdG8gcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBDb2RlQmxvY2sn
cwogICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciB0YWJsZSB3aGVuIGl0IGlzIGRlYWxsb2Nh
dGVkLgogICAgICAgICBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzID0gY29kZUJs
b2NrOwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9ja1Ro
YXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOworICAgICAgICBBU1NFUlQoSklU
Q29kZTo6aXNERkdPckZUTChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzLT5qaXRU
eXBlKCkpKTsKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nID0gc3Rh
dGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5lIGJvb2wg
aXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVl
ICYgflNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91YmxlU3Bl
Y3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmICEo
dmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RJbnQz
MlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSAm
JiAhKHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUg
bmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNu
J3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0
dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBWaXJ0
dWFsUmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAgZnJpZW5k
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwogCiAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IGlu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1
cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29s
IGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFpc0NvbnN0
YW50KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVn
aXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJl
Z2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwo
KSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0
dWFsUmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
aW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0K
ICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBv
cGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0YXRpYyBp
bnQgYXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCArIENh
bGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNvbnN0YW50
VG9PcGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdpc3RlcjsK
IH07CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjphcmd1
bWVudFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4KQorewor
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFudFRvT3Bl
cmFuZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNv
ZGVJbmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVt
VG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMs
IG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgaW50
ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1U
bXBzLCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChl
eGVjdXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCB2b2lk
IE9TUkVudHJ5RGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FOCiB2b2lk
KiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNT
RVJUKEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VS
VChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpM
T0xKSVQpOwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0
LDYgKzM5NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAg
ICBpZiAoZXhpdElubGluZUNhbGxGcmFtZSkKICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKKyAg
ICAvLyBPT1BTOiBNYWtlIHRoaXMgZG8gdGhlIHJpZ2h0IHRoaW5nIGJhc2VkIG9uIExPTCBvciBu
b3QuCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9yRXhpdCA9
PSBjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJUKEpJVENv
ZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDYg
QEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAgIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlh
YmxlczsKICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVuc2lnbmVk
IFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFibGVzID0g
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBzID0gY29k
ZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAgICB9IGVs
c2UgeworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKTsgLy8gT09QUzogYnl0ZWNvZGVWZXJzaW9uCiAgICAgICAgIG51bVZh
cmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKICAgICAgICAg
bnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgcHVibGljOgogCiAgICAgICAgICAg
ICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVh
cigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxB
dmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOworICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+
KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDAsIDApOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAg
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAg
ICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI2ICs1MiwxNyBAQCB2b2lkIENhbGxGcmFtZTo6
aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGCiBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJl
Qnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAg
c3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rOgotICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKLSAgICBjYXNlIEpJVFR5cGU6Okhv
c3RDYWxsVGh1bms6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2Rl
QmxvY2soKS0+aml0VHlwZSgpKTsKIH0KIAogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0Fy
ZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKICAg
ICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms6CisgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSklUVHlw
ZTo6REZHSklUOgogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTc5LDggKzcwLDYgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVP
cmlnaQogICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYs
MTAgKzQ1NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBIYW5kbGVySW5mbyogZmluZEV4CiAK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwogICAgIHVu
c2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleDsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgZXhjZXB0aW9uSGFuZGxlcklu
ZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwotICAgIGVsc2UKKyAgICBp
ZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jay0+aml0VHlw
ZSgpKSkKICAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCkub2Zmc2V0KCk7CisgICAgZWxzZQorICAgICAgICBleGNlcHRpb25IYW5kbGVySW5k
ZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiAKICAgICByZXR1cm4gY29k
ZUJsb2NrLT5oYW5kbGVyRm9ySW5kZXgoZXhjZXB0aW9uSGFuZGxlckluZGV4LCByZXF1aXJlZEhh
bmRsZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjcw
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwxMiArMzAsMTggQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVj
b2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJCeXRlY29kZVVz
ZURlZi5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUg
IkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkpTQXN5bmNH
ZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGlu
ZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5j
bHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5
LDYgKzU1LDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRl
IDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5o
IgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29u
c3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjgsODg4IEBAIFNl
Y29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGlt
ZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJ
bnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBz
ZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7
CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAg
ICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBi
eXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgm
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBX
ZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBl
cyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKwor
ICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1
bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChv
cGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7
CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0
bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7
CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0
b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0
LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlw
ZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsK
KyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21v
djoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3Io
aW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2Nh
bGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50
cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVm
dCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxl
ID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYg
KHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAg
ICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3Vi
bGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50
MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmln
SW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09y
U3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAg
IGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0g
WyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxl
ZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0
aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVE
b3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVj
ZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAg
ICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVj
RG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNl
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5k
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9u
LT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9t
b2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsK
KyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOwor
CisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHBy
b2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
SW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBl
eGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwg
U3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hp
ZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2Fz
ZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQ
cm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5
cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAg
ICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBT
cGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVy
ZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOwor
ICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAg
ICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50IHwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1f
c3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUp
OworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9wb3c6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7Cisg
ICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDog
eworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAg
ICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBhdXRv
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBpZiAoIShsZWZ0
ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChp
c0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJv
b2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7
CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9s
c2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlm
dD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZl
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2
ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisKKyAg
ICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHR5cGUg
JiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJp
bWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRl
Y29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3lt
Ym9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRjaDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CisgICAgICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1ZmZlcikgewor
ICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcgd2hlcmUgd2Ug
ZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQg
c28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAgICBicmVhazsgLy8gVGhp
cyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3
aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBidWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZW50ZXI6Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9j
b2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3
ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmpl
Y3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3Qp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVy
YXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1l
bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVu
dmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNP
d25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVt
ZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFt
ZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGlu
Z0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50
cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4o
KSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21p
c2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwg
U3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9h
c3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVx
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVz
cz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9i
ZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9v
cl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVk
T3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
Ym9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmls
ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlX
aXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0
aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0
YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAg
ICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90
aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2Zp
ZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoK
KyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19j
aGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6Cisg
ICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNh
c2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBv
cF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9w
X3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAg
Y2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nv
cl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAg
IGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVs
bDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVs
bDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6Cisg
ICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5z
dHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBj
YXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pu
bGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAg
IGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9q
YmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06
CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToK
KyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90
eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAg
ICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lk
OgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgY2FzZSBv
cF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRl
X2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBj
YXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rp
b25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBj
YXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rp
b25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3Ry
dWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hl
Y2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgor
ICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJv
d19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5n
X2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9p
bnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9p
bnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNr
cG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlf
ZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFy
Z3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19z
bG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNt
X2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAg
ICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgorICAgIGNh
c2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRfaG9zdF9j
YWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRp
b246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3Bf
aXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9y
X25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rfc2xvd19y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9p
dGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgor
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1
Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Nsb3c6Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93OgorICAg
IGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVf
b3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRv
cl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9j
YWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5j
dGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xs
aW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdGFn
OgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdhc21fdHJh
bXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21f
Y2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1f
Z3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUo
bV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlv
bnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9j
ayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQ
cm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2st
PmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAg
ICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+
YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDAp
LmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVf
dCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2Nv
ZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0
aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9
ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVk
aWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigp
OworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5jYWxsZWUo
KSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBib29sIGNvbXB1dGVV
c2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkp
OworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZl
cnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cg
d2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMg
YSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQg
b24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzogSG93IGlzIGNh
dGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgor
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2Nr
JiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9
IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAgIGlmIChj
b21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2NrLmluZGV4
KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0
YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2Nr
KCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7IGkgKyBibG9jay5sZWFkZXJPZmZzZXQo
KSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0
cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0
cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1dGVVc2VDb3VudHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91c2VDb3VudHNbYmxv
Y2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9p
bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2lu
dC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3Vu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUlu
ZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHN1
Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlv
bihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcHV0ZVVzZUNvdW50cyA9IGZhbHNlOwor
ICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNyArOTU3LDEzIEBAIHZvaWQgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdn
ZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorYm9v
bCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1
cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1f
aW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03NSw2ICs5NzEsNyBAQCBK
SVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX2NhbkJlT3B0
aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisg
ICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6TE9MKQogewogfQogCkBA
IC0xMzcsMTEgKzEwMzQsMTcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgp
CiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09Q
Q09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAog
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCisg
ICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBzcGlsbEZv
ckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAodXNlTE9MKCkgJiYgZHN0Lmlz
VmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSB0eXBlOyBcCisg
ICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAgICAgICB9IFwKICAgICAgICAg
fSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAg
LTE1NiwyNiArMTA1OSwzMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkK
IAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBc
Ci0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisg
ICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAog
ICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFt
ZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQp
IHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkp
OyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsg
XAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9w
XyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVu
Y3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwog
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9w
YWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxNyAr
MTE0MCw4NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAg
ICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5z
dHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6
ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBz
dGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewot
ICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAg
dW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUg
dGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2lu
dCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9n
cmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNp
emUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAg
ICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5k
ZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVj
ZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5p
bmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNv
ZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwotICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyAp
IHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJs
b2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRl
ck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxz
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5k
IG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdU
Rk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVu
dEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkp
OworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNl
c3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3Jd
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJl
ZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ld
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgq
bV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlv
bnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICAgICAgbV9j
dXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3VzZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3BpbGxDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNl
c1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXgg
PT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDAp
IHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25z
IHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAgICAgICAgLy8gTGV0J3MgZW5z
dXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KKyAgICAgICAgICAgIGJyZWFr
cG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsK
ICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKIAogICAgICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNzgsNDYgKzEyNTYsNTMgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChm
YWxzZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgp
OworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2gg
KG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVh
dGVyZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9m
KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJ
TkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0
cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1
dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0
aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFf
cHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0
eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9T
TE9XX09QKHRocm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2Fy
cmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVy
KQotICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVy
aWNfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1
bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9X
X09QKG5ld19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9y
KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChw
b3cpCisgICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xP
V19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jv
b2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBT
cGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Nh
bGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNf
Y29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1f
ZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBE
RUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xP
V19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJ
c0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
c3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3Ry
aW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdp
c3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxf
ZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJv
bm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Z2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdp
dGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0
X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNw
ZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCks
IFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVy
dHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQor
ICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1f
ZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJs
ZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
Lm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJp
Y19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4o
KS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0
eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhf
c3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwg
U3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVu
dHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9k
c3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJn
dW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhl
cikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJv
bWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09Q
KG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2Rz
dCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5l
cmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3Qs
IFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dl
bmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigp
Lm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5l
cmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNw
ZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRu
b3QpCkBAIC0zOTgsNyArMTM4MywxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBE
RUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hp
ZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisg
ICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4o
KS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAg
ICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc4LDYgKzE0NjcsNjYgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRC
eXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9w
X2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1
c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaWRl
bnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBl
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVf
Y29udHJvbF9mbG93OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBM
T0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQmIGNvdW50ZXIgPSBtX2N1
cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAtLWNvdW50
ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFjb3VudGVyKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIE9PUFM6IERvIHRoaXMgbGF6aWx5IGluIHNsb3cgcGF0aCBjcmVhdGlvbi9zcGlsbEZvckNh
bGwKKyAgICAgICAgICAgICAgICAgICAgLy9tX3NwaWxsQ2FuZGlkYXRlcy5hcHBlbmQob3BlcmFu
ZCk7CisKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgR1BS
UmVnIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xvYmJlcihncHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJGb3JPcGVyYW5kKG9w
ZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBSUmVn
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZnByKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3VycmVudEluc3RydWN0aW9uLT5udW1i
ZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAgICAgICAgICAgICBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwg
Y2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNv
ZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3Vu
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6
OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjog
IiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC00OTgsNiArMTU0NywyMCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCiAgICAgbV9qbXBUYWJsZS5jbGVh
cigpOwogfQogCitzdGF0aWMgdm9pZCBzbG93Q2FzZVJhbihTdHJpbmcga2V5KQoreworICAgIHN0
YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90Pj4gc2xvd0Nh
c2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgpOworICAgIH0p
OworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2NF90IHZhbHVl
ID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgodmFsdWUgJSAx
MDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7Cit9CisKIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiB7CiAgICAgbV9nZXRCeUlkSW5kZXgg
PSAwOwpAQCAtNTE2LDE0ICsxNTc5LDI1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNh
c2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5z
aWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXIt
PnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAg
ICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisg
ICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKworICAgICAgICBpZiAo
Z2V0ZW52KCJwcmludFNsb3dDYXNlcyIpICYmIGF0b2koZ2V0ZW52KCJwcmludFNsb3dDYXNlcyIp
KSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gbmFtZTsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5kdW1wKG5hbWUpOworICAgICAgICAgICAgU3RyaW5nIGtleSA9IG5hbWUudG9T
dHJpbmcoKSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkgKyAiICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCldOwor
ICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0JikgeworICAgICAgICAgICAgICAg
IHNsb3dDYXNlUmFuKGtleSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUgPSBudWxscHRyOwogICAg
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQpAQCAtNTgwLDcgKzE2NTQsNiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGlu
dCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3RyYXBzKQotICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
bXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVnYXRlKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk5LDYgKzE2NzIsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRl
cmF0b3Jfb3BlbikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQp
CiAKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2Qp
CisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoZGVjKQpAQCAtNjM1LDE1ICsxNzExLDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2Fz
ZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdF
KGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50
by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2Vu
LiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQo
KSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBz
bG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNF
X0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRv
Lm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQg
aW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9N
RVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28g
bWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAg
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7
CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNs
b3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAg
ICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAg
fQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0
ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTY4OCw2ICsxNzY3LDggQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBtX3Nob3Vs
ZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBPT1BTOiBoZWxwZnVsIGZvciBydW5uaW5nIExPTCB3
L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewog
ICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3OCw2ICsxODU5LDg4IEBAIHZvaWQgSklUOjpjb21w
aWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVu
ZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3Jp
Z2luKCkpOwogCisgICAgYm9vbCBwcmludEVhY2hPU1IgPSBnZXRlbnYoInByaW50RWFjaE9TUiIp
ICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaE9TUiIpKTsKKworICAgIGlmICghbV9leGl0SnVt
cHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1bXBMaXN0IGV4aXRDb21tb247CisgICAgICAgIGZv
ciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBzKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25k
OworICAgICAgICAgICAganVtcHMubGluayh0aGlzKTsKKworICAgICAgICAgICAgaWYgKHByaW50
RWFjaE9TUikgeworICAgICAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIHByaW50U3RyZWFt
OworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKHByaW50U3RyZWFtKTsKKyAgICAg
ICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHByaW50U3RyZWFtLnRvQ1N0cmluZygpOworICAgICAg
ICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVmKCk7IC8vIGxlYWsgaXQuCisgICAgICAgICAgICAg
ICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBleGl0IGF0IGJjIyIsICBieXRlY29kZUluZGV4Lm9m
ZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09Q
UzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMuCisKKyAgICAgICAgICAgIG1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3Rl
cnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4aXRDb21tb24uYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4aXRDb21tb24uZW1wdHkoKSk7CisgICAgICAgIGV4
aXRDb21tb24ubGluayh0aGlzKTsKKworCisgICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJl
Z2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOworICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUg
Y29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBiZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAg
IGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVu
Y2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdp
c3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhl
IGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigq
bV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAg
IGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJU
YWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9T
UkV4aXRDb3VudGVyKCkpLCByZWdUMik7CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDIpOworICAgICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkpOworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29u
ID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRD
b3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5k
IHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAg
IHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlv
bk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0p
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOwor
ICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUo
bnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOwor
ICAgICAgICBza2lwSmV0dGlzb24ubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0
Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9j
aygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCBy
ZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMyKAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBl
cnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50
ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRp
b24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dl
ZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50
OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9l
bHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJh
bXBvbGluZVRodW5rKCkuY29kZSgpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6
bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0
ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
ICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAg
Ly8gT09QUzogCisgICAgICAgIC8vIDEuIFN0b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZy
YW1lCisgICAgICAgIC8vIDIuIGpldHRpc29uIGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAg
ICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExMSW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBz
dGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05Njcs
NyArMjEzMCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRj
aEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVz
IiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/
IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAK
ICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQt
PmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05
NzgsNyArMjE0MSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1f
Y29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0
ZVNocmluayk7CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBh
ZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShy
ZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAg
ICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIs
IG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2Vk
UHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpA
QCAtMTA3Miw2ICsyMjM1LDg4MCBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7
CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRp
bWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2lu
ZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAo
IW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRl
Y29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgs
IEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVt
cCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorUmVnaXN0ZXJTZXQgY29tcHV0ZUFs
bG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hl
biB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRoaXMKKyAgICAvLyBjb21w
aWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdh
bnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4u
CisKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
OworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIo
aSk7CisgICAgICAgIGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSB8fCBhbGxvd2Vk
Q2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlZyk7
CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgUmVnaXN0ZXJTZXQmIGFs
bG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hl
biB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29t
cGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmln
YW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4u
LgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlO
ZXZlckRlc3Ryb3llZDxSZWdpc3RlclNldD4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8
R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3Rh
dGljIFJlZ2lzdGVyU2V0JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0
dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZv
ciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3Qg
bmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNv
cnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5
OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3Qo
Y29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1
bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBP
T1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5
IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcg
b3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFz
dCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7
Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5n
cHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVn
IDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAg
ICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVy
SW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlk
YXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxv
Y2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVy
YW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChy
ZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5k
KS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9j
a0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0
IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZv
ckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5k
LCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lz
dGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90
aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdl
J2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAg
cmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7
CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdp
c3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0
byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVn
KSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsK
KworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQ
UnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8g
T09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7Cisg
ICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlw
ZShyZWdWYWx1ZS5vcGVyYW5kKSkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVm
b3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUsIEZQUlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAvLyBP
T1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJl
c3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0g
WyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBp
ZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNh
dmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92
ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVn
LmZwcigpICE9IHRvSWdub3JlRlBSKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsK
KyAgICB9CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAo
cmVnLmdwcigpICE9IHRvSWdub3JlKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsK
KyAgICB9CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5z
cGlsbGVkUmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6
c2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQorewor
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoKnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1Np
emVGb3JTcGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRDb3Vu
dCh1aW50NjRfdCBjb3VudCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICBm
b3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICArK2NvdW50ZXI7
CisgICAgICAgIGlmIChjb3VudGVyICUgMTAwMDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFMb2dM
bigiUnVudGltZSBsb2FkIGNvdW50OiAiLCBjb3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
OjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2NF90
IGxvYWRDb3VudCA9IDA7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7CisgICAg
ICAgIFJlZyByZWcgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gc3RkOjpnZXQ8MT4odHVwbGUpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cm92ZW5UeXBlID0gc3RkOjpnZXQ8Mj4odHVwbGUpOworCisgICAgICAgIGlmIChyZWcgPT0gcmVn
VG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0g
b3BlcmFuZFRvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJl
Zy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBy
ZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIo
KSk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAg
ICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAg
ICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2go
KnRoaXMpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3Jh
dGNoKTsKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKSkKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcu
ZnByKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc0ludDMy
ID0gYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcu
ZnByKCkpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAg
ICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsb2FkQ291bnQ7
CisgICAgfQorCisgICAgaWYgKGZhbHNlICYmIGxvYWRDb3VudCkgeworICAgICAgICBwcm9iZShb
PV0gKFByb2JlOjpDb250ZXh0JikgeworICAgICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRDb3Vu
dCk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21T
YXZlUGxhbihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4p
OworfQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyBncHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVy
b2QKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAg
IGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7Cisg
ICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVy
YW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpID0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1
ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQ
UlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3Mg
eyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Io
b3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhh
dCBmb3IgYnl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2Fs
bGVkLgorICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9w
ZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsK
K30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7
CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3Bl
cmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2Nr
KFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVl
LmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50
KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCAmJiAhcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9
OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAg
IDogbV9qaXQoaml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQor
CitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9
CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBS
VGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9n
cHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIs
IG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAo
IWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAg
ICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikp
OworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJh
bmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9n
cHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOwor
ICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxh
dGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJz
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFu
ZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9n
cHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBp
ZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2Vs
bENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1
ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQo
aml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgp
Cit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWdu
UmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6
ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBp
ZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAg
ICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQs
IG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdw
ciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zw
cik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91Ymxl
S25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAg
IG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsK
K30KKworSklUOjpOdW1iZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklU
OjpOdW1iZXJPcGVyYW5kOjp+TnVtYmVyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
ZnByKTsKK30KKworRlBSUmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAo
bV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9q
aXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRG
UFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9j
ayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9q
aXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9q
aXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkg
eworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRl
bXBHUFIsIG1fZnByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2pp
dCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8g
aXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBI
YXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQu
dW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25l
ID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAg
ICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9v
cGVyYW5kKTsKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3Bl
cmFuZDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAg
ICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJDb252
ZXJ0aW5nT3BlcmFuZDo6fkludDMyQ29udmVydGluZ09wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6Omdw
cigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChtX2ppdC5z
aG91bGRTcGVjdWxhdGVJbnQzMihtX29wZXJhbmQpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBv
cCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAgICAg
ICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2Nh
dGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAgRlBSVGVtcCB0
ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGUFIuZnByKCk7CisK
KyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7
IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25O
b3RJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKwor
ICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7CisgICAgICAg
IEp1bXBMaXN0IGRvbmU7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXJBUk02NDo6c3VwcG9ydHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNl
bWFudGljcygpKSB7CisgICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5n
SmF2YVNjcmlwdFNlbWFudGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIs
IG1fZ3ByLCBCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0byBz
cGlsbFJlY29yZCA9IG1faml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAg
ICAgICAgICAgIG1faml0LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVj
ayhoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93
IDogb3BlcmF0aW9uVG9JbnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5zaWxl
bnRGaWxsQWZ0ZXJDYWxsKHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0KTsK
KyAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgbV9ncHIpOworCisgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpOworICAgIH0KKworICAgIHJldHVybiBtX2dwcjsKK30KKworUmVnaXN0ZXJT
ZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0
IHJlc3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAg
IGF1dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkKQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlz
U3RyaW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJv
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlm
ICghaXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRl
Qm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlm
ICghaXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29s
ZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gU3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1
ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y090aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RPYmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7
Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Nl
bGxDaGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQp
ICY9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlC
aWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJu
OworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0g
dHJ1ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNl
bmRpZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0lu
dDMyKSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBp
ZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmln
SW50KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJ
bnQodmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0lu
dDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAo
IWRvbmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFs
dWUsIHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RD
ZWxsKHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBC
aWdJbnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1
cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVt
Q2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNC
eXRlY29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRl
LnByb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50
U3RhdGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAg
ICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAg
ICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVl
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7
CisgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVn
VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigi
LCBvcGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVn
YWxsb2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7Cisg
ICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVl
KHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAg
ICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJl
Z1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7Cisg
ICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0Niwx
NyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0lu
dGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAi
UmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3Rm
L1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2Rl
SUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAg
Y2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAg
Y2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5j
dGlvbkV4ZWN1dGFibGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAg
ICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVj
b2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQor
ICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFsUmVnaXN0
ZXIsIFNwZWN1bGF0ZWRUeXBlPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgewor
ICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJl
Z2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKwor
ICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQog
ICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXg7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAv
LyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRz
LCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2
ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0g
Zm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8v
IFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5p
ZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Nyw2ICsyMTIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0
ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsK
KwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5n
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRw
dHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0g
ICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNl
bnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAg
ICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBh
YmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgotICAgICAg
ICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVtIGNsYXNz
IENvbXBpbGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAgTE9MCisg
ICAgICAgIH07CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21waWxl
VHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4g
KkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZvaWQg
ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAotICAgICAg
ICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21waWxhdGlv
blJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBl
IGNvbXBpbGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGls
ZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBjb21waWxl
VHlwZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6
OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxP
cFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1
dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJ
bmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRl
Q29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1
cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1l
KQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAg
ICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsK
ICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVk
SWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7
CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2Fj
aGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2
bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1f
Ynl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGpp
dC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgo
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9M
KQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAg
ICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJl
ZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAg
IGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChS
ZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQg
YW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkgKzM1
MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1w
KTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2Fz
ZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOwor
ICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3Vy
ZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lk
IGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0
JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAt
MzMzLDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAg
IE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2Nv
bnN0cnVjdF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTM2
MCw3ICszOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BF
cVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRh
cmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBp
bGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRl
QmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNl
LCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01MDgs
OCArNTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVs
YXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRp
b24pOwpAQCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNv
bmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNp
emVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9v
bCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAg
ICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOwor
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBs
KGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpA
QCAtNTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
aWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9l
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9t
b2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biopOwpAQCAtNjc4LDc4ICs3MjEsODEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
YWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxs
ZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1p
dFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VD
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9p
ZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAg
IHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lk
IGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJv
b2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNv
bnN0IEluc3RydWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxp
ZEdQUlJlZyk7CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNv
bHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9p
ZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZh
ckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1p
dEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBA
IC03NjQsOCArODEwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xv
c3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAg
ICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwz
OCArODIyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0
KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlv
bj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVk
RnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dD
YXNlJik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5j
dGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwot
Ci0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAg
ICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5p
c1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAg
ICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAg
ICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xv
d0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dD
YXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywg
aXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24s
IFNsb3dDYXNlJik7CiAKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dD
YXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2Fz
ZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBs
aW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgp
OworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUwor
ICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29k
ZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTg5MSw2ICs5MTUsMTYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAg
eworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Cisg
ICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAgICAgfQorCisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4u
KTsKQEAgLTkwMiw2ICs5MzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIE5vUHJv
ZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAg
ICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBT
bmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2b2lkIGVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGluZ1BvbGljeSBzaG91
bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5nUG9saWN5OjpOb1Byb2ZpbGluZyk7CiAKQEAgLTk2
MSw2ICs5OTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihj
b25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVU
aW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAg
ICAgIApAQCAtOTcxLDYgKzEwMTEsMjg3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGll
ZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAo
KTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVn
IH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMg
Y2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxs
T3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJ
VCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFu
ZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAg
ICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBOdW1iZXJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+TnVtYmVy
T3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFs
aWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgLy8gU3BlY3VsYXRlIG51bWJlciwgYW5kIGNvbnZlcnQgdG8gaTMy
LiBVc2VmdWwgZm9yIGJpdG9wcy4KKyAgICAgICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFu
ZCB7IAorICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZl
cnRpbmdPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsg
SW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBl
IGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBm
aWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9y
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1Jl
Zy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnBy
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZw
cjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxv
Y2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOwor
ICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAg
ICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghbV91c2VMT0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgewor
ICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlm
IChmcHIgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShm
cHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnBy
ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1Zh
bHVlKGdwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBncHJGb3JPcGVyYW5k
KG9wZXJhbmQpID0gZ3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3Bl
cmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VD
b3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJl
ZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGZwcikub3BlcmFuZC5pc1ZhbGlkKCkpOwor
CisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAg
cmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
ICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNw
ZWNDZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVT
dHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFu
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZv
ciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBo
aW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAg
ICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpT
VmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0
aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAg
ICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBT
YXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxsUmVjb3JkIHNp
bGVudFNwaWxsQmVmb3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUgPSBJbnZhbGlkR1BSUmVnLCBGUFJS
ZWcgdG9JZ25vcmVGUFIgPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxs
QWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9y
ZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVz
dG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
VG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJl
dGVyOwogCiAgICAgICAgIFZlY3RvcjxGYXJDYWxsUmVjb3JkPiBtX2ZhckNhbGxzOwpAQCAtOTkw
LDcgKzEzMTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4g
bV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVj
b3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBt
X2NvcGllZEdldFB1dEluZm9zOwpAQCAtMTAyNyw2ICsxMzQ4LDg3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAgICAg
ICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJpYW50
cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAg
ICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZwciB7
IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxvY2Vk
UmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IG90
aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAgZnBy
ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBz
dHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9
OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBib29s
IGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBS
ZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJh
bmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQgIT0g
b3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9IG90
aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFu
ZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJN
YXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBC
bG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
b3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJh
bmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgp
ID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3Ro
ZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5z
aXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAg
ICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAg
ICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAgICAgICAgdm9pZCBkdW1w
UmVnYWxsb2NTdGF0ZSgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBo
PiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsg
bnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+
PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwg
dHJ1ZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczx1bnNp
Z25lZCwgdHJ1ZT4+IG1fdXNlQ291bnRzOworICAgICAgICBPcGVyYW5kczx1bnNpZ25lZCwgdHJ1
ZT4gbV9jdXJyZW50VXNlQ291bnRzOworICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAx
Nj4gbV9zcGlsbENhbmRpZGF0ZXM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRM
b2c7CisKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVu
ZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisg
ICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVz
ZUxPTCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Qnl0ZWNvZGVJbmRleCwg
SnVtcExpc3Q+PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsODYgKzQyLDg4IEBACiAjaW5jbHVkZSAiUmVzdWx0VHlw
ZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
LCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVx
dWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVy
VGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFs
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVy
ZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWws
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwg
RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsMzIgKzE1Myw5
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkp
KTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOwor
CisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgcmVzdWx0KTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
KG9wMSwgaW5wdXRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQoaW5wdXRHUFIpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExl
c3NUaGFuLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKGlu
cHV0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShy
ZXN1bHQsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0z
MigwKSkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICB9CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlv
biBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBk
b3VibGVDb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRp
b24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZv
ciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1t
ZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBp
bW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQg
aW1tZWRpYXRlCiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgbGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29u
ZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25k
aXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7
CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24g
PSBmYWxzZTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTIyOSwxNyArMjkwLDQzIEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY28KIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsK
KyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsK
KyAgICBhdXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0g
bGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMy
T25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0K
KyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICBy
aHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBT
cGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVn
VDE7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAg
ICAgICAgfQorICAgIH07CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRM
SFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJp
bW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQ
UiwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdU
MSk7CisgICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJh
bmRDb25zdGFudEludChvcDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29u
ZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pKSwgdGFy
Z2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEs
IHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRS
SFMoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKICAgICB9CiB9CiAKQEAgLTI1NSw0MyArMzQyLDg5IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVu
c2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBH
UFJSZWcgbGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBh
dXRvIGdldExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
bGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVt
cC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9
OworICAgIGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIg
PSByaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50
MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRo
aXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMjsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAg
ICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFu
dEludChvcDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3Ay
aW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMy
KG9wMmltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Cisg
ICAgICAgIGdldFJIUygpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25z
dGFudEludChvcDEpOwotICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdU
MCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25k
aXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7
Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAg
ICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGNvbXBhcmUzMihjb25k
aXRpb24sIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwogICAgIH0KLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRp
dGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRp
dGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24t
PnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXpl
KCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
biwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BS
KTsKKyAgICAgICAgYXV0byBmYWxsdGhyb3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBOb25a
ZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRo
U2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIGZhbGx0aHJvdWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2lu
ZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVy
IHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlh
dGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1i
ZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBh
cmd1bWVudEdQUjApOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1l
bnRHUFIxKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEp
OwpAQCAtMzAwLDggKzQzMyw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBA
IC0zMjYsOCArNDU3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDEpOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1
MSwxMiArNDgwLDExIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhT
IGlzIG5vdCBJbnQuCi0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAg
ICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBm
YWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihy
ZWdUMCk7CisgICAgICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAg
ICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVy
VGFnUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVn
VDApOwpAQCAtMzY5LDkgKzQ5Nyw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0
aGlzKTsKICAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlz
KTsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50Lgog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CkBAIC0zODEsMTEgKzUwOSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbmM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMy
KE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKSB7IC8vIE9PUFM6IGVuc3VyZSBmb3IgYWxsIG9wY29kZXMgcHJvdmVuVHlwZSBhZ3JlZXMg
dy8gdGhlIHByZWRpY3Rpb24gcHJvcGFnYXRpb24uCisgICAgICAgICAgICAgICAgRlBSVGVtcCB0
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcC5mcHIoKTsK
KyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwgZnByKTsKKyAg
ICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAg
ICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAg
ICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShz
cmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldElu
dDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlu
cHV0LmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7Cisg
ICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAg
ICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIoc3JjRHN0KSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIo
KTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAg
ICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBP
T1BTOiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0
R1BSKSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1
dEdQUiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMzkzLDExICs1NjMsNjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNv
bnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVjPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3Ny
Y0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hT
dWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3Zl
cmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlJlZyByZXN1bHRGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1w
RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShp
bnB1dEdQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IG9uZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9u
ZSksIHRlbXBGUFIpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBG
UFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0
RlBSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNE
b3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSks
IGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQ
UiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEu
MDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7
CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjRHN0KSkgeworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVk
SW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwg
dGVtcEZQUiwgaW5wdXRGUFIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRG
UFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJ
bnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAg
ICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdU
MCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7
CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KQEAgLTQwNyw1NCArNjI4LDg5IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
Yyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhz
OwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElESVYg
aW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7Cisg
ICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBhdXRvIGVkeCA9IFg4NlJlZ2lz
dGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAgQVNTRVJU
KHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7CiAgICAgQVNTRVJUKHJl
Z1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1Q0LCBv
cDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlYXhUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
ZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNHUFI7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAgICBjbG9iYmVyKGVkeCk7
CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5lbXBsYWNlKCp0aGlzLCBl
YXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7CisgICAgICAgIGVjeFRl
bXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1wLT5ncHIoKTsKKyAgICAg
ICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigpOworCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVjeFRl
bXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlzLCBsaHMp
OworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7CisgICAgICAgIGxoc0dQUiA9
IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7
CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBs
aHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92
ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAg
ICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5v
bWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigt
MjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRy
dXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5r
KHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVj
eCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2
ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0
b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyBlYXggfSk7
CiAKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vs
c2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJF
QUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlm
IC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArNzIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUg
PHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25k
aXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50
MzJPcDI7CkBAIC00NzQsNiArNzMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1Qw
KTsKQEAgLTU2MiwxNSArODE5LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChj
b25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0
aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
ICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVy
dCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICs5NzksNjYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVtaXRNYXRoSUNG
YXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRO
ZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSwgc2xvd0Nhc2UpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KK2Jvb2wgSklUOjp0cnlFbWl0TE9MQml0RmFzdFBh
dGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOworCisgICAgYXV0byBiaXRPcCA9IFsmXSAoR1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJo
c0dQUikgeworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXRhbmQ+KQorICAgICAgICAgICAgYW5kMzIobGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWVfdjxPcCwgT3BCaXRvcj4pCisgICAgICAgICAgICBvcjMyKGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3As
IE9wQml0eG9yPikKKyAgICAgICAgICAgIHhvcjMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wTHNoaWZ0
PikKKyAgICAgICAgICAgIGxzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wVXJzaGlmdD4pCisg
ICAgICAgICAgICB1cnNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BSc2hpZnQ+KQorICAgICAg
ICAgICAgcnNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgc2V0
SW50MzIocmVzdWx0LCByZXN1bHRHUFIpOworICAgIH07CisKKyAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhz
R1BSKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU51bWJlcihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAg
IEludDMyQ29udmVydGluZ09wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQz
MkNvbnZlcnRpbmdPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKyAg
ICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3As
IHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03NDEsMTcgKzEwNDksOCBAQCB2b2lkIEpJ
VDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgorICAg
IGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAg
ICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTc2MCwzMyArMTA1OSwxMDYgQEAgdm9pZCBKSVQ6
OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgICAgICBsZWZ0T3BlcmFuZC5zZXRD
b25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKICAgICBlbHNlIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQz
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVm
dE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICAvLyBPT1BT
OiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QyOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICBpZiAoIWxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKLSAgICBTbmlwcGV0
R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKIAorICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2Vu
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAg
IEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxp
bmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1
bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAgICAgaWYgKHByb2ZpbGluZ1BvbGljeSA9PSBQcm9m
aWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9maWxpbmcpCi0gICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1bHRSZWdzLmdwcigpKTsKIAotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJl
cikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMy
T25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAg
IHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBp
bnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBj
YXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50
MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAg
ICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIp
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNC
aWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04
MDMsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGkK
IAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0UmVncyk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDks
MTkgKzEyMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRG
YXN0UGF0aDxPcD4oY3VycmVudEluc3RydWN0aW9uKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kOwpAQCAtODczLDIxICsxMjM0LDc3IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQ
YXRoKGNvbnN0IEkKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkg
fHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcg
c2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBJbnZhbGlkRlBSUmVnOworCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNj
cmF0Y2hUZW1wRlBSOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4g
aGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlBSLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3Jh
dGNoVGVtcEZQUi0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworCisgICAgICAgIGlmICghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vs
c2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisgICAgRlBS
UmVnIHNjcmF0Y2hGUFIyID0gZnBSZWdUMjsKKwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25z
dCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAg
IGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAogICAgIEpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIHNuaXBw
ZXRTaGlmdFR5cGUpOworICAgICAgICBzY3JhdGNoRlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
Miwgc25pcHBldFNoaWZ0VHlwZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExp
c3QoKS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRS
ZWdzLmdwcigpLCByZXN1bHQpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikg
JiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShy
ZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgICAgIHNldEpTVmFsdWUo
cmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JzaGlmdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTAyLDE4ICsxMzE5LDY2IEBA
IHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
QWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOwor
ICAgICAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVz
dWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5t
X2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBtb3Zl
KGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91
YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0
RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAg
ICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZw
cigpOworICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0g
bV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJp
dHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudElu
c3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFs
dWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJ
Q1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVBZGRPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9u
UHJvZmlsZWRGdW5jdGlvbj4KQEAgLTkyNCwxNSArMTM4OSwzNSBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIEFyaXRoTmVn
YXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3Qu
Ci0gICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1
ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KLSAgICBKU1ZhbHVlUmVncyBz
cmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAg
ICBKU1ZhbHVlUmVncyBzcmNSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNyY1RlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcmNUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wZXJhbmQpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBzcmNSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzcmNUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyaXRoTmVnYXRl
IGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisg
ICAgICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNo
dWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCisgICAgICAgIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKKyAgICB9CiAjZWxzZQogICAgIEpTVmFsdWVS
ZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNS
ZWdzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC05NDEsMTkgKzE0
MjYsMjIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogCiAgICAg
bWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBzY3Jh
dGNoR1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7
Ci0KICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9u
LCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgYm9vbCBn
ZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElD
R2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChzcmNSZWdzLmdwcigpKTsKICAgICAgICAgYWRk
U2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsK
QEAgLTk2Myw3ICsxNDUxLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1h
dGhJQzwKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxl
ZEZ1bmN0aW9uPgpAQCAtOTc0LDM5ICsxNDY5LDgyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCisgICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7
CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LnNlY29uZCgpKTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQorICAgICAg
ICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsK
KyAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQorICAgICAgICByaWdodE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisKKyAgICBS
RUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXND
b25zdCgpKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7Cisg
ICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVt
cDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKICNlbHNl
CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwog
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwogICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBy
aWdodEZQUiA9IGZwUmVnVDE7CiAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogI2Vu
ZGlmCiAKLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7
CisgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICB9Cisg
ICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkgeworICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7Cisg
ICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAg
IGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwot
ICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxl
ZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdw
cigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxl
ZnRUZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
ICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAg
ICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisgICAgICAgIGlmICgh
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAg
ICB9CiAKLSAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCBy
aWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVnVDAsIGZw
UmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgIG1hdGhJQy0+bV9nZW5lcmF0b3Ig
PSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIp
OwogICAgIAogICAgIEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50
KHJpZ2h0T3BlcmFuZCkpKTsKICAgICAKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZh
bGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7Ci0KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IGlubGluZVN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgpAQCAtMTAxNSwxNyArMTU1MywzNCBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAKICAgICBib29sIGdlbmVy
YXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAgICBp
ZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEp
OworICAgICAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgewor
ICAgICAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAg
ICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIH0KKwogICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsZWZ0UmVncy5ncHIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocmlnaHRSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzUsMTEg
KzE1OTAsMjAgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAg
IH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBy
ZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKHN0ZDo6
aXNfc2FtZV92PE9wLCBPcEFkZD4pCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0hlYXBCaWdJbnQ7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBh
dGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9u
KQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlv
blN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVu
dEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
U3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA0OCw4ICsxNjEyLDggQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vsc2UKICAgICBK
U1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTEwODUs
NyArMTY0OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hG
dW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5j
dGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmlu
ZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDk1LDE2ICsxNjU5LDYgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0jZW5kaWYKLSAg
ICAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9v
cGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTE1LDE1ICsxNjY5LDM2IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKIAogICAgIEFTU0VSVCghKEdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6
aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKIAotICAgIGlmIChH
ZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBlbHNlIGlmIChH
ZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSB9OworICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxp
ZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAgICAgICBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmlnaHRSZWdzLmdwcigpID09IHJlZ1QyID8gcmVnVDMgOiByZWdUMiB9Owor
ICAgIH0gZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmln
aHRPcGVyYW5kKSkgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
bGVmdFJlZ3MuZ3ByKCkgPT0gcmVnVDAgPyByZWdUMSA6IHJlZ1QwIH07CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKSB9OworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworI2VuZGlmCisgICAgCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAg
YXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgogCisgICAgaWYgKEdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgIGVsc2UgaWYgKEdlbmVyYXRv
cjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQpAQCAtMTE1NiwyMyArMTcz
MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OwotI2VuZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotCi0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwotICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLQogICAg
IFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0
KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExODgsNjIgKzE3NDYsMjM3IEBAIHZvaWQgSklUOjplbWl0
X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFu
dERvdWJsZShvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3Bl
cmFuZENvbnN0YW50RG91YmxlKG9wMikpOwogI2VuZGlmCi0KICAgICBSRUxFQVNFX0FTU0VSVCgh
bGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7Cisg
ICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVt
cDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOwor
ICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxlZnRUZW1wRlAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBz
Y3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxlZnRUZW1wRlAtPmZwcigp
OworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7
CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7
CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVn
IHJpZ2h0RlBSID0gZnBSZWdUMTsKKwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICgh
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKKyAgICAKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG51bGxwdHI7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKKyAg
ICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogCiAgICAgSklURGl2R2VuZXJhdG9y
IGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmln
aHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
LCBhcml0aFByb2ZpbGUpOworICAgICAgICBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKIAogICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpIHsKICAgICAgICAgZ2VuLmVu
ZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
TGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwogCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCkuZW1wdHkoKSk7
CiAgICAgICAgIEFTU0VSVChnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkpOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9kaXYpOwogICAgICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
ICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
dWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElD
KiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgICAgICBpZiAo
YXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwgYXJpdGhQcm9maWxlLmRp
ZE9ic2VydmVOZWdaZXJvRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc1Rl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVz
dWx0RlBSID0gcmVzdWx0VGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShsaHNHUFIsIGxoc0ZQUik7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUocmhzR1BSLCByaHNGUFIpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIs
IHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVpl
cm8sIGJyYW5jaDMyKEJlbG93LCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihCZWxvdywg
cmhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIG11
bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJs
ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAg
ICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
TXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
TXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0
aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBh
cml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
CisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkp
IHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAg
cmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1YkRv
dWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNE
b3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBi
aXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRo
SUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRl
Y29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgd2lsbERlZihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRv
cDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJvb2wg
SklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBy
ZWdUMCk7CkBAIC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJs
b2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciBy
ZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAg
ICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQog
ewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3LDQ0
IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxl
T3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFp
bENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRB
cmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0K
ICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNo
b3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxl
IGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisg
ICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPwor
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3Ip
IGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3Bl
cnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2tw
b2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENo
ZWNrcG9pbnRTbG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAg
PSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1Qw
ID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsK
KyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBy
ZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihp
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJl
ZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2
ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
ICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzog
TG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2Fz
ZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMg
b3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZO
b3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BS
KTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1
bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAg
ICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3Vs
dEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQ
Uik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0
ZXJzLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
aXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRo
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVj
a3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAg
ICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qz
OwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHko
dm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQ
YXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2
bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2tw
b2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0pOworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJh
dGlvbkRvbmUubGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01
MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAg
ICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxp
bmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEs
NyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAg
fQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGNvbnN0IGNo
YXIqIEpJVENvZGU6OnR5cGVOYW1lKEpJVFR5cGUgamkKICAgICAgICAgcmV0dXJuICJMTEludCI7
CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgcmV0dXJuICJCYXNlbGlu
ZSI7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAiTE9MIjsKICAg
ICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuICJERkciOwogICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgpAQCAtMTA4LDcgKzExMCw3IEBAIEpJVENvZGVXaXRoQ29kZVJlZjo6
SklUQ29kZVdpdGhDb2RlUmVmKEMKIAogSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhD
b2RlUmVmKCkKIHsKLSAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChpc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkp
CisgICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNERkdPckZUTChqaXRU
eXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKSkKICAgICAgICAgJiYgbV9y
ZWYuZXhlY3V0YWJsZU1lbW9yeSgpKQogICAgICAgICBkYXRhTG9nKCJEZXN0cm95aW5nIEpJVCBj
b2RlIGF0ICIsIHBvaW50ZXJEdW1wKG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSksICJcbiIpOwog
fQpAQCAtMjM3LDYgKzIzOSwxMSBAQCBOYXRpdmVET01KSVRDb2RlOjpOYXRpdmVET01KSVRDb2Rl
KENvZGVSCiAjaWYgRU5BQkxFKEpJVCkKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3Rl
cnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxT
aXRlSW5kZXgpCiB7CisgICAgLy8gRm9yIEJhc2VsaW5lIEpJVCwgdGhpcyBpcyB0cml2aWFsbHkg
dHJ1ZS4KKyAgICAvLyBGb3IgTE9MIEpJVCwgZXZlcnl0aGluZyBpcyBhbHJlYWR5IHNwaWxsZWQg
dG8gdGhlIHN0YWNrIGF0IGVhY2ggb3Bjb2RlLCBzbyB3aGVuIHdlCisgICAgLy8gZ28gdG8gdGhl
IG9wX2NhdGNoLCB0aGUgbGl2ZSBzdGF0ZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIHJpZ2h0IHBs
YWNlIG9uIHRoZSBzdGFjay4KKyAgICAvLyBBbHNvLCBvcF9jYXRjaCBoYXMgbm8gaW5jb21pbmcg
cmVnaXN0ZXIvdHlwZSBwcm9vZiBzdGF0ZSwgc28gaXQncyB0cml2aWFsIHRvIGNhdGNoCisgICAg
Ly8gYW4gZXhjZXB0aW9uIGluIExPTCBqdXN0IGJ5IGp1bXBpbmcgdG8gb3BfY2F0Y2guCiAgICAg
cmV0dXJuIHsgfTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklUVHlwZSA6
IHVpbnQ4X3QgewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVuaywKICAg
ICBCYXNlbGluZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJVAogfTsK
QEAgLTY3LDM2ICs2OCwyMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogdHlw
ZU5hbWUoSklUVHlwZSk7CiAKLSAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKSVRUeXBlOjpCYXNlbGluZUpJVDsKLSAgICB9Ci0gICAgCiAg
ICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCiAgICAgewogICAgICAgICByZXR1cm4gSklU
VHlwZTo6RlRMSklUOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJ
VChKSVRUeXBlIGppdFR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAg
ICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRU
eXBlOjpERkdKSVQ7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICAgICAg
cmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6
Tm9uZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBzdGF0aWMgYm9vbCBpc0V4ZWN1dGFi
bGVTY3JpcHQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChqaXRUeXBl
KSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAgICAgICAgY2FzZSBKSVRUeXBlOjpI
b3N0Q2FsbFRodW5rOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0
OgorCisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6Cisg
ICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJ
VDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA3LDcg
Kzk1LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAg
ICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklU
VHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTE2LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0
VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAg
IGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjQs
NiArMTE3LDI0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29s
IGNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgorICAgICAg
ICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIHN0YXRpYyBib29sIGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklUVHlw
ZSBleHBlY3RlZEhpZ2hlcikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhlY3V0
YWJsZVNjcmlwdChleHBlY3RlZExvd2VyKSk7CkBAIC0xNDUsOSArMTU2LDE5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBpc0xvd2VyT3JTYW1lVGllcihleHBlY3RlZExvd2VyLCBl
eHBlY3RlZEhpZ2hlcik7CiAgICAgfQorCisgICAgc3RhdGljIGJvb2wgdXNlc1JlcGxhY2VtZW50
Q29kZUJsb2NrKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBl
ID09IEpJVFR5cGU6OkxPTEpJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRU
eXBlID09IEpJVFR5cGU6OkZUTEpJVDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaXNP
cHRpbWl6aW5nSklUKEpJVFR5cGUgaml0VHlwZSkKICAgICB7CisgICAgICAgIHJldHVybiBqaXRU
eXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCB8fCBq
aXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RG
R09yRlRMKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBlID09
IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBnZW5lcmljVW53
aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYQogICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUg
b2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKICAgICAg
ICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMg
dG8gaGFuZGxlci0+dGFyZ2V0CiAgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0gICAg
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmppdFR5cGUoKSkpCisgICAgICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJl
dGVyID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+
dGFyZ2V0KS5wdHIoKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBjYXRjaFJvdXRpbmUgPSBo
YW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsx
NDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8g
T09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBk
b24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1
Nyw2ICsxNTgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxs
IHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKQEAgLTE2NywyNSArMTY5LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAo
aXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpo
YXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNywyNyArMTkwLDM2IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwg
dGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVt
cCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3Vs
dCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAg
IAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRl
Y29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
bV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5s
YXN0KCkuZHN0ID0gZHN0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5k
KEp1bXBMaXN0IHsgfSk7CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBq
dW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwg
UmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAot
ICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOwor
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3Vs
dCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBK
dW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5
LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRl
Y29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQor
ICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC00
MDYsMTEgKzM5OCw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0
KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjcwNzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICB9OwogCi0gICAgICAgIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJs
b2NrLT5qaXRUeXBlKCkpOworICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklU
Q29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSk7CiAKICAgICAgICAgaWYgKG1f
Z2VuZXJhdGVGYXN0UGF0aE9uUmVwYXRjaCkgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCAr
MTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJv
cGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmly
dHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTEsNiArNTMsMjggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzogSWYg
d2UgY2hhbmdlIHJlZ2FsbG9jIHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUgTiByZWdpc3RlcnMgcGVy
IGxvY2FsLCB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIHR3byByZWdz
LgorICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNyYykgPT0g
SW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQo
KSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMTQsNTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5v
blZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklE
IHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7
Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJl
ZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxs
b2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
YWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAg
ICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNo
UmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJl
ZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRj
aFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7
CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBi
dXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxs
b2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5t
X2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUu
bV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0
cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTcwLDUw
IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1
YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVl
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAg
R1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3Bl
cmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5z
dGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVt
cC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5l
bXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+
Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7Cisg
ICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2Ug
ZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgot
ICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblBy
b3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0
IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmpl
Y3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRk
cmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlz
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAog
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEs
NDAgKzIyMyw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhl
IG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byBy
ZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwg
YmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSBy
ZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0
aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hl
Y2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAg
ICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdU
MywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxs
T3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHBy
b3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJU
ZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAg
ICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAg
ICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAg
IHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2
YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVl
VGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2Vs
bC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVU
ZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdw
cigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3Qp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMs
IHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisK
KyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHBy
b3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAg
ICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1
bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQ
UiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsK
KyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNl
T2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdw
cigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFs
dWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1Qw
IGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3
ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUg
Y2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdl
dF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBn
ZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVz
dWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBw
cm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2Vu
ID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygp
LT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMjQsMjkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Vt
cHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzU0LDcy
IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0g
ICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAg
ICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9
IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
dXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8g
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVh
bCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Qw
KTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI4LDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3Ro
ZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUs
MTIgKzQ2MiwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisjaWYg
Q1BVKEFSTTY0KQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCBpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB0ZXN0NjQo
WmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAg
ICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDk4LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRl
c3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVn
aXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNF
KEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MjgsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmln
X2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwg
PSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQo
aW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0lu
dDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0g
YnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJ
bnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRV
Uk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0z
MTMsMTggKzU5NCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25z
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGlu
dCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2
YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5
cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwog
Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzY0Myw2MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVj
dCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8g
c3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmpl
Y3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MjcsNDEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAg
IGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAg
ICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NzAsMjAzIEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wp
KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkg
eworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIp
OworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7
CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNo
SWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
eW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3lt
Ym9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDAp
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQor
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVu
Y3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBm
dW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVu
Y3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1l
LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
b3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVH
UFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGlu
dCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQg
YmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFs
c2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMg
d2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwg
YmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8v
IFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRh
ZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVy
dCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJv
b2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFu
IHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1
dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVl
KHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cg
Yml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pm
YWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlv
biwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIg
PSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBT
Y3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0
Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BS
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNj
cmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNo
Mi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBS
LCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NzUsMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0
KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGlu
ayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAt
IGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAg
SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMp
OwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAg
ICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Cisg
ICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAv
LyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAg
ICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFy
Z2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwor
ICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMTA2LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRl
ZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVy
KSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC01MDAsMTAgKzExMzQsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAg
ICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNjUs
MzI3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NF
UlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVy
czo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3Bl
Y2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAg
ICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVh
bCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50
ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRh
ZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
IEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0
ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/
IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1
YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBl
KHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVG
YWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAg
ICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9i
amVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhz
R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJo
cykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZw
Q29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7
CisgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
TnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUg
c3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIp
OworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5j
aElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisKKyAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmVxPigpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxo
cyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5t
X3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46
OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAo
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgYXV0byBncENvbXBh
cmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEg
PyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisg
ICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJo
cykpKSB7CisgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
VGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNG
UFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpl
bWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4o
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0
aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSBy
ZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAg
ICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQ
UlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5v
dEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhz
R1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRh
cmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNH
UFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCBy
aHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFr
ZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0
dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdl
dCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdU
MTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBs
YW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE1MDEsMTUzIEBAIHZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBs
aHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUu
bV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwg
cmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJl
ID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNF
cSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHBy
b3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAg
ICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBh
cmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2
ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7Cisg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKIAotI2lmIFVT
RShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdo
dCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlz
IENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25l
OgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1w
bGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmds
ZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQg
aWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAg
Ly8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBv
bmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVx
dWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdU
Myk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJl
Z1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7
Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwg
cmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJl
Z1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAg
IEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwg
KHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7
Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVz
cyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBp
ZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7
CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChU
cnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVn
cyB7IHJlZ1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3Ry
aWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQor
ICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmln
aHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAg
ICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNs
b3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAq
LworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUg
NCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMy
L2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1
ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJm
bG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3Qg
YSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0
CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgor
ICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJl
Z1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUs
IHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAg
ICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJv
dmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9u
WmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8g
SnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5k
IEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhN
RTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEg
QmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0
cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVn
VDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYg
IVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNv
dmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCBy
ZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBK
dW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50
ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3Vi
bGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAg
IEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAv
LyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBz
bG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIs
IHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJs
ZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmso
dGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9L
LmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwot
ICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxNjY1LDE0
MSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxo
cyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5t
X3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCBy
ZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAg
ICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3Vi
bGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFs
KHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFp
c0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxs
KHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1i
b2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICAv
LyBPT1BTOiBjYW4gZG8gYSBsb3QgYmV0dGVyIGhlcmUuCisgICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAg
ICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZl
IGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQ
UikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CiAKLSNpZiBVU0UoQklHSU5U
MzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUg
U3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0g
ICAgICAgZ290byBzbG93UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3Rv
IHRha2VuOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBn
b3RvIHNsb3dQYXRoOwotICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMg
ZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwg
d2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZl
bHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAg
Ly8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGlu
ZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0
cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3
aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVz
IGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3Zl
KHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZI
aWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJl
Z1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAg
b3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVh
bCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCByZWdUMSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpT
dHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2Vs
bCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1Qy
KTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5s
ZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRo
IGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcg
J3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxl
ZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlz
IENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50
IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBz
aW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVp
cmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBU
aGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8
PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0
IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3
aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91
YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisK
KyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAg
ICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3Zl
ciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRl
Z2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBk
b3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmln
aHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEs
IHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzE4MTIsMjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmlj
dGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVn
IGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1i
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAg
c3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdFZSZWcpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBk
c3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgp
OwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
LSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBT
cGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5
cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVB
bnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5w
dXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlm
CisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYg
VVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVy
KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIo
aW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051
bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAg
ICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNC
aWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50
LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
U3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3Ry
aW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVn
VDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgp
OyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3Ig
dHlwZSBzdGF0ZS4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjA5MSwyMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0
b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlw
ZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisg
ICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAg
ICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC05MDUsOSArMjEyMiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkp
OwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwg
dGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQ
UiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaElt
bVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsyMTQ3LDE3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0
Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwot
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC05MzgsOTMgKzIxNzEsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmco
Y29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+
c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRp
bmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJp
bmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+
KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAg
bG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAg
ICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBj
b25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVlOwor
ICAgIGF1dG8gY29tcGFyZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBz
Y3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisK
KyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1
bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoY29tcGFyZU9wLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAK
LSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAg
ICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNv
bXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05v
dEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAg
ICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJ
bXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBo
YXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFr
ZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdl
IGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBw
b2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0
IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9
IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291
bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAg
ICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0
b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBT
cGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAK
QEAgLTEwMzUsOSArMjMyMiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3Qg
SW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAg
IEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29w
ZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisK
KyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9m
U2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmpl
Y3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTA0NSwxMyArMjM0Niw4MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b190aGlzKGNvbnN0IEluc3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0g
Jm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21h
TW9kZS5pc1N0cmljdCgpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAg
ICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNU
b1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0
aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAv
LyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4K
KyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNw
ZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIo
Y2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAg
ICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0
ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYg
KGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1Rv
VGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlz
U2V0KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQor
ICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmpl
Y3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNh
Y2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7
CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2Fk
MzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyNDI3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVk
RnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxs
ZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0x
MDY4LDcgKzI0MzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2Fs
bGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFu
ZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVl
T3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRl
bXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2Nh
dG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1w
Mi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAg
IHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJl
ZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigp
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2Fs
bGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxs
ZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2NCArMjQ3OSwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVS
ZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAg
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVj
dDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90
YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAg
Ly8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0
aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTExNjIsOCArMjUyNCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAv
LyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlw
ZSBzdGF0ZS4KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2st
Pmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAg
IC8vIE9PUFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1Ig
ZW50ZXIuCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9u
Q291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAg
ICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJ
bW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAt
MTE4NywxMyArMjU1MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQg
dGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNh
bkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAg
LTEyMDYsMTEgKzI1NjksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsK
KyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0
IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVu
dEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAt
MTIzMywxMCArMjU5NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNv
bnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nh
c3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI2MDUs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganND
YXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1p
dFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJl
dHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjYy
Niw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1f
c2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
RXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wp
OwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMp
OwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBl
bHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4
ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VS
VChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQg
KzI2OTAsNDYgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQ
UiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5
dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAg
ICAgc2NvcGUucmVzZXQoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3Vs
dC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgp
KQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3Bl
R1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vu
ZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1
bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9w
Y29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjc2MCwx
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJn
YzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICsyNzgxLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwor
CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0
ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVt
cC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFy
Z0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5k
ZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BS
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyODE0
LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9y
VmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZh
bHVlIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVz
cyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOworICAgICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDks
NiArMjg2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRj
aGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzI4OTIsOCBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
c3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSAr
MjkxOSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklU
QXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFy
Z3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9
IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1
bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAg
CiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4LDEzICsyOTM2LDE0IEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogICAgIExhYmVsIG5leHRIb3RQ
YXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFs
SW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2Rl
LCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0lu
ZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEw
LDM3ICsyOTY5LDgxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8g
Q2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3Bl
cmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBi
YXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JW
YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7
Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJh
dG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vzcwot
ICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
QWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCks
IHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAKLSAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zm
c2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBz
aWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQor
ICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsK
KyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAg
ICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEp
OworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNo
ZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1
bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUK
KyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAg
ICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRl
cmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
Z1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIx
ICszMDUzLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxv
dywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3Ry
dWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGlu
ZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlu
ZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVt
cGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRl
eEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJh
dG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAg
IH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBB
ZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rv
ck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7
Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJh
c2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwog
CiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NzQsMjEgKzMxMDcsNTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVz
cyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRl
eE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9y
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzog
S25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JU
ZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0
aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1l
cmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+
Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0g
cmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgp
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
LCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxp
bmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1l
c1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRl
eEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNTk4LDYgKzMxNjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5
cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29k
ZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVt
cExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszMjIzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JD
YWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5v
bkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBw
cm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYg
KzMyNDAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hp
Y2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1l
KCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAg
IT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tl
blRhaWw+KCk7CkBAIC0xNzAyLDExICszMjczLDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3Vt
ZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdv
QXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOwor
ICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldElu
dDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsK
KyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVn
VDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE3MTQsMjkgKzMyOTQsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3Ro
KGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJz
VG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVn
VDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1Rv
U2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAg
ICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
cmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1Q
YXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAg
ICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1Qw
KTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTc0NCw0OSArMzM0Myw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOwor
ICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBp
bmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVn
VDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5k
aWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAg
IGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpz
VW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBi
cmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAg
ICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAg
ICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3Rv
dHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFs
dWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3Qo
dmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCks
IHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2Fz
ZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBl
bHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkg
PT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3Mu
dGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7
CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQ
cm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRj
aEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBl
bWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdz
LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcxLDcgKzE4NzEsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENvZGVC
bG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAg
IEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9w
dGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENvZGVC
bG9jayAmJiBKSVRDb2RlOjppc0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgp
KSk7CiAgICAgCiAgICAgaWYgKHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JFbnRy
eSh2bSwgY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50cnki
LCAoImF0IGJjIyIsIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTM0MTksNiArMzQxOSw0MiBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9CiAK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRp
b25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpCit7CisgICAgLy8gSXQncyBz
b3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlz
LCBkb2luZyBzbyB3b3VsZG4ndAorICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERl
ZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xDb2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBp
ZiAoZ2V0ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFj
aEpldHRpc29uIikpKQorICAgICAgICBkYXRhTG9nTG4oImpldHRpc29uLCBmb3JjaW5nIHJlb3B0
IG5vdzogIiwgKmxvbENvZGVCbG9jayk7CisgICAgbG9sQ29kZUJsb2NrLT51cGRhdGVBbGxWYWx1
ZVByb2ZpbGVQcmVkaWN0aW9ucygpOworICAgIAorICAgIC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUg
cHJvZmlsZXMgaGVyZSwgc2luY2Ugd2UncmUgamV0dGlzb25pbmcsIGhvcGVmdWxseSB0aGV5IHVw
ZGF0ZSB3LyB0aGluZ3Mgd2UgY2FyZSBhYm91dC4KKworICAgIHNhbml0aXplU3RhY2tGb3JWTShs
b2xDb2RlQmxvY2stPnZtKCkpOworCisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAqbG9sQ29kZUJsb2NrLCAiOiBFbnRlcmVkIHJlb3B0aW1pemUgZnJvbSBMT0wiKTsKKwor
ICAgIENvZGVCbG9jayogbGxpbnRDb2RlQmxvY2sgPSBsb2xDb2RlQmxvY2stPmFsdGVybmF0aXZl
KCk7CisgICAgLy8gV2UgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBibG9j
ay4KKyAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUobGxpbnRDb2RlQmxvY2stPmpp
dFR5cGUoKSkpOworCisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGxsaW50Q29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpOworICAgIGlmICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0g
bGxpbnRDb2RlQmxvY2spIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAqbGxpbnRDb2RlQmxvY2ssICI6IE5vdCByZW9wdGltaXppbmcgTE9MIGJlY2F1c2Ugd2Un
dmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBPdGhlcndpc2UsIHRoZSByZXBsYWNlbWVudCBtdXN0IGJlIG9wdGltaXplZCBjb2Rl
LiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eQorICAgIC8vIHRvIGNoZWNrIG91ciBsb2dpYy4K
KyAgICBBU1NFUlQobGxpbnRDb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOwor
ICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQobG9sQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKKworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBzdHVjayBpbiBhIGxvb3AgbG9naWMK
KyAgICBsb2xDb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhp
dCwgQ291bnRSZW9wdGltaXphdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05P
UkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw2ICszMTgsOCBAQCBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblZhbHVlCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csIHZvaWQsIChWTSopKTsKIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZv
aWQsIChWTSopKTsKIAorSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2Vy
TE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjEx
LDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwpAQCAtMjgxLDggKzI3Nyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CkBAIC01NTgsNyArNTUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7
CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8g
cmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzksOCArNjMwLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDgg
KzY3NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcx
Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtNzc4LDggKzc2Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTgx
OSw4ICs4MDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMTAwLDgg
KzEwODEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3Qs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEy
NTcsOCArMTIzNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwog
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzA3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEu
aD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQogCkBAIC01Miw1MSArNTQsMTE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VH
UFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAg
R1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1w
bGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlw
ZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3Nl
ZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRl
bnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Qy
LCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1
c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0Nl
bGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIp
OworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhp
bmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAg
ICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwor
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3Bl
cnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5
KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAg
ICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNw
ZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3Ry
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRC
eVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxl
LCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
KyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisK
KyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbElu
ZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTA1LDQxICsxNzMsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
cHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigp
OworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFz
ZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BS
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVz
dWx0UmVncyk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBB
U1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTU3LDYgKzI1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlW
YWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzog
TWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJD
b25zdGFudCkKQEAgLTMxOSw4ICs0MjEsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVt
aXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1
bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgcHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcg
KzQ0NCw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICBy
ZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNE
aXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9k
aXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAot
ICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9
IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwpAQCAtMzU1LDEzICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAg
ICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAg
ICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0Pigp
KTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNw
aWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBEbyBiZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOwogCkBAIC0zOTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZh
c3RQYXRoSm1wLCBkb25lLCBkb25lKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRQcml2YXRlTmFtZT4oKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQ
cml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CiAKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAog
ICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJ
ZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2Ug
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNj
ZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBH
UFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJf
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3Nv
ckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJf
dCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIg
fTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcg
Z2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0
dGVyLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJl
Z1QwKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1Qx
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVn
VDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNv
ZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRl
Y29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlz
LCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5
R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdU
Mik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3By
b3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29k
ZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRy
aWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOCArNjMzLDUyIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBiYXNlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
ZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFy
cmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMg
cmVnaXN0ZXJzLgpAQCAtNDkyLDI1ICs2ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVy
QmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2Rl
bEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5n
cHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTUyMCwxOSArNzE3LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFs
dWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hW
YWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3Bl
cnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0
eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BS
KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVy
dHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJv
cGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Cisg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC01NDEsMjIxICs3ODksMzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVs
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVy
blZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nl
c3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAg
ICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7
CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAg
ICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVn
cywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4Kytd
OwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAg
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAg
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
YmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRh
dGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAg
IEdQUlJlZyBpbmRleGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdU
eXBlR1BSLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJv
ZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRz
V2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiB0aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BS
UmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFz
ZUdQUiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0
aGlzVlJlZyk7CisgICAgfQogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhU
aGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8g
cGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3Jl
IG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJl
ZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUg
Y29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMg
YXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VH
UFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7Cisg
ICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigp
OworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNo
R1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwg
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwg
ZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAg
IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5l
IGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQot
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7
CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJl
c3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICBy
ZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRy
ZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkK
LXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgp
LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0
R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDcsMTcgKzEyNjAsMjUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9
IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7
CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewog
ICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCkBAIC04NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFu
dFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwg
bV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFu
dFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9z
dXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVw
dGgpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Cisg
ICAgICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAg
ICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1v
dmUoc2NvcGVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQo
KSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWlj
OgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
QEAgLTg5NCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogCkBAIC05MDksMjkgKzEzNDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVn
VDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC05NDAsMTUgKzEzNzYs
MjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9h
ZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEp
KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQ
dHIoc3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAz
LDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQ
dHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUx
ICsxNDEzLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAg
ICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgp
OwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisK
ICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcg
YmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAg
ICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gg
PSByZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsK
KyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAg
R1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgq
dGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAog
ICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAg
bG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRT
bG90LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAg
ICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVh
bCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBv
ZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAg
ICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAg
ICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0
ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihv
cGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRH
ZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdw
cigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJl
Z1QxOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBj
YXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMTAzNiwxMCArMTUwNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAg
ICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAor
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBz
dG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdh
dGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxv
YWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdU
MSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlX
cml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMjksMjEgKzE1
NzksNDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAg
ICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4o
Jm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2
YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1Qy
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
fQorCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJv
b2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4g
b2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1
ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZz
ZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRH
UFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0g
YnV0dGVyZmx5VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1Qx
OworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwg
c2NvcGVHUFIsIG9mZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExh
bWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2Nv
cGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAg
ICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVy
YW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAg
IHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9m
ZnNldEdQUik7CisgICAgICAgICAgICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0
b3JlUHRyKHZhbHVlR1BSLCBCYXNlSW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMTE1NCwyOCArMTYzMiw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKKworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgICAgIGlm
ICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJv
dmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAgICAgICAgICAg
ICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Pigqb3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
dmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+
KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAg
ICAgICAgICAgICBsb2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBsb2FkUHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZSht
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVH
UFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6
Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFs
dWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1w
bGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BS
ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUo
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BS
LCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAg
ICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0x
MTkwLDEyICsxNjk3LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnMKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdw
cigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQg
dG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1l
IHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3
b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2Ny
YXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGlj
YWxWYXIpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlz
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1w
dCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCiAK
ICAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1
LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiAg
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNo
VmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVt
aXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdl
IGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWlu
LgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQg
UmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0
Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CkBAIC0xMjQyLDEwICsxNzY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAg
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTI2MSw2MSArMTc4NCwxNzgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1
bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1l
bnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwg
cmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBp
bmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1
ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAg
CisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
Q2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQogeworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYg
d2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFy
b291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQg
bmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUg
cmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUg
aXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZv
ciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1
YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxk
RmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAg
IGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7Cisg
ICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7
CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JP
cGVyYW5kKG93bmVyKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBn
cHJGb3JPcGVyYW5kKG93bmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BS
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvd25lciwgcmVnVDApOworICAgIH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3du
ZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIp
OworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAg
ICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGls
bEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2ls
ZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90
Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RD
ZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBN
YWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91
bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVl
ZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwg
dG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNl
IHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBp
dCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxs
CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHZhbHVlVmFsdWU7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0g
cmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7
CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90
Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAg
LTEzMjcsMTEgKzE5NjcsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVu
c2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAq
dGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEK
KyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTM0MSwxMCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Mo
cmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxk
KGluZGV4KSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VU
ZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8g
T09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVj
Q2VsbDsKKworICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsK
KyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAg
ICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVt
cGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0
cnVjdGlvbiopOwpAQCAtMTQ0Nyw4ICsyMTE1LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJh
bmNoKHZtKCksIG93bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuOworICAgIHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDA7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJy
aWVyQnJhbmNoKHZtKCksIG93bmVyLCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25h
bDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBv
d25lcik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpz
aWxlbnRTcGlsbFJlY29yZCk7CisKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
dGhpcyk7CiB9CiAKQEAgLTE0NjYsNiArMjE1MSw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVu
dGlmaWVyQ2hlY2soUmVnaXMKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIApAQCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1
dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9M
ID0gZmFsc2U7CisKICAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9w
OjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2lu
ZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxl
ZERGR0NvZGVCbG9jaykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHByb2ZpbGVkREZHQ29kZUJsb2Nr
LCAhcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
IHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1p
emluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7
CiAgICAgCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERG
R0NvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEFTU0VSVCghcHJv
ZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAg
ICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBj
b21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0KTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDIyIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5j
bHVkZSAiVk1JbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEpJVFdvcmtsaXN0OjpQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEpJVFdvcmtsaXN0OjpQbGFuPiB7CiBwdWJsaWM6Ci0gICAgUGxhbihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAg
ICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBtX2ppdChjb2RlQmxvY2st
PnZtKCksIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBQbGFuKENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDogbV9sbGludENvZGVC
bG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9jb2RlQmxvY2tUb0NvbXBpbGUoY29tcGlsZVR5
cGUgPT0gSklUOjpDb21waWxlVHlwZTo6TE9MID8gbV9sbGludENvZGVCbG9jay0+bmV3UmVwbGFj
ZW1lbnQoKSA6IG1fbGxpbnRDb2RlQmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2Nr
VG9Db21waWxlLT52bSgpLCBtX2NvZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBp
biBjb25jdXJyZW50IGdjCisgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xs
aW50Q29kZUJsb2NrKSB7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5o
ZWFwLnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmaW5hbGl6ZSgpCiAgICAgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBtX2ppdC5saW5rKCk7CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2Nv
cGVFeGl0KFsmXSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9s
bGludENvZGVCbG9jaykKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0o
KS5oZWFwLnVucHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAg
ICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6
Ci0gICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRD
b21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKG1fbGxpbnRDb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0
aW9uIGZhaWxlZCIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1f
ZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxv
Y2stPmRvbnRKSVRBbnl0aW1lU29vbigpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+
bV9kaWRGYWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4i
KTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENv
ZGUobV9jb2RlQmxvY2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFs
bENvZGUobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9j
ay0+aml0U29vbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVC
bG9jay0+dm0oKTsgfQorICAgIENvZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9s
bGludENvZGVCbG9jazsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2st
PnZtKCk7IH0KICAgICAKICAgICBib29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAg
LTgwLDE1ICs5MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21w
aWxpbmc7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAg
ICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBp
bGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCiAgICAgewotICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KTsKKyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgp
OwogICAgICAgICBwbGFuLmZpbmFsaXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsK
KyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAg
ICBMb2NrIG1fbG9jazsKICAgICBib29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07
CkBAIC0yMzMsOSArMjQ3LDExIEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2Rl
QmxvY2sKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KKworICAgIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRp
b25zOjpmb3JjZUxPTCgpID8gSklUOjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlw
ZTo6QmFzZWxpbmU7CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkp
IHsKLSAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOworICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5
cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtMjQ5LDcgKzI2NSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihD
b2RlQmxvY2sKICAgICAgICAgCiAgICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsK
ICAgICAgICAgICAgIG1fcGxhbm5lZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0
cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVm
KG5ldyBQbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpKTsKICAgICAgICAgICAgIG1fcGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9x
dWV1ZS5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxv
Y2tlcik7CkBAIC0yNzMsMTQgKzI4OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0
ZXIoQ29kZUJsb2NrCiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUg
Y29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAg
IC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3
ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQg
c29tZWRheS4KLSAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBl
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6
OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZd
IHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bmspCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9j
ay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIy
LDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAg
ICAgCiAgICAgLy8gTm93IGl0IG1pZ2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2st
PmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBp
bGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ug
d2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUg
d2l0aCB0aGUKLSAgICAvLyBiYXNlbGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERh
dGEoKTsKLSAgICAKLSAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGls
ZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KTsKLSAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxs
Q29kZShjb2RlQmxvY2spOworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7
CisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBl
OjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIGxvbENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3Rh
bGxDb2RlKGxvbENvZGVCbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhp
cyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0
byBjb21waWxlIHdpdGggdGhlCisgICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29k
ZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNv
bXBpbGUgaXQuCisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBp
bGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlu
c3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6
ZmluYWxpemVQbGFucyhQbGFucyYgbXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lk
IEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFs
aXplKCk7CiAgICAgICAgIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAg
ICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxh
bm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcwNzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2
b2lkIGNvbXBpbGVMYXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29k
ZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKSk7CiAgICAgCiAgICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxX
b3JrbGlzdCgpOwogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlz
dE9yTnVsbCgpOwpAQCAtNjYsNiArNjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsK
ICAgICBmcmllbmQgY2xhc3MgVGhyZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENv
ZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCkpOwogICAgIHZvaWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAg
IFBsYW5zIG1fcXVldWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1h
cC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAg
IH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Cisg
ICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25z
dCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwog
cHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9m
UmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihj
YWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3Nl
bWJseSB8fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKQorICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVy
Q29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNh
bGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBl
bHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhP
dGhlcigpLmxhYmVsQXRPZmZzZXQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBw
dWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPwor
ICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4K
KyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJ
bnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9i
eXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjIsOCArMzYyLDEwIEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8K
IH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJv
b2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKSkKK2lubGluZSBDb2RlQmxvY2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRo
aXMgdy5yLnQgTE9MLgorCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAv
LyBNeSBjYWxsZXJzIGRvbid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRv
IEdDIGhlcmUgYXQgYWxsLgogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBA
IC0zNzIsMjkgKzM3NCw0NSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyhWCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsK
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUi
LCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRF
eGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJ
VFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAg
YXV0byBsb2xDb2RlQmxvY2sgPSBbJl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENv
ZGVCbG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkp
IHsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxP
TEpJVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBs
b2xDb2RlQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBh
bHJlYWR5IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNh
c2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5z
dXJlR2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJs
b2NrKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4g
Y29kZUJsb2NrOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29k
ZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygi
VW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlT1NSKCksCiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwg
bmFtZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKQEAgLTQwNSwxOCArNDIzLDIxIEBAIHN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVU
VVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOwotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9j
aykpCisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAg
ICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikp
OworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnki
LCAoImluIHByb2xvZ3VlIikpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGls
ZWRDb2RlQmxvY2spOwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBM
TElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygp
LCBudWxscHRyKTsKKyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+
aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2lu
ZCA9PSBBcml0eUNoZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
bnVsbHB0cik7CisgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29k
ZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
bnVsbHB0cik7CiB9CiAjZWxzZSAvLyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJu
VHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2lu
ZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2Nr
LT5kb250SklUQW55dGltZVNvb24oKTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51
bGxwdHIpOwpAQCAtNDI2LDMxICs0NDcsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBl
bnRyeU9TUihDb2RlQgogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVO
VVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAg
IFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNh
bGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1
cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anND
YWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShw
Yyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5q
c0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50
cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVu
dHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVl
KCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsK
KyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxG
cmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJl
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQog
CiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9h
cml0eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NS
KGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxl
KCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxs
RnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVj
dXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChsb29wX29zcikKQEAgLTQ3OSwxOSArNTAwLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGxvb3Bfb3NyKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIp
OwogICAgIH0KICAgICAKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBj
b2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29t
cGlsZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2Nr
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2Nr
KQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAg
IENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVk
Q29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
KTsKIAotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCk7CisgICAgQVNTRVJUKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgfHwgY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpOwogCi0gICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+
aml0Q29kZU1hcCgpOworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENv
ZGVCbG9jay0+aml0Q29kZU1hcCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJU
YWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBj
b2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7
CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAg
CiAgICAgTExJTlRfUkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUo
KSk7CiAjZWxzZSAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEw
IEBAIHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpy
ZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9
IDA7CisgICAgT3B0aW9uczo6Zm9yY2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQo
KSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdF
eGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MjcsNiArNTI3LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7
CiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoQm9vbCwgdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1h
bCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0
YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRp
Y0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5k
ZXJzdGFuZCBwcml2YXRlIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisg
ICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRp
b25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxl
cjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50
J3MgbGxpbnRfaGFuZGxlX3VjYXVnaHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdh
aW5zdCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAg
ICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCkgeworICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkxPTEpJVCkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tU
cmFjZS5sbGludFBDKSk7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlH
ZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNl
dHVwTExJbnQoQ29kZUJsb2NrKiBjb2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCk7CisgICAgLy8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdhbnQgdG8g
ZG8gd2l0aCB0aGUgbm8gTExJbnQgb3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVzdWx0IHJl
c3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNl
bGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2
bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5u
ZXJVdGlscy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDkg
QEAgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewogICAgIGJvb2wg
cHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBqc051bWJlcigw
KTsgLy8gT09QUworCiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNl
QmFzZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAgIHByZXRlbmRU
b0hhdmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcg
KzE0MCw3IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cygKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoZm91
bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChm
b3VuZENvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhv
bGRMb2NrKCptX2xvY2spOwogICAgICAgICBpZiAoIWxvY2tlcikKICAgICAgICAgICAgIHJldHVy
bjsgLy8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4
Miw3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWMKIAogICAgIHdo
aWxlIChjYWxsRnJhbWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgICAgIGlmIChjb2RlQmxvY2sg
JiYgSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAg
ICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAg
ICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAg
ICAgfQpJbmRleDogVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFRvb2xz
L1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsOCArMTczLDgg
QEAgZGVmIGNvbXB1dGVNdWx0aXBsZUh5cG90aGVzZXNTaWduaWZpY2FuYwogCiBkZWYgZHVtcEJy
ZWFrZG93bnMoYSwgYik6CiAgICAgbmFtZUxlbmd0aCA9IGxlbigic3VidGVzdCIpCi0gICAgYUxl
bmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKQotICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2Vy
XSkKKyAgICBhTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMworICAgIGJMZW5ndGggPSBs
ZW4oYVt1bml0TWFya2VyXSkgKyAzCiAgICAgcmF0aW9MZW5ndGggPSBsZW4oImIgLyBhIikKIAog
ICAgIHBWYWx1ZUhlYWRlciA9ICJwVmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNj
b3ZlcnkgUmF0ZSkiCkBAIC0yMDMsNyArMjAzLDcgQEAgZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIp
OgogICAgIHBMZW5ndGggKz0gMgogCiAgICAgc3RyaW5ncyA9IFtdCi0gICAgc3RyaW5ncy5hcHBl
bmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6Xnti
TGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwi
LmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9YVt1bml0TWFya2VyXSwgYlNjb3JlPWJbdW5p
dE1hcmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3Ro
PWJMZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFy
a2VyPXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKKyAgICBzdHJpbmdzLmFwcGVuZCgi
fHtrZXk6XntuYW1lTGVuZ3RofX18e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5n
dGh9fSB8e2NvbXBhcmU6XntyYXRpb0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9y
bWF0KGtleT0ic3VidGVzdCIsIGFTY29yZT0iYTogIiArIGFbdW5pdE1hcmtlcl0sIGJTY29yZT0i
YjogIiArIGJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVu
Z3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlv
TGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKICAgICBmb3Ig
a2V5IGluIGEua2V5cygpOgogICAgICAgICBpZiBrZXkgPT0gdW5pdE1hcmtlcjoKICAgICAgICAg
ICAgIGNvbnRpbnVlCkluZGV4OiBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpz
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1w
cmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAK
IHNlbGYudGVzdFJ1bm5lciA9IHsKICAgICBuZXZlcklubGluZUZ1bmN0aW9uOiBuZXZlcklubGlu
ZUZ1bmN0aW9uLAotICAgIG51bWJlck9mREZHQ29tcGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMs
CisgICAgbnVtYmVyT2ZERkdDb21waWxlczogKGZ1bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFw
OworICAgICAgICByZXR1cm4gKGYpID0+IHsKKyAgICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyhmKTsKKworICAg
ICAgICAgICAgLy8gRW11bGF0ZSBydW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdl
dCBzb21lIHRpZXJpbmcgYmVmb3JlIHJldHVybmluZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFt
YXApCisgICAgICAgICAgICAgICAgbWFwID0gbmV3IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQg
Y291bnQgPSBtYXAuZ2V0KGYpIHx8IDA7CisgICAgICAgICAgICBjb3VudCArPSAxOworICAgICAg
ICAgICAgbWFwLnNldChmLCBjb3VudCk7CisgICAgICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAw
MCkgfCAwOworICAgICAgICB9OworICAgIH0pKCksCiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6
IGZhaWxOZXh0TmV3Q29kZUJsb2NrCiB9OwogCkBAIC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24g
ZGZnU2hvdWxkQmUodGhlRnVuY3Rpb24sIF9hLCBfYgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnBy
b3RvdHlwZS5wdXNoOwogICAKICAgdHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRo
ZUZ1bmN0aW9ufSkpCisgICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7
CiAgICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2
YWwoX2EpKTsKICAgfSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyAr
MzYxLDcgQEAgZnVuY3Rpb24gZGZnSW5jcmVtZW50KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWls
U29tZVRlc3RzKQogICAgICAgICByZXR1cm4gYXJndW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRm
Z0NvbXBpbGVkKGFyZ3VtZW50KSkKKyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBp
c0RGR0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1
bWVudC5zdGFydCA6IDA7CiAgICAgCiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417201</attachid>
            <date>2021-01-07 12:32:26 -0800</date>
            <delta_ts>2021-01-11 11:59:27 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>560483</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ3ByZXBhY2std3RiJ107CisKIGlm
ICh0eXBlb2YgdGVzdEl0ZXJhdGlvbkNvdW50ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0SXRl
cmF0aW9uQ291bnQgPSB1bmRlZmluZWQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZp
c2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzY4LDYgKzM2OCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW8KIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25TZXRV
bmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkFzRG91YmxlTnVtYmVyKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkKTsKIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MpOwogCkBAIC02NjIsNiArNjYzLDggQEAgcHJp
dmF0ZToKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVtYmVyIiwgZnVuY3Rp
b25Bc0RvdWJsZU51bWJlciwgMSk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJpc0RGR0Vu
YWJsZWQiLCBmdW5jdGlvbklzREZHRW5hYmxlZCwgMCk7CisKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJkcm9wQWxsTG9ja3MiLCBmdW5jdGlvbkRyb3BBbGxMb2NrcywgMSk7CiAKICAgICAgICAg
aWYgKE9wdGlvbnM6OmV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3Rpbmco
KSkgewpAQCAtMjY1Myw2ICsyNjU2LDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5j
dGlvbkFzRG91YmwKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKG51
bSkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQs
IChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKE9wdGlvbnM6OnVzZURGR0pJVCgpKSk7Cit9CisKIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2NrcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSopKQogewogICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBib29sIHNob3VsZER1bXBEaXNhc3NlbWJs
eUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoY29kZUJsb2NrICYmIEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVt
cERGR0Rpc2Fzc2VtYmx5KCkpCisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc0RGR09y
RlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
RHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2
ICs0MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJ
bmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBK
U0MgewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpAQCAtMjY5LDcg
KzI3MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIH0KIAog
dGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElD
U3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Qmxv
Y2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVtcEhlYWRlcihi
bG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBAIHZvaWQgQ29k
ZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQucHJpbnQoImJi
IyIsIGJsb2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0aW9uc0F0SGVh
ZCkgeworICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFkOiBbIik7Cisg
ICAgICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5h
dChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOwor
ICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwg
cHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkg
eworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAg
IGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAgICAg
ICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2Nr
LmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVu
dEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENvZGVC
bG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0
YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpk
YXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBzdGF0
aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVj
b2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+
Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBX
VEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAg
ICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9pZCBkdW1wKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0
aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKKyAgICB2
b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUs
IHRydWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpk
YXRhRmlsZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJs
b2NrVHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRoaXMsIHNwZWN1
bGF0aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNr
cG9pbnQuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MCw3ICsxMDAsNyBAQCBPcGVyYW5kIGRlc3RpbmF0aW9uRm9yKGNvbnN0IEJ5dGVjb2RlJiBiCiAg
ICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9y
X25leHQpIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKICAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHsKLSAgICAgICAgICAgIGlmICh0eXBlID09
IEpJVFR5cGU6OkRGR0pJVCB8fCB0eXBlID09IEpJVFR5cGU6OkRGR0pJVCkKKyAgICAgICAgICAg
IGlmICh0eXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCB0eXBlID09IEpJVFR5cGU6OkZUTEpJVCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKE9wSXRlcmF0b3JOZXh0OjpuZXh0
UmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBieXRlY29kZS5tX3ZhbHVlOyAvLyBXZSByZXVz
ZSB2YWx1ZSBhcyBhIHRlbXAgYmVjYXVzZSBpdHMgZWl0aGVyIG5vdCB1c2VkIGluIHN1YnNlcXVl
bnQgYnl0ZWNvZGVzIG9yIHdyaXR0ZW4gYXMgdGhlIHRlbXAgb2JqZWN0IC4KICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgog
ICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bf
am5lcV9wdHI6CiAgICAgY2FzZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAg
Y2FzZSBvcF9uZXdfb2JqZWN0OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNG
b3JCeXRlY29kZUluZGV4SW1wbChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAg
cmV0dXJuOwogCisgICAgVVNFUyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAg
ICBVU0VTKE9wVG9UaGlzLCBzcmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgVVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnBy
aW50KCIsICIsIGluc3RydWN0aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBp
ZiAoKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAg
ICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3du
ZXJFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZl
cklubGluZSkiKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3Rh
dHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5p
bnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6
ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOwor
ICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBp
bnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQog
CiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpA
QCAtMjk1LDYgKzI5NSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiAKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAs
IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQog
ICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAg
ICwgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9m
dW5jdGlvbkRlY2xzKQpAQCAtMzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7
CiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVy
cyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIu
bnVtUGFyYW1ldGVycygpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRo
aXMpOwogfQpAQCAtODUwLDcgKzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAg
Ly8gdG8gdGhlIENvZGVCbG9jay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVj
dGx5IHRvIHRoZSBDb2RlQmxvY2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBj
bGVhcmVkIHdoZW4gdGhlIENvZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSkKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBv
aW50cygpOwogI2VuZGlmCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7
CkBAIC0xMDM3LDcgKzEwMzksNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmds
eShjb25zCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRv
bid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVu
Y2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAgLy8g
c2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCi0g
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMDQ1LDcgKzEwNDcsNyBAQCBib29sIENvZGVCbG9jazo6c2hv
dWxkVmlzaXRTdHJvbmdseShjb25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1
ZVRvV2Vha1JlZmVyZW5jZShWTSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtlZCh0
aGlzKTsKIH0KQEAgLTEwNTgsNiArMTA2MCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUo
SklUVHlwZSBqaXRUeXAKICAgICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2FzZSBK
SVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAgICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAgICAg
ICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwNzQsNiArMTA3OCw4IEBAIHN0YXRpYyBTZWNv
bmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAg
YWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8gSW50
ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7Cisg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNhc2Ug
SklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDoKQEAgLTExNjksNyArMTE3NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJMRShE
RkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewor
ICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpD
b21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAK
ICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwpAQCAtMTIxNyw3ICsxMjIzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNz
KGNvbnN0IAogICAgIC8vIEluIHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNh
bGxlZCBvbiBhIGJhc2VsaW5lIENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAgICAv
LyB0aGF0IHdlIG1pZ2h0IGRlY2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpldHRp
c29uZWQgZHVlIHRvIG9sZCBhZ2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRvZXNu
J3QgcHJvdGVjdCB1cy4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpOwpAQCAtMTUxOSw4ICsxNTI1LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmNv
dWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50
ZXJwcmV0ZWQoaml0VHlwZSgpKSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7Cisg
ICAgICAgIC8vIE9PUFM6IFNlcGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3duIGZ1
bmN0aW9uIGZvciBKSVQgSUNzLiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3QganVz
dCBmb3IgTExJbnQuCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB9
CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyArMTUz
Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgog
CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewog
ICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9u
KCk7CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7CiAg
ICAgfQpAQCAtMTU0OCw2ICsxNTU2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KAogICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291
bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50ID0g
bV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgpAQCAtMTU5MCw3ICsxNTk5LDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQo
Q29kZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVyYXRv
ci0+dmFsdWUuYnlWYWxJbmZvID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
eworICAgICAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAg
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVz
ZXMuY2FsbHMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0YXR1
cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpAQCAt
MTgxMCw3ICsxODE5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZl
cgogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2Rl
LT5kZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwg
dmlzaXRvcik7CkBAIC0xODIzLDcgKzE4MzIsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlW
aXNpdFdlYWtSZWZlcmVuCiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdD
b21tb24oKTsKQEAgLTE4NjcsNyArMTg3Niw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNl
bGluZVZlcnNpb24oKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3Vs
dCA9IHJlcGxhY2VtZW50KCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6
OnVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8v
IFRoZSByZXBsYWNlbWVudCBjYW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4g
dXAgYW5kIHRoZSBleGVjdXRhYmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2Yg
aXRzIGNvZGVCbG9ja3MgKHNlZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRs
ZXNzLAogICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUg
b24gdGhlIHN0YWNrLCBhbmQgYXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTk0MCw3
IEBAIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVD
YWxsU2l0ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4
KENhbGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAg
ICBBU1NFUlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAg
ICBDb2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRl
KTsKQEAgLTIyMzEsNTEgKzIyNDAsNTUgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2Zp
bGVyOjpKZXR0aQogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAK
ICAgICAvLyBXZSB3YW50IHRvIGFjY29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgotICAgIC8vIDEp
IE1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBu
b3csIHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0CisgICAgLy8gMSkgSWYgd2UncmUgREZHL0ZUTCwg
bWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5v
dywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKICAgICAvLyAgICB3ZSBzaG91bGQgT1NSIGV4aXQg
YXQgdGhlIHRvcCBvZiB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0
dXJuLgogICAgIC8vIDIpIE1ha2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1
dGFibGUsIHRoZW4gd2Ugc2hvdWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2suCiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkp
CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBqaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7Ci0gICAgCi0gICAgaWYgKHJl
YXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBQcm9maWxl
cjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29t
cGlsYXRpb24uZ2V0KCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCi0gICAg
ICAgICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOwot
ICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMg
b3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgot
ICAgICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewotICAg
ICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVu
dFRocmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvT2xkQWdlKSB7CisgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24q
IGNvbXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQorICAgICAgICAgICAgICAg
IGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRz
IG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4K
KyAgICAgICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0u
aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVj
dXRhYmxlKCkpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIAogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgp
KQogICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIAogICAgIC8vIENvdW50IHRoZSByZW9wdGlt
aXphdGlvbiBpZiB0aGF0J3Mgd2hhdCB0aGUgdXNlciB3YW50ZWQuCiAgICAgaWYgKG1vZGUgPT0g
Q291bnRSZW9wdGltaXphdGlvbikgewogICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91
bGQgY2FsbCBhbHRlcm5hdGl2ZSgpLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgICAgIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+
Y291bnRSZW9wdGltaXphdGlvbigpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAo
REZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBE
aWQgY291bnQgcmVvcHRpbWl6YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZgogICAg
IH0KICAgICAKICAgICBpZiAodGhpcyAhPSByZXBsYWNlbWVudCgpKSB7CiAgICAgICAgIC8vIFRo
aXMgbWVhbnMgdGhhdCB3ZSB3ZXJlIG5ldmVyIHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBw
ZW4gZm9yIE9TUiBlbnRyeSBjb2RlCiAgICAgICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgLy8gT3Is
IHdlJ3JlIGFuIExPTCBDb2RlQmxvY2sgYW5kIHdlcmUgYWxyZWFkeSBqZXR0aXNvbmVkLgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGFsdGVybmF0aXZlKCkpCiAgICAgICAgIGFs
dGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIAotICAgIGlmIChyZWFzb24gIT0g
UHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvVk1UcmFwcykKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkp
ICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0g
UHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50RXhp
dFNpdGVzKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNvbiBj
YW4gaGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8gYSBk
ZWFkIGV4ZWN1dGFibGUKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBvYmpl
Y3QgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgpAQCAtMjM5MCw3ICsyNDAzLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2Nr
LT5qaXRUeXBlKCkpKSB7CiAgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpLCAiICAgIENs
ZWFyaW5nIFNBQkkgYmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuIik7CiAgICAg
ICAgIHJldHVybjsKQEAgLTI0ODMsMTIgKzI0OTYsMTQgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpu
dW1iZXJPZkRGR0NvbXBpbGVzKAogewogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShqaXRUeXBlKCkpKTsKICAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAg
IGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAw
MDA7CiAgICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsg
bV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKICAgICB9CiAgICAgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuICgocmVwbGFjZW1lbnQg
JiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEg
OiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CisgICAgcmV0dXJuICgocmVwbGFj
ZW1lbnQgJiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAx
IDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogfQogCiBpbnQzMl90IENvZGVC
bG9jazo6Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKQEAgLTI3MDksNyArMjcy
NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQgQ29k
ZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQo
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUo
KTsKLSAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0eXBl
ICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7CiAg
ICAgICAgIGRhdGFMb2dMbigqdGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBjb2Rl
IGJ1dCBoYXZlICIsIHR5cGUpOwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oaml0Q29kZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkp
OwogICAgIH0KQEAgLTI3MjcsNyArMjc0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGQKICAgICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29t
cGlsYXRpb25TdWNjZXNzZnVsOgotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJl
cGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKQEAgLTI3NTYs
NyArMjc3MSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAg
ICAKIHVpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMy
X3QgZGVzaXJlZFRocmVzaG9sZCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpOworICAgIC8vQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsgLy8gT09QUzogV2UgY2FsbCB0aGlzIGZyb20gdGhlIExPTCBjb21waWxlciB0
aHJlYWQgYmVmb3JlIGluc3RhbGwuCisKICAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5
IHNvIHdlIGRvbid0IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKICAgICAv
LyBlbm91Z2ggdGhhdCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4KICAgICB1bnNpZ25lZCByZXN1
bHQgPSBkZXNpcmVkVGhyZXNob2xkOwpAQCAtMjgzNiw3ICsyODUyLDcgQEAgREZHOjpDb2RlT3Jp
Z2luUG9vbCYgQ29kZUJsb2NrOjpjb2RlT3JpZwogCiBzaXplX3QgQ29kZUJsb2NrOjpudW1iZXJP
ZkRGR0lkZW50aWZpZXJzKCkgY29uc3QKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkp
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21t
b24oKS0+ZGZnSWRlbnRpZmllcnMuc2l6ZSgpOwpAQCAtMjg0Nyw3ICsyODYzLDcgQEAgY29uc3Qg
SWRlbnRpZmllciYgQ29kZUJsb2NrOjppZGVudGlmaWVyKAogICAgIHNpemVfdCB1bmxpbmtlZElk
ZW50aWZpZXJzID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmllcnMpCiAg
ICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0gICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdD
b21tb24oKS0+ZGZnSWRlbnRpZmllcnNbaW5kZXggLSB1bmxpbmtlZElkZW50aWZpZXJzXTsKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKQEAgLTI5NDgsNyArMjk2NCw4IEBAIGJvb2wgQ29k
ZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENv
ZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAvLyBPT1BTCisgICAgQVNTRVJUKEpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFz
ZWxpbmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUwLDYgKzMwNjcsNyBAQCB1
bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklU
KQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xK
SVQ6CiAgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0zMjI2LDE0ICszMjQ0LDE0IEBAIHZvaWQgQ29kZUJs
b2NrOjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJyZWFrcG9pbnRzICs9
IG51bUJyZWFrcG9pbnRzOwogICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzKTsKLSAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6Omlz
REZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9EZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2V0U3RlcHBp
bmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAgbV9zdGVwcGluZ01v
ZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdN
b2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpl
dHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7CiB9CiAKQEAg
LTM0MjEsOSArMzQzOSw5IEBAIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6Ynl0
ZWMKIHsKICAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJ
VFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
CisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChqaXRUeXBlKSkK
ICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGNhbGxTaXRlSW5kZXguYnl0ZWNvZGVJbmRleCgpOwot
ICAgIGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklU
VHlwZTo6RlRMSklUKSB7CisgICAgZWxzZSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAg
ICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7CkBAIC0zNDY2
LDcgKzM0ODQsNyBAQCBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwCiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4g
V2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBp
cyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVy
dHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdD
b21tb24oKS0+aGFzSW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9pbnRzKCk7CiAjZWxzZQpAQCAtMzQ4
MCw3ICszNDk4LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cwog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIu
IFdlIG5lZWQgdG8gYmUKICAgICAvLyBjYXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQg
aXMgbm90IHNpZ25hbCBoYW5kbGVyIHNhZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBl
cnR1cmIgdGhlIHJlZkNvdW50IG9mIG1faml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgY29tbW9uRGF0YSA9ICpt
X2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgIGNvbW1vbkRhdGEuaW5zdGFsbFZNVHJhcEJyZWFr
cG9pbnRzKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDggQEAgcHVibGlj
OgogCiAgICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBK
SVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNp
ZiBFTkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVk
VHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUz
OSw3ICs1NDEsNyBAQCBwdWJsaWM6CiAgICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVz
IHRoYXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KICAgICBib29sIGhhc0NvZGVPcmln
aW5zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0
VHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKTsK
ICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4
IGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
NywxNSBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAg
ICAgICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwog
ICAgIH0gICAKK30KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2Nr
Ojpmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCit7CisgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQo
KSkgeworICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRj
aFByb2ZpbGVzKQorICAgICAgICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBFeGkKICAgICBjYXNlIEV4aXRGcm9tQW55dGhpbmc6CiAgICAgICAgIG91dC5wcmlu
dCgiRnJvbUFueXRoaW5nIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRGcm9tTE9M
OgorICAgICAgICBvdXQucHJpbnQoIkZyb21MT0wiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgRXhpdEZyb21ERkc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbURGRyIpOwogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGlu
Z0pJVFR5cGUuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKICAgICBF
eGl0RnJvbUFueXRoaW5nLAorICAgIEV4aXRGcm9tTE9MLAogICAgIEV4aXRGcm9tREZHLAogICAg
IEV4aXRGcm9tRlRMCiB9OwpAQCAtMzgsNiArMzksOCBAQCBlbnVtIEV4aXRpbmdKSVRUeXBlIDog
dWludDhfdCB7CiBpbmxpbmUgRXhpdGluZ0pJVFR5cGUgZXhpdGluZ0pJVFR5cGVGb3IoSklUVHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSklUVHlwZTo6TE9MSklU
OgorICAgICAgICByZXR1cm4gRXhpdEZyb21MT0w7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CiAgICAgICAgIHJldHVybiBFeGl0RnJvbURGRzsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC0xMzQsNyArMTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9m
KAogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNl
PgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNv
bmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3Rv
cjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVi
bGljOgogCiAgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5k
cyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykK
KyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9j
YWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDog
bV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxv
Y2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAg
ICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7Cisg
ICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3Rh
bnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6
ZSk7CiAgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRp
b24pCiAgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGlj
aXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90
IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhz
aXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6
ZV90IG51bUNvbnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVt
QXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMp
CisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAg
bV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAg
ICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMg
KyBudW1UbXBzICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlh
bFZhbHVlKTsKICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4
cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVy
LCBjb25zdCBUJiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMo
b3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5u
dW1iZXJPZkxvY2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9m
Q29uc3RhbnRzKCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7
CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUx
IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtQXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9m
TG9jYWxzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVy
biBtX251bUNvbnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2Nh
bHMoKSAtIG51bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1w
bGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYm
IHRyYWNrQ2FsbGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJ
bmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJl
ck9mVG1wcygpKTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBu
dW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMo
KSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBz
aXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAg
IH0KLSAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5k
ZXgoc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkNvbnN0YW50cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgp
IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRt
cChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQog
ICAgIAogICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNb
YXJndW1lbnRJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAg
ICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFs
dWVzLmxhc3QoKTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBj
YWxsZWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZU
eXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KICAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3Qg
aWR4KSB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RS
ZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0
YW50SW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5k
S2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVi
bGljOgogICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJP
ZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0
cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJP
ZkxvY2FscygpOwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwog
ICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFs
dWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
ICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7
CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoK
IAogICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0
CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChv
cGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0Nh
bGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFu
ZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjYWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAg
IGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudElu
ZGV4KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRl
eChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tD
YWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJh
bmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVy
YW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRv
Q29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgp
KTsKICAgICB9CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBp
ZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHNpemVfdD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50
cygpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwo
KSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFu
ZCBvcCkgY29uc3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNl
IGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAg
ICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkK
ICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJl
ck9mQXJndW1lbnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51
bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRl
eCA8IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25z
dGFudHMoKSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChp
bmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAg
aWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNh
bGxlZUluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0
bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkNvbnN0YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0z
OTMsMTAgKzQzNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMg
b2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2Fs
cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50
cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9j
YWxzLCB0aGUgbmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3Qg
YXJlIHRtcHMuCiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3Vt
ZW50cyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25l
ZCBtX251bUNvbnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lk
IE9wZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxS
ZWdpc3RlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5k
czxULCB0cmFja0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAg
ICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3Vt
ZW50SW5kZXgtLTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCks
IGNvbnRleHQpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNv
bnRleHQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJh
Y2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAo
c2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4
LS07KSB7CkBAIC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJ0bXAiLCB0bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29u
c3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwg
IjoiLCBjYWxsZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgY29uc3Qg
UmVnaXN0ZXJTZXQmIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZQogICAgICAgICBtX2xpdmVSZWdpc3Rl
cnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlID0gaml0LT5jb2RlQmxvY2so
KS0+aml0Q29kZSgpLT5saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZShqaXQtPmNvZGVCbG9jaygpLCBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCk7CiAgICAg
ICAgIG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbiA9IG1fbGl2ZVJlZ2lzdGVy
c1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUubnVtYmVyT2ZTZXRSZWdpc3Rl
cnMoKSA+IDA7CiAgICAgICAgIGlmIChtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRp
b24pCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChKSVRDb2RlOjppc0RGR09yRlRMKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAg
ICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3Rl
cnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRS
ZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNzEwLDcgKzcxMCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgLy8gV2Ugc2V0IHRoZXNlIHRvIGluZGlj
YXRlIHRvIHRoZSBzdHViIHRvIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgQ29kZUJsb2NrJ3MKICAg
ICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgdGFibGUgd2hlbiBpdCBpcyBkZWFsbG9jYXRlZC4K
ICAgICAgICAgY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycyA9IGNvZGVCbG9jazsK
LSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2tUaGF0T3du
c0V4Y2VwdGlvbkhhbmRsZXJzLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6
OmlzREZHT3JGVEwoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0VHlwZSgp
KSk7CiAgICAgICAgIGNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9IHN0YXRlLmNh
bGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZygpOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50
MzJTcGVjdWxhdGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5T
cGVjSW50MzJPbmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVl
ICYgflNwZWNCeXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2
YWx1ZSAmIFNwZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
OCArMTE4LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBv
bmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4
ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZp
c2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJl
Z2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJl
Z2lzdGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0Fy
Z3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgp
OyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVy
ID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7
IH0KICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3Rl
ciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29u
c3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJl
Z2lzdGVyKTsgfQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBv
cGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAg
c3RhdGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFu
ZCAtIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFy
Z3VtZW50VG9PcGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJh
bWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3Bl
cmFuZChpbnQgY29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggKyBjb25zdGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpA
QCAtMTMzLDQgKzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
Rm8KICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRU
b09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQo
Y29uc3RhbnRJbmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjcwNzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5k
ZXggYnl0CiAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51
bVRtcHMpCiAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMpCiAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMp
Ci0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2Vj
dGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywg
MCwgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0
aW9uQ291bnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBPU1JF
bnRyeURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNBTgogdm9pZCogcHJl
cGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChK
SVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQg
fHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklU
KTsKICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICsz
OTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYg
KGV4aXRJbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoZXhpdElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgLy8g
T09QUzogTWFrZSB0aGlzIGRvIHRoZSByaWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Igbm90Lgog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0gY29k
ZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjpp
c0Jhc2VsaW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVu
c2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkRGR0pJVCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7
CiAgICAgdW5zaWduZWQgbnVtVG1wczsKQEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJp
YWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9j
ay0+bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsK
KyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCk7IC8vIE9PUFM6IGJ5dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1WYXJpYWJs
ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRt
cHMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8g
Q2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsK
LSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxh
YmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxsRnJhbWU6OmluaXRE
ZXByZWNhdGVkQ2FsbEZyYW1lRgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVj
b2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHN3aXRj
aCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazoKLSAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2Fs
bFRodW5rOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoY29kZUJsb2Nr
KCktPmppdFR5cGUoKSk7CiB9CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2Rl
T3JpZ2luSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgc3dp
dGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rOgorICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEpJVFR5cGU6OkRG
R0pJVDoKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC03OSw4ICs3MCw2IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kK
ICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDEwICs0
NTYsMTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRFeAogCiAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICB1bnNpZ25l
ZCBleGNlcHRpb25IYW5kbGVySW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9
IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNlCisgICAgaWYgKEpJ
VENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2stPmppdFR5cGUoKSkp
CiAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRl
eCgpLm9mZnNldCgpOworICAgIGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0g
Y2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0dXJuIGNvZGVCbG9j
ay0+aGFuZGxlckZvckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWlyZWRIYW5kbGVy
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTIgKzMwLDE4IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdy
YXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYu
aCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0
aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJEaXNh
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNp
bmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUg
Ik1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1
NSw4IEBACiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1NpbXBsZVN0YXRzLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY4LDg4OCBAQCBTZWNvbmRz
IHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBT
ZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1
Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlw
ZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisK
KyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBl
IHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsK
KworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNv
ZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFj
aWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQg
cmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBh
dXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVk
VHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFu
ZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5k
KTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAg
IGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcENvbnN0cnVjdFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9ieV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Jp
dHhvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgc2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0ZXJhdG9yUHJv
ZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fbmV4dCwgbWV0
YWRhdGEubV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAg
ICAgIHNldFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb3Y6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBlRm9yKGluc3Ry
dWN0aW9uLT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Zh
cmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBy
aWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYg
cmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IG1l
dGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgaWYg
KCEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVy
ZU5hTikpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJpZ0ludDMyIGJl
dHRlcgorICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJpbmdPclN0cmlu
Z09iamVjdFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJ
bnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNl
IG9wX3N1YjoKKyAgICBjYXNlIG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAo
YXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
dHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAoIShsZWZ0ICYm
IHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworCisgICAgICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVy
ZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91Ymxl
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVByb2R1Y2VOYU5G
cm9tTm9uTmFOID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2OworICAgICAgICAg
ICAgICAgIGlmIChtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYgU3BlY0RvdWJs
ZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTog
Q2FuIHByb2JhYmx5IGRvIGJldHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAgaWYgKGlzQmln
SW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICB9Owor
CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9zdWIpCisgICAgICAg
ICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICAgICAgZWxzZSBpZiAo
aW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgaGFuZGxlKGlu
c3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8
T3BEaXY+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW9kOiB7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRlciBpZiB3ZSBwcm9maWxl
IGV4aXRzIG9uICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMy
T25seSB8IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5
dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9w
X3Vuc2lnbmVkOgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21lIGtpbmQgb2YgZXhpdCBz
aXRlIGZlZWRiYWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0ludDMyT25seSB8IFNwZWNB
bnlJbnRBc0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF91cnNoaWZ0Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJbnQz
Mk9ubHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3Bf
ZGVjOgorICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJvZmls
ZSYgcHJvZmlsZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBlRm9y
KHNyYyk7CisgICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpID8g
U3BlY0FueUludEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNw
ZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0Rv
dWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4p
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAg
ICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29k
ZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNC
eXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0Rz
dCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkg
PT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29k
ZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdh
dGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdh
dGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3Bl
cmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAg
ICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
ZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAg
ICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1
dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0byByaWdo
dCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiBy
aWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxs
TnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFu
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAg
ICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0
KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7
CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAg
IGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3Bl
Y09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Rv
X3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
aWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0
IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRo
ZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0
Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0
aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBz
ZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJs
b2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
bmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9i
dWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZm
ZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJl
c3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5
X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291
bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdG
dW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9u
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JG
dW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19h
c3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9u
bWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdl
dFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRv
cj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jf
c3RydWN0dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCks
IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Rv
X2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0lu
ZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5j
RGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCks
IFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNw
ZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9taXNlOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQ
cm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNf
Z2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFz
eW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3M+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJl
bG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dl
cToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVs
bDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVs
bD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xl
YW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9T
dHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFBy
b2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nh
c3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNf
Y2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElz
Q2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoK
KyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoK
KyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAg
Y2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNh
c2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9w
X3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVi
dWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRf
ZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ug
b3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJv
cGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNl
IG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6Cisg
ICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6Cisg
ICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNh
c2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0
ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBv
cF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6
CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNl
IG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93
ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAg
IGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAg
Y2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2Fz
ZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRl
cl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0
X3ByaXZhdGVfbmFtZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5l
cmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBv
cF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3By
b2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBs
bGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9w
cm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBj
YXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJv
bV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxs
X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAg
IGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
aW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJu
YWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29z
cl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50
X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21f
bG9vcF9oaW50OgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Ns
b3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5j
dGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2Fz
ZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0X25vX3RsczoKKyAgICBjYXNlIG5v
cm1hbF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9y
ZXR1cm5fdmFsdWU6CisgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgor
ICAgIGNhc2Ugb3BfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2Fs
bF9ldmFsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9j
YWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0
b3JfbmV4dDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKKyAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF90YWlsX2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdzoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfb3BfY2FsbF9ldmFsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0
ZXJhdG9yX25leHRfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3Bl
bl9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9h
cml0eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25f
Zm9yX2NhbGxfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJh
bXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3RhZzoKKyAg
ICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGw6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xp
bmVfd2FzbV9jYWxsX25vX3RsczoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxf
aW5kaXJlY3Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
fQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBo
ID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3Jh
cGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRI
ZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1f
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgewor
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwor
ICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmls
ZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JF
YWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBw
cm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDAp
LmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRl
eCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJn
ID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNB
dEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAg
IGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsK
KyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlv
bnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2FsbGVlKCkgPSBT
cGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgYm9vbCBjb21wdXRlVXNlQ291
bnRzID0gdHJ1ZTsKKyAgICBtX3VzZUNvdW50cy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAg
ICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBw
b3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRy
YXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2lt
cGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRo
ZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0
cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAg
ICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxv
Y2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3By
ZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoY29tcHV0
ZVVzZUNvdW50cykKKyAgICAgICAgICAgICAgICBtX3VzZUNvdW50c1tibG9jay5pbmRleCgpXSA9
IE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBt
X2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaXplKCksIDApOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYm
ICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggeyBpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkgfTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2NrLmlu
ZGV4KCldLm9wZXJhbmQob3BlcmFuZCkgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0g
Y3VycmVudEluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTsp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5k
ZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleCht
X2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNz
b3IgOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdWNjZXNz
b3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3Vj
Y2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbXB1dGVVc2VDb3VudHMgPSBmYWxzZTsKKyAgICB9
IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkK
KyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbCgKQEAgLTY3LDcgKzk1NywxMyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9w
ZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK2Jvb2wgSklU
Ojp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7CisgICAgcmV0dXJuIG1f
dXNlTE9MOworfQorCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21w
aWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVy
cHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUsNiArOTcxLDcgQEAgSklUOjpK
SVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9jYW5CZU9wdGltaXpl
ZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgICwg
bV91c2VMT0woY29tcGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxPTCkKIHsKIH0KIApAQCAtMTM3
LDExICsxMDM0LDE3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAg
ICAgICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBcCiAgICAgTkVYVF9PUENPREUo
bmFtZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCisjZGVmaW5lIERFRklORV9T
TE9XX09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAg
ICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxs
KCk7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgaWYgKHVzZUxPTCgpICYmIGRzdC5pc1ZhbGlk
KCkpIHtcCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gdHlwZTsgXAorICAgICAg
ICAgICAgICAgIHdpbGxEZWYoZHN0KTsgXAorICAgICAgICAgICAgfSBcCiAgICAgICAgIH0gXAog
ICAgICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7IFwKICAgICB9CkBAIC0xNTYs
MjYgKzEwNTksMzIgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNk
ZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAg
ICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAg
ICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAg
ICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNs
b3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBc
CisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
IyNuYW1lKTsgXAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25h
bWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9u
IHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRp
b24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygi
Q29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCkBAIC0yMzEsMTcgKzExNDAs
ODYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1f
Ynl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKG1fYnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0
aW9uQ291bnQ7ICkgewotICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7Ci0gICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKLSAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQg
YnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KLSAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7
CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgt
PnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkp
OworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlm
IChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDog
YmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29y
c1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAg
ICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgo
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKG1fZGlz
YXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFp
blBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKLSAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVj
b2RlSW5kZXgpLnB0cigpOworICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Cisg
ICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jayB8
fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFkZXJPZmZz
ZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGF0IGVuZCBvZiBi
YiMiLCBtX2N1cnJlbnRCbG9jay0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
dW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0gPSBXVEZNb3Zl
KG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBt
X2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0g
bV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9j
ay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKwor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJlZGVjZXNzb3Jz
ID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAg
ICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNzb3JzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNlc3NvcnNTZXQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vz
c29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tpXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUubWVyZ2UoKm1fc3Rh
dGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRI
ZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVu
dFVzZUNvdW50cyA9IFdURk1vdmUobV91c2VDb3VudHNbbV9jdXJyZW50QmxvY2stPmluZGV4KCld
KTsKKyAgICAgICAgICAgICAgICBtX3NwaWxsQ2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXpl
ID0gbV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0
YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7Cisg
ICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1
bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0
aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3BvaW50
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCksIGxhYmVsKCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAg
ICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwpAQCAtMjc4LDQ2ICsxMjU2LDUzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogI2VuZGlmCiAKKworICAgICAgICBpZiAoZmFsc2Up
IHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChvcGNv
ZGVJRCkgewotICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGxlc3MpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVx
KQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jYWxsYWJsZSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGdldF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlf
aWRfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhp
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVu
Y19kZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3Bl
cnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19P
UCh0aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93
aXRoX3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlcikKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRf
ZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9TTE9XX09QKGhhc19nZW5lcmljX3By
b3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nKQotICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9j
bG9uZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRz
X2J1dHRlcmZseSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChu
ZXdfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRvcikKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocG93KQor
ICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bGVzcywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3M+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMZXNzZXE+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChn
cmVhdGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKS5tX2RzdCwgU3BlY0Jv
b2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdyZWF0ZXJlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklO
RV9TTE9XX09QKGlzX2NhbGxhYmxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJs
ZT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0
cnVjdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwg
U3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZiwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFR5cGVvZj4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVv
ZklzT2JqZWN0PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dHlwZW9mX2lzX2Z1bmN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5j
dGlvbj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNh
dCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50
PigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9i
eV92YWxfd2l0aF90aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhp
cz4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9p
ZF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9u
ZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVu
Y19kZWNsX2luX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JI
b2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVj
Tm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBW
aXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVh
Y2hhYmxlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9X
X09QKHRocm93X3N0YXRpY19lcnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld0FycmF5QnVmZmVyPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9T
TE9XX09QKHNwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwg
U3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVu
Z3RoLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKS5tX2Rz
dCwgU3BlY0ludDMyT25seSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJv
cGVydHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCkubV9k
c3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51
bWVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4o
KS5tX2RzdCwgU3BlY0NlbGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmlu
ZywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNT
dHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBT
cGVjRGlyZWN0QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVk
X2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50
cz4oKS5tX2RzdCwgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2Nsb25lZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVD
bG9uZWRBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlUmVzdD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19P
UChjcmVhdGVfcHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+
KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdf
cHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNw
ZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9y
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVj
T2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0
b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2Rz
dCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9y
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2Jq
ZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFBvdz4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAog
ICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpA
QCAtMzk4LDcgKzEzODMsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5F
X09QKG9wX3N1cGVyX3NhbXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQor
I2lmIENQVShYODZfNjQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAg
ICBERUZJTkVfU0xPV19PUChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9k
c3QsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVG
SU5FX09QKG9wX21vdikKICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5F
X09QKG9wX25lZ2F0ZSkKQEAgLTQ3OCw2ICsxNDY3LDY2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNv
ZGVJbmRleCkgeworICAgICAgICAgICAgaWYgKCFtX2NoZWNrZWRVc2VMT0wpIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgICAgICAgICAgY2FzZSBvcF9jaGVj
a190cmFwczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rocm93OgorICAgICAgICAgICAgICAg
IGNhc2Ugb3Bfam1wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206
CisgICAgICAgICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90
YWlsX2NhbGw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHk6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5
X3dpdGhfcHJvZmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRy
b2xfZmxvdzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAi
LCBvcGNvZGVJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworCisgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkJiBjb3VudGVyID0gbV9jdXJyZW50
VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgLS1jb3VudGVyOwor
ICAgICAgICAgICAgICAgIGlmICghY291bnRlcikgeworICAgICAgICAgICAgICAgICAgICAvLyBP
T1BTOiBEbyB0aGlzIGxhemlseSBpbiBzbG93IHBhdGggY3JlYXRpb24vc3BpbGxGb3JDYWxsCisg
ICAgICAgICAgICAgICAgICAgIC8vbV9zcGlsbENhbmRpZGF0ZXMuYXBwZW5kKG9wZXJhbmQpOwor
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBn
cHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGdwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2Ji
ZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGZwcik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBm
b3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZD
aGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNr
cG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5k
ZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNDk4LDYgKzE1NDcsMjAgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogICAgIG1fam1wVGFibGUuY2xlYXIoKTsK
IH0KIAorc3RhdGljIHZvaWQgc2xvd0Nhc2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShv
bmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKwor
ICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsr
bWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkg
PT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogewogICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsK
QEAgLTUxNiwxNCArMTU3OSwyNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJv
ZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVk
IGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1f
c2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsK
KyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGluayh0aGlzKTsKKworICAgICAg
ICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisKKyAgICAgICAgaWYgKGdldGVu
digicHJpbnRTbG93Q2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSkpIHsK
KyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG5hbWU7CisgICAgICAgICAgICBtX2NvZGVC
bG9jay0+ZHVtcChuYW1lKTsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBuYW1lLnRvU3RyaW5n
KCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsg
IiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsKKyAgICAg
ICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZVJhbihrZXkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlID0gbnVsbHB0cjsKICAgICAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKQEAgLTU4MCw3ICsxNjU0LDYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX25lcSkKQEAgLTU5OSw2ICsxNjcyLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9y
X29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2Vu
ZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGRlYykKQEAgLTYzNSwxNSArMTcxMSwxOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAg
IGRhdGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJl
Z2luKCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVy
ID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zm
c2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZz
ZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNs
b3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FH
RShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBh
dGhzIGFscmVhZHkgZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwog
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC02ODgsNiArMTc2Nyw4IEBAIHZvaWQgSklU
Ojpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgbV9zaG91bGRFbWl0
UHJvZmlsaW5nID0gdHJ1ZTsgLy8gT09QUzogaGVscGZ1bCBmb3IgcnVubmluZyBMT0wgdy9vdXQg
REZHLgogICAgIAogICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKICAgICBj
YXNlIEdsb2JhbENvZGU6CkBAIC03NzgsNiArMTg1OSw4OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNs
b3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigp
KTsKIAorICAgIGJvb2wgcHJpbnRFYWNoT1NSID0gZ2V0ZW52KCJwcmludEVhY2hPU1IiKSAmJiAh
IWF0b2koZ2V0ZW52KCJwcmludEVhY2hPU1IiKSk7CisKKyAgICBpZiAoIW1fZXhpdEp1bXBzLmlz
RW1wdHkoKSkgeworICAgICAgICBKdW1wTGlzdCBleGl0Q29tbW9uOworICAgICAgICBmb3IgKGF1
dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4
ID0gZXhpdC5maXJzdDsKKyAgICAgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAg
ICAgICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChwcmludEVhY2hP
U1IpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwcmludFN0cmVhbTsKKyAg
ICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChwcmludFN0cmVhbSk7CisgICAgICAgICAg
ICAgICAgQ1N0cmluZyBzdHIgPSBwcmludFN0cmVhbS50b0NTdHJpbmcoKTsKKyAgICAgICAgICAg
ICAgICBzdHIuYnVmZmVyKCktPnJlZigpOyAvLyBsZWFrIGl0LgorICAgICAgICAgICAgICAgIHBy
aW50KHN0ci5kYXRhKCksICIgLT4gZXhpdCBhdCBiYyMiLCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSwgIlxuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhh
bmRsZSBjaGVja3BvaW50IGV4aXRzLgorCisgICAgICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUik7CisgICAgICAgICAgICBleGl0Q29tbW9uLmFwcGVuZChqdW1wKCkpOworICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUKCFleGl0Q29tbW9uLmVtcHR5KCkpOworICAgICAgICBleGl0Q29t
bW9uLmxpbmsodGhpcyk7CisKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3Rl
cnM6OnBjR1BSID09IHJlZ1Q0KTsKKyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkuY29udGFpbnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUg
YmVsb3cgcmVsaWVzIG9uIHRoaXMgYmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRv
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1f
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxs
IHNpbmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0p
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxs
KG5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVn
aXN0ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisK
KyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0
Q291bnRlcigpKSwgcmVnVDIpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qy
KTsKKyAgICAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZk9TUkV4aXRDb3VudGVyKCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJy
YW5jaDMyKEJlbG93LCByZWdUMiwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRU
aHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lz
dGVyczo6cGNHUFIsIG51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUg
Y2FsbCBzaW5jZSB0aGUgTExJbnQgUEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cp
PihtX2NvZGVCbG9jayk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAg
ICAgY2FsbChub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJl
clRhZ1JlZ2lzdGVyLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAg
ICAgc2tpcEpldHRpc29uLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3Zl
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRp
bWl6ZU5vdyA9IGppdC5icmFuY2gzMigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpH
cmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkp
LAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0g
TExJbnQ6Om5vcm1hbE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NS
RXhpdFB0clRhZz4oKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hl
Y2twb2ludE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAK
KyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xp
bmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFk
YXRhVGFibGVHUFIpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6
cGJHUFIpOworICAgICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0
aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBm
YXJKdW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9P
UFM6IAorICAgICAgICAvLyAxLiBTdG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQor
ICAgICAgICAvLyAyLiBqZXR0aXNvbiBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAg
Ly8gMy4gd3JpdGUgYmFycmllciBMTEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tP
dmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIx
MzAsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8
SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZm
ZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0
b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRv
Q1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRU
eXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAg
bV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQo
CiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcg
KzIxNDEsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVC
bG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJp
bmspOwogICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRS
ZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0
LCB3aXRoQXJpdHlDaGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpC
YXNlbGluZUpJVCkpKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAg
ZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2Nv
ZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigp
LCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEw
NzIsNiArMjIzNSw5NDYgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAg
IHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsg
dG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1
bXAganVtcCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4
aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJ
bmRleCkKKyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1w
TGlzdCgpIH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1JlZ2lzdGVyU2V0IGNvbXB1dGVBbGxvd2Vk
UmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2Ug
YWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBp
biB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxp
a2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisg
ICAgUmVnaXN0ZXJTZXQgYWxsb3dlZDsKKyAgICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2
ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVn
aXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOwor
ICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykgfHwgYWxsb3dlZENhbGxl
ZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFkZChyZWcpOworICAg
IH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFJlZ2lzdGVyU2V0JiBhbGxvd2Vk
R1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2Ug
YWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUg
aW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBs
aWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKwor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8UmVnaXN0ZXJTZXQ+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5
LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUklu
Zm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBS
ZWdpc3RlclNldCYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFJlZ2lzdGVyU2V0PiByZXN1bHQ7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1
dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgLy8gT09QUzog
dGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmllci4gQnV0IGdlbmVyYWxseSBzZWVt
cyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBmaWd1cmUgc29tZXRoaW5nIG91dC4u
LgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5i
eXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAvLyAgICBDUkFTSCgpOworfQor
CitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkg
IT0gaGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tD
b3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgewor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShy
ZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xv
YmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwo
UmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9u
IGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdyZWUuCisKKyAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gcmVnVmFsdWUub3BlcmFuZDsK
KyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlz
R1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3By
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxv
Y2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9
CisgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIGlzQWxsb2NhdGVkL2xvY2tDb3Vu
dCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAvLyBoYXZlIGNvZGUgdGhhdCBkb2Vz
OgorICAgICAgICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vIC0gc3BpbGxGb3JDYWxs
CisgICAgICAgIC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAgICAgIC8vCisgICAgICAgIC8vIEFu
ZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2UgdGhlIFZhbHVlT3BlcmFuZCwgd2Ug
d2lsbCBlbmQgdXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxvY2F0aW5nIHRoZSByZWdpc3Rlciwg
ZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1wLgorICAgICAgICAvLyBPdGhlcndp
c2UsIHdoZW4gflZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNhbGxzIHVubG9jaygpLCB3ZSdkIGVu
ZCB1cCBpbgorICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuCisgICAgICAgIHJlZ1Zh
bHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5s
b2NrQ291bnQpCisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IGZhbHNlOworICAg
IH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJT
ZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAg
IGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVn
IDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisg
ICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkp
OworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6
IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1
dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHN0ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5cGUocmVn
VmFsdWUub3BlcmFuZCkpKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQ
UnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9yZUNh
bGwoR1BSUmVnIHRvSWdub3JlLCBGUFJSZWcgdG9JZ25vcmVGUFIpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29yZCByZXN1bHQ7
CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAo
UmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgaWYgKHJl
Z1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5zYXZlUGxh
bi5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlw
ZShyZWdWYWx1ZS5vcGVyYW5kKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZy5mcHIo
KSAhPSB0b0lnbm9yZUZQUikKKyAgICAgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAg
fQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZy5n
cHIoKSAhPSB0b0lnbm9yZSkKKyAgICAgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAg
fQorCisgICAgcmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxl
ZFJlZ2lzdGVycywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVu
dEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KCp0aGlzLCByZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9y
U3BpbGwsIDApOworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnKCksIFZpcnR1YWxSZWdpc3Rl
cigpLCByZWNvcmQuc2F2ZVBsYW4pOworfQorCitzdGF0aWMgdm9pZCBhZGRMb2FkQ291bnQodWlu
dDY0X3QgY291bnQpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvdW50ZXI7CisgICAgZm9yICh1
aW50NjRfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgKytjb3VudGVyOworICAg
ICAgICBpZiAoY291bnRlciAlIDEwMDAwID09IDApCisgICAgICAgICAgICBkYXRhTG9nTG4oIlJ1
bnRpbWUgbG9hZCBjb3VudDogIiwgY291bnRlcik7CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVz
dG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
VG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikKK3sKKyAgICB1aW50NjRfdCBsb2Fk
Q291bnQgPSAwOworICAgIGZvciAoYXV0byYgdHVwbGUgOiBzYXZlUGxhbikgeworICAgICAgICBS
ZWcgcmVnID0gc3RkOjpnZXQ8MD4odHVwbGUpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IHN0ZDo6Z2V0PDE+KHR1cGxlKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJvdmVu
VHlwZSA9IHN0ZDo6Z2V0PDI+KHR1cGxlKTsKKworICAgICAgICBpZiAocmVnID09IHJlZ1RvSWdu
b3JlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvcGVyYW5kID09IG9wZXJh
bmRUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdw
cigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVnLmlzRlBSKCkpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAg
ICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKCp0aGlz
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7
CisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByb3ZlblR5cGUpKQorICAgICAg
ICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkp
CisgICAgICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigp
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGJy
YW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBzY3JhdGNoIH0sIEhhdmVUYWdSZWdpc3RlcnMpOwor
CisgICAgICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAg
ICBpc0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICsrbG9hZENvdW50OworICAg
IH0KKworICAgIGlmIChmYWxzZSAmJiBsb2FkQ291bnQpIHsKKyAgICAgICAgcHJvYmUoWz1dIChQ
cm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgIGFkZExvYWRDb3VudChsb2FkQ291bnQpOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2
ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBs
YW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30K
Kwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3By
KQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisK
KyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJ
bnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0
b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9
IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnBy
KS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcg
Z3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3By
IH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJh
bmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7IC8vIE9PUFM6IFZhbGlkYXRlIHRoYXQgZm9y
IGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykgdGhhdCBkZWYsIHdpbGxEZWYgd2FzIGNhbGxlZC4K
KyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZnByLCBvcGVyYW5k
KTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisK
K3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3By
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAg
IHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICB3aWxsRGVmKG9wZXJhbmQp
OworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcg
cmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2Nr
Q291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7Cisg
ICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQgJiYg
IXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICByZWdWYWx1ZSA9IHsgfTsKK30K
KworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1f
aml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIo
aGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0
ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsK
K30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9n
cHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklU
OjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitG
UFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBS
UmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayht
X2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1f
aml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQo
SklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAg
bV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIo
KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9n
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0g
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0g
bV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29w
ZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0lu
dDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9q
aXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKwor
ICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1
cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRl
R1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBt
X2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOwor
ICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9
CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24o
bV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJh
ZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOwor
CisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklU
JiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwg
bV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdw
cigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAg
IG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpn
cHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4g
bV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVn
ID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3By
ID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBt
X29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1f
aml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0
LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdp
c3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVj
ayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVy
YW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQorewor
ICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6
Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAgICAgIG1faml0LmFzc2lnblJlZyht
X2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICBy
ZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnBy
KCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1f
aml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigp
Cit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2Zw
cjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBS
UmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAg
ICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAg
ICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29w
ZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2
YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisg
ICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOwor
CisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZSht
X29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJh
bmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAg
ICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3du
Tm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAg
ICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9
CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICBtX2pp
dC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisK
K0pJVDo6TnVtYmVyT3BlcmFuZDo6TnVtYmVyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6TnVt
YmVyT3BlcmFuZDo6fk51bWJlck9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7
Cit9CisKK0ZQUlJlZyBKSVQ6Ok51bWJlck9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnBy
ICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVn
KSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9m
cHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAg
VmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFs
bG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LmNv
bnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7CisgICAgZWxzZSBpZiAoaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAg
ICAgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOworCisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCB0ZW1wR1BS
LCBtX2Zwcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsK
KyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBhdXRvIGlzSW50
MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisKKyAgICAgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
bV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJl
Z3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnVuYm94
RG91YmxlKHZhbHVlR1BSLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1f
aml0Lmp1bXAoKTsKKworICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9q
aXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKworICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICB9CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFu
ZCk7CisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6
OkludDMyQ29udmVydGluZ09wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyQ29udmVydGlu
Z09wZXJhbmQ6On5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpncHIoKQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAobV9qaXQuc2hvdWxk
U3BlY3VsYXRlSW50MzIobV9vcGVyYW5kKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgb3AgeyBt
X2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIG1fZ3ByID0gb3AuZ3ByKCk7CisgICAgICAgIG1f
aml0LmxvY2sobV9ncHIpOworICAgIH0gZWxzZSBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1f
aml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5k
LmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAg
bV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsK
KyAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGUFIuZnByKCk7CisKKyAgICAgICAgYXV0byBpc0lu
dDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRl
KEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgICAgICBtX2ppdC51bmJv
eERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7CisgICAgICAgIEp1bXBMaXN0IGRvbmU7Cisj
aWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJBUk02NDo6c3VwcG9ydHNE
b3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNlbWFudGljcygpKSB7CisgICAg
ICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2YVNjcmlwdFNlbWFudGlj
cyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIG1fZ3ByLCBCcmFuY2hJZlRy
dW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0byBzcGlsbFJlY29yZCA9IG1faml0
LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LmNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhoYXNTZW5zaWJsZURvdWJs
ZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93IDogb3BlcmF0aW9uVG9JbnQz
MiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5zaWxlbnRGaWxsQWZ0ZXJDYWxsKHNw
aWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92
ZSh2YWx1ZUdQUiwgbV9ncHIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAg
ICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAg
IH0gZWxzZSBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOwor
CisgICAgICAgIG1faml0LnNwZWN1bGF0ZUJvb2xlYW4obV9vcGVyYW5kLCB2YWx1ZUdQUik7CisK
KyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwgbV9ncHIpOwor
ICAgIH0gZWxzZSBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlT3RoZXIobV9vcGVyYW5kKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9Owor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgICAgICBtX2ppdC5zcGVjdWxhdGVPdGhlcihtX29wZXJhbmQsIHZhbHVlR1BSKTsKKwor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgbV9ncHIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07
CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAg
ICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIp
OworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0IH07CisgICAgICAgIEZQUlJlZyBm
cHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIEp1bXBMaXN0IGRvbmU7CisKKyAgICAgICAg
YXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIG5vdERvdWJsZSA9IG1faml0LmJy
YW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhh
dmVUYWdSZWdpc3RlcnMpOworCisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCBt
X2dwciwgZnByKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFS
TTY0OjpzdXBwb3J0c0RvdWJsZVRvSW50MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50
aWNzKCkpIHsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZh
U2NyaXB0U2VtYW50aWNzKGZwciwgbV9ncHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9q
aXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9n
cHIsIEJyYW5jaElmVHJ1bmNhdGVTdWNjZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxs
UmVjb3JkID0gbV9qaXQuc2lsZW50U3BpbGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAg
ICAgICAgbV9qaXQuY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhh
c1NlbnNpYmxlRG91YmxlVG9JbnQoKSA/IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBv
cGVyYXRpb25Ub0ludDMyLCBtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZp
bGxBZnRlckNhbGwoc3BpbGxSZWNvcmQpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQu
anVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vdERvdWJsZS5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIGF1dG8gbm90T3RoZXIgPSBtX2ppdC5icmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSwgbV9ncHIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigw
KSwgbV9ncHIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAg
IG5vdE90aGVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90Qm9vbGVhbihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIG1fZ3By
KSk7CisgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3By
KTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBpc0ludDMy
LmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHZhbHVlR1BS
LCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNPdGhlciB8IFNw
ZWNCb29sZWFuKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK1JlZ2lzdGVyU2V0
IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCBy
ZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBh
dXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N0
cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1ib2wo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAo
IWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJv
b2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAo
IWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVh
bih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUg
fSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNP
dGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0Owor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNDZWxs
Q2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQW55Qmln
SW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHJldHVybjsK
KworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IHRy
dWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gZmFsc2U7CisjZW5k
aWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1c2VCaWdJbnQz
MikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAgICAgaWYg
KCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSGVhcEJpZ0lu
dCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50
KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0hlYXBCaWdJbnQ7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgaWYgKCFk
b25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBicmFuY2hJZkJpZ0ludDMyKHZhbHVl
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2Vs
bCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmln
SW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAgIH0KKyNlbHNlCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit2b2lkIEpJVDo6cmVzZXRDdXJy
ZW50QmxvY2tTdGF0ZSgpCit7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBTcGVjQnl0
ZWNvZGVUb3ApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0YW50cygpOyArK2kpCisgICAgICAgIG1fY3VycmVudFN0
YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAg
bV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisgICAg
bV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBBbGxvY2VkUmVnKCkpOwor
ICAgIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVycyA9IHsgfTsKK30KKwordm9pZCBKSVQ6OlJlZ1Zh
bHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIoIiwg
b3BlcmFuZCwgIiwgIiwgbG9ja0NvdW50LCAiKSIpOworfQorCit2b2lkIEpJVDo6ZHVtcFJlZ2Fs
bG9jU3RhdGUoKQoreworICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIHN0YXRlID0gWyIpOworICAg
IGZvciAoYXV0byByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShy
ZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJcdCIpOworICAgICAgICAg
ICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9CisgICAg
fQorICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWdW
YWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJcdCIpOworICAg
ICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9
CisgICAgfQorICAgIGRhdGFMb2dMbigiXSIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTcg
QEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRl
cmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlJl
Z2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9T
ZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9wY29kZUlE
IDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNs
YXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwogICAgIGNs
YXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRnVuY3Rp
b25FeGVjdXRhYmxlOwpAQCAtMTA2LDE1ICsxMTAsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRlY29kZUluZGV4IHRvOwotICAgICAg
ICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRlY29k
ZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAgICAgICAgICAgICwgdG8odCkKKyAg
ICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnR1cGxlPFJlZywgVmlydHVhbFJlZ2lzdGVy
LCBTcGVjdWxhdGVkVHlwZT4+OworCisgICAgc3RydWN0IFNpbGVudFNwaWxsUmVjb3JkIHsKKyAg
ICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgICAgIFJlZ2lzdGVyU2V0IHNwaWxsZWRSZWdp
c3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZUZvclNwaWxsOworICAgIH07CisKKyAg
ICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0LCAxPiBqdW1wczsgLy8g
VXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZvciB0aGluZ3Mgd2l0aCBjaGVja3BvaW50cywg
d2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgSnVtcExpc3RzCisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZv
ciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBT
b21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVu
Y2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29yZCB7CkBAIC0xOTcsNiArMjEyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKICAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogCkBAIC0yMDQsMTQgKzIyMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRy
X3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAg
ICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50
YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAg
IC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJs
ZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKLSAgICAgICAg
SklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKKyAgICAgICAgZW51bSBjbGFzcyBD
b21waWxlVHlwZSB7CisgICAgICAgICAgICBCYXNlbGluZSwKKyAgICAgICAgICAgIExPTAorICAg
ICAgICB9OworICAgICAgICAKKyAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiwgQ29tcGlsZVR5
cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwogCiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpK
U0ludGVyZmFjZUpJVDo6dm0oKTsgfQpAQCAtMjIwLDIyICsyMzYsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGxpbmsoKTsKIAogICAgICAgICB2b2lkIGRv
TWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwotICAgICAgICAKLSAgICAgICAg
c3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKKworICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBj
b21waWxlVHlwZSwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUo
ZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgY29tcGlsZVR5
cGUsIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpC
YXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQ
dXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRC
eVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9j
aywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5k
ZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQpAQCAtMjQzLDIxICsyNTksMjEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkK
ICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4oYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElk
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hl
ZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQog
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yODYsNiArMzAyLDIwIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkK
KyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAg
dm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBj
bG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVn
KTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFu
IGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMyMyw5ICszNTMs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7
CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93
Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
SnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAg
ICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWco
KSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVT
bG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBh
ZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYs
IGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMz
Myw3ICszNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwpAQCAtMzUwLDcgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zNjAs
NyArMzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbios
IENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFU
eXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJn
ZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxl
T3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJh
cnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwg
U2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtNTA4LDgg
KzU0MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKQEAgLTUxNywxMiArNTQ5LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJv
b2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25k
aXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlv
biwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wg
aW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAg
IHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChj
b25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAg
LTU0Niw5ICs1ODcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lk
ZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTYxMCw3ICs2NTEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfYmVnaW4oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5k
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sc2hpZnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKyNpZiBDUFUoWDg2XzY0KQogICAgICAgICB2b2lkIGVtaXRfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKik7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0X29wX21vdihj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKQEAgLTY3OCw3OCArNzIxLDgxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0
cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRT
bG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2
b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29s
IGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRH
UFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2
ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAt
NzY0LDggKzgxMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAg
IEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NzgsMzgg
KzgyMiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRG
dW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+
Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
LCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2Fz
ZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKLQot
ICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAg
ICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNT
ZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAg
ICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5r
QWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dD
YXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2Fz
ZSYpOwogCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoU2xvd0Nh
c2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRl
Y29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBz
bG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC04OTEsNiArOTE1LDI2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAg
ICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRvIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0
aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEFyZ3MuLi4g
YXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAg
ICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAg
ICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJn
cy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRp
b25UeXBlPihhcmdzLi4uKTsKQEAgLTkwMiw2ICs5NDYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIE5vUHJvZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CisgICAgICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2b2lkIGVtaXRCaXRCaW5h
cnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2Zp
bGluZ1BvbGljeSBzaG91bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5nUG9saWN5OjpOb1Byb2Zp
bGluZyk7CiAKQEAgLTk2MSw2ICsxMDA4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAg
ICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9v
bCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBp
bGVUaW1lcygpOwogICAgICAgICAKQEAgLTk3MSw2ICsxMDIxLDI5MiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNz
IEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYsIEdQ
UlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAg
ICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJU
ZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAg
ICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnBy
IHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGlu
dDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBu
b3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAg
ICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAg
ICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3Vi
bGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFu
ZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgTnVtYmVyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAg
ICAgICAgICAgfk51bWJlck9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJS
ZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIC8vIFNwZWN1bGF0ZSBudW1iZXIrYm9v
bGVhbitvdGhlciwgYW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9yIGJpdG9wcy4KKyAgICAg
ICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVj
dWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMu
b3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAg
ICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9w
ZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0
cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9
CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUo
UmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJl
Z2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQ
UlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5y
ZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShG
UFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUu
cmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VMT0wp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAg
IGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1
ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
Z3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykgewor
ICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2ln
blJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGdwcikub3BlcmFuZC5pc1ZhbGlkKCkp
OworCisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAgICAg
ICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1Zh
bHVlKGZwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBmcHJGb3JPcGVyYW5k
KG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3Bl
cmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VD
b3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2Rl
RG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3BlY0Jv
b2xlYW4pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7
CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9s
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VMT0wo
KTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5n
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2
b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
QXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZv
IGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIo
R1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBS
KCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAg
ICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZv
aWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2UgdGhp
cyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNldCBp
dC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7Cisg
ICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50U3BpbGxS
ZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSA9IEludmFsaWRHUFJS
ZWcsIEZQUlJlZyB0b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOworICAgICAgICB2b2lkIHNp
bGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9p
ZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1f
aW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1fZmFyQ2FsbHM7
CkBAIC05OTAsNyArMTMyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVt
cFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUlu
ZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAg
IFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxT
d2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5z
aWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzNjMsODcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAg
ICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9s
b29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsK
KyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVk
IHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAg
ICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJS
ZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0
IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChn
cHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVn
OworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAg
ICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAg
ICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdl
KGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tD
b3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0
ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1h
dDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAg
ICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAgICBS
ZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8U3Bl
Y3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdl
KGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkp
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3Ro
ZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBl
cy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVz
W2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVn
aXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0
ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKworICAgICAgICB2
b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVj
b2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50
QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgVmVjdG9yPE9wZXJh
bmRzPHVuc2lnbmVkLCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAgIE9wZXJhbmRzPHVuc2ln
bmVkLCB0cnVlPiBtX2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXIsIDE2PiBtX3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+
IG1fZXhpdExvZzsKKworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9z
dGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3Nv
cnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9j
aGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29k
ZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODggQEAKICNpbmNsdWRlICJS
ZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklUOjplbWl0
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJs
ZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
QW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
T3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5v
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5P
ckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5vcmRl
cmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFs
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxz
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxz
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pn
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0
ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5s
ZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwg
c2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVx
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSwz
MiArMTUzLDkxIEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJ
bW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAu
Z3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94
SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRK
U1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0g
U3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1
c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOwor
ICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91Ymxl
Q29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0
aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25k
aXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJs
ZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5l
IGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAt
IGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3Rh
bnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRl
IHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShk
b3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHx8ICFwcmVkaWN0aW9uRm9y
KG9wMSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRp
dGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsK
KworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
bGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9
IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICsyOTAsNDMgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewor
ICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOwor
ICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBs
aHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJP
bmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJo
c0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNw
ZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdU
MTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAg
ICAgICB9CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExI
UygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIp
OwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmlt
bSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BS
LCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1Qx
KTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25k
aXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0YXJn
ZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwg
cmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
cmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJI
UygpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICszNDIsODkgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQ
UlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1
dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBs
aHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1w
LT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5Owor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9
IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQz
Mk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9
CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAg
ICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJp
bW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIo
b3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKKyAg
ICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1Qw
LCBJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRp
dGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsK
LSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAg
ICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRp
dGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+
c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUo
KSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9u
LCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblpl
cm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhT
YXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFy
Z2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5n
IGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIg
dG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0
ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJl
ciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFy
Z3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVu
dEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7
CkBAIC0zMDAsOCArNDMzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAg
LTMyNiw4ICs0NTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1Bv
aW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdU
MSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUx
LDEyICs0ODAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMg
aXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZh
aWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJh
bmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJl
Z1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAg
ICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdU
MCk7CkBAIC0zNjksOSArNDk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRo
aXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMp
OwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KQEAgLTM4MSwxMSArNTA5LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJ
bnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIo
T3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVlcyB3
LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOwor
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOworICAg
ICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAg
ICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICAg
ICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNy
Y0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJm
bG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50
MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5w
dXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAg
ICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAg
ICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigp
OworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAg
ICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0
RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRH
UFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0
R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0zOTMsMTEgKzU2Myw2MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3Jj
RHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1
YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihz
cmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVy
ZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
UmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHRlbXBG
UFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlu
cHV0R1BSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUg
b25lID0gMS4wOworICAgICAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25l
KSwgdGVtcEZQUik7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVtcEZQ
UiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1bHRG
UFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0Rv
dWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
aW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
c3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBG
UFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBS
ID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4w
OworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsK
KyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOworICAg
ICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJ
bW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0
ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQ
Uik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0lu
dDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAg
ICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsK
KyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2MjgsMTEwIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
Yyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhz
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKGxocykgfHwgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpICYmIHNob3VsZFNwZWN1bGF0
ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAg
ICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1i
ZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1w
LmZwcigpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICAgICAgRlBS
VGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIg
PSByZXN1bHRUZW1wLmZwcigpOworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dEFuZE5vRXhjZXB0aW9uQ2hlY2soTWF0aDo6Zm1vZERvdWJsZSwgcmVzdWx0RlBSLCBsaHNGUFIs
IHJoc0ZQUik7CisKKyAgICAgICAgICAgIHNldERvdWJsZShkc3QsIHJlc3VsdEZQUik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgcmVn
aXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJU
KHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVy
czo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3gg
PSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NF
UlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gp
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
ZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7
CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjbG9i
YmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOwor
ICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1w
bGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOwor
CisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAg
ICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3By
KCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAg
ICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBzcGlsbEZvckNhbGwo
KTsgLy8gT09QUzogbmV3IG5hbWUsIGxpa2Ugc3BpbGxFeHBlY3RpbmdTbG93UGF0aAorCisgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQ
Uik7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BS
LCBlYXgpOworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsaHNHUFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBs
aHNHUFIsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQ
Uik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3Zl
KGxoc0dQUiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JO
b3ROZWcxID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2
NDctMSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1t
MzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsK
ICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAg
IEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJl
Z1Q0LCBUcnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRp
dmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwot
fQotCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0g
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KKyAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdz
IHsgZWF4IH0pOwogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShs
aHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUo
WDg2XzY0KQpAQCAtNDY0LDcgKzc0MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQog
ewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpA
QCAtNDc0LDYgKzc1MSw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01
NjIsMTUgKzg0MCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5z
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1
Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91
YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dD
YXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyNCwxMyArMTAwMCw2NiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BO
ZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRl
UHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
Z2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBu
ZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQo
Y3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0
byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4g
YmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAg
ICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVBy
b2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6OnRyeUVtaXRMT0xCaXRGYXN0UGF0aChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CisKKyAgICBhdXRvIGJpdE9wID0gWyZdIChHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZV92PE9wLCBPcEJpdGFuZD4pCisgICAgICAgICAgICBhbmQzMihsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PE9wLCBPcEJpdG9yPikKKyAgICAgICAgICAgIG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXR4
b3I+KQorICAgICAgICAgICAgeG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BMc2hpZnQ+KQorICAg
ICAgICAgICAgbHNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BVcnNoaWZ0PikKKyAgICAgICAg
ICAgIHVyc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFJzaGlmdD4pCisgICAgICAgICAgICBy
c2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBzZXRJbnQzMihy
ZXN1bHQsIHJlc3VsdEdQUik7CisgICAgfTsKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKyAgICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzJDb252ZXJ0aW5nKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKG9wMikp
IHsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
LmdwcigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MSwxNyArMTA3MCw4
IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9
IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owot
I2VuZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRGYXN0UGF0aDxPcD4oY3VycmVudEluc3RydWN0
aW9uKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7
CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwpAQCAtNzYwLDMzICsxMDgwLDEwNiBA
QCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgICAgIGxlZnRP
cGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwogICAgIGVs
c2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5z
ZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQogICAgIFJFTEVBU0Vf
QVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
OwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKwor
ICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAg
ICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAg
ICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAg
IGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAot
ICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogCisgICAgU25pcHBldEdl
bmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1
bXBMaXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKICAgICBpZiAocHJvZmlsaW5nUG9s
aWN5ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1pdFByb2ZpbGluZykKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MuZ3ByKCkp
OwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
SW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkg
PSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0SXNJ
bnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgewor
ICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxhdGVJ
bnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3VsdEdQ
Uik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAocmVz
dWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7
IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJP
bmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwog
I2Vsc2UKQEAgLTgwMyw3ICsxMTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0
IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
Ynl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdz
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTg0OSwxOSArMTI0Miw4IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRo
KGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7
Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
NDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKKyAgICBpZiAodHJ5
RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1
cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQ7CkBAIC04NzMsMjEgKzEyNTUsNzcgQEAgdm9pZCBKSVQ6OmVtaXRSaWdo
dFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5k
LmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFsaWRG
UFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFz
dCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBv
cDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9
OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAgICAg
aWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsK
KyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdU
MDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0
UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmlnaHRT
aGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywg
bGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRj
aEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdl
bi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0
KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVj
b2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNC
eXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50
MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBw
cm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIsMTgg
KzEzNDAsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFk
ZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRl
bXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBS
LmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3By
KCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZw
cigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIg
PSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLCByaHNGUFIsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJ
QyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMq
IGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAg
ICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0
eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxNDEwLDM1IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
Ly8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBz
cmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdU
MSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpT
VmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
QXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMg
YW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVn
VDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAg
ICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAg
ICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAg
LTk0MSwxOSArMTQ0NywyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRo
SUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNy
Y1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
LCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlv
blN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAK
ICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0
aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29k
ZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1
bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwog
ICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7
CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQg
PSBsYWJlbCgpOwpAQCAtOTYzLDcgKzE0NzIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJlcikp
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzE0OTAsODIgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9v
cGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAg
ICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIp
KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0
T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQ
UlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcg
bGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVt
cEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7Cisg
ICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZw
UmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7Cisg
ICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25z
dGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhp
cywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1w
LT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ax
KSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAg
ICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikp
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVz
dWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBs
ZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1w
RlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBm
cFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FTU0VS
VCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAg
ICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVy
YW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmln
aHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOworICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
ZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElDLT5t
X2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5k
VmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZh
bGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmln
aHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3ICsx
NTc0LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAg
IGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMs
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7
Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxl
ZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXND
b25zdCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7
CisgICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdw
cigpIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAg
ICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRT
bG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpA
QCAtMTAzNSwxMSArMTYxMSwyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDCiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxz
ZSBpZiAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
cmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5U
eXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3Mp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5
cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBh
dGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUu
ZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE2MzMsOCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpT
VmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAj
ZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
OwpAQCAtMTA4NSw3ICsxNjcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5
TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rp
b24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQ
cm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNo
RnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3Rh
dGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE2ODAsNiBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
LSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE2OTAsMzYg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJU
KCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYg
R2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwog
Ci0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJh
bmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAg
IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3Bl
cmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwog
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0
T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUMyA6
IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRD
b25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBp
ZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxzZSBp
ZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7
CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAg
ICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBAIC0x
MTU2LDIzICsxNzUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9u
KgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0K
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYg
KHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5k
VHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTc2NywyMzcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlzT3Bl
cmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERv
dWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJFTEVB
U0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcg
bGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVt
cEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAg
ICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
bGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIo
KSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRl
bXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAg
ICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBS
ID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBS
ID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlm
ICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsK
KyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2Zp
bGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVRE
aXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAg
ICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3Qo
KS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHko
KSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAg
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRl
Y29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmls
ZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
cy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBhcml0
aFByb2ZpbGUuZGlkT2JzZXJ2ZU5lZ1plcm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgICAg
IEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKGxoc0dQUiwgbGhzRlBSKTsKKyAgICAgICAgICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShyaHNHUFIsIHJoc0ZQUik7CisgICAgICAgICAgICAgICAgbXVsRG91
YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJs
ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6
Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKSk7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8sIGJyYW5j
aDMyKEJlbG93LCByaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBS
UmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHMu
ZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOworICAg
ICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0
LmZwcigpOworICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIp
OworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9
IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CisgICAgZW1pdE1h
dGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnBy
KCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBS
LmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0
S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIo
KSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51
bWJlcihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUU3Vi
SUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAg
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklD
KiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5n
ZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwg
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7Cisg
ICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9QT1cg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDExIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9w
JiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVz
dGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1
YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0
aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNIZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5
LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAg
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVy
blBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lz
dGVyIGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBD
YWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxs
X2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAg
QVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0
LDQ0ICszMzcsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQog
ICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZh
cmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2Fy
ZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENv
bnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0z
ODYsNiArMzg5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4K
ICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxz
IGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdp
dGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4K
KyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVz
dWx0IGhlcmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWws
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0
IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAg
IG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgIHNsb3dDYXNlLmp1bXBzLmFw
cGVuZChuZXh0Q2hlY2twb2ludFNsb3cpOworCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzLCByZWdUMCB9OworICAgICAgICBHUFJSZWcgc2hv
dWxkQmVSZWdUMCA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNo
b3VsZEJlUmVnVDAgPT0gcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fbmV4
dCwgcmVnVDApOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX25leHQsIHJlZ1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwog
CiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0
OwpAQCAtNDU2LDYgKzQ3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAg
ICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlw
bGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVh
Y2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nhc2Ug
PSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDM3ICs0OTksNDQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIsIGl0
ZXJSZXN1bHRHUFIpOwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xvd1Bh
dGg7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChpdGVyUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2Vy
dmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
ID0gdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisgICAgICAgIHVzZWRSZWdpc3RlcnMu
YWRkKHZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJl
Z3MsCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVja3Bv
aW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBl
bmQoZG9uZUNoZWNrcG9pbnRTbG93UGF0aCk7CisKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5t
X2RvbmUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BS
KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVH
UFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAg
ewogICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDM7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gZmFsc2U7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFu
Y2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKKyAgICAgICAgSnVtcExpc3QgdmFsdWVDaGVj
a3BvaW50U2xvd1BhdGg7CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwog
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoLmFw
cGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQo
dmFsdWVDaGVja3BvaW50U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSk7CisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV92YWx1ZSk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHZhbHVlR1BSKTsKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKICAg
ICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpAQCAtNTE1LDEwICs1NDUsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0
aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4
dD4oKTsKQEAgLTUyNiw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1f
ZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRo
aXMpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTc3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAg
IHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2Uu
anVtcHNbMl0ubGluayh0aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7
CiAKQEAgLTU2MSw3ICs1OTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4
dChjb25zCiAKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDgg
QEAgY29uc3QgY2hhciogSklUQ29kZTo6dHlwZU5hbWUoSklUVHlwZSBqaQogICAgICAgICByZXR1
cm4gIkxMSW50IjsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICByZXR1
cm4gIkJhc2VsaW5lIjsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJu
ICJMT0wiOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gIkRGRyI7
CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkBAIC0xMDgsNyArMTEwLDcgQEAgSklUQ29kZVdp
dGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQwogCiBKSVRDb2RlV2l0aENvZGVSZWY6On5K
SVRDb2RlV2l0aENvZGVSZWYoKQogewotICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCkgfHwgKGlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNh
c3NlbWJseSgpKSkKKyAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChpc0RG
R09yRlRMKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQogICAg
ICAgICAmJiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpCiAgICAgICAgIGRhdGFMb2coIkRlc3Ry
b3lpbmcgSklUIGNvZGUgYXQgIiwgcG9pbnRlckR1bXAobV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgp
KSwgIlxuIik7CiB9CkBAIC0yMzcsNiArMjM5LDExIEBAIE5hdGl2ZURPTUpJVENvZGU6Ok5hdGl2
ZURPTUpJVENvZGUoQ29kZVIKICNpZiBFTkFCTEUoSklUKQogUmVnaXN0ZXJTZXQgSklUQ29kZTo6
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoQ29kZUJs
b2NrKiwgQ2FsbFNpdGVJbmRleCkKIHsKKyAgICAvLyBGb3IgQmFzZWxpbmUgSklULCB0aGlzIGlz
IHRyaXZpYWxseSB0cnVlLgorICAgIC8vIEZvciBMT0wgSklULCBldmVyeXRoaW5nIGlzIGFscmVh
ZHkgc3BpbGxlZCB0byB0aGUgc3RhY2sgYXQgZWFjaCBvcGNvZGUsIHNvIHdoZW4gd2UKKyAgICAv
LyBnbyB0byB0aGUgb3BfY2F0Y2gsIHRoZSBsaXZlIHN0YXRlIG11c3QgYWxyZWFkeSBiZSBpbiB0
aGUgcmlnaHQgcGxhY2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEFsc28sIG9wX2NhdGNoIGhhcyBu
byBpbmNvbWluZyByZWdpc3Rlci90eXBlIHByb29mIHN0YXRlLCBzbyBpdCdzIHRyaXZpYWwgdG8g
Y2F0Y2gKKyAgICAvLyBhbiBleGNlcHRpb24gaW4gTE9MIGp1c3QgYnkganVtcGluZyB0byBvcF9j
YXRjaC4KICAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBjbGFz
cyBKSVRUeXBlIDogdWludDhfdCB7CiAgICAgSG9zdENhbGxUaHVuaywKICAgICBJbnRlcnByZXRl
clRodW5rLAogICAgIEJhc2VsaW5lSklULAorICAgIExPTEpJVCwKICAgICBERkdKSVQsCiAgICAg
RlRMSklUCiB9OwpAQCAtNjcsMzYgKzY4LDIzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25z
dCBjaGFyKiB0eXBlTmFtZShKSVRUeXBlKTsKIAotICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRvbVRp
ZXJKSVQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkJhc2VsaW5lSklUOwotICAg
IH0KLSAgICAKICAgICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKSVRUeXBl
IG5leHRUaWVySklUKEpJVFR5cGUgaml0VHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoaml0
VHlwZSkgewotICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICAgICAg
cmV0dXJuIEpJVFR5cGU6OkRGR0pJVDsKLSAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0g
ICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6RlRMSklUOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVy
biBKSVRUeXBlOjpOb25lOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBib29s
IGlzRXhlY3V0YWJsZVNjcmlwdChKSVRUeXBlIGppdFR5cGUpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgogICAgICAgICBjYXNl
IEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGRlZmF1bHQ6CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgor
ICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklU
VHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMDcsNyArOTUsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bms6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpOb25lOgorICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAg
ICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xMTYsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
c3dpdGNoIChqaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Cisg
ICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJ
VDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTEyNCw2ICsxMTcsMjQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAg
c3RhdGljIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KEpJVFR5cGUgaml0VHlwZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5cGU6
OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Cisg
ICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJ
VDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjYXNlIEpJVFR5cGU6Ok5v
bmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBlY3RlZExv
d2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNFeGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKQEAgLTE0NSw5ICsxNTYsMTkg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzTG93ZXJPclNhbWVUaWVyKGV4cGVj
dGVkTG93ZXIsIGV4cGVjdGVkSGlnaGVyKTsKICAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1c2Vz
UmVwbGFjZW1lbnRDb2RlQmxvY2soSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6REZH
SklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUOworICAgIH0KICAgICAKICAgICBzdGF0
aWMgYm9vbCBpc09wdGltaXppbmdKSVQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKKyAgICAgICAg
cmV0dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6
RlRMSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGlzREZHT3JGVEwoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKICAgICAgICAgcmV0dXJu
IGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklU
OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNl
cHRpb25zLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lk
IGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhCiAgICAgICAgIC8vIHdpdGggdGhp
cyBieXRlY29kZSBvZmZzZXQgaW4gdGhlIG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5n
bGVzcwogICAgICAgICAvLyBhbmQgY2FuIGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9w
ZXJseSBleGl0cyB0byBoYW5kbGVyLT50YXJnZXQKICAgICAgICAgLy8gaW4gdGhlIHByb3BlciBm
cmFtZS4KLSAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRM
KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjYXRjaFBD
Rm9ySW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5h
dChoYW5kbGVyLT50YXJnZXQpLnB0cigpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGNhdGNo
Um91dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQ1LDYgKzE0NSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9u
KTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUg
ZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZWxzZQpAQCAtMTU3LDYgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgogQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5n
cyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFj
ayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY3LDI1ICsxNjksNiBAQCBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNv
ZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewot
ICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29k
ZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNl
cywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVy
LT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQog
ewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA3LDI3ICsxOTAsMzYgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0
ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nh
c2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2Fz
ZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVj
b2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Lgot
Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUlu
ZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMu
bGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpCisg
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFu
KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7
CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIG1f
c2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5q
dW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2Vz
Lmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2Uo
SnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkK
LSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29k
ZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVu
ZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0
LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVj
b2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Lgot
ICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdp
bmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlK
dW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0
Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9m
ZnNldCkKQEAgLTQwNiwxMSArMzk4LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRP
cGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRk
cmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZh
bHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIH07CiAK
LSAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSk7CisgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZyA9ICFKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKIAogICAg
ICAgICBpZiAobV9nZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoKSB7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
QEAgLTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2
Niw4ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNp
bmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJp
bnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01MSw2
ICs1MywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAv
LyBPT1BTOiBJZiB3ZSBjaGFuZ2UgcmVnYWxsb2Mgc3VjaCB0aGF0IHRoZXJlIGNhbiBiZSBOIHJl
Z2lzdGVycyBwZXIgbG9jYWwsIHdlIGNhbiBtYWtlIHRoaXMgc3VjaCB0aGF0IHdlIGRvbid0IG5l
ZWQgdHdvIHJlZ3MuCisgICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJh
bmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMu
aXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIg
KzExNCw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxs
b2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxs
b2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JS
ZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJS
ZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0
Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1w
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5n
cHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAg
ICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwg
cmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAg
ICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxv
Y2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0
b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcs
IGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVy
ZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hh
c19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1
LDIzICsxNzAsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQog
ICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3Rv
ckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlv
bmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29u
c3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5z
dGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3Ry
dWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIg
PSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAK
ICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ug
d291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1
c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hh
c0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8v
IENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGku
ZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgot
ICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0
OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0
R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1MSw0MCArMjIzLDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAg
Ly8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2
ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2lu
Y2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBp
dCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAg
IC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0g
dGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4K
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJl
c3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0g
ICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9w
dGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxs
T3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2
YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhp
cyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BS
OworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAg
ICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBw
cm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9U
ZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAu
Z3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1w
bGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMs
IHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAg
ICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAg
ICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAg
ICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRl
bXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAg
IG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJv
dG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBX
ZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBm
aXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJl
Z1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAg
cmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisg
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2Vu
LnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTks
MTEgKzMyNCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5w
dXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjEx
LDI4ICszNTQsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRl
ZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBi
cmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7Cisg
ICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICgh
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNo
SWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAg
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRlbXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21w
YXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAg
ICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBi
cmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0Mjgs
MzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTI1NSwxMiArNDYyLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29u
c3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
Qm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVn
VDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4p
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICAgICAg
ICAgIHRlc3Q2NChaZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0OTgsMjcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVt
YmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
RnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUyOCw1NiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVn
VDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBp
c0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlu
cHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBC
aWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEs
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBC
aWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQz
MikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0
aW9uKikKQEAgLTMxMywxOCArNTk0LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0
aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFs
LCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0g
anVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAg
IGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjQzLDYx
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1w
LmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAgY29t
cGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBp
c05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwor
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzcwOCwxMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3Vs
dCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcy
Nyw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRo
aXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2
YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgSnVt
cCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
CisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5rKHRo
aXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIg
Kzc3MCwyMDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0g
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwg
U3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChz
cmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmlu
Zyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1i
b2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJpbmcu
bGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3Bl
Y1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJp
bmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNT
eW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAoc3Jj
ICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25lID0g
YnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNy
YyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAgICAg
IEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcgbmFt
ZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBy
ZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
b3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZh
bHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIE9PUFM6IHdlIGNvdWxkIGhhbmRsZSBtb3JlIHN0dWZmIGlubGluZTogc3Ry
aW5ncywgYml0aW50LCBvYmplY3RzIHRoYXQgYXJlbid0IG1hc3F1ZXJhZGVyLCBldGMuCisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICAvLyBT
ZWUgY29tbWVudCBiZWxvdy4KKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8s
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3Qg
SlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhl
biBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAo
d2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVs
eSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxs
IGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAg
ICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFn
Z2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFy
IG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBv
ciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBhZ2Fp
bnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZs
aXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblpl
cm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07Cisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2Fz
ZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0
aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNj
cmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlz
IH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBz
Y3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRj
aDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZh
bHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24s
IHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJl
ZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklUOjpl
bWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRp
dGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5s
aW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gx
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNo
MUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIg
PSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwg
c2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk3NSwxMjkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBh
dXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAg
ICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisg
ICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAg
Ly8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAg
ICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisg
ICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5v
dENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisK
KyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAg
ICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3Qs
IGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBv
biB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAv
LyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisg
ICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzExMDYsMjYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8v
IE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTUwMCwxMCArMTEzNCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhl
cikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUx
NSw2NSArMTE2NSwzMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1
YwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50
ZXIpKSkgeworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBhdXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihz
cGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9v
bCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENvbXBh
cmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEg
PyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyks
IHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1Zh
bHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChy
aHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMs
IGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAg
ICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0
cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIo
KTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBh
cmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5h
cHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9
IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8
T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBh
dXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21w
YXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHBy
b3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxo
c0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1w
LmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7
CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xv
d1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikp
OworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVl
PigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVx
SW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQogCi0g
ICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCks
IEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVn
IGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBs
PE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVn
VDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGhzR1BSLCByaHNHUFIpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Cisg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGpl
cUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2Rl
Lm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAg
R1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6
IFdlIGNhbiBtYWtlIHRoaXMgYSBzaW5nbGUgYnJhbmNoIGlmIHRoZSByZXN0b3JlIGRvZXNuJ3Qg
Y2xvYmJlciByZXR1cm5WYWx1ZUdQUi4KKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQ
bGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQp
OworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJl
Z1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJo
c0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTUwMSwxNTMgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhz
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMg
PSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJl
Z1QwLCBzcmMyLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNF
cSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0
byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENv
bXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3Vs
ZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxs
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisK
KyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMs
IGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsK
KyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZT
dHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAgY29tcGFy
ZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAg
ICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAg
ICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3Jl
IHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBKdW1wTGlzdCBz
bG93UGF0aDsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxo
c0dQUikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhz
R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3Qp
OwogCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNz
dW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwg
cmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChs
ZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAg
aWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRo
OwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBm
cmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3
aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVs
eSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAv
LyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5n
IDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRz
IGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMg
YWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUo
cmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVn
VDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBv
cjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFs
LCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCBy
ZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQot
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25l
IGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVn
VDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJl
Y2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUg
c2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUs
IEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJ
R0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAo
bGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRv
bmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAg
ICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0
ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJy
YW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQg
aWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1h
a2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElm
IGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBo
aWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1
YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdU
MSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBh
ZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJl
Z1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIg
c3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3Mg
dGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYg
Ym90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsg
cmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAj
ZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBj
ZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9y
NjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
LQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYg
aXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYg
aXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmso
dGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7
CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5n
cykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAg
ICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3Mg
YW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBp
dCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBs
ZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihy
ZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAg
ICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEp
CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQs
NjggKzE2NjUsMTQxIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4K
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9
IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVn
VDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0Vx
ID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90
RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXND
b3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAg
ICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxo
cywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIp
OworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAg
ICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIo
KTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUg
c3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIobGhzR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJ
bnQzMihyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKIAotI2lm
IFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0
eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlz
IERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQot
ICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxs
KQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0g
ICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291
bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZO
dW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIs
IHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBh
bGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0
aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBv
bmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0g
ICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJl
Z1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQo
QWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFu
Y2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwot
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBv
bmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChy
ZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBw
cmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRo
ZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0g
ICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRv
IChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBE
b3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAg
ICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAg
aWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQ
YXRoOworICAgICAgICBnb3RvIG5vdFRha2VuOworICAgICAgICAqLworCisgICAgICAgIC8vIFRo
aXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5h
aXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisg
ICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhl
biBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBo
aWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0
aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZp
bmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRk
NjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywg
cmVnVDUpKTsKKworICAgICAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3Ry
aWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9u
ZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2
NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5n
IG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0
byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vs
c2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2Vs
bHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0
KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0K
LSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0
J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0
J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRo
aXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwot
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJn
ZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0
cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAg
ICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBp
dCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8g
aWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAg
ICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwor
ICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVx
dWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlm
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0OCw4OSArMTgxMiwyMjggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVt
cDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4o
c2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQ
UiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAg
ICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBp
ZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDAp
OwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJ
bnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0K
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51
bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJ
bnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisjZW5kaWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0lu
dChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJh
bmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYK
KworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAg
IH0KKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAg
ICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAg
ICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3Jj
ICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdU
MCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBz
cGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhy
ZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
Y1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7
CisgICAgICAgIH0KKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE9iamVjdChyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0
KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRC
bG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSBy
ZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsy
MDkxLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3Bl
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
LSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBh
IGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3Bl
IH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1Qw
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyMTIyLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIxNDcsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNU
SVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFi
bGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjE3MSwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJl
dHRlci4KICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCks
IHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRp
Y19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJl
cXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
K3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51
bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxs
Pjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNv
bXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVz
dWx0R1BSKTsKIAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1
bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsK
KyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAg
ICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21w
YXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwog
Ci0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0
cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFy
ZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
Z1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzog
YXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJy
aWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1
c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8g
emFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAg
ICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6
ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytq
KSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsK
KyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJp
YWJsZSkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZh
cmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyMzIyLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9z
Y29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUg
PSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyMzQ2LDgwIEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3Ry
dWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRl
Y29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3Jj
RHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8v
IE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hv
dWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFu
IGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShz
cmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwp
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAg
ICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7
CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5l
ZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOwor
ICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNE
c3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYg
KG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAo
aXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAg
ICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsK
KworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Cisg
ICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYg
KzI0MjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0Nl
bGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdp
c3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSBy
ZWdUNDsKQEAgLTEwNjgsNyArMjQzNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0Owog
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBj
YWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRl
bXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAg
ICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJl
ZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIo
KTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hl
ZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJU
ZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVT
bG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1
bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVu
Y3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNDc5LDMzIEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNz
KHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRj
aFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRj
aFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0
eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vz
bid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsyNTI0LDExIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9j
a1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdh
bGxvYyBvciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBt
X2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkp
IHsKKyAgICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4g
YWx3YXlzIE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhp
bnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVn
VDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdU
MCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1p
dCgpKSk7CkBAIC0xMTg3LDEzICsyNTUyLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoK
ICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNC
aXRzKCkpOwpAQCAtMTIwNiwxMSArMjU2OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9v
cF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMp
OwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJl
bW92ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRp
ZgogfQogCkBAIC0xMjMzLDEwICsyNTk1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2Ft
cGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNz
KGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEy
NDUsOCArMjYwNSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3Ry
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxz
ZSB7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0x
MjU2LDIzICsyNjI2LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0
cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywg
Ynl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1
bmN0aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4
ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVu
Y0V4ZWMpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApA
QCAtMTMwMSwyNCArMjY5MCw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNv
bnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BS
UmVnIHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
SW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFj
ZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdw
cigpOworICAgICAgICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlm
ICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29w
ZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNv
ZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNl
IGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24p
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0
OSw5ICsyNzYwLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0
ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9
IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJn
R1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI3ODEsMjYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUu
bV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBh
cmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNp
emVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRM
b2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJl
Z1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEz
ODEsMTUgKzI4MTQsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVl
LmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdU
MCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTQwOSw2ICsyODYzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3By
b3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6
CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
IAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMjg5Miw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/
CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4
ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBA
IC0xNDYxLDE1ICsyOTE5LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KGMKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7
CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsK
IAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFy
cmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJy
YXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2Rl
LCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBl
KTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzI5MzYs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogCiAgICAgTGFi
ZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4
LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQ
YXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlv
bkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlw
ZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTE1MTAsMzcgKzI5NjksODEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9w
bmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
CiAKLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAg
ICAgSW50MzJPcGVyYW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0g
ZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAvLyBDaGVjayB0
aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
Mik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKIAotICAgIC8vIE90
aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMyKHJl
Z1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMyX3Qg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0
ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0g
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmly
c3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBB
ZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3Ry
dWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1
YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNj
cmF0Y2hHUFIpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIs
IHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0
aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAg
IC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMSk7CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVy
YXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MK
KyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJl
Z1QxKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBv
dXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIo
cmVnVDEpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE1NTAsMjEgKzMwNTMsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1
Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJy
YW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5k
ZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1w
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMy
T3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVy
YXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQ
UiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVt
cC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQ
UiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRv
ckdQUik7CisgICAgfQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywg
aW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0
eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdo
dCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1
bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJl
c3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNP
dGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzEw
Nyw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQ
cm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVn
IGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRj
aEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1w
OyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
ZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1w
LmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgq
dGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0g
aW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1w
LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisg
ICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUlu
ZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAg
aW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQz
MlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3Vs
dEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE1OTgsNiArMzE2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShjb25zdCBJbnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1l
dGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmls
ZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxs
KCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7
CiAKICAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzMyMjMsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAg
ICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRp
Y19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ug
d2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsK
QEAgLTE2NzIsNiArMzI0MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm8KIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0o
KS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVU
b3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYg
bm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRy
dWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dT
aGFkb3dDaGlja2VuVGFpbD4oKTsKQEAgLTE3MDIsMTEgKzMyNzMsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVn
VDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJl
c3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdz
KHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzI5NCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251
bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5P
ckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIo
bnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBi
cmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhp
cyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1Ro
YW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMy
KEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRo
aXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVn
VDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
MCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszMzQzLDk5IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJl
c3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAg
bG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRo
aXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCks
IHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJl
Z1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9m
Qm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGlu
ZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBt
b3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRP
ZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihp
bmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKKwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUp
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExvYWRQcm90
b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNjcmF0Y2hH
UFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0R1BS
LCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNwZWNPdGhl
cjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3Mo
cmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVn
VDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZhbHVlUmVn
cy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJl
Z1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgQVNTRVJU
KHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3Mp
KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAg
ICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRS
ZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7
CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0ODMsNiArMTQ4Myw4
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXIKICAgICBKU1ZhbHVl
IHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBzcmMyID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCisgICAgZGF0YUxvZ0xuKCJzdHJpY3RlcSwg
bGhzOiAiLCBzcmMxLCAiIHJoczogIiwgc3JjMik7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6c3Ry
aWN0RXF1YWwoZ2xvYmFsT2JqZWN0LCBzcmMxLCBzcmMyKTsKIH0KIApAQCAtMTg3MSw3ICsxODcz
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgIH0KICAg
ICAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFj
ZW1lbnQoKTsKLSAgICBBU1NFUlQob3B0aW1pemVkQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChv
cHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChvcHRpbWl6ZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOwogICAgIAogICAgIGlmICh2b2lkKiBkYXRhQnVmZmVyID0gREZHOjpw
cmVwYXJlT1NSRW50cnkodm0sIGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29k
ZUluZGV4KSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG9wdGltaXplZENvZGVCbG9j
aywgIm9zckVudHJ5IiwgKCJhdCBiYyMiLCBieXRlY29kZUluZGV4KSk7CkBAIC0zNDE5LDYgKzM0
MjEsNDIgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrSQogICAgIHJl
dHVybiAwOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxP
TFJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKQorewor
ICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4g
aGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkgYmUgcHJvZml0
YWJsZS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MobG9sQ29kZUJsb2NrLT52bSgpLmhl
YXApOworCisgICAgaWYgKGdldGVudigicHJpbnRFYWNoSmV0dGlzb24iKSAmJiAhIWF0b2koZ2V0
ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJqZXR0aXNvbiwg
Zm9yY2luZyByZW9wdCBub3c6ICIsICpsb2xDb2RlQmxvY2spOworICAgIGxvbENvZGVCbG9jay0+
dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKKyAgICAKKyAgICAvLyBPT1BTOiBw
cm9jZXNzIHZhbHVlIHByb2ZpbGVzIGhlcmUsIHNpbmNlIHdlJ3JlIGpldHRpc29uaW5nLCBob3Bl
ZnVsbHkgdGhleSB1cGRhdGUgdy8gdGhpbmdzIHdlIGNhcmUgYWJvdXQuCisKKyAgICBzYW5pdGl6
ZVN0YWNrRm9yVk0obG9sQ29kZUJsb2NrLT52bSgpKTsKKworICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgKmxvbENvZGVCbG9jaywgIjogRW50ZXJlZCByZW9wdGltaXplIGZy
b20gTE9MIik7CisKKyAgICBDb2RlQmxvY2sqIGxsaW50Q29kZUJsb2NrID0gbG9sQ29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpOworICAgIC8vIFdlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJhc2Vs
aW5lIGNvZGUgYmxvY2suCisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGxsaW50
Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBs
bGludENvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlcGxhY2VtZW50IHx8IHJl
cGxhY2VtZW50ID09IGxsaW50Q29kZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgKmxsaW50Q29kZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nIExP
TCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1lbnQgbXVzdCBiZSBv
cHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKKyAgICAvLyB0byBjaGVj
ayBvdXIgbG9naWMuCisgICAgQVNTRVJUKGxsaW50Q29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBs
YWNlbWVudCgpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGxvbENvZGVC
bG9jay0+aml0VHlwZSgpKSk7CisKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgc3R1Y2sgaW4g
YSBsb29wIGxvZ2ljCisgICAgbG9sQ29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25EdWVUb09TUkV4aXQsIENvdW50UmVvcHRpbWl6YXRpb24pOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNiArMzE4
LDggQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25WYWx1ZQogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nLCB2b2lkLCAo
Vk0qKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NTaGFkb3dD
aGlja2VuTG9nLCB2b2lkLCAoVk0qKSk7CiAKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xD
b2RlQmxvY2spKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUs
OCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI4MSw4ICsyNzcsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRl
eDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAtNTU4LDcgKzU1Miw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJ
bmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cg
aXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01OTgsOCAr
NTkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjM5
LDggKzYzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTY4Niw4ICs2NzUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTcyOSw4ICs3MTYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKQEAgLTc3OCw4ICs3NjMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CkBAIC04MTksOCArODAyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29u
c3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwpAQCAtMTEwMCw4ICsxMDgxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZy
b21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVj
dGlvbik7CkBAIC0xMjU3LDggKzEyMzYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDx3dGYv
U2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKIApAQCAtNTIsNTEgKzU0LDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9w
ZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFz
ZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAo
bWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNN
YXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7Cisg
ICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
YmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJh
c2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlz
U2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Cisg
ICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CiAKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNl
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAg
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmls
ZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50
MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5
KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
cHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9
CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0
ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAg
ICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNSw0MSArMTczLDczIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVy
dHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIHJlc3VsdFJlZ3MpOworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Nyw2ICsyNTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2Rl
QmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxs
KCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25z
dGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlO
YW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTksOCArNDIxLDExIEBAIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4K
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsK
IAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFpbGFibGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlOYW1lLAogICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0
S2luZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KQEAgLTMzOSw3ICs0NDQsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5
VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
ICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQ3LDcg
KzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6
c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1
dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
ICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1NSwxMyArNDYwLDEyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlz
RGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERp
cmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0zODEsNiAr
NDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRl
eCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogRG8gYmV0dGVyIGlmIHdlIGNhbiEK
KwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKIApAQCAtMzk0LDEzICs1MDAsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRl
Y29kZUluZGV4LCBmYXN0UGF0aEptcCwgZG9uZSwgZG9uZSkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZh
bEluZm87CiAgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRL
aW5kOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9
IGxhYmVsKCk7CiAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwpAQCAtNDIwLDQ5ICs1MjUs
MTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0
ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBi
eXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJ
ZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2Ug
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNj
ZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBH
UFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRl
cl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJ
ZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29k
ZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29k
ZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNl
dHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
Z2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRl
ckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkg
eyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNj
ZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAg
ICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVn
VDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0g
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywg
Ynl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAq
dGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwor
ICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAg
ICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywg
cmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTggKzYzMyw1MiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
IGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0wo
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJh
c2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1
YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ5MiwyNSArNjg3LDI3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hC
b29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MjAsMTkgKzcxNyw3MCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0KKwogICAg
IEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQg
b2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgpAQCAtNTQxLDIyMSArNzg5LDM2OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRG
aWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
IAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFs
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BS
KTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVz
dWx0UmVncywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFz
ZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVl
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
YmFzZUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9
IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAg
ICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNo
OChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2Rl
KSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxl
bmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2Zp
bGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNlTE9MKCkgPyByZXN1bHRH
UFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VH
UFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3Ro
TW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlz
KTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNW
UmVnKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywg
dGhpc0dQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BS
KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZS
ZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BS
LCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFn
cy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0
byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zm
c2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1
bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5k
IHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNl
dCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0K
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRj
aEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJh
c2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNv
ZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJl
Y3QpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTc2NSw3NyAr
MTE2MCw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BS
UmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBh
dGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBi
YXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBk
c3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNo
cG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlv
bldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ3LDE3ICsx
MjYwLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5z
aWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdF
cG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtODY3LDIxICsxMjg4LDM2IEBA
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVt
aXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGRl
cHRoID4gMCkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1l
bnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52
aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6CkBAIC04OTQsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTA5LDI5ICsxMzQ1LDI5IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVz
b2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
LCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5r
KHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwog
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
OTQwLDE1ICsxMzc2LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BS
KQogewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
KTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUikpOworICAgIGxvYWQzMihBZGRyZXNz
KHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAg
LTk2MiwxMiArMTQwMyw2IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KTsKQEAgLTk3OCw1MSArMTQxMyw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3Ry
dWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAg
ICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBy
ZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRH
UFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOwor
ICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QyOworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0
R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lk
KT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1
YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAK
LSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxv
YWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5B
QkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVh
dGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKICAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxp
bmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9h
ZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBuZWczMihvZmZzZXRHUFIpOworICAgICAgICAg
ICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0R1BSLCBvZmZzZXRHUFIpOworICAgICAgICAgICAg
bG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBz
Y29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNp
emVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKQEAgLTEwMzYsMTAgKzE1MDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBp
c05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtMTA1MiwyNyArMTUy
MCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3Vs
dEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDgyLDQwICsxNTUw
LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZWdUMCk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9w
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0
aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQp
Ci17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJl
Z1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0
cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMTI5LDIxICsxNTc5LDQ5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1
cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFs
dWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAg
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlv
bmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4g
YnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAg
ICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1w
bGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGJ1
dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZz
ZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0
cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAgIGppdEFz
c2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQ
dHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7
Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7Cisg
ICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zm
c2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExNTQsMjggKzE2MzIsNTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUp
OwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAg
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2Fu
J3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAg
ICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCks
IHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihv
cGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9j
YXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50
U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0
Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBz
dG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNv
bnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3Bl
cmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcg
c2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBz
Y29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQ
UiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9y
ZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwpAQCAtMTE5MCwxMiArMTY5NywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBz
Y3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBX
ZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0
aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENv
ZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
OiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAg
ICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikp
OwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVu
IGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25z
dCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAt
MTIwOSwyMyArMTcyNSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhl
IGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBz
aW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2Ny
YXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hH
UFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTI0MiwxMCArMTc2Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNv
bHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyNjEs
NjEgKzE3ODQsMTc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50
c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBh
cmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFy
Z3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSksIHJlc3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwot
ICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0g
ICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAg
ICBHUFJSZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50
c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1w
bGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0g
cmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVu
dHNHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgfQorICAgIAorICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BS
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAg
Ly8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRv
bid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBP
dGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vz
bid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFs
d2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9m
IGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUg
aW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJy
aWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkg
eworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5v
dENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOwor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAg
ICBpZiAoZ3ByRm9yT3BlcmFuZChvd25lcikgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IG93bmVyR1BSID0gZ3ByRm9yT3BlcmFuZChvd25lcik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIG93bmVyR1BSID0g
b3duZXJWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93
bmVyLCBvd25lckdQUik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQ
UiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CisKICAgICBKdW1wIG93bmVyTm90
Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShw
cm92ZW5UeXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwob3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVn
VDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1w
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BS
LCBzY3JhdGNoR1BSKTsKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3Bp
bGxSZWNvcmQ7CisgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50
IHNhdmUgdGhpcy4KKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3Jk
ID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZp
bHRlckJhc2UpCisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAg
IGlmIChvd25lck5vdENlbGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAg
ICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdo
dCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBp
dCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0
byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxv
YyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAg
ICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwg
KyBzaWxlbnQgZmlsbAorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7Cisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFs
dWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JP
cGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAh
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJh
cnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAg
IGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRo
aXMpOwogfQogCkBAIC0xMzI3LDExICsxOTY3LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9p
bnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGlu
ZGV4KSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3du
Q2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0
ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNDEsMTAgKzE5OTYsMjMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
CisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUo
YmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3Mo
YmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZh
bD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTE0NDcsOCArMjExNSwyNSBAQCB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7CisgICAgfQor
CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJl
Zm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50Rmls
bEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0xNDY2LDYgKzIxNTEsOCBAQCB2b2lkIEpJVDo6
ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICAKQEAgLTE1NjcsNiAr
MjI1NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2kKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsK
KyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgQVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6
OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRL
aW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3Zh
bCkpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIEpJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVC
bG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUX1VOVVNFRChwcm9maWxl
ZERGR0NvZGVCbG9jaywgIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBkaWQgYmVj
b21lIHJlYWR5LiIpOwogICAgIApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9j
ayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAg
ICBBU1NFUlQoIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
Ik9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJl
c3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRX
b3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwyMiBAQAogI2luY2x1ZGUg
IkpJVC5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+
CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6UGxhbiA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4gewogcHVibGljOgotICAgIFBs
YW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKLSAgICAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgICAgICwgbV9q
aXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
CisgICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZSBjb21waWxl
VHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICA6
IG1fbGxpbnRDb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1fY29kZUJsb2NrVG9Db21w
aWxlKGNvbXBpbGVUeXBlID09IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA/IG1fbGxpbnRDb2RlQmxv
Y2stPm5ld1JlcGxhY2VtZW50KCkgOiBtX2xsaW50Q29kZUJsb2NrKSAKKyAgICAgICAgLCBtX2pp
dChtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKSwgbV9jb2RlQmxvY2tUb0NvbXBpbGUsIGNvbXBp
bGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgbV9qaXQu
ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CisgICAgICAgIC8vIE9PUFM6
IHZpc2l0IHRoaXMgaW4gY29uY3VycmVudCBnYworICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0Nv
bXBpbGUgIT0gbV9sbGludENvZGVCbG9jaykgeworICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0Nv
bXBpbGUtPnZtKCkuaGVhcC5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAg
fQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZCgpCkBAIC01MywxNyArNjAs
MjMgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoKQogICAgIHsKICAgICAgICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQubGluaygpOworCisgICAgICAgIGF1dG8gc2NvcGVF
eGl0ID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9D
b21waWxlICE9IG1fbGxpbnRDb2RlQmxvY2spCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tU
b0NvbXBpbGUtPnZtKCkuaGVhcC51bnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAg
ICAgICB9KTsKKwogICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgICAgICBjYXNlIENvbXBp
bGF0aW9uRmFpbGVkOgotICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9j
aywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOworICAgICAgICAg
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2xsaW50Q29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxl
IiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIGZhaWxlZC4iKTsKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7CisgICAgICAgICAgICBt
X2xsaW50Q29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgIG1fbGxp
bnRDb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CiAgICAgICAgICAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9u
IHN1Y2Nlc3NmdWwuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5q
aXRTb29uKCk7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+b3duZXJFeGVjdXRh
YmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgICAgIG1f
bGxpbnRDb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03
MSw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgVk0mIHZtKCkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPnZtKCk7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0tleSgp
IHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2s7IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2xs
aW50Q29kZUJsb2NrLT52bSgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5n
KCkKICAgICB7CkBAIC04MCwxNSArOTMsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9p
c0ZpbmlzaGVkQ29tcGlsaW5nOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBjb21waWxl
Tm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCisgICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGNv
bXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcGxhbi5jb21w
aWxlSW5UaHJlYWQoKTsKICAgICAgICAgcGxhbi5maW5hbGl6ZSgpOwogICAgIH0KICAgICAKIHBy
aXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fbGxp
bnRDb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9ja1RvQ29tcGlsZTsKICAgICBK
SVQgbV9qaXQ7CiAgICAgTG9jayBtX2xvY2s7CiAgICAgYm9vbCBtX2lzRmluaXNoZWRDb21waWxp
bmcgeyBmYWxzZSB9OwpAQCAtMjMzLDkgKzI0NywxMSBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21w
aWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29u
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBp
bGVUeXBlID0gT3B0aW9uczo6Zm9yY2VMT0woKSA/IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA6IEpJ
VDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lOwogICAgIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29u
Y3VycmVudEpJVCgpKSB7Ci0gICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxv
Y2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTI0OSw3ICsyNjUsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpj
b21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgICAgIAogICAgICAgICBpZiAobV9udW1BdmFpbGFi
bGVUaHJlYWRzKSB7CiAgICAgICAgICAgICBtX3BsYW5uZWQuYWRkKGNvZGVCbG9jayk7Ci0gICAg
ICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBs
YW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICBtX3BsYW5zLmFwcGVuZChwbGFuKTsKICAg
ICAgICAgICAgIG1fcXVldWUuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9jb25kaXRpb24t
Pm5vdGlmeUFsbChsb2NrZXIpOwpAQCAtMjczLDE0ICsyODksMjQgQEAgdm9pZCBKSVRXb3JrbGlz
dDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgIC8vIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBp
c3N1ZS4gSWYgdGhlIGNvbmN1cnJlbnQgSklUIHRocmVhZCBpcyBjb252b3llZCwgd2UgcmV2ZXJ0
IHRvIG1haW4KICAgICAvLyB0aHJlYWQgY29tcGlsZXMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGFz
IGdvb2QgYXMgaWYgd2UgaGFkIG11bHRpcGxlIEpJVCB0aHJlYWRzLiBNYXliZSB3ZQogICAgIC8v
IGNhbiBkbyB0aGF0IHNvbWVkYXkuCi0gICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2Nr
LCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiB9CiAKKy8qCiB2b2lk
IEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKworICAgIGF1dG8gaXND
b21waWxlZCA9IFsmXSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBpZiAoaXND
b21waWxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYm9vbCBpc1BsYW5uZWQ7CkBA
IC0yOTYsMTcgKzMyMiwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9j
ayogCiAgICAgfQogICAgIAogICAgIC8vIE5vdyBpdCBtaWdodCBiZSBjb21waWxlZCEKLSAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAg
ICBpZiAoaXNDb21waWxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gV2UgZG8g
dGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVk
LCB0byBjb21waWxlIHdpdGggdGhlCi0gICAgLy8gYmFzZWxpbmUgSklULgotICAgIGNvZGVCbG9j
ay0+cmVzZXRKSVREYXRhKCk7Ci0gICAgCi0gICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KLSAg
ICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0gICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKworICAgIGlmIChPcHRpb25zOjpmb3JjZUxP
TCgpKSB7CisgICAgICAgIENvZGVCbG9jayogbG9sQ29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdS
ZXBsYWNlbWVudCgpOworICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGxvbENvZGVCbG9jaywgSklU
OjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBsb2xDb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLT5pbnN0YWxsQ29kZShsb2xDb2RlQmxvY2spOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0
aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRoIHRoZQorICAgICAgICAvLyBiYXNlbGluZSBKSVQu
CisgICAgICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7CisgICAgICAgIAorICAgICAgICAv
LyBPSywganVzdCBjb21waWxlIGl0LgorICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9j
aywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQs
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgIH0KIH0KKyovCiAKIHZvaWQg
SklUV29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG15UGxhbnMpCiB7CkBAIC0zMTQsNyAr
MzQ3LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYgbQogICAgICAg
ICBwbGFuLT5maW5hbGl6ZSgpOwogICAgICAgICAKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
Km1fbG9jayk7Ci0gICAgICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrKCkpOwor
ICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9ja0tleSgpKTsKICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwb2xsKFZNJik7
CiAgICAgCiAgICAgdm9pZCBjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgdm9pZCBj
b21waWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIAogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCYg
ZW5zdXJlR2xvYmFsV29ya2xpc3QoKTsKICAgICBzdGF0aWMgSklUV29ya2xpc3QqIGV4aXN0aW5n
R2xvYmFsV29ya2xpc3RPck51bGwoKTsKQEAgLTY2LDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBj
bGFzcyBUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKICAgICAKKyAgICAvL3ZvaWQg
Y29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAgICB2b2lkIGZpbmFsaXplUGxhbnMoUGxhbnMm
KTsKICAgICAKICAgICBQbGFucyBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRl
eChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ld
OyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1f
bWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6
dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5Miw3
ICsxNDkyLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNF
bnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7CiAjZW5kaWYKICAgICB9Ci0gICAg
aWYgKGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVC
bG9jay0+aml0VHlwZSgpKSkKKyAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc0RG
R09yRlRMKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNl
dCgwKSk7CiAgICAgZWxzZQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5r
SW5mby5ob3RQYXRoT3RoZXIoKS5sYWJlbEF0T2Zmc2V0KDApKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAg
ICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5v
dCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNl
dCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBt
X2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjcwNzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYyLDggKzM2MiwxMCBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoQ29kZUJs
b2NrKiBjb2RlQmxvCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9T
Ui4KLWlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCkpCitpbmxpbmUgQ29kZUJsb2NrKiBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKQogeworICAgIC8vIE9PUFM6
IEltcGxlbWVudCB0aGlzIHcuci50IExPTC4KKwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyh2bS5oZWFwKTsgLy8gTXkgY2FsbGVycyBkb24ndCBzZXQgdG9wIGNhbGxmcmFtZSwgc28gd2Ug
ZG9uJ3Qgd2FudCB0byBHQyBoZXJlIGF0IGFsbC4KICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklU
KCkpOwogICAgIApAQCAtMzcyLDI5ICszNzQsNDUgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFu
ZFNldEhldXJpc3RpY3MoVgogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xk
UmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVs
YXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2Rl
QmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICAKICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5wb2xsKHZtKTsK
LSAgICAKKworICAgIGF1dG8gbG9sQ29kZUJsb2NrID0gWyZdKCkgLT4gQ29kZUJsb2NrKiB7Cisg
ICAgICAgIGlmIChDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gY29kZUJsb2NrLT5vcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQtPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpMT0xKSVQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50Owor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH07CisKKyAgICBpZiAoYXV0
byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKICAg
ICBzd2l0Y2ggKGNvZGVCbG9jay0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNl
bGluZUpJVDogewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIg
ICAgQ29kZSB3YXMgYWxyZWFkeSBjb21waWxlZC4iKTsKICAgICAgICAgY29kZUJsb2NrLT5qaXRT
b29uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOwog
ICAgIH0KICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6IHsKICAgICAgICAgSklU
V29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGlsZUxhdGVyKGNvZGVCbG9jaywg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKKyAgICAgICAgaWYgKGF1dG8qIHJlc3Vs
dCA9IGxvbENvZGVCbG9jaygpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBM
TEludDogIiwgKmNvZGVCbG9jaywgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBMTEludDogIiwgKmNvZGVCbG9j
aywgIlxuIik7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCitzdGF0aWMg
U2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCiB7CiAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLAogICAgICAgICAqY29kZUJsb2NrLCAi
OiBFbnRlcmVkICIsIG5hbWUsICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCkBAIC00MDUsMTgg
KzQyMywyMSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCCiAgICAg
ICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogICAgIFZNJiB2
bSA9IGNvZGVCbG9jay0+dm0oKTsKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNz
KHZtLCBjb2RlQmxvY2spKQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKTsKKyAgICBpZiAoIWNvbXBpbGVk
Q29kZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwog
ICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiT1NSIGVudHJ5IiwgKCJp
biBwcm9sb2d1ZSIpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2Nr
LCAiT1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIpKTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29k
ZUJsb2NrKGNvbXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBQcm9sb2d1
ZSkKLSAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0
YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CisgICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29tcGls
ZWRDb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiAg
ICAgQVNTRVJUKGtpbmQgPT0gQXJpdHlDaGVjayk7Ci0gICAgTExJTlRfUkVUVVJOX1RXTyhjb2Rl
QmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgIExMSU5UX1JFVFVSTl9UV08oY29tcGlsZWRDb2Rl
QmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIG51bGxwdHIpOwogfQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLXN0YXRpYyBT
bG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNo
YXIqLCBFbnRyeUtpbmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENhbGxG
cmFtZSosIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQogewog
ICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgTExJTlRfUkVUVVJOX1RX
TyhudWxscHRyLCBudWxscHRyKTsKQEAgLTQyNiwzMSArNDQ3LDMxIEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29z
cikKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRy
eU9TUihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9s
b2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3Jf
Y2FsbCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5j
b2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1
ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9T
TE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOwor
ICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNr
KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVC
bG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwg
QXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVu
Y3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2Nr
Rm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0
eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJl
dHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSkt
PmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4g
ZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCkBAIC00NzksMTkgKzUwMCwyMiBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxs
cHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSkKKyAgICBD
b2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Mo
dm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgaWYgKCFjb21w
aWxlZENvZGVCbG9jaykKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRy
KTsKICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIm9zckVudHJ5Iiwg
KCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAgQ09ERUJMT0NLX0xPR19F
VkVOVChjb21waWxlZENvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KSk7CiAKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb21waWxlZENvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6TE9MSklUKTsKIAotICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAg
PSBjb2RlQmxvY2stPmppdENvZGVNYXAoKTsKKyAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFw
ID0gY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGVNYXAoKTsKICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQobG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICB2b2lkKiBq
dW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgQVNTRVJU
KGp1bXBUYXJnZXQpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2Rl
QmxvY2spOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwgY2FsbEZyYW1l
LT50b3BPZkZyYW1lKCkpOwogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAzLDYgKzQwMywxMCBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxsSklUT3B0aW9ucygpCiAKIHZv
aWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiB7CisgICAgT3B0aW9uczo6
dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOworICAgIE9wdGlv
bnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6
OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcw
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNyw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2Fu
VXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgdXNlSklUQ2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRz
LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJs
aWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKICAgICB2KEJvb2wsIHVz
ZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBh
cnNlciB3aWxsIHVuZGVyc3RhbmQgcHJpdmF0ZSBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNs
YXNzZXMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
CiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNh
bXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICAgICAgLy8gaW5z
aWRlIHRoZSBMTEludCdzIGxsaW50X2hhbmRsZV91Y2F1Z2h0X2V4Y2VwdGlvbi4gU28gd2UganVz
dCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0
LgogICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0b3BDb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Yml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1bnBy
b2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogICAgICAgICAgICAgICAgICAgICBieXRlY29k
ZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2spOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgsOCBAQCBz
dGF0aWMgdm9pZCBzZXR1cExMSW50KENvZGVCbG9jayogY29kZUJsCiBzdGF0aWMgdm9pZCBzZXR1
cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShKSVQpCi0g
ICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIC8vIE9PUFM6IEZpZ3VyZSBvdXQgd2hh
dCB3ZSB3YW50IHRvIGRvIHdpdGggdGhlIG5vIExMSW50IG9wdGlvbi4uLi4KKyAgICBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21w
aWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVz
dFJ1bm5lclV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NSw2ICs2NSw5IEBAIEpTVmFsdWUgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlIHRoZUYK
IHsKICAgICBib29sIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSBmYWxzZTsKICNpZiBFTkFC
TEUoREZHX0pJVCkKKyAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICByZXR1
cm4ganNOdW1iZXIoMCk7IC8vIE9PUFMKKwogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkgfHwg
IU9wdGlvbnM6OnVzZUJhc2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6OnVzZURGR0pJVCgpKQogICAg
ICAgICBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2aXNpb24gMjcwNzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtw
b2ludHMoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgYXV0byBs
b2NrZXIgPSB0cnlIb2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAg
ICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4K
QEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25T
dGFjCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICBp
ZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KQogICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVU
b1ZNVHJhcHMpOwogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVu
dHJ5RnJhbWUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkod29ya2luZyBjb3B5KQpAQCAt
MTczLDggKzE3Myw4IEBAIGRlZiBjb21wdXRlTXVsdGlwbGVIeXBvdGhlc2VzU2lnbmlmaWNhbmMK
IAogZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIG5hbWVMZW5ndGggPSBsZW4oInN1YnRl
c3QiKQotICAgIGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKLSAgICBiTGVuZ3RoID0gbGVu
KGFbdW5pdE1hcmtlcl0pCisgICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKSArIDMKKyAg
ICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMwogICAgIHJhdGlvTGVuZ3RoID0gbGVu
KCJiIC8gYSIpCiAKICAgICBwVmFsdWVIZWFkZXIgPSAicFZhbHVlIChzaWduaWZpY2FuY2UgdXNp
bmcgRmFsc2UgRGlzY292ZXJ5IFJhdGUpIgpAQCAtMjAzLDcgKzIwMyw3IEBAIGRlZiBkdW1wQnJl
YWtkb3ducyhhLCBiKToKICAgICBwTGVuZ3RoICs9IDIKIAogICAgIHN0cmluZ3MgPSBbXQotICAg
IHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpee25hbWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19
IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7Y29tcGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6
XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5PSJzdWJ0ZXN0IiwgYVNjb3JlPWFbdW5pdE1hcmtlcl0s
IGJTY29yZT1iW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxl
bmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRp
b0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCisgICAgc3Ry
aW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHti
U2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BM
ZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9ImE6ICIgKyBhW3VuaXRNYXJr
ZXJdLCBiU2NvcmU9ImI6ICIgKyBiW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgs
IGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRp
b0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0
aCkpCiAgICAgZm9yIGtleSBpbiBhLmtleXMoKToKICAgICAgICAgaWYga2V5ID09IHVuaXRNYXJr
ZXI6CiAgICAgICAgICAgICBjb250aW51ZQpJbmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0
YW5kYWxvbmUtcHJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFu
ZGFsb25lLXByZS5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2Vz
L3N0YW5kYWxvbmUtcHJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNl
bGYgPSB0aGlzOwogCiBzZWxmLnRlc3RSdW5uZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlv
bjogbmV2ZXJJbmxpbmVGdW5jdGlvbiwKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJP
ZkRGR0NvbXBpbGVzLAorICAgIG51bWJlck9mREZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAg
ICAgICAgbGV0IG1hcDsKKyAgICAgICAgcmV0dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAo
aXNERkdFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGls
ZXMoZik7CisKKyAgICAgICAgICAgIC8vIEVtdWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZv
ciBhIGJpdCB0byBnZXQgc29tZSB0aWVyaW5nIGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAg
ICAgICAgIGlmICghbWFwKQorICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAg
ICAgICAgICAgbGV0IGNvdW50ID0gbWFwLmdldChmKSB8fCAwOworICAgICAgICAgICAgY291bnQg
Kz0gMTsKKyAgICAgICAgICAgIG1hcC5zZXQoZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJu
IChjb3VudCAvIDQwMDApIHwgMDsKKyAgICAgICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0
TmV3Q29kZUJsb2NrOiBmYWlsTmV4dE5ld0NvZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5
IEBAIGZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1
c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdD
b21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQorICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhl
RnVuY3Rpb259KSkgewogICAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2
YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBl
OwpAQCAtMzQ2LDcgKzM2MSw3IEBAIGZ1bmN0aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAg
ICBpZiAoZGlkRmFpbFNvbWVUZXN0cykKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAg
Ci0gICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChh
cmd1bWVudCkgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFy
Z3VtZW50ID8gYXJndW1lbnQuc3RhcnQgOiAwOwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5p
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417396</attachid>
            <date>2021-01-11 11:59:27 -0800</date>
            <delta_ts>2021-01-11 13:26:17 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>563721</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ2NoYWktd3RiJ107CisKIGlmICh0
eXBlb2YgdGVzdEl0ZXJhdGlvbkNvdW50ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0SXRlcmF0
aW9uQ291bnQgPSB1bmRlZmluZWQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY4LDYgKzM2OCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW8KIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25TZXRVbmhh
bmRsZWRSZWplY3Rpb25DYWxsYmFjayk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkFzRG91YmxlTnVtYmVyKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkKTsKIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MpOwogCkBAIC02NjIsNiArNjYzLDggQEAgcHJpdmF0
ZToKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVtYmVyIiwgZnVuY3Rpb25B
c0RvdWJsZU51bWJlciwgMSk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJpc0RGR0VuYWJs
ZWQiLCBmdW5jdGlvbklzREZHRW5hYmxlZCwgMCk7CisKICAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJkcm9wQWxsTG9ja3MiLCBmdW5jdGlvbkRyb3BBbGxMb2NrcywgMSk7CiAKICAgICAgICAgaWYg
KE9wdGlvbnM6OmV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcoKSkg
ewpAQCAtMjY1Myw2ICsyNjU2LDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkFzRG91YmwKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKG51bSkp
OwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIChK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKE9wdGlvbnM6OnVzZURGR0pJVCgpKSk7Cit9CisKIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2NrcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSopKQogewogICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERG
R0Rpc2Fzc2VtYmx5KCkpCisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc0RGR09yRlRM
KGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxp
bmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0Mg
ewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpAQCAtMjY5LDcgKzI3
MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIH0KIAogdGVt
cGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3Rh
dHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+
OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1
Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVtcEhlYWRlcihibG9j
aywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBAIHZvaWQgQ29kZUJs
b2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQucHJpbnQoImJiIyIs
IGJsb2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0aW9uc0F0SGVhZCkg
eworICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFkOiBbIik7CisgICAg
ICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25zQXRIZWFkLT5hdChi
bG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAg
ICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJl
ZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1
bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CiAgICAgICAgICAg
ICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNvZGUoY3VycmVudElu
c3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNsYXNzIENvZGVCbG9j
a0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1
c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRh
RmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsKKyAgICBzdGF0aWMg
dm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2Rl
R3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4g
cHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwogCiAgICAg
dm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9pZCBkdW1wKENvZGVC
bG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9u
cywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+IHNwZWN1bGF0aW9u
QXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKKyAgICB2b2lk
IGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRy
dWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRh
RmlsZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2Nr
VHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRoaXMsIHNwZWN1bGF0
aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3
ICsxMDAsNyBAQCBPcGVyYW5kIGRlc3RpbmF0aW9uRm9yKGNvbnN0IEJ5dGVjb2RlJiBiCiAgICAg
fSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25l
eHQpIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKICAgICAgICAgY2FzZSBP
cEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IEpJ
VFR5cGU6OkRGR0pJVCB8fCB0eXBlID09IEpJVFR5cGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGlm
ICh0eXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCB0eXBlID09IEpJVFR5cGU6OkZUTEpJVCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKE9wSXRlcmF0b3JOZXh0OjpuZXh0UmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybiBieXRlY29kZS5tX3ZhbHVlOyAvLyBXZSByZXVzZSB2
YWx1ZSBhcyBhIHRlbXAgYmVjYXVzZSBpdHMgZWl0aGVyIG5vdCB1c2VkIGluIHN1YnNlcXVlbnQg
Ynl0ZWNvZGVzIG9yIHdyaXR0ZW4gYXMgdGhlIHRlbXAgb2JqZWN0IC4KICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
Y3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgogICAg
IGNhc2Ugb3BfbmV3X3JlZ2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bfam5l
cV9wdHI6CiAgICAgY2FzZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAgY2Fz
ZSBvcF9uZXdfb2JqZWN0OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZUluZGV4SW1wbChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAgcmV0
dXJuOwogCisgICAgVVNFUyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAgICBV
U0VTKE9wVG9UaGlzLCBzcmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0dWFs
UmVnaXN0ZXIpCiAgICAgVVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
QXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
CiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnByaW50
KCIsICIsIGluc3RydWN0aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBpZiAo
KHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAg
ICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3duZXJF
eGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZlcklu
bGluZSkiKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2Rl
KFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVz
TWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0
cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVt
cEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAg
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0
cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2
b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAt
Mjk1LDYgKzI5NSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAK
ICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJF
eGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVj
dGlvbnNSYXdQb2ludGVyKG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAsIG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQogICAg
ICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAgICwg
bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5j
dGlvbkRlY2xzKQpAQCAtMzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiAKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAK
ICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVycyhv
dGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIubnVt
UGFyYW1ldGVycygpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMp
OwogfQpAQCAtODUwLDcgKzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8g
dG8gdGhlIENvZGVCbG9jay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVjdGx5
IHRvIHRoZSBDb2RlQmxvY2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVh
cmVkIHdoZW4gdGhlIENvZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0
VHlwZSgpKSkKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50
cygpOwogI2VuZGlmCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7CkBA
IC0xMDM3LDcgKzEwMzksNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShj
b25zCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0
IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2Vz
IGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAgLy8gc2Nh
bm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCi0gICAg
aWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENv
ZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMDQ1LDcgKzEwNDcsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxk
VmlzaXRTdHJvbmdseShjb25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRv
V2Vha1JlZmVyZW5jZShWTSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdK
SVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtlZCh0aGlz
KTsKIH0KQEAgLTEwNTgsNiArMTA2MCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklU
VHlwZSBqaXRUeXAKICAgICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAgICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAgICAgICBj
YXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwNzQsNiArMTA3OCw4IEBAIHN0YXRpYyBTZWNvbmRz
IHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRk
aXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8gSW50ZXJw
cmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7CisgICAg
Y2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNhc2UgSklU
VHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKQEAgLTExNjksNyArMTE3NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJMRShERkdf
SklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAg
IGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21t
b25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAKICAg
ICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpA
QCAtMTIxNyw3ICsxMjIzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIC8vIEluIHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNhbGxl
ZCBvbiBhIGJhc2VsaW5lIENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAgICAvLyB0
aGF0IHdlIG1pZ2h0IGRlY2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpldHRpc29u
ZWQgZHVlIHRvIG9sZCBhZ2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRvZXNuJ3Qg
cHJvdGVjdCB1cy4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRm
Z0NvbW1vbigpOwpAQCAtMTUxOSw4ICsxNTI1LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmNvdWxk
QmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJw
cmV0ZWQoaml0VHlwZSgpKSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7CisgICAg
ICAgIC8vIE9PUFM6IFNlcGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3duIGZ1bmN0
aW9uIGZvciBKSVQgSUNzLiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3QganVzdCBm
b3IgTExJbnQuCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB9CiAK
ICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyArMTUzNiw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgogCiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAg
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7CiAgICAg
fQpAQCAtMTU0OCw2ICsxNTU2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRp
b25hbGx5KAogICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklU
OgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50ID0gbV9q
aXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgpAQCAtMTU5MCw3ICsxNTk5LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoQ29k
ZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+
dmFsdWUuYnlWYWxJbmZvID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewor
ICAgICAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMu
Y2FsbHMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0YXR1cygp
KS5pdGVyYXRvci0+dmFsdWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpAQCAtMTgx
MCw3ICsxODE5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5k
ZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlz
aXRvcik7CkBAIC0xODIzLDcgKzE4MzIsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFdlYWtSZWZlcmVuCiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCiAjaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAg
ICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21t
b24oKTsKQEAgLTE4NjcsNyArMTg3Niw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGlu
ZVZlcnNpb24oKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9
IHJlcGxhY2VtZW50KCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZXNSZXBsYWNlbWVudENvZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRo
ZSByZXBsYWNlbWVudCBjYW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAg
YW5kIHRoZSBleGVjdXRhYmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRz
IGNvZGVCbG9ja3MgKHNlZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNz
LAogICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24g
dGhlIHN0YWNrLCBhbmQgYXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTk0MCw3IEBA
IEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxs
U2l0ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENh
bGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBS
RUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBB
U1NFUlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBD
b2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsK
QEAgLTIyMzEsNTEgKzIyNDAsNTUgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVy
OjpKZXR0aQogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAg
ICAvLyBXZSB3YW50IHRvIGFjY29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgotICAgIC8vIDEpIE1h
a2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3cs
IHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0CisgICAgLy8gMSkgSWYgd2UncmUgREZHL0ZUTCwgbWFr
ZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywg
dGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKICAgICAvLyAgICB3ZSBzaG91bGQgT1NSIGV4aXQgYXQg
dGhlIHRvcCBvZiB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0dXJu
LgogICAgIC8vIDIpIE1ha2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1dGFi
bGUsIHRoZW4gd2Ugc2hvdWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2suCiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisg
ICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBqaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7Ci0gICAgCi0gICAgaWYgKHJlYXNv
biAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBQcm9maWxlcjo6
Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGls
YXRpb24uZ2V0KCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCi0gICAgICAg
ICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOwotICAg
ICAgICAKLSAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3du
IGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgotICAg
ICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewotICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRo
cmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvT2xkQWdlKSB7CisgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNv
bXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQorICAgICAgICAgICAgICAgIGNv
bXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93
biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KKyAg
ICAgICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVh
cC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRh
YmxlKCkpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogICAgIAogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQog
ICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIAogICAgIC8vIENvdW50IHRoZSByZW9wdGltaXph
dGlvbiBpZiB0aGF0J3Mgd2hhdCB0aGUgdXNlciB3YW50ZWQuCiAgICAgaWYgKG1vZGUgPT0gQ291
bnRSZW9wdGltaXphdGlvbikgewogICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQg
Y2FsbCBhbHRlcm5hdGl2ZSgpLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgICAgIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+Y291
bnRSZW9wdGltaXphdGlvbigpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoREZH
OjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQg
Y291bnQgcmVvcHRpbWl6YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZgogICAgIH0K
ICAgICAKICAgICBpZiAodGhpcyAhPSByZXBsYWNlbWVudCgpKSB7CiAgICAgICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCB3ZSB3ZXJlIG5ldmVyIHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4g
Zm9yIE9TUiBlbnRyeSBjb2RlCiAgICAgICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgLy8gT3IsIHdl
J3JlIGFuIExPTCBDb2RlQmxvY2sgYW5kIHdlcmUgYWxyZWFkeSBqZXR0aXNvbmVkLgogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGFsdGVybmF0aXZlKCkpCiAgICAgICAgIGFsdGVy
bmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIAotICAgIGlmIChyZWFzb24gIT0gUHJv
ZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNv
bkR1ZVRvVk1UcmFwcykKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpICYm
IHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJv
ZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50RXhpdFNp
dGVzKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNvbiBjYW4g
aGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8gYSBkZWFk
IGV4ZWN1dGFibGUKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBvYmplY3Qg
dG8gdGhlIHJlbWVtYmVyZWQgc2V0LgpAQCAtMjM5MCw3ICsyNDAzLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6Om5vdGljZUluY29taW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRU
eXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKSB7CiAgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpLCAiICAgIENsZWFy
aW5nIFNBQkkgYmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuIik7CiAgICAgICAg
IHJldHVybjsKQEAgLTI0ODMsMTIgKzI0OTYsMTQgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpudW1i
ZXJPZkRGR0NvbXBpbGVzKAogewogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShq
aXRUeXBlKCkpKTsKICAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAgIGlm
ICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
aWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7
CiAgICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKICAgICB9CiAgICAgQ29kZUJsb2NrKiByZXBsYWNl
bWVudCA9IHRoaXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYg
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAw
KSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CisgICAgcmV0dXJuICgocmVwbGFjZW1l
bnQgJiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDog
MCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogfQogCiBpbnQzMl90IENvZGVCbG9j
azo6Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKQEAgLTI3MDksNyArMjcyNCw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQgQ29kZUJs
b2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsK
LSAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0eXBlICE9
IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7CiAgICAg
ICAgIGRhdGFMb2dMbigqdGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBjb2RlIGJ1
dCBoYXZlICIsIHR5cGUpOwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oaml0Q29kZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkpOwog
ICAgIH0KQEAgLTI3MjcsNyArMjc0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGQKICAgICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGls
YXRpb25TdWNjZXNzZnVsOgotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBK
SVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxh
Y2VtZW50LT5qaXRUeXBlKCkpKTsKICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKQEAgLTI3NTYsNyAr
Mjc3MSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICAK
IHVpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3Qg
ZGVzaXJlZFRocmVzaG9sZCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpOworICAgIC8vQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKTsgLy8gT09QUzogV2UgY2FsbCB0aGlzIGZyb20gdGhlIExPTCBjb21waWxlciB0aHJl
YWQgYmVmb3JlIGluc3RhbGwuCisKICAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5IHNv
IHdlIGRvbid0IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKICAgICAvLyBl
bm91Z2ggdGhhdCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4KICAgICB1bnNpZ25lZCByZXN1bHQg
PSBkZXNpcmVkVGhyZXNob2xkOwpAQCAtMjgzNiw3ICsyODUyLDcgQEAgREZHOjpDb2RlT3JpZ2lu
UG9vbCYgQ29kZUJsb2NrOjpjb2RlT3JpZwogCiBzaXplX3QgQ29kZUJsb2NrOjpudW1iZXJPZkRG
R0lkZW50aWZpZXJzKCkgY29uc3QKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24o
KS0+ZGZnSWRlbnRpZmllcnMuc2l6ZSgpOwpAQCAtMjg0Nyw3ICsyODYzLDcgQEAgY29uc3QgSWRl
bnRpZmllciYgQ29kZUJsb2NrOjppZGVudGlmaWVyKAogICAgIHNpemVfdCB1bmxpbmtlZElkZW50
aWZpZXJzID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmllcnMpCiAgICAg
ICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0gICAgQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29k
ZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21t
b24oKS0+ZGZnSWRlbnRpZmllcnNbaW5kZXggLSB1bmxpbmtlZElkZW50aWZpZXJzXTsKIH0KICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKQEAgLTI5NDgsNyArMjk2NCw4IEBAIGJvb2wgQ29kZUJs
b2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVC
bG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAvLyBPT1BTCisgICAgQVNTRVJUKEpJVENv
ZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUwLDYgKzMwNjcsNyBAQCB1bnNp
Z25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQog
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CiAgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCkBAIC0zMjI2LDE0ICszMjQ0LDE0IEBAIHZvaWQgQ29kZUJsb2Nr
OjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJyZWFrcG9pbnRzICs9IG51
bUJyZWFrcG9pbnRzOwogICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzKTsKLSAgICBpZiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZH
T3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVl
VG9EZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdN
b2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAgbV9zdGVwcGluZ01vZGUg
PSBtb2RlOwotICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2Rl
RW5hYmxlZCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpldHRp
c29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7CiB9CiAKQEAgLTM0
MjEsOSArMzQzOSw5IEBAIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6Ynl0ZWMK
IHsKICAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJVFR5
cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisg
ICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChqaXRUeXBlKSkKICAg
ICAgICAgYnl0ZWNvZGVJbmRleCA9IGNhbGxTaXRlSW5kZXguYnl0ZWNvZGVJbmRleCgpOwotICAg
IGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlw
ZTo6RlRMSklUKSB7CisgICAgZWxzZSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAgICBD
b2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7CkBAIC0zNDY2LDcg
KzM0ODQsNyBAQCBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwCiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gV2Ug
bmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBu
b3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVy
YiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21t
b24oKS0+aGFzSW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9pbnRzKCk7CiAjZWxzZQpAQCAtMzQ4MCw3
ICszNDk4LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cwogICAg
IC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdl
IG5lZWQgdG8gYmUKICAgICAvLyBjYXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMg
bm90IHNpZ25hbCBoYW5kbGVyIHNhZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1
cmIgdGhlIHJlZkNvdW50IG9mIG1faml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgY29tbW9uRGF0YSA9ICptX2pp
dENvZGUtPmRmZ0NvbW1vbigpOwogICAgIGNvbW1vbkRhdGEuaW5zdGFsbFZNVHJhcEJyZWFrcG9p
bnRzKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRU
eXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBF
TkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2Zp
bGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3
ICs1NDEsNyBAQCBwdWJsaWM6CiAgICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRo
YXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5z
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKTsKKyAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAg
ICB9CiAgICAgICAgIAogICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGlu
ZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nywx
NSBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAg
ICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAg
IH0gICAKK30KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpm
b3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmMpCit7CisgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkg
eworICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFBy
b2ZpbGVzKQorICAgICAgICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw2ICszOCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBFeGkKICAgICBjYXNlIEV4aXRGcm9tQW55dGhpbmc6CiAgICAgICAgIG91dC5wcmludCgi
RnJvbUFueXRoaW5nIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRGcm9tTE9MOgor
ICAgICAgICBvdXQucHJpbnQoIkZyb21MT0wiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
RXhpdEZyb21ERkc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbURGRyIpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJ
VFR5cGUuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4aXRpbmdKSVRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKICAgICBFeGl0
RnJvbUFueXRoaW5nLAorICAgIEV4aXRGcm9tTE9MLAogICAgIEV4aXRGcm9tREZHLAogICAgIEV4
aXRGcm9tRlRMCiB9OwpAQCAtMzgsNiArMzksOCBAQCBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWlu
dDhfdCB7CiBpbmxpbmUgRXhpdGluZ0pJVFR5cGUgZXhpdGluZ0pJVFR5cGVGb3IoSklUVHlwZSB0
eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgor
ICAgICAgICByZXR1cm4gRXhpdEZyb21MT0w7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAg
ICAgICAgIHJldHVybiBFeGl0RnJvbURGRzsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAy
NzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2lu
Y2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0x
MzQsNyArMTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAog
CiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgog
Y2xhc3MgT3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRp
dGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxU
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGlj
OgogCiAgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhz
aXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAg
ICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxz
LCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9u
dW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2Fs
cykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAg
ICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRz
ICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7
CiAgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
CiAgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQg
T3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51
bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXpl
X3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90
IG51bUNvbnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJn
dW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisg
ICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92
YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAg
bV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBu
dW1UbXBzICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZh
bHVlKTsKICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxp
Y2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBj
b25zdCBUJiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3Ro
ZXIubnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1i
ZXJPZkxvY2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29u
c3RhbnRzKCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAg
ICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBA
IHB1YmxpYzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtQXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9j
YWxzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBt
X251bUNvbnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMo
KSAtIG51bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0
ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRy
YWNrQ2FsbGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRl
eChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9m
VG1wcygpKTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXpl
X3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0K
LSAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVt
YmVyT2ZBcmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgo
c2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNv
bnN0YW50cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkxvY2FscygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAg
IAogICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJn
dW1lbnRJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0
ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9v
ICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVz
Lmxhc3QoKTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3Rk
OjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxs
ZWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBl
IGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4
KSB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZU
eXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50
SW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2lu
ZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGlj
OgogICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFj
a0NhbGxlZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxv
Y2FscygpOwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAg
ICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVz
LnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsg
bnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsg
ISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAK
ICAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+
OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAog
ICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAg
ICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxl
ZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5v
ZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjYWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlm
IChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4
KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChv
cGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3Bl
cmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQu
b2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1l
bnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5k
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29u
c3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsK
ICAgICB9CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygp
OwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkg
PCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBv
cCkgY29uc3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYg
KGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlm
IChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAg
ICBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAg
ICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9m
QXJndW1lbnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8
IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFu
dHMoKSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRl
eCAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYg
Y29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxl
ZUluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAo
aW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJP
ZkNvbnN0YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMs
MTAgKzQzNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2Yg
bV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2Fscywg
YW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBv
ZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxz
LCB0aGUgbmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJl
IHRtcHMuCiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
cyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X251bUNvbnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2
aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9w
ZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdp
c3RlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxU
LCB0cmFja0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAg
Zm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50
SW5kZXgtLTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5D
b250ZXh0KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNv
bnRleHQpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRl
eHQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tD
YWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6
ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07
KSB7CkBAIC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0
bXAiLCB0bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoi
LCBjYWxsZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZp
c2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgY29uc3QgUmVn
aXN0ZXJTZXQmIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZQogICAgICAgICBtX2xpdmVSZWdpc3RlcnNU
b1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlID0gaml0LT5jb2RlQmxvY2soKS0+
aml0Q29kZSgpLT5saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxs
U2l0ZShqaXQtPmNvZGVCbG9jaygpLCBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCk7CiAgICAgICAg
IG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbiA9IG1fbGl2ZVJlZ2lzdGVyc1Rv
UHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUubnVtYmVyT2ZTZXRSZWdpc3RlcnMo
KSA+IDA7CiAgICAgICAgIGlmIChtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24p
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0
LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChK
SVRDb2RlOjppc0RGR09yRlRMKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAgICAg
ICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3RlcnNU
b1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRSZWdp
c3RlcnMoKSk7CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwpAQCAtNzEwLDcgKzcxMCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgLy8gV2Ugc2V0IHRoZXNlIHRvIGluZGljYXRl
IHRvIHRoZSBzdHViIHRvIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgQ29kZUJsb2NrJ3MKICAgICAg
ICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgdGFibGUgd2hlbiBpdCBpcyBkZWFsbG9jYXRlZC4KICAg
ICAgICAgY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycyA9IGNvZGVCbG9jazsKLSAg
ICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2tUaGF0T3duc0V4
Y2VwdGlvbkhhbmRsZXJzLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6Omlz
REZHT3JGVEwoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0VHlwZSgpKSk7
CiAgICAgICAgIGNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9IHN0YXRlLmNhbGxT
aXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZygpOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJT
cGVjdWxhdGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVj
SW50MzJPbmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYg
flNwZWNCeXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxh
dGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1
ZSAmIFNwZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCAr
MTE4LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUu
IE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1
dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lv
biAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lz
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lz
dGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxS
ZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9
CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49
IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0K
ICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+
PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3Qg
eyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lz
dGVyKTsgfQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVy
YW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3Rh
dGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAt
IENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3Vt
ZW50VG9PcGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6
OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFu
ZChpbnQgY29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgg
KyBjb25zdGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAt
MTMzLDQgKzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8K
ICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09w
ZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29u
c3RhbnRJbmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgg
Ynl0CiAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMpCiAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMp
CiAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0g
ICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlv
bk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwg
QWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9u
Q291bnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBPU1JFbnRy
eURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFy
ZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRD
b2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwg
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsK
ICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQs
NyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGV4
aXRJbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoZXhpdElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgLy8gT09Q
UzogTWFrZSB0aGlzIGRvIHRoZSByaWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Igbm90LgogICAg
IENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihl
eGl0Lm1fY29kZU9yaWdpbik7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJs
b2NrRm9yRXhpdC0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jh
c2VsaW5lQ29kZShjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAko
cmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkRGR0pJVCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAg
ICAgdW5zaWduZWQgbnVtVG1wczsKQEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJs
ZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+
bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAg
ICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCk7IC8vIE9PUFM6IGJ5dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1WYXJpYWJsZXMg
PSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRtcHMg
PSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hl
Y2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmls
aXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2
YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAg
ICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXBy
ZWNhdGVkQ2FsbEZyYW1lRgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2Rl
T2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHN3aXRjaCAo
Y29kZUJsb2NrKCktPmppdFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuazoKLSAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRo
dW5rOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoY29kZUJsb2NrKCkt
PmppdFR5cGUoKSk7CiB9CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3Jp
Z2luSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgc3dpdGNo
IChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rOgorICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBl
OjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJ
VDoKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03
OSw4ICs3MCw2IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKICAg
ICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDEwICs0NTYs
MTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRFeAogCiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICB1bnNpZ25lZCBl
eGNlcHRpb25IYW5kbGVySW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNh
bGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNlCisgICAgaWYgKEpJVENv
ZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAg
ICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgp
Lm9mZnNldCgpOworICAgIGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2Fs
bEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+
aGFuZGxlckZvckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTIgKzMwLDE4IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBo
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJ
VFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJEaXNhbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9y
LmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNs
dWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1NSw4
IEBACiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Np
bXBsZVN0YXRzLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFt
ZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhwciBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY4LDg4OCBAQCBTZWNvbmRzIHRv
dGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNv
bmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAg
ICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisKKyAg
ICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKwor
ICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUp
IHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5
IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVw
cmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRv
IHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlw
ZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsK
KyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNh
c2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxs
VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFy
Z3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENvbnN0cnVjdFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9i
eV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhv
cjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Qml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgc2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fbmV4dCwgbWV0YWRh
dGEubV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUubV9wcmVk
aWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb3Y6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBlRm9yKGluc3RydWN0
aW9uLT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFy
Z3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVm
dCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmln
aHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxl
LmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgaWYgKCEh
KGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5h
TikpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJpZ0ludDMyIGJldHRl
cgorICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0Jp
Z0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0
cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJpbmdPclN0cmluZ09i
amVjdFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9w
X3N1YjoKKyAgICBjYXNlIG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0
byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlw
ZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworCisgICAgICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25s
eSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNw
ZWNCeXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVByb2R1Y2VOYU5Gcm9t
Tm9uTmFOID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2OworICAgICAgICAgICAg
ICAgIGlmIChtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYgU3BlY0RvdWJsZVB1
cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2Fu
IHByb2JhYmx5IGRvIGJldHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAgaWYgKGlzQmlnSW50
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICB9OworCisg
ICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9zdWIpCisgICAgICAgICAg
ICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgaGFuZGxlKGluc3Ry
dWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BE
aXY+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW9kOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAg
ICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRlciBpZiB3ZSBwcm9maWxlIGV4
aXRzIG9uICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25s
eSB8IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJl
ciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Vu
c2lnbmVkOgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21lIGtpbmQgb2YgZXhpdCBzaXRl
IGZlZWRiYWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0ludDMyT25seSB8IFNwZWNBbnlJ
bnRBc0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVj
OgorICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJvZmlsZSYg
cHJvZmlsZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBlRm9yKHNy
Yyk7CisgICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpID8gU3Bl
Y0FueUludEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJs
ZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAg
ICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZURv
dWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRl
Y29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwg
Ynl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0g
b3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
RGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5t
X3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUp
IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+
KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFu
ZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBT
cGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBp
ZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAg
ICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8g
bGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9
IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdo
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVt
YmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAg
ICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQor
ICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Cisg
ICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlm
ICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09i
amVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3By
b3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
VG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9z
cmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg
KCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1l
cmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkg
aGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2gg
aGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUg
bWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRU
eXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0p
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2Nr
LT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3
X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZm
ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+
KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+
KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dp
dGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BIYXNJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQg
ZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5j
RXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19n
ZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdH
ZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5j
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVu
dD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
cGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBh
cmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJv
cGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0
dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4o
KSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3Ry
dWN0dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCksIFNw
ZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2lu
ZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4
U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
cmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVz
dExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVj
bEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2Nv
cGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3Jl
YXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNw
ZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9j
bG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWND
ZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9t
aXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2Vu
ZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5j
R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJp
bmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2Zp
bGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8
U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2Fz
dDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0
VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2Fs
bGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1
dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAg
ICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAg
ICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2Fz
ZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ug
b3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Ro
cm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6
CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVu
Y3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
ZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVy
dHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9w
X2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAg
Y2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAg
Y2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ug
b3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6
CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9q
Z3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6Cisg
ICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6
CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNh
c2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ug
b3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2Fz
ZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAg
ICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBv
cF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBj
YXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9i
eV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3By
aXZhdGVfbmFtZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0
b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93
aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xv
Z3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGlu
dF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9j
YWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9s
b2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAg
IGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNl
IGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9z
bG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3Ry
YW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNh
c2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxf
ZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9l
eGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29z
cl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9v
cF9oaW50OgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9j
b25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAg
IGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlf
aWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlv
bl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSB3
YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0X25vX3RsczoKKyAgICBjYXNlIG5vcm1h
bF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9yZXR1
cm5fdmFsdWU6CisgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgorICAg
IGNhc2Ugb3BfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9y
X29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Ns
b3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Nsb3dfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3Rh
aWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9l
dmFsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxs
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jf
bmV4dDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90
YWlsX2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3Nsb3c6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJh
bXBvbGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdzoKKyAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfb3BfY2FsbF9ldmFsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJh
dG9yX25leHRfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3Blbl9z
bG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0
eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3RhZzoKKyAgICBj
YXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGw6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVf
d2FzbV9jYWxsX25vX3RsczoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5k
aXJlY3Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0g
V1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgt
PnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFk
LnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAg
ICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYg
cHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNo
Q2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9m
aWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlz
RW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgp
ID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0g
MDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2st
PnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhl
YWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlm
ICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAg
ICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNB
dEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2FsbGVlKCkgPSBTcGVj
RnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgYm9vbCBjb21wdXRlVXNlQ291bnRz
ID0gdHJ1ZTsKKyAgICBtX3VzZUNvdW50cy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBk
byB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0
IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZl
cnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxl
IERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWly
IGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVh
dGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAg
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sg
OiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRp
Y3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoY29tcHV0ZVVz
ZUNvdW50cykKKyAgICAgICAgICAgICAgICBtX3VzZUNvdW50c1tibG9jay5pbmRleCgpXSA9IE9w
ZXJhbmRzPHVuc2lnbmVkLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2Nv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5z
aXplKCksIDApOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFi
bG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggeyBpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkgfTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2NrLmluZGV4
KCldLm9wZXJhbmQob3BlcmFuZCkgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3Vy
cmVudEluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgo
bV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChtX2Nv
ZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGNvbXB1dGVVc2VDb3VudHMgPSBmYWxzZTsKKyAgICB9IHdo
aWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKKyAg
ICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbCgKQEAgLTY3LDcgKzk1NywxMyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJh
dGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK2Jvb2wgSklUOjp1
c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7CisgICAgcmV0dXJuIG1fdXNl
TE9MOworfQorCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxl
VHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJl
dGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUsNiArOTcxLDcgQEAgSklUOjpKSVQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9jYW5CZU9wdGltaXplZChm
YWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgICwgbV91
c2VMT0woY29tcGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxPTCkKIHsKIH0KIApAQCAtMTM3LDEx
ICsxMDM0LDE3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgICAg
ICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBcCiAgICAgTkVYVF9PUENPREUobmFt
ZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCisjZGVmaW5lIERFRklORV9TTE9X
X09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAg
aWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAg
ICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgaWYgKHVzZUxPTCgpICYmIGRzdC5pc1ZhbGlkKCkp
IHtcCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gdHlwZTsgXAorICAgICAgICAg
ICAgICAgIHdpbGxEZWYoZHN0KTsgXAorICAgICAgICAgICAgfSBcCiAgICAgICAgIH0gXAogICAg
ICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7IFwKICAgICB9CkBAIC0xNTYsMjYg
KzEwNTksMzIgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZp
bmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAg
ICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBl
bWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAg
TkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dD
YXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisg
ICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNu
YW1lKTsgXAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUp
OyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0
dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24o
KTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29t
cGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCkBAIC0yMzEsMTcgKzExNDAsODYg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0
ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9u
Q291bnQ7ICkgewotICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Ns
b3dDYXNlcy5zaXplKCk7Ci0gICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRl
Y29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKLSAgICAgICAg
ICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhl
cmUgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkg
Y3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KLSAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Cisg
ICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNp
emUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOwor
ICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChi
bG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxv
Y2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tz
dWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAg
ICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKG1fZGlzYXNz
ZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBh
dGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKLSAgICAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOworICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAg
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jayB8fCBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFkZXJPZmZzZXQo
KSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAgICAgICAgICAgIGlm
IChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGF0IGVuZCBvZiBiYiMi
LCBtX2N1cnJlbnRCbG9jay0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1w
UmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0gPSBXVEZNb3ZlKG1f
Y3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9n
cmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+
aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJlZGVjZXNzb3JzID0g
bV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgICAg
ICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNlc3NvcnNTZXQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVlOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29y
cy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUubWVyZ2UoKm1fc3RhdGVB
dEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFk
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFVz
ZUNvdW50cyA9IFdURk1vdmUobV91c2VDb3VudHNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsK
KyAgICAgICAgICAgICAgICBtX3NwaWxsQ2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0g
bV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0
Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CisgICAg
ICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRp
bCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0
IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3BvaW50KCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIGxhYmVsKCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAg
IEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOwpAQCAtMjc4LDQ2ICsxMjU2LDUzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgfQogI2VuZGlmCiAKKworICAgICAgICBpZiAoZmFsc2UpIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAg
ICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJ
RCkgewotICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGxlc3MpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChpc19jYWxsYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGdldF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRf
d2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcykK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5
KQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0
aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRo
X3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51
bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9TTE9XX09QKGhhc19nZW5lcmljX3Byb3Bl
cnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nKQotICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX3Njb3BlZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9u
ZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1
dHRlcmZseSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdf
cHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRvcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AobmV3X2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocG93KQorICAg
ICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobGVz
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3M+KCkubV9kc3QsIFNwZWNCb29sZWFuKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BM
ZXNzZXE+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChncmVh
dGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKS5tX2RzdCwgU3BlY0Jvb2xl
YW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdyZWF0ZXJlcT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9T
TE9XX09QKGlzX2NhbGxhYmxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxsYWJsZT4o
KS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVj
dG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwgU3Bl
Y0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZiwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFR5cGVvZj4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AodHlwZW9mX2lzX29iamVjdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklz
T2JqZWN0PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodHlw
ZW9mX2lzX2Z1bmN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlv
bj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25t
ZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50Pigp
Lm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92
YWxfd2l0aF90aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4o
KS5tX2RzdCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93
aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9u
ZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0
dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hh
YmxlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09Q
KHRocm93X3N0YXRpY19lcnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5QnVmZmVyPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9X
X09QKHNwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3Bl
Y0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKS5tX2RzdCwg
U3BlY0ludDMyT25seSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVy
dHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCkubV9kc3Qs
IFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVy
YXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5t
X2RzdCwgU3BlY0NlbGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJp
bmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVj
RGlyZWN0QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2Fy
Z3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4o
KS5tX2RzdCwgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX2Nsb25lZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9u
ZWRBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlUmVzdD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfcHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCku
bV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJv
bWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQ
cm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2Jq
ZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3Is
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwg
U3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0
T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFBvdz4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAg
ICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAt
Mzk4LDcgKzEzODMsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09Q
KG9wX3N1cGVyX3NhbXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lm
IENQVShYODZfNjQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBE
RUZJTkVfU0xPV19PUChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3Qs
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5F
X09QKG9wX21vdikKICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09Q
KG9wX25lZ2F0ZSkKQEAgLTQ3OCw2ICsxNDY3LDY2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIH0KIAorICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCkgeworICAgICAgICAgICAgaWYgKCFtX2NoZWNrZWRVc2VMT0wpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgICAgICAgICAgY2FzZSBvcF9jaGVja190
cmFwczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rocm93OgorICAgICAgICAgICAgICAgIGNh
c2Ugb3Bfam1wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWls
X2NhbGw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9w
dXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHk6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dp
dGhfcHJvZmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xf
ZmxvdzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBv
cGNvZGVJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3Vz
ZUxPTCkgeworICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworCisgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkJiBjb3VudGVyID0gbV9jdXJyZW50VXNl
Q291bnRzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgLS1jb3VudGVyOworICAg
ICAgICAgICAgICAgIGlmICghY291bnRlcikgeworICAgICAgICAgICAgICAgICAgICAvLyBPT1BT
OiBEbyB0aGlzIGxhemlseSBpbiBzbG93IHBhdGggY3JlYXRpb24vc3BpbGxGb3JDYWxsCisgICAg
ICAgICAgICAgICAgICAgIC8vbV9zcGlsbENhbmRpZGF0ZXMuYXBwZW5kKG9wZXJhbmQpOworCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIg
PSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdw
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIo
Z3ByKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGZwcik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBmb3Ig
KENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVj
a3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVVzZXNG
b3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9p
bnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgo
bV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xv
d0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNDk4LDYgKzE1NDcsMjAgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogICAgIG1fam1wVGFibGUuY2xlYXIoKTsKIH0K
IAorc3RhdGljIHZvaWQgc2xvd0Nhc2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
S2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKworICAg
IGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsrbWFw
LmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkgPT0g
MCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogewogICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKQEAg
LTUxNiwxNCArMTU3OSwyNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmls
ZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5
dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xv
d0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAg
ICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0
ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGluayh0aGlzKTsKKworICAgICAgICAv
L0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisKKyAgICAgICAgaWYgKGdldGVudigi
cHJpbnRTbG93Q2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSkpIHsKKyAg
ICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG5hbWU7CisgICAgICAgICAgICBtX2NvZGVCbG9j
ay0+ZHVtcChuYW1lKTsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBuYW1lLnRvU3RyaW5nKCkg
KyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsgIiAi
ICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsKKyAgICAgICAg
ICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZVJhbihrZXkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlID0gbnVsbHB0cjsKICAgICAgICAgaWYg
KHNob3VsZEVtaXRQcm9maWxpbmcoKSkKQEAgLTU4MCw3ICsxNjU0LDYgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pu
c3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX25lcSkKQEAgLTU5OSw2ICsxNjcyLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29w
ZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisjaWYg
Q1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2VuZGlm
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGRlYykKQEAgLTYzNSwxNSArMTcxMSwxOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2lu
KCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09
IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0
KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0
ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNl
IGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRf
V0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQo
KSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cg
Y2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShm
aXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYg
KHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhz
IGFscmVhZHkgZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291
bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC02ODgsNiArMTc2Nyw4IEBAIHZvaWQgSklUOjpj
b21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgbV9zaG91bGRFbWl0UHJv
ZmlsaW5nID0gdHJ1ZTsgLy8gT09QUzogaGVscGZ1bCBmb3IgcnVubmluZyBMT0wgdy9vdXQgREZH
LgogICAgIAogICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKICAgICBjYXNl
IEdsb2JhbENvZGU6CkBAIC03NzgsNiArMTg1OSw4OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhv
dXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQ
YXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsK
IAorICAgIGJvb2wgcHJpbnRFYWNoT1NSID0gZ2V0ZW52KCJwcmludEVhY2hPU1IiKSAmJiAhIWF0
b2koZ2V0ZW52KCJwcmludEVhY2hPU1IiKSk7CisKKyAgICBpZiAoIW1fZXhpdEp1bXBzLmlzRW1w
dHkoKSkgeworICAgICAgICBKdW1wTGlzdCBleGl0Q29tbW9uOworICAgICAgICBmb3IgKGF1dG8m
IGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0g
ZXhpdC5maXJzdDsKKyAgICAgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAg
ICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChwcmludEVhY2hPU1Ip
IHsKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwcmludFN0cmVhbTsKKyAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChwcmludFN0cmVhbSk7CisgICAgICAgICAgICAg
ICAgQ1N0cmluZyBzdHIgPSBwcmludFN0cmVhbS50b0NTdHJpbmcoKTsKKyAgICAgICAgICAgICAg
ICBzdHIuYnVmZmVyKCktPnJlZigpOyAvLyBsZWFrIGl0LgorICAgICAgICAgICAgICAgIHByaW50
KHN0ci5kYXRhKCksICIgLT4gZXhpdCBhdCBiYyMiLCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwg
IlxuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRs
ZSBjaGVja3BvaW50IGV4aXRzLgorCisgICAgICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQ
Uik7CisgICAgICAgICAgICBleGl0Q29tbW9uLmFwcGVuZChqdW1wKCkpOworICAgICAgICB9CisK
KyAgICAgICAgQVNTRVJUKCFleGl0Q29tbW9uLmVtcHR5KCkpOworICAgICAgICBleGl0Q29tbW9u
LmxpbmsodGhpcyk7CisKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSID09IHJlZ1Q0KTsKKyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkuY29udGFpbnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVs
b3cgcmVsaWVzIG9uIHRoaXMgYmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNp
bmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5v
bkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0
ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291
bnRlcigpKSwgcmVnVDIpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsK
KyAgICAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zk9TUkV4aXRDb3VudGVyKCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5j
aDMyKEJlbG93LCByZWdUMiwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJl
c2hvbGRGb3JSZW9wdGltaXphdGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIsIG51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2Fs
bCBzaW5jZSB0aGUgTExJbnQgUEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPiht
X2NvZGVCbG9jayk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAgICAg
Y2FsbChub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJlclRh
Z1JlZ2lzdGVyLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAg
c2tpcEpldHRpc29uLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6
ZU5vdyA9IGppdC5icmFuY2gzMigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVh
dGVyVGhhbk9yRXF1YWwsCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAor
ICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJ
bnQ6Om5vcm1hbE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhp
dFB0clRhZz4oKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2tw
b2ludE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAg
ICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVU
aHVuaygpLmNvZGUoKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRh
VGFibGVHUFIpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFIpOworICAgICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5h
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJK
dW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6
IAorICAgICAgICAvLyAxLiBTdG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAg
ICAgICAvLyAyLiBqZXR0aXNvbiBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8g
My4gd3JpdGUgYmFycmllciBMTEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVy
Zmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIxMzAs
NyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8SlNF
bnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIs
IEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NT
dHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBl
OjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92
bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAg
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIx
NDEsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9j
ay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmsp
OwogICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYo
Km5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNl
bGluZUpJVCkpKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0
YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVC
bG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIs
NiArMjIzNSw5NTEgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJl
dHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90
YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAg
anVtcCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRK
dW1wcy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRl
eCkKKyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlz
dCgpIH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1ZlY3RvcjxSZWcsIDMyPiBjb21wdXRlQWxsb3dl
ZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdl
IGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUg
aW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBs
aWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKwor
ICAgIFZlY3RvcjxSZWcsIDMyPiBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
OworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIo
aSk7CisgICAgICAgIGlmIChhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAg
ICAgICAgIGFsbG93ZWQuYXBwZW5kKHJlZyk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVn
ID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250
YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAg
cmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRHUFJz
KCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxv
Y2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0
aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2Ug
dGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5
LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUklu
Zm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBW
ZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0
ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9y
ICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBu
ZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29y
dGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7
CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1
Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiBy
ZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAv
LyBPT1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJh
bGx5IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhp
bmcgb3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMu
bGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNI
KCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAg
ICAgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJl
Zy5ncHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0Fs
bG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBh
dXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFs
dWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAg
ICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5n
cHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJl
Z1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAg
ICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9i
YmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZh
bGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5v
cGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlm
IChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVy
YW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQv
bG9ja0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0
aGF0IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGls
bEZvckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVy
YW5kLCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJl
Z2lzdGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8v
IE90aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCks
IHdlJ2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAg
ICAgcmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFs
c2U7CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBS
ZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAo
YXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMo
cmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAg
fTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dl
ZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAg
Ly8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7
CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVu
VHlwZShyZWdWYWx1ZS5vcGVyYW5kKSkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxs
QmVmb3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUsIEZQUlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAv
LyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3Jk
IHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVk
ID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFs
dWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAg
ICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0
LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBw
cm92ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAo
cmVnLmZwcigpICE9IHRvSWdub3JlRlBSKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVn
KTsKKyAgICB9CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBp
ZiAocmVnLmdwcigpICE9IHRvSWdub3JlKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVn
KTsKKyAgICB9CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3Vs
dC5zcGlsbGVkUmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJ
VDo6c2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQor
eworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoKnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFj
a1NpemVGb3JTcGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRD
b3VudCh1aW50NjRfdCBjb3VudCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAg
ICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICArK2NvdW50
ZXI7CisgICAgICAgIGlmIChjb3VudGVyICUgMTAwMDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFM
b2dMbigiUnVudGltZSBsb2FkIGNvdW50OiAiLCBjb3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQg
SklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2
NF90IGxvYWRDb3VudCA9IDA7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7Cisg
ICAgICAgIFJlZyByZWcgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gc3RkOjpnZXQ8MT4odHVwbGUpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcm92ZW5UeXBlID0gc3RkOjpnZXQ8Mj4odHVwbGUpOworCisgICAgICAgIGlmIChyZWcgPT0g
cmVnVG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQg
PT0gb3BlcmFuZFRvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
LCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNG
UFIoKSk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOwor
ICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAg
ICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0
Y2goKnRoaXMpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkp
CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigp
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKSkKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCBy
ZWcuZnByKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc0lu
dDMyID0gYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lz
dGVycyk7CisKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCBy
ZWcuZnByKCkpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworCisgICAgICAgICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsb2FkQ291
bnQ7CisgICAgfQorCisgICAgaWYgKGZhbHNlICYmIGxvYWRDb3VudCkgeworICAgICAgICBwcm9i
ZShbPV0gKFByb2JlOjpDb250ZXh0JikgeworICAgICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRD
b3VudCk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZy
b21TYXZlUGxhbihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBs
YW4pOworfQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyBncHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUg
emVyb2QKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOwor
ICAgIGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7
CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihv
cGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpID0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAg
IEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJl
Z3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NG
b3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUg
dGhhdCBmb3IgYnl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMg
Y2FsbGVkLgorICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIs
IG9wZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJs
ZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRl
ZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYo
b3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjps
b2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1Zh
bHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0Nv
dW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tD
b3VudCAmJiAhcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0g
eyB9OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQor
ICAgIDogbV9qaXQoaml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50
KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9n
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJu
IG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOwor
fQorCitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7
Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2pp
dC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+
RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7
CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMy
T3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChq
aXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9n
cHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBp
ZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAg
ICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dw
cikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklU
JiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwg
bV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdw
cigpOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQorewor
ICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQu
YWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0g
bV9ncHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5k
OworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVj
dWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0
ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7
CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgp
Cit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9w
ZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWco
bV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAg
ICBpZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2
ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVj
Q2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpW
YWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9q
aXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1f
aml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFu
ZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVP
cGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBH
UFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcg
IT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNz
aWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIp
OworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVy
YW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFu
ZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAg
ICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAg
ICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOwor
ICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9q
aXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVn
IGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayht
X2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMp
KTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91
YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUp
OworICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOwor
ICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2Zw
cjsKK30KKworSklUOjpOdW1iZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKwor
SklUOjpOdW1iZXJPcGVyYW5kOjp+TnVtYmVyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBp
ZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0g
bV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFs
aWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQu
bG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9Owor
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0g
bV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChp
c0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAg
bV9qaXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlm
IChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQp
KSkgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIs
IHRlbXBHUFIsIG1fZnByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBt
X2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1
dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9
LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQu
c3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihK
U1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9q
aXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBk
b25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAg
ICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2Zwciwg
bV9vcGVyYW5kKTsKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5n
T3BlcmFuZDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sK
KyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlm
IChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJD
b252ZXJ0aW5nT3BlcmFuZDo6fkludDMyQ29udmVydGluZ09wZXJhbmQoKQoreworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChtX2pp
dC5zaG91bGRTcGVjdWxhdGVJbnQzMihtX29wZXJhbmQpKSB7CisgICAgICAgIEludDMyT3BlcmFu
ZCBvcCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAg
ICAgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVj
dWxhdGVOdW1iZXIobV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVy
YW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBt
X2ppdCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBh
dXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpT
VmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgICAgIG1f
aml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyAgICAgICAgSnVtcExpc3Qg
ZG9uZTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0Ojpz
dXBwb3J0c0RvdWJsZVRvSW50MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkp
IHsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0
U2VtYW50aWNzKGZwciwgbV9ncHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVt
cCgpKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9u
ZS5hcHBlbmQobV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJy
YW5jaElmVHJ1bmNhdGVTdWNjZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3Jk
ID0gbV9qaXQuc2lsZW50U3BpbGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAg
bV9qaXQuY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNp
YmxlRG91YmxlVG9JbnQoKSA/IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRp
b25Ub0ludDMyLCBtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRl
ckNhbGwoc3BpbGxSZWNvcmQpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBt
X2ppdC5tb3ZlKHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJl
cik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFu
ZCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJh
bmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisg
ICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayht
X2dwcik7CisKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQsIHZhbHVl
R1BSKTsKKworICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBt
X2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVPdGhlcihtX29wZXJh
bmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVy
YW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKwor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgICAgIG1faml0LnNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCwgdmFsdWVH
UFIpOworCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29w
ZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOwor
CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9j
ayhtX2dwcik7CisKKyAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAg
RlBSUmVnIGZwciA9IHRlbXBGUFIuZnByKCk7CisKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKwor
ICAgICAgICBhdXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gbm90RG91YmxlID0g
bV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFs
dWVHUFIsIG1fZ3ByLCBmcHIpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNz
ZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3Jp
cHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJV
c2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7Cisg
ICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIo
ZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1
dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7
CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9u
Q2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxl
U2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQu
c2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgbm90RG91YmxlLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgYXV0byBub3RPdGhlciA9IG1faml0LmJyYW5jaElmTm90T3RoZXIoSlNW
YWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCBtX2dwcik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisK
KyAgICAgICAgbm90T3RoZXIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RCb29sZWFuKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgbV9ncHIpKTsKKyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQ
UiwgbV9ncHIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAg
IGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQo
dmFsdWVHUFIsIG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAg
ICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090
aGVyIHwgU3BlY0Jvb2xlYW4pOworICAgIH0KKworICAgIHJldHVybiBtX2dwcjsKK30KKworUmVn
aXN0ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lz
dGVyU2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsK
KworICAgIGF1dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQo
cmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJp
bmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBp
ZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0
ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQorewor
ICAgIGlmICghaXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7Cisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQorewor
ICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RCb29sZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3Mg
eyB2YWx1ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gU3BlY090aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3RPYmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNP
YmplY3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY0NlbGxDaGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAg
cmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0lu
dDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxz
ZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVz
ZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAg
ICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNI
ZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhl
YXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVh
cEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50
MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5v
dEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAg
ICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpy
ZXNldEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCks
IFNwZWNCeXRlY29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVu
dFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9j
dXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1
ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkp
KTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlv
bjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVn
LCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRS
ZWcoKSk7CisgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJ
VDo6UmVnVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIigiLCBvcGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpk
dW1wUmVnYWxsb2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBb
Iik7CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJl
Z1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7Cisg
ICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAg
aWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0
Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3MDc4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEz
ICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5j
bHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVk
ZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0g
T3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7
CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7
CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFz
cyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87
Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYs
IEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0
byh0KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFs
UmVnaXN0ZXIsIFNwZWN1bGF0ZWRUeXBlPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNv
cmQgeworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3Bp
bGxlZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAg
fTsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1
bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNr
cG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAg
ICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBz
eXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0Owor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVu
dHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBj
b252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Nyw2
ICsyMTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5l
d0NhbGxlZUZ1bmN0aW9uKTsKIAogICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDog
cHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFj
ZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBm
cmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAg
IHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsK
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9
IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSBy
ZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIK
LSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5v
dCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgot
ICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVt
IGNsYXNzIENvbXBpbGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAg
TE9MCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBD
b21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5
dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyBy
ZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAg
IHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAot
ICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBp
bGVUeXBlIGNvbXBpbGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRl
Q29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBj
b21waWxlVHlwZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2
bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGls
ZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlN
b2RlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURp
cmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwy
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwor
ICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUp
OwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElk
PE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRo
Q2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9j
ayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNl
bGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAg
ICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklU
IGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1f
dXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQor
ICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIo
UmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAg
ICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVy
SW1wbChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdp
dGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIz
LDkgKzM1MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChKdW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lk
IGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRT
bG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7
IH0pOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3Vs
dCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2Um
IGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAg
ICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1
bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQp
OwpAQCAtMzMzLDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAg
ICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9
IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9p
ZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAK
QEAgLTM2MCw3ICszOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21w
aWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xv
dyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQg
anVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYs
IENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFu
ZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVt
IFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0
ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBA
IC01MDgsOCArNTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUz
Ml82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7
Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxD
b25kaXRpb24pOwpAQCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJh
dGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERv
dWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlv
biopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51
bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlv
biopOwpAQCAtNTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9i
ZWdpbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2Ft
cGxlcl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlm
dChjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1p
dF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRf
b3BfbW92KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiopOwpAQCAtNjc4LDc4ICs3MjEsODEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9u
Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxs
ZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3Jl
YXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lk
IGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZv
aWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2
b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9p
ZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0g
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0g
SW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1p
dEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZv
aWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJl
Zyk7CkBAIC03NjQsOCArODEwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0
UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVt
aXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJ
bnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAK
ICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAg
LTc3OCwzOCArODIyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRo
SUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQ
cm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hG
dW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24s
IFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmls
ZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbios
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rp
b24pOwotCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJv
bTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+
ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAg
ICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dD
YXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRl
cjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2
b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5
PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB2b2lkIGVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24s
IFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
cyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2Rl
SW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8g
T09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JC
eXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAg
ICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTg5MSw2ICs5
MTUsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2so
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAg
ICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4u
Lik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgIGF1dG8g
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAgICAgfQorCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5k
Tm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwg
QXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVy
YXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwor
ICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBjYWxs
OworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRz
PE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwpAQCAtOTAyLDYgKzk0Niw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgTm9Qcm9maWxpbmcKICAgICAgICAgfTsKIAorICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgYm9vbCB0cnlFbWl0TE9MQml0RmFzdFBhdGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CiAgICAgICAgIHZvaWQgZW1p
dEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUHJvZmlsaW5nUG9saWN5IHNob3VsZEVtaXRQcm9maWxpbmcgPSBQcm9maWxpbmdQb2xpY3k6
Ok5vUHJvZmlsaW5nKTsKIApAQCAtOTYxLDYgKzEwMDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRp
ZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZv
aWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0
YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21w
dXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTcxLDYgKzEwMjEsMjkyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAg
QmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAg
ICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAo
SklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1w
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
R1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYp
OworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJS
ZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3Mg
SW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJh
bmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFy
ZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQs
IG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7
CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQo
SklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5k
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAg
ICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQ
UlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3Vi
bGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52
YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAg
ICAgICAgfTsKKworICAgICAgICBjbGFzcyBOdW1iZXJPcGVyYW5kIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgTnVtYmVyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCk7CisgICAgICAgICAgICB+TnVtYmVyT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZw
cigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAg
ICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU3BlY3VsYXRlIG51
bWJlcitib29sZWFuK290aGVyLCBhbmQgY29udmVydCB0byBpMzIuIFVzZWZ1bCBmb3IgYml0b3Bz
LgorICAgICAgICBjbGFzcyBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIHsgCisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyQ29udmVydGluZ09wZXJhbmQoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMu
b3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQor
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2st
PmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBn
cHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCku
Z3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50
U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAg
ICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdG
b3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiBy
ZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50
U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVn
VmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJl
Z1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgd2lsbERl
ZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFt
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAg
ICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUFJSZWcmIGZwciA9IGZwckZv
ck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBS
UmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IFZpcnR1
YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnVmFsdWUoZ3ByKS5vcGVyYW5kLmlz
VmFsaWQoKSk7CisKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7Cisg
ICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJh
bmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghcmVnVmFsdWUoZnByKS5vcGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGZwckZv
ck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJh
bmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3Vy
cmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
Qnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIg
fCBTcGVjQm9vbGVhbik7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZv
cihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3Ro
ZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29s
IHVzZUxPTCgpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxh
dGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7Cisg
ICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3Ro
ZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQg
c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhp
dEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBt
b3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxv
Y2F0ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxs
b2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJl
Zyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAg
ICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzog
TWFrZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQg
dG8gc2V0IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2so
UmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxl
bnRTcGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlID0gSW52
YWxpZEdQUlJlZywgRlBSUmVnIHRvSWdub3JlRlBSID0gSW52YWxpZEZQUlJlZyk7CisgICAgICAg
IHZvaWQgc2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAg
ICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdp
c3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnBy
ZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4gbV9m
YXJDYWxsczsKQEAgLTk5MCw3ICsxMzI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5
dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsK
KyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAg
VmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2ln
bmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTEwMjcsNiArMTM2Myw4NyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVk
OwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9j
ZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFu
IHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0
aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAg
ICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVy
Z2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAg
ICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9Owor
ICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZv
aWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAg
fHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBp
c0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRo
aXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3Jt
YXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAg
ICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVy
YW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZv
aWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVn
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5k
VG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5t
ZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHBy
b3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJv
dmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFT
U0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ld
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3Vy
cmVudFN0YXRlOworCisgICAgICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisg
ICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBt
X2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBWZWN0
b3I8T3BlcmFuZHM8dW5zaWduZWQsIHRydWU+PiBtX3VzZUNvdW50czsKKyAgICAgICAgT3BlcmFu
ZHM8dW5zaWduZWQsIHRydWU+IG1fY3VycmVudFVzZUNvdW50czsKKyAgICAgICAgVmVjdG9yPFZp
cnR1YWxSZWdpc3RlciwgMTY+IG1fc3BpbGxDYW5kaWRhdGVzOworCisgICAgICAgIFZlY3RvcjxM
b2dFbnRyeT4gbV9leGl0TG9nOworCisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3Rh
dGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3By
ZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAg
Ym9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpwYWly
PEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDg2ICs0Miw4OCBAQAogI2lu
Y2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAorI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
biwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJU
aGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNz
VGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhh
bk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNz
RXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNz
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5v
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVh
bE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
LCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5n
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTUxLDMyICsxNTMsOTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5z
dHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWdu
ZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwg
VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIHJlc3Vs
dCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAg
ICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
LCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
biwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0
ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgog
ICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8g
LSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBp
bW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChzaG91bGRTcGVj
dWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgfHwgIXByZWRp
Y3Rpb25Gb3Iob3AxKSB8fCAhcHJlZGljdGlvbkZvcihvcDIpKSB7CisgICAgICAgICAgICBOdW1i
ZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91
YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
LmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BS
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxv
Y2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yMjksMTcgKzI5MCw0MyBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvCiAKIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJo
c1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxo
c0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNw
ZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdU
MDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAg
ICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9w
MikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQ
UiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQ
Uik7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAg
ICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1t
MzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9u
LCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21t
dXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1t
KSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29u
ZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgICAgICBnZXRMSFMoKTsKKyAgICAg
ICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBAIC0yNTUsNDMgKzM0Miw4OSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7
CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9
IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQz
Mk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9
CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAg
cmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0g
U3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJl
Z1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDAp
OworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIElt
bTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BS
LCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDApOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9u
KSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbW11
dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pLCByZXN1bHRHUFIpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwg
cmVnVDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBjb21wYXJl
MzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKICAgICB9Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZl
cnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3Ry
dWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlv
bi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9u
IGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50
IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQg
aW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9p
bnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxKTsKQEAgLTMwMCw4ICs0MzMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5v
dE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDApOwpAQCAtMzI2LDggKzQ1Nyw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
CkBAIC0zNTEsMTIgKzQ4MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7
CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAg
IEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFp
bDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElm
SW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0
KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs0OTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwy
LmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0Lmxp
bmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90
IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1MDksNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5j
KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5t
X3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMy
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMy
T3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUg
YWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQ
UlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAu
ZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZw
cik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAg
ICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAg
ICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRk
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAg
ICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MS4wOworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5w
dXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAg
ICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAg
ICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0
KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEp
LCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdz
IHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRl
Y29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNTYzLDYyIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2Zp
bGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJ
bnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBS
LCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3Qs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0Fu
eUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5w
dXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBv
bmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRl
bXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQ
Uik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJUZW1w
IHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnBy
KCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGxvYWREb3VibGUo
VHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICBzdWJEb3VibGUoaW5w
dXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3Qs
IGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNv
bWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAg
ICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzYyOCwxMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNv
ZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKChzaG91bGRTcGVj
dWxhdGVEb3VibGUobGhzKSB8fCBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgJiYgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAg
ICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9
IHJoc1RlbXAuZnByKCk7CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJl
c3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhNYXRoOjpmbW9kRG91YmxlLCByZXN1bHRGUFIs
IGxoc0ZQUiwgcmhzRlBSKTsKKworICAgICAgICAgICAgc2V0RG91YmxlKGRzdCwgcmVzdWx0RlBS
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIE1ha2Ug
c3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAg
ICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2
UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBh
dXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwog
ICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVy
KGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4
VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMs
IGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigp
OworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhU
ZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIo
KSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gp
OworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVt
cC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFtZSwgbGlrZSBzcGlsbEV4cGVjdGluZ1Nsb3dQYXRo
CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBs
aHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92
ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAg
ICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5v
bWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigt
MjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRy
dXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5r
KHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVj
eCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2
ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0
b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Ci19Ci0KLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
bW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQorICAgIGJveEludDMyKGVkeCwgSlNW
YWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJF
QUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlm
IC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArNzQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUg
PHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25k
aXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50
MzJPcDI7CkBAIC00NzQsNiArNzUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
Y29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1Qw
KTsKQEAgLTU2MiwxNSArODQwLDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChj
b25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0
aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
ICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVy
dCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICsxMDAwLDY2IEBA
IHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElD
RmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
TmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0
aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUg
YmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVy
YW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1p
emUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRo
TmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+Citib29sIEpJVDo6dHJ5RW1pdExPTEJpdEZhc3RQ
YXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKKworICAgIGF1dG8gYml0T3AgPSBbJl0gKEdQUlJlZyBsaHNHUFIsIEdQUlJlZyBy
aHNHUFIpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0YW5kPikKKyAgICAgICAgICAgIGFuZDMyKGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8T3AsIE9wQml0b3I+KQorICAgICAgICAgICAgb3IzMihsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9w
LCBPcEJpdHhvcj4pCisgICAgICAgICAgICB4b3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcExzaGlm
dD4pCisgICAgICAgICAgICBsc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFVyc2hpZnQ+KQor
ICAgICAgICAgICAgdXJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wUnNoaWZ0PikKKyAgICAg
ICAgICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHNl
dEludDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICB9OworCisgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJo
c0dQUik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMkNvbnZlcnRpbmcob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRp
bmcob3AyKSkgeworICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQxLDE3
ICsxMDcwLDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50
SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0
T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBAIC03NjAsMzMgKzEw
ODAsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAg
ICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7
CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRP
cGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwotCiAgICAg
UkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBs
ZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hU
ZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEp
OworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNl
bmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBT
bmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdz
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBn
ZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9m
aWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVn
cy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3Mu
Z3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEp
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0
KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
cmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCBy
ZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIo
cmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0lu
dDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzExOTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRu
b3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxl
ZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwg
bGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtODQ5LDE5ICsxMjQyLDggQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0
RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgorICAg
IGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAg
ICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTg3MywyMSArMTI1NSw3NyBAQCB2b2lkIEpJVDo6
ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVm
dE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0g
SW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21l
IGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAt
PmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5n
cHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5n
cHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAg
ICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKwor
ICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5k
LmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIg
PSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAo
IWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBK
SVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BS
LCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2Ny
YXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7
CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Ay
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50Owor
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAot
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTkwMiwxOCArMTM0MCw2NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3Ry
dWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhz
RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNG
UFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIo
KSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigp
LCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91
YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3cs
IHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAg
ICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1i
ZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAg
ICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJl
c3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIsIHJo
c0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRk
SUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBK
SVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9N
YXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1p
emUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUgKzE0MTAsMzUg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lz
dGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVz
aW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGgu
Ci0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVy
IGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1
c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRo
LgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQog
I2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQpAQCAtOTQxLDE5ICsxNDQ3LDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRV
bmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0
UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52
YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJ
bmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJ
bmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAg
ICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2Ug
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3By
KCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5n
cHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlu
bGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTQ3MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBp
ZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2Rl
TnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51
bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwg
dHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3NCwzOSArMTQ5MCw4MiBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRl
Y29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8
fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7
Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAg
IEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4g
cmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBS
ZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmln
aHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0
YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywg
b3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRW
YWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBs
YWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBy
aWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRD
b25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIp
KQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdo
dFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7Cisg
ICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSBy
aWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVm
dEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVB
U0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
bGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25z
dGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVy
YXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmln
aHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBt
YXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQs
IHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVm
dE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5l
cmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRv
cjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhf
SUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEw
MTUsMTcgKzE1NzQsMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJ
QwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGlu
ZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGlu
ZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYg
KHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgbGVmdFRlbXAu
ZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhp
cywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25z
dCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAg
ICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3Vs
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAg
ICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAg
ICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxh
YmVsKCk7CkBAIC0xMDM1LDExICsxNjExLDIwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQor
ICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJv
dmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5j
dGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0
aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQ
cm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNo
RnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3Rh
dGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCArMTYzMyw4IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7CkBAIC0xMDg1LDcgKzE2NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmls
ZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
QmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9u
IHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElD
R2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwxNiAr
MTY4MCw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRP
cGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNSwxNSAr
MTY5MCwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAg
ICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVy
YW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJh
bmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
cmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9y
Ojppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/
IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJh
bmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdU
MCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYK
IAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVy
YW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAg
ICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9w
ZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsK
KwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRj
aCkKQEAgLTExNTYsMjMgKzE3NTIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qy
OwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsK
LSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYyICsxNzY3LDIz
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNl
dENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5k
LmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAg
IEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4g
cmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRl
bXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1w
LT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1w
LT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAg
ICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIg
PSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnBy
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAg
cmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAg
ICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
KyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBm
cFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAog
ICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2Ny
YXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmln
aHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3By
KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRK
dW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3Qo
KS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2
KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
MiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkg
PSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsK
KworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygp
IHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAg
ICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisgICAgICAgICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzR1BSLCBsaHNGUFIpOworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQUiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAg
ICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAg
c2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihCZWxvdywgbGhzR1BSLCBUcnVzdGVkSW1t
MzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVy
bywgYnJhbmNoMzIoQmVsb3csIHJoc0dQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnBy
KCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIg
PSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJ
QyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMq
IG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAg
ICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNl
cnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3Vs
dEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9k
c3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwg
cmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVt
YmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCks
IHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1
YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
SklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRv
TWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1
Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9w
dGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGlt
aXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUws
IE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
MTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQo
Y29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
ZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZp
cnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1
LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZh
bD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6
ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsK
KwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9
IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
CkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3Qg
SW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9u
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwg
aXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRl
Y29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQs
IGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1
YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9j
IHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihO
b3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwz
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2Fs
bCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNs
b3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2xvd0Nhc2Uu
anVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisKICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQ
UlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNv
ZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0K
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmso
dGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBu
b3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwo
KTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2
ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3Bv
aW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5l
cmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMzcgKzQ5OSw0NCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1
ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9p
bnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2
ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAg
ICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRS
ZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJl
Z2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJl
c2VydmVkUmVncywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmlt
cGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9u
ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIHNsb3dDYXNlLmp1
bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAgICB3aWxsRGVmKGJ5
dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9u
ZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQog
Ci0KICAgICB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgICAgICBHUFJS
ZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9u
ZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2
YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xv
d1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBz
LmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNW
YWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX3ZhbHVl
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BS
KTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2Fz
ZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
TmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3Bv
aW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRl
cmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0
ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFd
LmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3
ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAg
fQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBz
bG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIg
PSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRDb2RlOjp0eXBlTmFtZShKSVRUeXBlIGppCiAgICAg
ICAgIHJldHVybiAiTExJbnQiOwogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAg
ICAgIHJldHVybiAiQmFzZWxpbmUiOworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAg
ICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVy
biAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwOCw3ICsxMTAsNyBAQCBK
SVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29kZVJlZihDCiAKIEpJVENvZGVXaXRoQ29k
ZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZigpCiB7Ci0gICAgaWYgKChPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSB8fCAoaXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVt
cERGR0Rpc2Fzc2VtYmx5KCkpKQorICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkg
fHwgKGlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHko
KSkpCiAgICAgICAgICYmIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSkKICAgICAgICAgZGF0YUxv
ZygiRGVzdHJveWluZyBKSVQgY29kZSBhdCAiLCBwb2ludGVyRHVtcChtX3JlZi5leGVjdXRhYmxl
TWVtb3J5KCkpLCAiXG4iKTsKIH0KQEAgLTIzNyw2ICsyMzksMTEgQEAgTmF0aXZlRE9NSklUQ29k
ZTo6TmF0aXZlRE9NSklUQ29kZShDb2RlUgogI2lmIEVOQUJMRShKSVQpCiBSZWdpc3RlclNldCBK
SVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0
ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KQogeworICAgIC8vIEZvciBCYXNlbGluZSBKSVQs
IHRoaXMgaXMgdHJpdmlhbGx5IHRydWUuCisgICAgLy8gRm9yIExPTCBKSVQsIGV2ZXJ5dGhpbmcg
aXMgYWxyZWFkeSBzcGlsbGVkIHRvIHRoZSBzdGFjayBhdCBlYWNoIG9wY29kZSwgc28gd2hlbiB3
ZQorICAgIC8vIGdvIHRvIHRoZSBvcF9jYXRjaCwgdGhlIGxpdmUgc3RhdGUgbXVzdCBhbHJlYWR5
IGJlIGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUgc3RhY2suCisgICAgLy8gQWxzbywgb3BfY2F0
Y2ggaGFzIG5vIGluY29taW5nIHJlZ2lzdGVyL3R5cGUgcHJvb2Ygc3RhdGUsIHNvIGl0J3MgdHJp
dmlhbCB0byBjYXRjaAorICAgIC8vIGFuIGV4Y2VwdGlvbiBpbiBMT0wganVzdCBieSBqdW1waW5n
IHRvIG9wX2NhdGNoLgogICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBl
bnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90IHsKICAgICBIb3N0Q2FsbFRodW5rLAogICAgIElu
dGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxpbmVKSVQsCisgICAgTE9MSklULAogICAgIERGR0pJ
VCwKICAgICBGVExKSVQKIH07CkBAIC02NywzNiArNjgsMjMgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJVFR5cGUpOwogCi0gICAgc3RhdGljIEpJVFR5cGUg
Ym90dG9tVGllckpJVCgpCi0gICAgewotICAgICAgICByZXR1cm4gSklUVHlwZTo6QmFzZWxpbmVK
SVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBKSVRUeXBlIHRvcFRpZXJKSVQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAg
ICAgICAgICByZXR1cm4gSklUVHlwZTo6REZHSklUOwotICAgICAgICBjYXNlIEpJVFR5cGU6OkRG
R0pJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpGVExKSVQ7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgc3Rh
dGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0KEpJVFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVy
VGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNl
IEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAg
ICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklU
OgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTExNiw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlw
ZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMTI0LDYgKzExNywyNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoSklUVHlwZSBq
aXRUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgSklU
VHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICBzdGF0aWMgYm9vbCBpc0xvd2VyVGllcihKSVRUeXBlIGV4
cGVjdGVkTG93ZXIsIEpJVFR5cGUgZXhwZWN0ZWRIaWdoZXIpCiAgICAgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc0V4ZWN1dGFibGVTY3JpcHQoZXhwZWN0ZWRMb3dlcikpOwpAQCAtMTQ1LDkg
KzE1NiwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRp
ZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRIaWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBi
b29sIHVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRU
eXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAog
ICAgIHN0YXRpYyBib29sIGlzT3B0aW1pemluZ0pJVChKSVRUeXBlIGppdFR5cGUpCiAgICAgewor
ICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBK
SVRUeXBlOjpGVExKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNERkdPckZUTChKSVRUeXBlIGppdFR5cGUpCisgICAgewogICAgICAg
ICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBl
OjpGVExKSVQ7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3
IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSogY2EKICAgICAgICAgLy8g
d2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5
IG1lYW5pbmdsZXNzCiAgICAgICAgIC8vIGFuZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBl
eGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdldAogICAgICAgICAvLyBpbiB0aGUg
cHJvcGVyIGZyYW1lLgotICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoIUpJVENvZGU6Omlz
REZHT3JGVEwoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkKICAgICAgICAgICAg
IGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0
aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAg
ICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
ZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlz
IG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0
YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQg
c28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8g
dGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xNjcsMjUgKzE2OSw2IEBAIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNG
b3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09
IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYg
c2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgp
ICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MCwz
NiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5s
aW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3Vy
ZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJU
KG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBk
dXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBp
cyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5
dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Ns
b3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAg
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3Vz
ZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRo
U2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEh
cmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAg
ICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMu
bGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9z
bG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRT
bG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5q
dW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBt
X2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNb
MF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYg
anVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJU
KG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBk
dXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBp
cyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRv
IG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDog
anVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXAp
OwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJl
bGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICszOTgsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBK
SVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFz
RG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5l
ZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lz
dGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJl
dmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAg
ICAgfTsKIAotICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRF
bWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkp
OwogCiAgICAgICAgIGlmIChtX2dlbmVyYXRlRmFzdFBhdGhPblJlcGF0Y2gpIHsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3Rv
bT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxv
Zy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
QEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlv
bioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2Fu
IGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2Ug
ZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3By
Rm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBA
IC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9u
U2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCpt
X3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFs
bG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOwor
ICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJS
ZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3Vs
dFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVn
VDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9j
YXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBi
dXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJl
c3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBw
cm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0
ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25z
dHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2Rl
Lm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNv
bnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisg
ICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAg
ICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIg
PSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3Rh
bmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1
Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOwor
ICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJ
bnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFu
Y2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwog
CiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVu
Y3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2Up
LCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7
CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSBy
ZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBh
IGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0lu
c3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdU
MCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8g
cHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlv
bmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1Rl
bXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVt
cCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcg
dmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFU
ZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7
CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIg
PSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVl
VGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3By
KCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAg
IH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAor
ICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNj
cmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNl
VmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAg
ICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0
aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBp
cyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAg
ICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNj
cmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107
CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNl
R1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikK
QEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IElu
c3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBl
b2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0g
ICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1
ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwg
PSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEs
MTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
TnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9v
bGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0g
ICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NCha
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29s
ZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
Qm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgor
ICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5w
dXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI4LDU2IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMy
VGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBh
bmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7
Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2
NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNF
KEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENl
bGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4
ICs2NDMsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2
YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAg
ICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0
aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2
OSwxNSArNzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1t
LmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1t
LmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTM4Niw1MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5j
aElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBp
c1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0
byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsK
KyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlv
bk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJv
b2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIo
WmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5s
aW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0
Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29s
ZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBs
b3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVz
cGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdo
aWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsK
KworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVl
IHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAg
Ly8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9y
IGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52
ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGlu
LCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdU
MCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpm
YWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRp
dGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZh
bHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BS
ID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3Jh
dGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEu
ZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7
IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0
Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZw
UmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBj
YXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZw
U2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRo
aXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24s
IHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisg
ICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVu
ZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAg
ICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKwor
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFs
T2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBj
YXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5n
cHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
LQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0LDI2IEBAIHZvaWQgSklUOjplbWl0X29w
X2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNTE1LDY1ICsxMTY1LDM0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25z
dCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVj
aWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVk
SW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAg
ICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0
ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRv
IGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJl
ID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5
cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNF
cSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3Ry
aW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAg
ICAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNH
UFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQo
cmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNG
UFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVt
YmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1w
LmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAg
Y29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAg
SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihy
aHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUu
bV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNv
bnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFs
QW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVl
c0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAg
ICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhz
LCByaHNHUFIpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
VGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNG
UFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpl
bWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4o
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0
aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSBy
ZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAg
ICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQ
UlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5v
dEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhz
R1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRh
cmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNH
UFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCBy
aHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFr
ZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0
dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdl
dCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdU
MTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBs
YW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE1MTYsMTc4IEBAIHZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBs
aHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUu
bV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFy
ZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlz
RXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOwor
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChw
cm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVj
dChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhy
aHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhz
R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURv
dWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJs
ZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJs
ZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBj
YXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CiAKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7
Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAg
IGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAg
ICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICov
Ci0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhh
dCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFu
Y2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJ
bnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2
aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBh
bGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2
aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigx
KSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9u
WmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xv
dyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRz
KS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBz
b21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChm
YWxzZSk7CisjZWxzZQorICAgICAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxz
ICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgICAgIG1vdmUobGhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgb3I2NChyaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVzdWx0R1BSKSk7CisKKyAgICAgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEg
ZG91YmxlLgorICAgICAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgSnVtcCByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisKKyAgICAgICAg
ICAgIGlmIChpc0VxKQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29t
cGFyZTY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyNlbmRp
ZgorICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02
NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxo
cywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBB
dCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Cisg
ICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAg
ICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0
IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7Cisg
ICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAg
ICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291
bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZO
dW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIElu
dDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZp
bmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBh
dCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAg
ICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwor
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChy
ZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1Qx
LCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdU
NSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cyku
CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwg
d2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lO
VDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5n
cykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0
aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMg
ZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAg
ICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlz
KTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0g
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQot
ICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAj
ZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE3MDUsMTY0IEBAIHZvaWQg
SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAg
ICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0
byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1
YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNH
UFIpOworCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIg
aGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIp
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikp
OworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1w
LmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNG
UFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAg
IE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNG
UFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAu
ZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQ
UiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBh
IGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAg
SWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQ
YXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYg
KGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0g
ICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMg
dGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdp
bGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJ
ZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkg
aGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwg
MTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUp
OwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdU
Myk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUp
KTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsK
LSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAg
ICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJp
bmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1F
OiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBC
aWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3Ry
aW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAg
c3RhdGljX2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBtb3ZlKGxoc0dQUiwgdGVt
cEdQUik7CisgICAgICAgICAgICBvcjY0KHJoc0dQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwodGVtcEdQUikpOworCisgICAgICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBh
IGRvdWJsZS4KKyAgICAgICAgICAgIGF1dG8gbGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAg
ICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJoc0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAg
ICAgaWYgKGlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyNl
bmRpZgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0
byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJp
Z2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8
IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8g
bm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBp
dHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
bW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAg
IEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAg
IGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIp
OworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292
ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxl
c3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGgg
aWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAg
ICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lO
VDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5n
cykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hp
Y2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgor
ICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlz
KTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGlu
ayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCks
IHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNzQ4LDg5ICsxODc1LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpz
dHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIg
PSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAg
cmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BS
UmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRv
bmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVn
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJl
ZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAg
aWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9O
dW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAg
IGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0lu
dCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNF
KEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAg
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJ
TlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BS
LCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGlu
ayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0g
anVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRo
aXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMs
IGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5n
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9P
UFM6IGRlYWwgd2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFr
ZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3Rh
dGUuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNo
PigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIxNTQsMjMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwo
Ynl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVu
dFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBD
ZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVn
IHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQ
Uik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
OTA1LDkgKzIxODUsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0
cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNv
ZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBq
dW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1t
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0
aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1t
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Cisg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjIxMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRH
UFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hD
aGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4
LDkzICsyMjM0LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IElu
CiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAg
IHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihj
b2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAg
bm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29k
ZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbElt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1Qw
KTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBi
b29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBj
b21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29t
cGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVO
dWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAg
ICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihj
b21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0g
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFy
ZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisK
KyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRy
KGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5l
cU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyBy
ZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxs
cy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFs
aXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMs
IHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGlt
ZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVC
bG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2op
Ci0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwor
ICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2
YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0
ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVy
OworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1
LDkgKzIzODUsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWlu
KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcg
c2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1
bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hh
aW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEwNDUsMTMgKzI0MDksODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhj
b25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0
YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNT
dHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMy
KGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRo
aXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8v
IE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5Lgor
ICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3Bl
Y09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihj
YWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25l
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5v
dENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5U
eXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0
KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGF1dG8gZG9u
ZSA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAg
ICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisg
ICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0
OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwor
ICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMy
KGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjQ5NCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1
bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVl
UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2
OCw3ICsyNTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QK
ICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
Z3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9w
ZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1w
My5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRv
clJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDIt
PmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICBy
YXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcg
PSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxl
ZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVl
UmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI1NDYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVn
LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8v
IFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhp
bmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CkBAIC0xMTYyLDggKzI1OTEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8g
TWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUg
c3RhdGUuCisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpy
ZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAv
LyBPT1BTOiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVu
dGVyLgogICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNv
dW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAg
IGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTEx
ODcsMTMgKzI2MTksMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRo
ZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5C
ZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAg
ICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0x
MjA2LDExICsyNjM2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7Cisg
ICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3
b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEy
MzMsMTAgKzI2NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25z
CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0
PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNjcyLDE4
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
Z2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2Fz
dDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1
cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI2OTMs
NDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Qw
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Nj
b3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4
ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsK
IAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsK
ICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsy
NzU3LDQ2IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRl
Y29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAg
IHNjb3BlLnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQu
ZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRp
ZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5j
dGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI4MjcsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVz
U3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlv
blByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjg0OCwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKwor
ICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVt
cC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAt
PmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdH
UFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4
LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMjg4MSwz
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZh
bHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1
ZSB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYg
KzI5MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyOTU5LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNw
aWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5Pigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI5
ODYsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFy
cmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1
bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUw
MzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVu
dEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1w
KTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNs
b3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAog
ICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMzAwMywxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90UGF0
aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1
bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbElu
Zm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwg
cHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRl
eGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwz
NyArMzAzNiw4MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENo
ZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBl
bnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJh
bmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VW
YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFs
dWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwot
Ci0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRv
cidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAg
ICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCBy
ZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mg
b3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91
dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwg
cmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRo
YW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBp
bmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2ln
bkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFz
ZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAg
ICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7Cisg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwg
VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBh
IGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsK
KyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVk
IGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1w
IG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisg
ICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJm
bHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9w
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSAr
MzEyMCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3cs
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBH
UFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRl
eFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRl
eFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBs
YWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhH
UFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRv
clRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9
CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
c2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAog
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMTc0LDUxIEBAIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhP
ZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtu
b3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhp
cywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJh
dG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdw
cigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJl
Z1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91
bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwg
cmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5r
KHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNW
ZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTU5OCw2ICszMjI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
cwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBl
TG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBM
aXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzI5MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2Fs
bCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25B
cmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJv
YmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICsz
MzA3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNr
ZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgp
OwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9
IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5U
YWlsPigpOwpAQCAtMTcwMiwxMSArMzM0MCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVu
dF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2
YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQz
Mihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Cisg
ICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1Qx
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNzE0LDI5ICszMzYxLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChj
b25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJl
c3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1Rv
U2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1Qw
LCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1Nr
aXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NU
aGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAg
c3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
OworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJl
Z1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFy
YW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAg
IHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7
CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE3NDQsNDkgKzM0MTAsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRk
cmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5k
ZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsK
KworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1Qw
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlm
CiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFu
Y2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBs
b2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwot
Ci0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShqc1Vu
ZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAg
ICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAg
ICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5
cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVl
R1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2Vz
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxz
ZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09
IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRh
Z0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwor
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJv
dG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Myw2ICsxNDgzLDggQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIEpTVmFsdWUgc3JjMSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIHNyYzIgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMik7CiAKKyAgICAvL2RhdGFMb2dMbigic3RyaWN0ZXEsIGxoczogIiwgc3Jj
MSwgIiByaHM6ICIsIHNyYzIpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGds
b2JhbE9iamVjdCwgc3JjMSwgc3JjMik7CiB9CiAKQEAgLTE4NzEsNyArMTg3Myw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICB9CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0g
ICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
b3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQob3B0aW1pemVkQ29k
ZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKICAgICAKICAgICBpZiAodm9pZCogZGF0YUJ1ZmZlciA9IERGRzo6cHJlcGFyZU9TUkVu
dHJ5KHZtLCBjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCkpIHsK
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChvcHRpbWl6ZWRDb2RlQmxvY2ssICJvc3JFbnRy
eSIsICgiYXQgYmMjIiwgYnl0ZWNvZGVJbmRleCkpOwpAQCAtMzQxOSw2ICszNDIxLDQyIEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja0kKICAgICByZXR1cm4gMDsKIH0K
IAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXph
dGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSkKK3sKKyAgICAvLyBJdCdz
IHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdh
eXMsIGRvaW5nIHNvIHdvdWxkbid0CisgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCisgICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKGxvbENvZGVCbG9jay0+dm0oKS5oZWFwKTsKKworICAg
IGlmIChnZXRlbnYoInByaW50RWFjaEpldHRpc29uIikgJiYgISFhdG9pKGdldGVudigicHJpbnRF
YWNoSmV0dGlzb24iKSkpCisgICAgICAgIGRhdGFMb2dMbigiamV0dGlzb24sIGZvcmNpbmcgcmVv
cHQgbm93OiAiLCAqbG9sQ29kZUJsb2NrKTsKKyAgICBsb2xDb2RlQmxvY2stPnVwZGF0ZUFsbFZh
bHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CisgICAgCisgICAgLy8gT09QUzogcHJvY2VzcyB2YWx1
ZSBwcm9maWxlcyBoZXJlLCBzaW5jZSB3ZSdyZSBqZXR0aXNvbmluZywgaG9wZWZ1bGx5IHRoZXkg
dXBkYXRlIHcvIHRoaW5ncyB3ZSBjYXJlIGFib3V0LgorCisgICAgc2FuaXRpemVTdGFja0ZvclZN
KGxvbENvZGVCbG9jay0+dm0oKSk7CisKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICpsb2xDb2RlQmxvY2ssICI6IEVudGVyZWQgcmVvcHRpbWl6ZSBmcm9tIExPTCIpOwor
CisgICAgQ29kZUJsb2NrKiBsbGludENvZGVCbG9jayA9IGxvbENvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKTsKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBiYXNlbGluZSBjb2RlIGJs
b2NrLgorICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShsbGludENvZGVCbG9jay0+
aml0VHlwZSgpKSk7CisKKyAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gbGxpbnRDb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCk7CisgICAgaWYgKCFyZXBsYWNlbWVudCB8fCByZXBsYWNlbWVudCA9
PSBsbGludENvZGVCbG9jaykgeworICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICpsbGludENvZGVCbG9jaywgIjogTm90IHJlb3B0aW1pemluZyBMT0wgYmVjYXVzZSB3
ZSd2ZSBhbHJlYWR5IGJlZW4gamV0dGlzb25lZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlcGxhY2VtZW50IG11c3QgYmUgb3B0aW1pemVkIGNv
ZGUuIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5CisgICAgLy8gdG8gY2hlY2sgb3VyIGxvZ2lj
LgorICAgIEFTU0VSVChsbGludENvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSk7
CisgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChsb2xDb2RlQmxvY2stPmppdFR5
cGUoKSkpOworCisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IHN0dWNrIGluIGEgbG9vcCBsb2dp
YworICAgIGxvbENvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PU1JF
eGl0LCBDb3VudFJlb3B0aW1pemF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElH
Tk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDYgKzMxOCw4IEBAIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVmFsdWUKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwgKFZNKikpOwogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywg
dm9pZCwgKFZNKikpOwogCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdn
ZXJMT0xSZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSk7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0y
MTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CkBAIC0yODEsOCArMjc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZh
bHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0
byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTk4LDggKzU5MSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzOSw4ICs2MzAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02ODYs
OCArNjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjksOCAr
NzE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC03NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAt
ODE5LDggKzgwMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTExMDAs
OCArMTA4MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRz
dCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAt
MTI1Nyw4ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7
CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MDc4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJk
YS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVF
NjQpCiAKQEAgLTUyLDUxICs1NCwxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdU
eXBlR1BSID0gcmVzdWx0R1BSOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDA7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1f
c2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJ
ZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVj
Q2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRl
eGluZ1R5cGVHUFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAg
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJv
cGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVy
dHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAg
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0
eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsK
KyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25seSkpCisgICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAg
ICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwg
U3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dl
dEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAg
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFs
SW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5
VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAg
ICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5k
ZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTcsNiArMjU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRC
eVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BT
OiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdl
ckNvbnN0YW50KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAKKyAgICBhdXRv
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1dEtpbmQpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0zMzks
NyArNDQ0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAg
IHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Nyw3ICs0NTIsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwog
Ci0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRl
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwor
ICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzgxLDYgKzQ4NSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAg
c3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IERvIGJldHRlciBpZiB3ZSBjYW4hCisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5NCwxMyArNTAwLDEyIEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwg
ZmFzdFBhdGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFByaXZhdGVOYW1lPigpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAg
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKQEAgLTQyMCw0OSArNTI1LDEwNSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJC
eUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFz
ZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9h
Y2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vz
c29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRl
ciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBz
ZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVn
VDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCBy
ZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRl
Y29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5
dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jh
c2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1f
cHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0
dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2MzMsNTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC00OTIsMjUgKzY4NywyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
ZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0
LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJv
cGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3Bl
cnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9w
ZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAg
ICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNl
IHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KQEAgLTU0MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVRE
ZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQog
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
ICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRS
ZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAg
ICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgq
dGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRh
ZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAg
ICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVnVDE7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGlu
Z1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQ
cm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQog
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIs
IHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRC
eUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0
aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3Qo
KTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0
byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3Rv
cmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUg
YmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0
ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5
cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0
Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BS
LCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1Qy
LCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAg
ICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03NjUsNzcgKzExNjAsOTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxp
bmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihi
YXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBT
aG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwot
Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBi
YXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhp
cyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigp
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcg
cmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAg
IHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRo
KQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1
bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0NywxNyArMTI2MCwyNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRo
ID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdU
MDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1Qx
KTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTg2NywyMSArMTI4OCwzNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0
YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNs
b3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBk
ZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAg
ICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisg
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50Lmdl
dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgpAQCAtODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCBy
ZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BS
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk0MCwxNSArMTM3
NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBs
b2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9h
ZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZh
ckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05NjIsMTIgKzE0
MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9h
ZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihS
ZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05Nzgs
NTEgKzE0MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJl
ZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAg
ICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAg
ICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAg
ICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgog
CiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAg
ICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFu
ZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAg
ICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5k
ZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAg
Y2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1p
dEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
cmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC0xMDM2LDEwICsxNTA0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1
dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0g
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTEwNTIsMjcgKzE1MjAsMjcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIp
OyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Miw0MCArMTU1MCwyMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmVnVDApOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAg
IHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0
V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAg
bG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJl
Z1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTEyOSwyMSAr
MTU3OSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsK
ICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Qq
PigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9
IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVn
VDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Ym9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZh
bHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9m
ZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
ICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNl
dEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIg
PSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVn
VDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90
LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBz
Y29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAg
ICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwg
b2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOworICAgICAgICAgICAg
c3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9mZnNldEdQUiwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90
b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBw
cm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRl
KG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1
ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVH
UFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAg
ICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAg
LTExOTAsMTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNh
bWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdl
IHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRl
bXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4K
IAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTEyMDksMjMgKzE3
MjUsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0K
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0
Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2Yg
ZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYg
d2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdh
aW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjYxLDYxICsxNzg0LDE3
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFy
Z3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1
bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHZh
bHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOwor
ICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKyAg
ICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1v
ZGUpCiB7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBp
ZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2gg
YXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBp
dCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0
ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0
ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUg
Zm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmly
dHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91
bGRGaWx0ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewor
ICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAg
ICAgIGlmICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsK
KyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAgICAgaWYgKGdwckZv
ck9wZXJhbmQob3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBvd25lckdQUiA9
IGdwckZvck9wZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG93bmVy
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgb3duZXJH
UFIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG93bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
KyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShv
d25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOwor
ICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMu
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNw
aWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQor
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBpZiAob3duZXJO
b3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIC8vIE9PUFM6
IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFy
b3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBm
ZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1
bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2lu
Y2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtl
IGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZp
bGwKKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1
ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIg
PSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVy
KTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVO
b3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApA
QCAtMTMyNywxMSArMTk2NywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmll
bGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7
ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5k
IQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsxOTk2LDIzIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAv
LyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNw
ZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkp
OworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAg
ICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0
ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW47CisgICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJh
cnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlv
bmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCks
IG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwo
KnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUxLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElk
ZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNTY3LDYgKzIyNTQsOCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQg
cHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VM
T0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYg
T3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRL
aW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2Zp
bGVkREZHQ29kZUJsb2NrKQogewogICAgIEFTU0VSVF9VTlVTRUQocHJvZmlsZWRERkdDb2RlQmxv
Y2ssICFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9M
SklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJPcHRp
bWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgZGlkIGJlY29tZSByZWFkeS4i
KTsKICAgICAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVk
REZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgQVNTRVJUKCFw
cm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwg
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsK
ICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5n
IGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHJldmlz
aW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMjIgQEAKICNpbmNsdWRlICJKSVQuaCIKICNp
bmNsdWRlICJWTUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSklUV29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsKIHB1YmxpYzoKLSAgICBQbGFuKENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0g
ICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICAgICAsIG1faml0KGNvZGVCbG9j
ay0+dm0oKSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIFBsYW4o
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgOiBtX2xsaW50Q29k
ZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX2NvZGVCbG9ja1RvQ29tcGlsZShjb21waWxl
VHlwZSA9PSBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgPyBtX2xsaW50Q29kZUJsb2NrLT5uZXdSZXBs
YWNlbWVudCgpIDogbV9sbGludENvZGVCbG9jaykgCisgICAgICAgICwgbV9qaXQobV9jb2RlQmxv
Y2tUb0NvbXBpbGUtPnZtKCksIG1fY29kZUJsb2NrVG9Db21waWxlLCBjb21waWxlVHlwZSwgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LmRvTWFpblRocmVh
ZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOworICAgICAgICAvLyBPT1BTOiB2aXNpdCB0aGlz
IGluIGNvbmN1cnJlbnQgZ2MKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1f
bGxpbnRDb2RlQmxvY2spIHsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgp
LmhlYXAucHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoKQpAQCAtNTMsMTcgKzYwLDIzIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGZpbmFsaXplKCkKICAgICB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlc3VsdCA9IG1faml0LmxpbmsoKTsKKworICAgICAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VT
Y29wZUV4aXQoWyZdIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBt
X2xsaW50Q29kZUJsb2NrKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52
bSgpLmhlYXAudW5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfSk7CisK
ICAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKLSAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJ
VENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKKyAgICAgICAgICAgIENPREVCTE9D
S19MT0dfRVZFTlQobV9sbGludENvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGls
YXRpb24gZmFpbGVkIikpOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9z
ZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
bV9kaWRGYWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOworICAgICAgICAgICAgbV9sbGludENvZGVC
bG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2Nr
LT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVs
LiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxs
Q29kZShtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+aml0U29vbigpOwor
ICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0
YWxsQ29kZShtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJs
b2NrLT5qaXRTb29uKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzEsOCArODQsOCBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29k
ZUJsb2NrLT52bSgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tLZXkoKSB7IHJldHVybiBt
X2xsaW50Q29kZUJsb2NrOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9j
ay0+dm0oKTsgfQogICAgIAogICAgIGJvb2wgaXNGaW5pc2hlZENvbXBpbGluZygpCiAgICAgewpA
QCAtODAsMTUgKzkzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNGaW5pc2hlZENv
bXBpbGluZzsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQor
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29t
cGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkKICAgICB7Ci0gICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpOworICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFk
KCk7CiAgICAgICAgIHBsYW4uZmluYWxpemUoKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2xsaW50Q29kZUJsb2Nr
OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2tUb0NvbXBpbGU7CiAgICAgSklUIG1faml0Owog
ICAgIExvY2sgbV9sb2NrOwogICAgIGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nIHsgZmFsc2Ug
fTsKQEAgLTIzMyw5ICsyNDcsMTEgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENv
ZGVCbG9jawogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorCisgICAgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSA9IE9w
dGlvbnM6OmZvcmNlTE9MKCkgPyBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgOiBKSVQ6OkNvbXBpbGVU
eXBlOjpCYXNlbGluZTsKICAgICAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQo
KSkgewotICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxl
VHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCkBAIC0yNDksNyArMjY1LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVy
KENvZGVCbG9jawogICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykg
ewogICAgICAgICAgICAgbV9wbGFubmVkLmFkZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVm
UHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRS
ZWYobmV3IFBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkpOwogICAgICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBt
X3F1ZXVlLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5ub3RpZnlBbGwo
bG9ja2VyKTsKQEAgLTI3MywxNCArMjg5LDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVM
YXRlcihDb2RlQmxvY2sKICAgICAvLyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUuIElmIHRo
ZSBjb25jdXJyZW50IEpJVCB0aHJlYWQgaXMgY29udm95ZWQsIHdlIHJldmVydCB0byBtYWluCiAg
ICAgLy8gdGhyZWFkIGNvbXBpbGVzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhcyBnb29kIGFzIGlm
IHdlIGhhZCBtdWx0aXBsZSBKSVQgdGhyZWFkcy4gTWF5YmUgd2UKICAgICAvLyBjYW4gZG8gdGhh
dCBzb21lZGF5LgotICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KTsKKyAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5
cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogfQogCisvKgogdm9pZCBKSVRXb3JrbGlz
dDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgp
ICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisKKyAgICBhdXRvIGlzQ29tcGlsZWQgPSBb
Jl0geworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJw
cmV0ZXJUaHVuaykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZUJs
b2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgaWYgKGlzQ29tcGlsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJvb2wgaXNQbGFubmVkOwpAQCAtMjk2LDE3ICsz
MjIsMjQgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIAogICAgIH0K
ICAgICAKICAgICAvLyBOb3cgaXQgbWlnaHQgYmUgY29tcGlsZWQhCi0gICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisgICAgaWYgKGlzQ29t
cGlsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFdlIGRvIHRoaXMgaW4gY2Fz
ZSB3ZSBoYWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGls
ZSB3aXRoIHRoZQotICAgIC8vIGJhc2VsaW5lIEpJVC4KLSAgICBjb2RlQmxvY2stPnJlc2V0SklU
RGF0YSgpOwotICAgIAotICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCi0gICAgSklUOjpjb21w
aWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpOwotICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3Rh
bGxDb2RlKGNvZGVCbG9jayk7CisKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VMT0woKSkgeworICAg
ICAgICBDb2RlQmxvY2sqIGxvbENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQo
KTsKKyAgICAgICAgSklUOjpjb21waWxlKHZtLCBsb2xDb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5
cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KTsKKyAgICAgICAgbG9sQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5z
dGFsbENvZGUobG9sQ29kZUJsb2NrKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBkbyB0
aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQs
IHRvIGNvbXBpbGUgd2l0aCB0aGUKKyAgICAgICAgLy8gYmFzZWxpbmUgSklULgorICAgICAgICBj
b2RlQmxvY2stPnJlc2V0SklURGF0YSgpOworICAgICAgICAKKyAgICAgICAgLy8gT0ssIGp1c3Qg
Y29tcGlsZSBpdC4KKyAgICAgICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29t
cGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICB9CiB9CisqLwogCiB2b2lkIEpJVFdvcmtsaXN0
OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBteVBsYW5zKQogewpAQCAtMzE0LDcgKzM0Nyw3IEBAIHZv
aWQgSklUV29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG0KICAgICAgICAgcGxhbi0+Zmlu
YWxpemUoKTsKICAgICAgICAgCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwot
ICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9jaygpKTsKKyAgICAgICAgbV9w
bGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2tLZXkoKSk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDYgQEAgcHVibGljOgogICAgIHZvaWQgcG9sbChWTSYpOwogICAgIAogICAg
IHZvaWQgY29tcGlsZUxhdGVyKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgIHZvaWQgY29tcGlsZU5vdyhD
b2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApKTsKICAgICAKICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2Jh
bFdvcmtsaXN0KCk7CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmts
aXN0T3JOdWxsKCk7CkBAIC02Niw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgVGhyZWFk
OwogICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7CiAgICAgCisgICAgLy92b2lkIGNvbXBpbGVOb3co
Q29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKSk7CiAgICAgdm9pZCBmaW5hbGl6ZVBsYW5zKFBsYW5zJik7CiAgICAgCiAg
ICAgUGxhbnMgbV9xdWV1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
TWFwLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAg
ICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0K
KyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNv
bnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQor
CiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVy
T2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBA
IHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+
KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFz
c2VtYmx5IHx8IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5
cGUoKSkpCisgICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNERkdPckZUTChjYWxs
ZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAg
IGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0
aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBA
IHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/
CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRo
LgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBs
ZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5t
X2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2Miw4ICszNjIsMTAgQEAgaW5saW5lIGJvb2wgc2hvdWxkSklUKENvZGVCbG9jayogY29kZUJs
bwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCi1pbmxpbmUg
Ym9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KDApKQoraW5saW5lIENvZGVCbG9jayogaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKKyAgICAvLyBPT1BTOiBJbXBsZW1lbnQg
dGhpcyB3LnIudCBMT0wuCisKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQg
dG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAK
QEAgLTM3MiwyOSArMzc0LDQ1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0
aWNzKFYKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkg
ewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGls
ZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGlu
dEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9z
ZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAg
SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucG9sbCh2bSk7Ci0gICAgCisKKyAg
ICBhdXRvIGxvbENvZGVCbG9jayA9IFsmXSgpIC0+IENvZGVCbG9jayogeworICAgICAgICBpZiAo
Q29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGNvZGVCbG9jay0+b3B0aW1pemVkUmVwbGFjZW1lbnQo
KSkgeworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKQorICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisgICAgaWYgKGF1dG8qIHJlc3VsdCA9
IGxvbENvZGVCbG9jaygpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCiAgICAgc3dpdGNoIChj
b2RlQmxvY2stPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6IHsK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2Fz
IGFscmVhZHkgY29tcGlsZWQuIik7CiAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKICAgICB9CiAgICAg
Y2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOiB7CiAgICAgICAgIEpJVFdvcmtsaXN0Ojpl
bnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRlcihjb2RlQmxvY2ssIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2Rl
QmxvY2soKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgICAgIHJldHVy
biBjb2RlQmxvY2s7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBkZWZhdWx0
OgotICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpj
b2RlQmxvY2ssICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBkYXRhTG9n
KCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQorc3RhdGljIFNsb3dQYXRoUmV0
dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQogewogICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCAi
LCBuYW1lLCAiIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLApAQCAtNDA1LDE4ICs0MjMsMjEgQEAg
c3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogICAgICAgICBMTElOVF9S
RVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICBWTSYgdm0gPSBjb2RlQmxv
Y2stPnZtKCk7Ci0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJs
b2NrKSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0gaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3Modm0sIGNvZGVCbG9jayk7CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykK
ICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBD
T0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgiaW4gcHJvbG9ndWUi
KSk7CisgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVCbG9jaywgIk9TUiBlbnRy
eSIsICgiaW4gcHJvbG9ndWUiKSk7CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21w
aWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gUHJvbG9ndWUpCi0gICAgICAg
IExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNz
KCksIG51bGxwdHIpOworICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29kZUJsb2Nr
LT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChr
aW5kID09IEFyaXR5Q2hlY2spOwotICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRD
b2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygp
LCBudWxscHRyKTsKKyAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRD
b2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygp
LCBudWxscHRyKTsKIH0KICNlbHNlIC8vIEVOQUJMRShKSVQpCi1zdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwgRW50cnlL
aW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKIHsKICAgICBjb2RlQmxv
Y2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwg
bnVsbHB0cik7CkBAIC00MjYsMzEgKzQ0NywzMSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGVudHJ5T1NSKENvZGVCCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOwogfQog
CiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rp
b24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9y
Q2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOworICAgIHJl
dHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5q
c0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RF
Q0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUt
PmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJl
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4g
ZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjaykKIHsKICAgICBV
TlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxs
KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2sp
OworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Fs
bEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwg
ImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9
CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlP
U1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFi
bGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2Nv
bnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNh
bGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4
ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25f
Zm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKGxvb3Bfb3NyKQpAQCAtNDc5LDE5ICs1MDAsMjIgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0wobG9vcF9vc3IpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0
cik7CiAgICAgfQogICAgIAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0s
IGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpCisgICAgQ29kZUJsb2NrKiBj
b21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxv
Y2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIGlmICghY29tcGlsZWRDb2RlQmxv
Y2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0g
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGls
ZWRDb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkpOwogCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKTsKKyAgICBBU1NFUlQoY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCB8fCBjb21waWxlZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkxPTEpJVCk7CiAKLSAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCk7CisgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvbXBpbGVk
Q29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0
clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAgdm9pZCoganVtcFRhcmdldCA9
IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIEFTU0VSVChqdW1wVGFyZ2V0
KTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29kZUJsb2NrKTsKICAg
ICAKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJnZXQsIGNhbGxGcmFtZS0+dG9wT2ZGcmFt
ZSgpKTsKICNlbHNlIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMs
MTAgQEAgc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMoKQogCiB2b2lkIE9wdGlvbnM6
OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIE9wdGlvbnM6OnVzZURGR0pJVCgp
ID0gMDsKKyAgICBPcHRpb25zOjpmb3JjZUxPTCgpID0gMTsKKyAgICBPcHRpb25zOjp1c2VMTElu
dCgpID0gMTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBPcHRpb25zOjp2YWxpZGF0ZURG
R0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyNyw2ICs1MjcsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2Uo
KTsKICAgICB2KEJvb2wsIHVzZUpJVENhZ2UsIGNhblVzZUpJVENhZ2UoKSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihCb29sLCB1c2VQdWJsaWNTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHVibGljIHN0YXRpYyBk
YXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCiAgICAgdihCb29sLCB1c2VQcml2YXRlU3Rh
dGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1
bmRlcnN0YW5kIHByaXZhdGUgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwK
KyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKQogCiBlbnVtIE9w
dGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3
MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2Zp
bGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJ
bnQncyBsbGludF9oYW5kbGVfdWNhdWdodF9leGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBh
Z2FpbnN0IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAg
ICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwot
ICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6TE9MSklUKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHMgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW5wcm9jZXNzZWRTdGFj
a1RyYWNlLmxsaW50UEMpKTsKICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRy
eUdldEJ5dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJsb2NrKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlz
aW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyArMzk4LDggQEAgc3RhdGljIHZvaWQg
c2V0dXBMTEludChDb2RlQmxvY2sqIGNvZGVCbAogc3RhdGljIHZvaWQgc2V0dXBKSVQoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQotICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkKTsKKyAgICAvLyBPT1BTOiBGaWd1cmUgb3V0IHdoYXQgd2Ugd2FudCB0
byBkbyB3aXRoIHRoZSBubyBMTEludCBvcHRpb24uLi4uCisgICAgQ29tcGlsYXRpb25SZXN1bHQg
cmVzdWx0ID0gSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJh
c2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKICAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGls
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1
bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
OSBAQCBKU1ZhbHVlIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZSB0aGVGCiB7CiAgICAgYm9v
bCBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gZmFsc2U7CiAjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KDApOyAvLyBPT1BTCisKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpIHx8ICFPcHRpb25zOjp1
c2VCYXNlbGluZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAgICAgcHJldGVu
ZFRvSGF2ZU1hbnlDb21waWxlcyA9IHRydWU7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAs
NyArMTQwLDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChm
b3VuZENvZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRM
KGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gdHJ5
SG9sZExvY2soKm1fbG9jayk7CiAgICAgICAgIGlmICghbG9ja2VyKQogICAgICAgICAgICAgcmV0
dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCkBAIC0xODIsNyAr
MTgyLDcgQEAgdm9pZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhYwogCiAgICAg
d2hpbGUgKGNhbGxGcmFtZSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKGNvZGVCbG9j
ayAmJiBKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAg
ICAgIGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKTsK
ICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsK
ICAgICB9CkluZGV4OiBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkocmV2aXNpb24gMjcwNzg5KQorKysgVG9v
bHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw4ICsxNzMs
OCBAQCBkZWYgY29tcHV0ZU11bHRpcGxlSHlwb3RoZXNlc1NpZ25pZmljYW5jCiAKIGRlZiBkdW1w
QnJlYWtkb3ducyhhLCBiKToKICAgICBuYW1lTGVuZ3RoID0gbGVuKCJzdWJ0ZXN0IikKLSAgICBh
TGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pCi0gICAgYkxlbmd0aCA9IGxlbihhW3VuaXRNYXJr
ZXJdKQorICAgIGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkgKyAzCisgICAgYkxlbmd0aCA9
IGxlbihhW3VuaXRNYXJrZXJdKSArIDMKICAgICByYXRpb0xlbmd0aCA9IGxlbigiYiAvIGEiKQog
CiAgICAgcFZhbHVlSGVhZGVyID0gInBWYWx1ZSAoc2lnbmlmaWNhbmNlIHVzaW5nIEZhbHNlIERp
c2NvdmVyeSBSYXRlKSIKQEAgLTIwMyw3ICsyMDMsNyBAQCBkZWYgZHVtcEJyZWFrZG93bnMoYSwg
Yik6CiAgICAgcExlbmd0aCArPSAyCiAKICAgICBzdHJpbmdzID0gW10KLSAgICBzdHJpbmdzLmFw
cGVuZCgifHtrZXk6XntuYW1lTGVuZ3RofX18e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpe
e2JMZW5ndGh9fSB8e2NvbXBhcmU6XntyYXRpb0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19
fCIuZm9ybWF0KGtleT0ic3VidGVzdCIsIGFTY29yZT1hW3VuaXRNYXJrZXJdLCBiU2NvcmU9Ylt1
bml0TWFya2VyXSwgbmFtZUxlbmd0aD1uYW1lTGVuZ3RoLCBhTGVuZ3RoPWFMZW5ndGgsIGJMZW5n
dGg9Ykxlbmd0aCAsIGNvbXBhcmU9ImIgLyBhIiwgcmF0aW9MZW5ndGg9cmF0aW9MZW5ndGgsIHBN
YXJrZXI9cFZhbHVlSGVhZGVyLCBwTGVuZ3RoPXBMZW5ndGgpKQorICAgIHN0cmluZ3MuYXBwZW5k
KCJ8e2tleTpee25hbWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxl
bmd0aH19IHx7Y29tcGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5m
b3JtYXQoa2V5PSJzdWJ0ZXN0IiwgYVNjb3JlPSJhOiAiICsgYVt1bml0TWFya2VyXSwgYlNjb3Jl
PSJiOiAiICsgYlt1bml0TWFya2VyXSwgbmFtZUxlbmd0aD1uYW1lTGVuZ3RoLCBhTGVuZ3RoPWFM
ZW5ndGgsIGJMZW5ndGg9Ykxlbmd0aCAsIGNvbXBhcmU9ImIgLyBhIiwgcmF0aW9MZW5ndGg9cmF0
aW9MZW5ndGgsIHBNYXJrZXI9cFZhbHVlSGVhZGVyLCBwTGVuZ3RoPXBMZW5ndGgpKQogICAgIGZv
ciBrZXkgaW4gYS5rZXlzKCk6CiAgICAgICAgIGlmIGtleSA9PSB1bml0TWFya2VyOgogICAgICAg
ICAgICAgY29udGludWUKSW5kZXg6IExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXBy
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUu
anMJKHJldmlzaW9uIDI3MDc4OSkKKysrIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25l
LXByZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDIxIEBAIHZhciBzZWxmID0gdGhpczsK
IAogc2VsZi50ZXN0UnVubmVyID0gewogICAgIG5ldmVySW5saW5lRnVuY3Rpb246IG5ldmVySW5s
aW5lRnVuY3Rpb24sCi0gICAgbnVtYmVyT2ZERkdDb21waWxlczogbnVtYmVyT2ZERkdDb21waWxl
cywKKyAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiAoZnVuY3Rpb24oKSB7CisgICAgICAgIGxldCBt
YXA7CisgICAgICAgIHJldHVybiAoZikgPT4geworICAgICAgICAgICAgaWYgKGlzREZHRW5hYmxl
ZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkRGR0NvbXBpbGVzKGYpOworCisg
ICAgICAgICAgICAvLyBFbXVsYXRlIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiBmb3IgYSBiaXQgdG8g
Z2V0IHNvbWUgdGllcmluZyBiZWZvcmUgcmV0dXJuaW5nIHRydWUuCisgICAgICAgICAgICBpZiAo
IW1hcCkKKyAgICAgICAgICAgICAgICBtYXAgPSBuZXcgV2Vha01hcDsKKyAgICAgICAgICAgIGxl
dCBjb3VudCA9IG1hcC5nZXQoZikgfHwgMDsKKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAg
ICAgICAgICBtYXAuc2V0KGYsIGNvdW50KTsKKyAgICAgICAgICAgIHJldHVybiAoY291bnQgLyA0
MDAwKSB8IDA7CisgICAgICAgIH07CisgICAgfSkoKSwKICAgICBmYWlsTmV4dE5ld0NvZGVCbG9j
azogZmFpbE5leHROZXdDb2RlQmxvY2sKIH07CiAKQEAgLTE0OSw4ICsxNjMsOSBAQCBmdW5jdGlv
biBkZmdTaG91bGRCZSh0aGVGdW5jdGlvbiwgX2EsIF9iCiAgIHZhbHVlcy5wdXNoID0gQXJyYXku
cHJvdG90eXBlLnB1c2g7CiAgIAogICB0cnkgewotICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6
dGhlRnVuY3Rpb259KSkKKyAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkp
IHsKICAgICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKKyAgICB9CiAgICAgdmFsdWVzLnB1c2go
ZXZhbChfYSkpOwogICB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0gZTsKQEAgLTM0Niw3
ICszNjEsNyBAQCBmdW5jdGlvbiBkZmdJbmNyZW1lbnQoYXJndW1lbnQpCiAgICAgaWYgKGRpZEZh
aWxTb21lVGVzdHMpCiAgICAgICAgIHJldHVybiBhcmd1bWVudC5pOwogICAgIAotICAgIGlmICgh
ZGZnQ29tcGlsZWQoYXJndW1lbnQpKQorICAgIGlmICghZGZnQ29tcGlsZWQoYXJndW1lbnQpICYm
IGlzREZHRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gInN0YXJ0IiBpbiBhcmd1bWVudCA/IGFy
Z3VtZW50LnN0YXJ0IDogMDsKICAgICAKICAgICByZXR1cm4gYXJndW1lbnQuaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417408</attachid>
            <date>2021-01-11 13:26:17 -0800</date>
            <delta_ts>2021-01-11 18:24:58 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>564496</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzA3
ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MDc4OSkKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MDc4OSkK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcwNzg5KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MDc4OSkKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcwNzg5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ2NyeXB0by1hZXMtU1AnXTsKKwog
aWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJ
dGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3RpbwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblNl
dFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2NjMsOCBAQCBw
cml2YXRlOgogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1iZXIiLCBmdW5j
dGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzREZH
RW5hYmxlZCIsIGZ1bmN0aW9uSXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImRyb3BBbGxMb2NrcyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsKIAogICAgICAg
ICBpZiAoT3B0aW9uczo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGlu
ZygpKSB7CkBAIC0yNjUzLDYgKzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uQXNEb3VibAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIo
bnVtKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxl
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oT3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwogSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxvY2sgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpk
dW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZH
T3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJs
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDggQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVy
ZUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCkBAIC0yNjks
NyArMjcxLDcgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Qmxv
Y2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxC
bG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBkdW1wSGVhZGVy
KGJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMgQEAgdm9pZCBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91dC5wcmludCgi
YmIjIiwgYmxvY2suaW5kZXgoKSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRpY3Rpb25zQXRI
ZWFkKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhlYWQ6IFsiKTsK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlvbnNBdEhlYWQt
PmF0KGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0
LCBwcmVkaWN0aW9ucy5hcmd1bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2NhbHMoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAgICAgICAgICAg
ICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQorCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKICAgICAg
ICAgICAgIGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChpICsgYmxv
Y2subGVhZGVyT2Zmc2V0KCkpOwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGljU3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgogY2xhc3MgQ29k
ZUJsb2NrQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiA9IElD
U3RhdHVzTWFwKCkpOwotICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOworICAgIHN0
YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0
ZWNvZGVHcmFwaCYsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1
ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CiAK
ICAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgog
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2b2lkIGR1bXAo
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1
Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4gc3BlY3Vs
YXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQorICAg
IHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6
OmRhdGFGaWxlKCkpCiAgICAgewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2Rl
QmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywgc3Bl
Y3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hl
Y2twb2ludC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAwLDcgKzEwMCw3IEBAIE9wZXJhbmQgZGVzdGluYXRpb25Gb3IoY29uc3QgQnl0ZWNvZGUmIGIK
ICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0
b3JfbmV4dCkgewogICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgewogICAgICAgICBj
YXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dDogewotICAgICAgICAgICAgaWYgKHR5cGUg
PT0gSklUVHlwZTo6REZHSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6REZHSklUKQorICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6RlRMSklU
KQogICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoT3BJdGVyYXRvck5leHQ6Om5l
eHRSZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlLm1fdmFsdWU7IC8vIFdlIHJl
dXNlIHZhbHVlIGFzIGEgdGVtcCBiZWNhdXNlIGl0cyBlaXRoZXIgbm90IHVzZWQgaW4gc3Vic2Vx
dWVudCBieXRlY29kZXMgb3Igd3JpdHRlbiBhcyB0aGUgdGVtcCBvYmplY3QgLgogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAg
dm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8vIE5vIHVzZXMu
CiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0gICAgY2FzZSBv
cF9qbmVxX3B0cjoKICAgICBjYXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2ptcDoKICAg
ICBjYXNlIG9wX25ld19vYmplY3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgICAg
ICByZXR1cm47CiAKKyAgICBVU0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQb2ludGVyKQog
ICAgIFVTRVMoT3BUb1RoaXMsIHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHosIHRhcmdldFZp
cnR1YWxSZWdpc3RlcikKICAgICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwgc3JjRHN0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSkKICAgICAgICAgb3V0LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBvdXQu
cHJpbnQoIiwgIiwgaW5zdHJ1Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQorICAg
IGlmICgodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRoaXMtPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQog
ICAgICAgICBvdXQucHJpbnQoIiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwogICAgIGlmIChv
d25lckV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKE5l
dmVySW5saW5lKSIpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0
ZWNvZGUoUHJpbnRTdHJlYW0KICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0SUNT
dGF0dXNNYXAoc3RhdHVzTWFwKTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRoaXMt
Pmluc3RydWN0aW9ucygpKTsKLSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+
OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01hcCk7
CisgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMs
IGluc3RydWN0aW9ucygpLCBncmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7CiB9
CiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNNYXAp
CkBAIC0yOTUsNiArMjk1LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1
cmUqIAogICAgICwgbV9vd25lckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2lu
c3RydWN0aW9uc1Jhd1BvaW50ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKQorICAg
ICwgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVlUHJvZmlsZXMp
CiAgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMpCiAg
ICAgLCBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5tX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5t
X2Z1bmN0aW9uRGVjbHMpCkBAIC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgp
KTsKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXROdW1QYXJhbWV0
ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRlcnMgPSBvdGhl
ci5udW1QYXJhbWV0ZXJzKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQo
dGhpcyk7CiB9CkBAIC04NTAsNyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAg
ICAvLyB0byB0aGUgQ29kZUJsb2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlzIHRpZWQgZGly
ZWN0bHkgdG8gdGhlIENvZGVCbG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRvbWF0aWNhbGx5
IGNsZWFyZWQgd2hlbiB0aGUgQ29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlmIChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNo
cG9pbnRzKCk7CiAjZW5kaWYKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJlbW92ZSh0aGlz
KTsKQEAgLTEwMzcsNyArMTAzOSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9u
Z2x5KGNvbnMKICAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3Mg
ZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3ZWFrIHJlZmVy
ZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKICAgICAv
LyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4K
LSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICgh
SklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29kZUJsb2NrOjpz
aG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29u
RHVlVG9XZWFrUmVmZXJlbmNlKFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFya2Vk
KHRoaXMpOwogfQpAQCAtMTA1OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2
ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAg
ICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAgc3RhdGljIFNl
Y29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAx
MCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJ
bnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsK
KyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgpAQCAtMTE2OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7
CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAg
IAogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRv
cik7CkBAIC0xMjE3LDcgKzEyMjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5l
c3MoY29uc3QgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQgYmUg
Y2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwogICAg
IC8vIHRoYXQgd2UgbWlnaHQgZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91bGQgYmUgamV0
dGlzb25lZCBkdWUgdG8gb2xkIGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9l
c24ndCBwcm90ZWN0IHVzLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29k
ZS0+ZGZnQ29tbW9uKCk7CkBAIC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAoSklUQ29kZTo6
Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJ
bnRlcnByZXRlZChqaXRUeXBlKCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsK
KyAgICAgICAgLy8gT09QUzogU2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRvIGl0cyBvd24g
ZnVuY3Rpb24gZm9yIEpJVCBJQ3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBq
dXN0IGZvciBMTEludC4KICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAg
IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTUyOCw3ICsx
NTM2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2VuZGlm
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7
CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21t
b24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsK
ICAgICB9CkBAIC0xNTQ4LDYgKzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoCiAgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5j
b3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxp
bmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAgICAgY291bnQg
PSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2b2lkIENvZGVC
bG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFk
ZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVzKCkpLml0ZXJh
dG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KSB7CisgICAgICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAg
ICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24o
KTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0
dXNlcy5jYWxscykKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmlyc3QsIElDU3Rh
dHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBA
IC0xODEwLDcgKzE4MTksNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1Jl
ZmVyCiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGpp
dFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENv
ZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHZpc2l0T1NSRXhpdFRhcmdldHMobG9ja2Vy
LCB2aXNpdG9yKTsKQEAgLTE4MjMsNyArMTgzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0V2Vha1JlZmVyZW4KICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRm
Z0NvbW1vbigpOwpAQCAtMTg2Nyw3ICsxODc2LDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJh
c2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIENvZGVCbG9jayogcmVz
dWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgeworICAgICAgICBpZiAoSklUQ29k
ZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBlKSkgewogICAgICAgICAgICAg
Ly8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3ZlIGhhZCBhIG1lbW9yeSBjbGVh
biB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHB1cmdlZCBv
ZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKSkuIFJlZ2Fy
ZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2RlQmxvY2sgaXMgc3RpbGwgbGl2
ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJVApAQCAtMTkzMSw3ICsxOTQw
LDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckluZGV4KAogRGlzcG9zYWJs
ZUNhbGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5k
ZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKQogewogI2lmIEVOQUJMRShERkdfSklU
KQotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSkpOwog
ICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENhbGxTaXRlLmJpdHMoKSkpOwog
ICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNp
dGUpOwpAQCAtMjIzMSw1MSArMjI0MCw1NSBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJv
ZmlsZXI6OkpldHRpCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwogICAg
IAogICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6Ci0gICAgLy8g
MSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0
IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAxKSBJZiB3ZSdyZSBERkcvRlRM
LCBtYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQg
bm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAogICAgIC8vICAgIHdlIHNob3VsZCBPU1IgZXhp
dCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRoZSBy
ZXR1cm4uCiAgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIgZXhl
Y3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4KIAogI2lmIEVO
QUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIGpp
dENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKLSAgICAKLSAgICBpZiAo
cmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKSB7Ci0gICAgICAgIFByb2Zp
bGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5j
b21waWxhdGlvbi5nZXQoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKLSAg
ICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0
cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQu
Ci0gICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7Ci0g
ICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXNDdXJy
ZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkp
OwotICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6
OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlv
biogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQo
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCisgICAgICAgICAgICAg
ICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBp
dHMgb3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVk
LgorICAgICAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2
bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4
ZWN1dGFibGUoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5
KCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgaW52YWxpZGF0ZSAiLCAqdGhpcywgIlxuIik7
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCiAgICAgLy8gQ291bnQgdGhlIHJlb3B0
aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KICAgICBpZiAobW9kZSA9
PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7CiAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNo
b3VsZCBjYWxsIGFsdGVybmF0aXZlKCkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICAgICAgYmFzZWxpbmVBbHRlcm5hdGl2ZSgp
LT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGlm
IChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICAgICAgZGF0YUxvZygiICAg
IERpZCBjb3VudCByZW9wdGltaXphdGlvbiBmb3IgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmCiAg
ICAgfQogICAgIAogICAgIGlmICh0aGlzICE9IHJlcGxhY2VtZW50KCkpIHsKICAgICAgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhlIGVudHJ5cG9pbnQuIFRoaXMgY2FuIGhh
cHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKICAgICAgICAgLy8gYmxvY2tzLgorICAgICAgICAvLyBP
ciwgd2UncmUgYW4gTE9MIENvZGVCbG9jayBhbmQgd2VyZSBhbHJlYWR5IGpldHRpc29uZWQuCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYWx0ZXJuYXRpdmUoKSkKICAgICAgICAg
YWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogCi0gICAgaWYgKHJlYXNvbiAh
PSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9WTVRyYXBzKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUo
KSkgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAh
PSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCiAgICAgICAgIHRhbGx5RnJlcXVlbnRF
eGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgIC8vIEpldHRpc29u
IGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwgY29kZSB0byBh
IGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgYSBkZWFkIG9i
amVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCkBAIC0yMzkwLDcgKzI0MDMsNyBAQCB2b2lkIENv
ZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxGCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2st
PmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2RlQmxv
Y2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxz
ZTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICIgICAg
Q2xlYXJpbmcgU0FCSSBiY2F1c2UgY2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXplZC4iKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQ4MywxMiArMjQ5NiwxNCBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6
Om51bWJlck9mREZHQ29tcGlsZXMoCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGppdFR5cGUoKSkpOwogICAgIGlmIChPcHRpb25zOjp0ZXN0VGhlRlRMKCkpIHsKKyAgICAg
ICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICBpZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gMTAw
MDAwMDsKICAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwgPyAxIDogMCkg
KyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogICAgIH0KICAgICBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gKChyZXBsYWNlbWVu
dCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8g
MSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKyAgICByZXR1cm4gKChyZXBs
YWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/
IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiB9CiAKIGludDMyX3QgQ29k
ZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdApAQCAtMjcwOSw3ICsy
NzI0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdAogdm9pZCBD
b2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3Vs
dChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgSklUVHlwZSB0eXBlID0gaml0VHlw
ZSgpOwotICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgaWYgKHR5
cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgdHlwZSAhPSBKSVRUeXBlOjpMT0xKSVQpIHsK
ICAgICAgICAgZGF0YUxvZ0xuKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNv
ZGUgYnV0IGhhdmUgIiwgdHlwZSk7CiAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihqaXRDb2RlKCkuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBl
KSk7CiAgICAgfQpAQCAtMjcyNyw3ICsyNzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGlt
aXphdGlvblRocmVzaG9sZAogICAgIAogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBD
b21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50
ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZHT3JGVEwo
cmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgpAQCAtMjc1
Niw3ICsyNzcxLDggQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZAog
ICAgIAogdWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50
MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSk7CisgICAgLy9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpOyAvLyBPT1BTOiBXZSBjYWxsIHRoaXMgZnJvbSB0aGUgTE9MIGNvbXBpbGVy
IHRocmVhZCBiZWZvcmUgaW5zdGFsbC4KKwogICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3
YXkgc28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRoaXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQogICAg
IC8vIGVub3VnaCB0aGF0IHRoaXMgbG9vcCB3b24ndCBodXJ0IHVzLgogICAgIHVuc2lnbmVkIHJl
c3VsdCA9IGRlc2lyZWRUaHJlc2hvbGQ7CkBAIC0yODM2LDcgKzI4NTIsNyBAQCBERkc6OkNvZGVP
cmlnaW5Qb29sJiBDb2RlQmxvY2s6OmNvZGVPcmlnCiAKIHNpemVfdCBDb2RlQmxvY2s6Om51bWJl
ck9mREZHSWRlbnRpZmllcnMoKSBjb25zdAogewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUo
KSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0Nv
bW1vbigpLT5kZmdJZGVudGlmaWVycy5zaXplKCk7CkBAIC0yODQ3LDcgKzI4NjMsNyBAQCBjb25z
dCBJZGVudGlmaWVyJiBDb2RlQmxvY2s6OmlkZW50aWZpZXIoCiAgICAgc2l6ZV90IHVubGlua2Vk
SWRlbnRpZmllcnMgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOwogICAg
IGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVudGlmaWVycykK
ICAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsKLSAgICBB
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIEFTU0VSVChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRm
Z0NvbW1vbigpLT5kZmdJZGVudGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRpZmllcnNdOwog
fQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpAQCAtMjk0OCw3ICsyOTY0LDggQEAgYm9vbCBD
b2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICNpZiBFTkFCTEUoREZHX0pJVCkKIHZvaWQg
Q29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkKIHsKLSAgICBBU1NFUlQoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIC8vIE9PUFMKKyAgICBBU1NFUlQo
SklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsKQEAgLTMwNTAsNiArMzA2Nyw3IEBA
IHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkxP
TEpJVDoKICAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTMyMjYsMTQgKzMyNDQsMTQgQEAgdm9pZCBDb2Rl
QmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbgogewogICAgIG1fbnVtQnJlYWtwb2ludHMg
Kz0gbnVtQnJlYWtwb2ludHM7CiAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMpOwotICAgIGlm
IChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6
aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25EdWVUb0RlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzZXRTdGVw
cGluZ01vZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGUgbW9kZSkKIHsKICAgICBtX3N0ZXBwaW5n
TW9kZSA9IG1vZGU7Ci0gICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAobW9kZSA9PSBTdGVwcGlu
Z01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAg
amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5nKTsKIH0KIApA
QCAtMzQyMSw5ICszNDM5LDkgQEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpi
eXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAgICAg
SklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGppdFR5cGUp
KQogICAgICAgICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29kZUluZGV4KCk7
Ci0gICAgZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBK
SVRUeXBlOjpGVExKSVQpIHsKKyAgICBlbHNlIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CiAgICAg
ICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKQEAgLTM0
NjYsNyArMzQ4NCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3AK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVy
LiBXZSBuZWVkIHRvIGJlCiAgICAgLy8gY2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0
IGlzIG5vdCBzaWduYWwgaGFuZGxlciBzYWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBw
ZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBtX2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0
VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRm
Z0NvbW1vbigpLT5oYXNJbnN0YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMoKTsKICNlbHNlCkBAIC0z
NDgwLDcgKzM0OTgsNyBAQCBib29sIENvZGVCbG9jazo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRz
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxl
ci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhh
dCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3Qg
cGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGpp
dFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBjb21tb25EYXRhID0g
Km1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgY29tbW9uRGF0YS5pbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHModGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzOCw3ICs0MzgsOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAg
IEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CiAgICAgfQogICAgIAog
I2lmIEVOQUJMRShKSVQpCkBAIC01MTEsNiArNTEyLDcgQEAgcHVibGljOgogICAgIFNwZWN1bGF0
ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpAQCAt
NTM5LDcgKzU0MSw3IEBAIHB1YmxpYzoKICAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5zIGltcGxp
ZXMgdGhhdCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wgaGFzQ29kZU9y
aWdpbnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpOworICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkp
OwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENhbGxTaXRlSW5k
ZXggaW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAg
ICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7
CiAgICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxv
Y2s6OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3Qg
RnVuY3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdl
dCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2Nh
dGNoUHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhpdEZyb21Bbnl0aGluZzoKICAgICAgICAgb3V0LnBy
aW50KCJGcm9tQW55dGhpbmciKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdEZyb21M
T0w6CisgICAgICAgIG91dC5wcmludCgiRnJvbUxPTCIpOworICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tREZHIik7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklU
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0
aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogICAg
IEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21MT0wsCiAgICAgRXhpdEZyb21ERkcsCiAg
ICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2ICszOSw4IEBAIGVudW0gRXhpdGluZ0pJVFR5cGUg
OiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5nSklUVHlwZSBleGl0aW5nSklUVHlwZUZvcihKSVRU
eXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xK
SVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbUxPTDsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJ
VDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9tREZHOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklU
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlz
aW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgi
CiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4K
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXpl
b2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlID0gZmFs
c2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6
Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVj
dG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0NCwyMyBAQCBw
dWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE9wZXJh
bmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBz
KQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1M
b2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkKICAgICAgICAg
OiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVt
TG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0g
ICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsK
KyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25z
dGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1ZXMuZ3Jvdyhz
aXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXph
dGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBs
aWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXpl
X3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRz
KHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBz
aXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9u
dW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2Fs
cykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAg
ICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOworICAg
ICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50
cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0
aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3Ro
ZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50
cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVy
Lm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1Db25zdGFudHMob3RoZXIubnVtYmVy
T2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgp
KTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcyLDMzICsxNzYs
NTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25z
dCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVy
T2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxv
Y2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0KIAorICAgIHRl
bXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28g
JiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAgc2l6ZV90IHRt
cEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVt
YmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgfQogICAg
IHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAg
ICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgIHJldHVy
biBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3QgY29uc3RhbnRJ
bmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJl
ck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlk
eCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUg
dG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9
CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3VtZW50KHNpemVf
dCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKwor
ICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZf
dDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyByZXR1cm4gbV92
YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUg
PSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29uc3RSZWZUeXBl
IGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAgIAogICAgIFJl
ZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgp
XTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNpemVf
dCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25z
dFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbY29u
c3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJh
bmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNzAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJl
ck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAh
IXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2FscyA9IG51bWJl
ck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7
CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92
YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRz
KCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBu
dW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRz
KCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXpl
KTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFp
dHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUgQEAgcHVibGlj
OgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29u
c3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNr
Q2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVy
YW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50
SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbElu
ZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCArMzQ4LDE1IEBA
IHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlm
IChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFj
a0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3Bl
cmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50KG9wZXJhbmQu
dG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2Fs
KCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2Nh
bCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3BlcmFuZChPcGVy
YW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0gICAgICAgIGVs
c2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisg
ICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygp
KQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVt
YmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAo
bnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAgICAgaWYgKGlu
ZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNv
bnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50
KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkpOworICAgICAg
ICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0g
Y2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6
OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKQEAg
LTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50
cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9j
YWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1l
bnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBs
b2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFuZCB0aGUgcmVz
dCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJn
dW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OworICAgIHVuc2ln
bmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5o
CShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgaW5saW5lIHZv
aWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJpbnQodmlydHVh
bFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxU
Pjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJh
bmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsK
ICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJn
dW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1wKHRtcEluZGV4
KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChjYWxsZWUoKSwg
Y29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0
cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9y
IChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5k
ZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0KKyAgICBpZiBj
b25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUi
LCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBjb25z
dCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgIG1fbGl2ZVJlZ2lz
dGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUgPSBqaXQtPmNvZGVCbG9j
aygpLT5qaXRDb2RlKCktPmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGlu
Z0NhbGxTaXRlKGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4KTsKICAg
ICAgICAgbV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uID0gbV9saXZlUmVnaXN0
ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5udW1iZXJPZlNldFJlZ2lz
dGVycygpID4gMDsKICAgICAgICAgaWYgKG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2Vw
dGlvbikKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAK
ICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lz
dGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNl
ZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5leGNsdWRlKGNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC03MTAsNyArNzEwLDcgQEAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAvLyBXZSBzZXQgdGhlc2UgdG8gaW5k
aWNhdGUgdG8gdGhlIHN0dWIgdG8gcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBDb2RlQmxvY2sncwog
ICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciB0YWJsZSB3aGVuIGl0IGlzIGRlYWxsb2NhdGVk
LgogICAgICAgICBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzID0gY29kZUJsb2Nr
OwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9ja1RoYXRP
d25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOworICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNERkdPckZUTChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzLT5qaXRUeXBl
KCkpKTsKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUu
Y2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNp
b24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNJ
bnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYg
flNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmICEodmFs
dWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RJbnQzMlNw
ZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSAmJiAh
KHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3
IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3Qg
ZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHJl
dmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFs
UmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBWaXJ0dWFs
UmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAgZnJpZW5kIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IGludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4g
dmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlz
QXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmly
dHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFpc0NvbnN0YW50
KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0
ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lz
dGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBj
b25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFs
UmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW50
IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAg
ICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVy
YW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0YXRpYyBpbnQg
YXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCArIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNvbnN0YW50VG9P
cGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdpc3RlcjsKIH07
CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVu
dFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4KQoreworICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFudFRvT3BlcmFu
ZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyNzA3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJ
bmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVt
VG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1w
cykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgaW50ZXJz
ZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBz
LCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVj
dXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCB2b2lkIE9T
UkVudHJ5RGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FOCiB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJU
KEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xK
SVQpOwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDYg
KzM5NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICBp
ZiAoZXhpdElubGluZUNhbGxGcmFtZSkKICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKKyAgICAv
LyBPT1BTOiBNYWtlIHRoaXMgZG8gdGhlIHJpZ2h0IHRoaW5nIGJhc2VkIG9uIExPTCBvciBub3Qu
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9yRXhpdCA9PSBj
b2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDYgQEAg
dW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAgIGNvbnN0ZXhw
ciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxl
czsKICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVuc2lnbmVkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFibGVzID0gY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBzID0gY29kZUJs
b2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAgICB9IGVsc2Ug
eworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNl
bGluZVZlcnNpb24oKTsgLy8gT09QUzogYnl0ZWNvZGVWZXJzaW9uCiAgICAgICAgIG51bVZhcmlh
YmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKICAgICAgICAgbnVt
VG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjcw
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAv
LyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigp
OwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFp
bGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOworICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDAsIDApOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAg
ICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24g
MjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI2ICs1MiwxNyBAQCB2b2lkIENhbGxGcmFtZTo6aW5p
dERlcHJlY2F0ZWRDYWxsRnJhbWVGCiBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0
ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgc3dp
dGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rOgotICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKLSAgICBjYXNlIEpJVFR5cGU6Okhvc3RD
YWxsVGh1bms6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxv
Y2soKS0+aml0VHlwZSgpKTsKIH0KIAogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNv
ZGVPcmlnaW5JbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKICAgICBz
d2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bms6CisgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJ
VFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSklUVHlwZTo6
REZHSklUOgogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTc5LDggKzcwLDYgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmln
aQogICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsMTAg
KzQ1NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBIYW5kbGVySW5mbyogZmluZEV4CiAKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwogICAgIHVuc2ln
bmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleDsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4
ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwotICAgIGVsc2UKKyAgICBpZiAo
SklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jay0+aml0VHlwZSgp
KSkKICAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUlu
ZGV4KCkub2Zmc2V0KCk7CisgICAgZWxzZQorICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXgg
PSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiAKICAgICByZXR1cm4gY29kZUJs
b2NrLT5oYW5kbGVyRm9ySW5kZXgoZXhjZXB0aW9uSGFuZGxlckluZGV4LCByZXF1aXJlZEhhbmRs
ZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjcwNzg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMiArMzAsMTggQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2Rl
R3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJCeXRlY29kZVVzZURl
Zi5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tX
aXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkRp
c2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5l
cmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMu
aCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgor
I2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVk
ZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYg
KzU1LDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3
dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjgsODkxIEBAIFNlY29u
ZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsK
IFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0
cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRU
eXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7Cisg
ICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsK
KworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9
OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRl
Y29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSBy
YWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBp
dCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAg
IGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0
ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAg
cmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVy
YW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJh
bmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7Cisg
ICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFy
Z3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Yml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+
YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0Pigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBl
KGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQ
cm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBt
ZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5z
dHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxf
dmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAm
JiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxlID0g
bWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYgKHBy
b2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBp
ZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQ
dXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIg
YmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3Ry
aW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNh
c2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZd
IChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQg
PSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJp
Z2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQg
JiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5
QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92
ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5h
TkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAg
ICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91
YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlv
bihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNC
aWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIChTcGVj
QmlnSW50IHwgU3BlY09iamVjdCkpIHx8ICEhKHJpZ2h0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2Jq
ZWN0KSkpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCaWdJbnQ7CisgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICB9OworCisgICAgICAgIGlm
IChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9zdWIpCisgICAgICAgICAgICBoYW5kbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5h
czxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShs
ZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRlciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9uICUg
MAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSB8IFNwZWNE
b3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNC
aWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgor
ICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21lIGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRiYWNr
IGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRBc0RvdWJs
ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNh
c2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSkg
eworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBlRm9yKHNyYyk7CisgICAg
ICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpID8gU3BlY0FueUludEFz
RG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlu
cHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7Cisg
ICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQp
KSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZURvdWJsZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRz
dCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJl
cik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUu
bV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7
CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwor
ICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwg
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
fSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAg
ICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0
ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJbnRT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworCisg
ICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBo
YW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVGb3Io
Ynl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29s
ZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMy
T25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9OworICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAg
ICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1
dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlwZSkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgewor
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5
cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tl
eTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRp
dmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAg
ICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAm
IH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJs
b2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9w
ZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0
byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJl
YWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHByb2Zp
bGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJz
KCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkp
LCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJy
YXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNB
cnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFk
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVh
ZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRl
eGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9y
ZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVy
IGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4
cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3Jf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JG
dW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19n
ZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVj
RnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0
b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5
bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Nj
b3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9l
bnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVy
dHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1
Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5T
dHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0Nl
bGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3Bu
YW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1
Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCksIFNwZWNTdHJpbmcg
fCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmlu
ZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigp
LCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5n
dGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4o
KSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9z
Y29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4o
KSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2Nv
cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
RGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRB
cmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJn
dW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25l
ZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9y
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BT
cHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhw
PigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdy
ZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Jl
bG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51
bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJp
bmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNw
ZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRl
ZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxh
dGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Rl
bF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxh
YmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93
aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9w
X2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9w
X25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBl
cl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToK
KyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tf
dHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAg
IGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2Fz
ZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFt
ZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2Rh
dGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAg
Y2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgor
ICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9q
bmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9q
bnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmlj
dGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2Fz
ZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoK
KyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBv
cF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRl
cmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2Fz
ZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9m
aWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9w
X3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9f
YXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1
dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFt
ZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVf
ZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6Cisg
ICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3Rs
czoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVf
cHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAg
ICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxp
bnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dl
bmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6
CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
bmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVu
Y3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21f
aW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3Ry
YW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50Ogor
ICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xv
Y2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3Bf
Z2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1
ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSB3YXNtX3RyYW1w
b2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0X25vX3RsczoKKyAgICBjYXNlIG5vcm1hbF9vc3JfZXhp
dF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6
CisgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgorICAgIGNhc2Ugb3Bf
Y2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxf
Y2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92
YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9ldmFsX3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsOgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29w
X2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dDoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfb3BfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxf
c2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3Nsb3c6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF90YWlsX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
Y2FsbF9ldmFsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHRf
c2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3Blbl9zbG93OgorICAg
IGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja191
bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJp
dHlfY2hlY2tfdGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGlu
dF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3RhZzoKKyAgICBjYXNlIHdhc21f
dHJhbXBvbGluZV93YXNtX2NhbGw6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxs
X25vX3RsczoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Q6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtl
VW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsg
KytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5u
dW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2Nv
ZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwg
Ym9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9j
a2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9m
aWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1
ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9j
aygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOwor
CisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcp
IHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJv
ZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJn
dW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAg
IGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0u
YXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247
CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgYm9vbCBjb21wdXRlVXNlQ291bnRzID0gdHJ1ZTsK
KyAgICBtX3VzZUNvdW50cy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBkbyB7CisgICAg
ICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgor
ICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBo
IG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91
Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9w
ZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEg
YmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFw
aCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRI
ZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoY29tcHV0ZVVzZUNvdW50cykK
KyAgICAgICAgICAgICAgICBtX3VzZUNvdW50c1tibG9jay5pbmRleCgpXSA9IE9wZXJhbmRzPHVu
c2lnbmVkLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIDAp
OworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4
aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggeyBpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkgfTsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2NrLmluZGV4KCldLm9wZXJh
bmQob3BlcmFuZCkgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3VycmVudEluc3Ry
dWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxv
Y2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywg
Y3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5z
dWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdWNjZXNzb3JPcGVyYW5kcyA9
IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFu
ZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGNvbXB1dGVVc2VDb3VudHMgPSBmYWxzZTsKKyAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgbV9n
cmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3By
ZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2Fs
bCgKQEAgLTY3LDcgKzk2MCwxMyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRh
Zz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK2Jvb2wgSklUOjp1c2VMT0woKQor
eworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7CisgICAgcmV0dXJuIG1fdXNlTE9MOworfQor
CitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBjb21w
aWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDog
SlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmlu
dGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUsNiArOTc0LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAg
ICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgICwgbV91c2VMT0woY29t
cGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxPTCkKIHsKIH0KIApAQCAtMTM3LDExICsxMDM3LDE3
IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgICAgICArK21fYnl0
ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBcCiAgICAgTkVYVF9PUENPREUobmFtZSkKIAotI2Rl
ZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCisjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUs
IGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0
ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAorICAgICAgICAgICAgbV9jaGVj
a2VkVXNlTE9MID0gdHJ1ZTsgXAorICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7IFwKICAgICAg
ICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsgXAorICAgICAgICAgICAgaWYgKHVzZUxPTCgpICYmIGRzdC5pc1ZhbGlkKCkpIHtcCisgICAg
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gdHlwZTsgXAorICAgICAgICAgICAgICAgIHdp
bGxEZWYoZHN0KTsgXAorICAgICAgICAgICAgfSBcCiAgICAgICAgIH0gXAogICAgICAgICBORVhU
X09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7IFwKICAgICB9CkBAIC0xNTYsMjYgKzEwNjIsMzIg
QEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5F
X1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xv
d18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18j
I25hbWUoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENP
REUobmFtZSk7IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFt
ZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVt
aXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAor
ICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OyBcCisgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAg
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93
UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIs
ICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCkBAIC0yMzEsMTggKzExNDMsODcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkg
ewotICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5z
aXplKCk7Ci0gICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4
ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIFdl
J3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVu
cmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcg
aWYgaXQncyBldmVyIGhpdC4KLSAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8v
IE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7Cisg
ICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBm
b3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0Vu
dHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJ
bmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJl
ZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQot
ICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0
cigpOwotICAgICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgIGZv
ciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgewor
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkgPj0gKG1fY3VycmVudEJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50
b3RhbExlbmd0aCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiUmVnIGFsbG9jIGF0IGVuZCBvZiBiYiMiLCBtX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3Vy
cmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFtt
X2N1cnJlbnRCbG9jay0+aW5kZXgoKV0gPSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKwor
ICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tG
b3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1f
Y3VycmVudEJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJv
bVByaW9yQmxvY2tzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3Nv
cnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29y
c1NldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRl
Y2Vzc29yIDogcHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
ICghbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxQcmVkZWNlc3NvcnNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJl
ZGVjZXNzb3JzU2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9t
UHJpb3JCbG9ja3MgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50U3RhdGUgPSAqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBw
cmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50U3RhdGUubWVyZ2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3Rh
dGVGcm9tUHJpb3JCbG9ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRC
bG9ja1N0YXRlKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRl
eCgpXTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVudFVzZUNvdW50cyA9IFdURk1vdmUobV91
c2VDb3VudHNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICBtX3Nw
aWxsQ2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwor
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFy
dEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92
ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJs
ZS4KKyAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3Mg
ZXZlciBoaXQuCisgICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9y
Qnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
LmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCkBAIC0yNzgs
NDYgKzEyNTksNTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxv
Z0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7
CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklO
RV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVy
KQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0
eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rp
b24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChz
cHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2dlbmVyaWNfcHJvcGVydHkpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19P
UCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJh
dG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTGVzcz4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGxlc3NlcSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKS5tX2RzdCwgU3Bl
Y0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHcmVhdGVyPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ3JlYXRlcmVxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigp
Lm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLm1fZHN0LCBTcGVjQm9vbGVh
bikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodHlwZW9mLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigp
Lm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2Jq
ZWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24sIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19P
UChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCkubV9kc3QsIFNwZWNPYmplY3RP
dGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRv
cCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJl
Z2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dp
dGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+
KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0
YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVf
U0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVj
Tm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3Rl
cigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9y
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5l
d19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdf
YXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCku
bV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLm1fZHN0LCBTcGVjSW50MzJPbmx5KQorICAg
ICAgICBERUZJTkVfU0xPV19PUChoYXNfZ2VuZXJpY19wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc0dlbmVyaWNQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAg
ICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVk
QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2Rz
dCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1l
bnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1
dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0
LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VP
YmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9h
ZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTM4NiwxMSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9z
dXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9l
bmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAg
ICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAg
ICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc4
LDYgKzE0NzAsNjYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAg
IGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAg
ICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9w
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
ZGVidWc6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9n
dWU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVjayBMT0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAg
IGF1dG8gY291bnQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQmIGNvdW50ZXIgPSBtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICAgICAgICAgICAgICAtLWNvdW50ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFj
b3VudGVyKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9PUFM6IERvIHRoaXMgbGF6aWx5IGlu
IHNsb3cgcGF0aCBjcmVhdGlvbi9zcGlsbEZvckNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy9t
X3NwaWxsQ2FuZGlkYXRlcy5hcHBlbmQob3BlcmFuZCk7CisKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IGdwckZvck9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihncHIpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsb2JiZXIoZnByKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3Bv
aW50ID0gY3VycmVudEluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9p
bnQtLTspIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9j
b2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAg
ICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVu
dEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRh
TG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4i
KTsKICAgICB9CkBAIC00OTgsNiArMTU1MCwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpCiAgICAgbV9qbXBUYWJsZS5jbGVhcigpOwogfQogCitzdGF0aWMgdm9pZCBzbG93
Q2FzZVJhbihTdHJpbmcga2V5KQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFz
aE1hcDxTdHJpbmcsIHVpbnQ2NF90Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAg
c2xvd0Nhc2VzLmNvbnN0cnVjdCgpOworICAgIH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nh
c2VzLmdldCgpOworICAgIHVpbnQ2NF90IHZhbHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0
b3ItPnZhbHVlOworICAgIGlmICgodmFsdWUgJSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9n
TG4oa2V5LCAiOiAiLCB2YWx1ZSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiB7CiAgICAgbV9nZXRCeUlkSW5kZXggPSAwOwpAQCAtNTE2LDE0ICsxNTgyLDI1IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJv
ZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFyZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRI
YXZpbmdTbG93Q2FzZSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Ns
b3dDYXNlID0gMDsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRl
ciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0g
ICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNs
b3dDYXNlIDogbV9zbG93Q2FzZXMpIHsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nh
c2UuYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAg
ICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93
Q2FzZS5qdW1wc1swXS5saW5rKHRoaXMpOworCisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJz
dFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKworICAgICAgICBpZiAoZ2V0ZW52KCJwcmludFNsb3dDYXNlcyIpICYm
IGF0b2koZ2V0ZW52KCJwcmludFNsb3dDYXNlcyIpKSkgeworICAgICAgICAgICAgU3RyaW5nUHJp
bnRTdHJlYW0gbmFtZTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKG5hbWUpOworICAg
ICAgICAgICAgU3RyaW5nIGtleSA9IG5hbWUudG9TdHJpbmcoKSArICIgYmMjIiArIFN0cmluZzo6
bnVtYmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgKyAiICIgKyBvcGNvZGVOYW1lc1tjdXJy
ZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCldOworICAgICAgICAgICAgcHJvYmUoWz1dKFByb2Jl
OjpDb250ZXh0JikgeworICAgICAgICAgICAgICAgIHNsb3dDYXNlUmFuKGtleSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBy
YXJlQ2FzZVByb2ZpbGUgPSBudWxscHRyOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQpAQCAtNTgwLDcgKzE2NTcsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2NoZWNrX3RyYXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfbmVnYXRlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAt
NTk5LDYgKzE2NzUsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGluYykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjM1LDE1ICsx
NzE0LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RU
bywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkg
fHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQo
KSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAg
ICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9
PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNl
dCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Cisg
ICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
JnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBz
byB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwog
ICAgIH0KQEAgLTY4OCw2ICsxNzcwLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2lu
ZyhKSVRDb21waQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBP
T1BTOiBoZWxwZnVsIGZvciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNo
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3
OCw2ICsxODYyLDg4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkK
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgYm9vbCBwcmludEVh
Y2hPU1IgPSBnZXRlbnYoInByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFj
aE9TUiIpKTsKKworICAgIGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1
bXBMaXN0IGV4aXRDb21tb247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBz
KSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAg
ICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0
aGlzKTsKKworICAgICAgICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAgICAgICAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5kdW1wKHByaW50U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHBy
aW50U3RyZWFtLnRvQ1N0cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVm
KCk7IC8vIGxlYWsgaXQuCisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBl
eGl0IGF0IGJjIyIsICBieXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMu
CisKKyAgICAgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4
aXRDb21tb24uYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4
aXRDb21tb24uZW1wdHkoKSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0aGlzKTsKKworCisg
ICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOwor
ICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlu
cyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBi
ZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdp
c3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJl
Z2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwor
ICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJh
cnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcp
LCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihy
ZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7Cisg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkp
OworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBU
cnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0
aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFn
UmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQ
QyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0
aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVt
YmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0
aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMy
KAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAg
ICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRy
YW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAg
ICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xp
bmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5h
dGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAg
ICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRh
dGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAg
IG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIs
IE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0
b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29u
IGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExM
SW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAg
ICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05NjcsNyArMjEzMyw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQg
PSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAg
ICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05NzgsNyArMjE0NCw3IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2Nr
ZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
cmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAg
IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VM
T0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRl
ZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjM4LDk1MSBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9P
UFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4
aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRK
dW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0
SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorVmVjdG9yPFJlZywgMzI+IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8g
T09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJl
bnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgVmVjdG9yPFJlZywgMzI+
IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQg
YWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKGFs
bG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hcHBl
bmQocmVnKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30K
Kworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMy
Pj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxs
b3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVu
IHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21w
aWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdh
bnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4u
CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJl
Z3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwor
dm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtz
IGN1cnJlbnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5p
Y2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8v
aWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRl
eCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJ
VDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRl
ZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAg
ICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJ
VDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9P
UFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnBy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJl
Zyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7
CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQg
Ym90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAg
ICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9w
ZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAv
LyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJl
Y2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAg
Ly8gLSBWYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAv
LyAtIH5WYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBk
ZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVw
IGZ1bGx5CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5
IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5W
YWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAg
ICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5k
ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwor
dm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xv
YmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgewor
ICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVy
KGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2
ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxk
IGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElm
TmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1Zh
bHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1h
a2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJh
bmQpKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0
b0lnbm9yZSwgRlBSUmVnIHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQg
YmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVy
YW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0
ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUu
b3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3Bp
bGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWcuZnByKCkgIT0gdG9JZ25v
cmVGUFIpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gdG9J
Z25vcmUpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKworICAgIHJl
c3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMs
IDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJD
YWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVj
b3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsK
KyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3Jk
LnNhdmVQbGFuKTsKK30KKworc3RhdGljIHZvaWQgYWRkTG9hZENvdW50KHVpbnQ2NF90IGNvdW50
KQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb3VudGVyOworICAgIGZvciAodWludDY0X3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgaWYgKGNv
dW50ZXIgJSAxMDAwMCA9PSAwKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJSdW50aW1lIGxvYWQg
Y291bnQ6ICIsIGNvdW50ZXIpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2
ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBj
b25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgdWludDY0X3QgbG9hZENvdW50ID0gMDsK
KyAgICBmb3IgKGF1dG8mIHR1cGxlIDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHN0
ZDo6Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBzdGQ6
OmdldDwxPih0dXBsZSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUgPSBzdGQ6
OmdldDwyPih0dXBsZSk7CisKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQo
IWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgRGlzYWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaCgqdGhpcyk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUpKQorICAgICAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBicmFuY2hJZkludDMy
KEpTVmFsdWVSZWdzIHsgc2NyYXRjaCB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAgICAgICAgaXNJbnQzMi5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gs
IHJlZy5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICArK2xvYWRDb3VudDsKKyAgICB9CisKKyAgICBp
ZiAoZmFsc2UgJiYgbG9hZENvdW50KSB7CisgICAgICAgIHByb2JlKFs9XSAoUHJvYmU6OkNvbnRl
eHQmKSB7CisgICAgICAgICAgICBhZGRMb2FkQ291bnQobG9hZENvdW50KTsKKyAgICAgICAgfSk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKHNsb3dDYXNl
LnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklU
OjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAv
LyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBK
U1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwg
YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2ln
blJlZyhncHIsIG9wZXJhbmQpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJP
bmx5OworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBG
UFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0
ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAu
Z3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAg
ICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMg
KC9jaGVja3BvaW50cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3Np
Z25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQor
Cit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFs
dWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5v
cGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BS
VGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQor
CitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6
R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFs
aWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6
RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6
RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisg
ICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9j
ayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBp
ZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9j
YXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5k
LCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAg
ICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2Vs
bE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJl
ZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAg
ICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9q
aXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9q
aXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0
LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKwor
SklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitK
SVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBt
X2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5k
LmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0g
bV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICgh
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkp
IHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIo
SlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpT
VmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmls
dGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9q
aXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgbV9qaXQuYXNzaWduUmVn
KG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Ok51bWJl
ck9wZXJhbmQ6Ok51bWJlck9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBS
UmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6
On5OdW1iZXJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJS
ZWcgSklUOjpOdW1iZXJPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlk
RlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAg
ICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigp
OworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRl
bXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
KworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQu
YnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMp
OworCisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1
ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgfQorCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworICAgIHJl
dHVybiBtX2ZwcjsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpJbnQzMkNvbnZl
cnRpbmdPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjp+
SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZUlu
dDMyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIG9wIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgICAgICBtX2dwciA9IG9wLmdwcigpOworICAgICAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX29wZXJh
bmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVy
YW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKwor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0IH07CisgICAgICAgIEZQ
UlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0
LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICAgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFs
dWVHUFIsIG1fZ3ByLCBmcHIpOworICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02
NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQz
MkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9q
aXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dw
cik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVs
c2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFu
Y2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nl
c3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGls
bEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8g
b3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBm
cHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7
CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIs
IG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICB9IGVsc2UgaWYg
KG1faml0LnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4obV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBt
X2ppdC5zcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAgIG1f
aml0LmFuZDMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICB9IGVsc2Ug
aWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlT3RoZXIobV9vcGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAg
ICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQ
Ui5mcHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25lOworCisgICAgICAgIGF1dG8gaXNJbnQz
MiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBub3REb3VibGUgPSBtX2ppdC5icmFuY2hJZk5vdERv
dWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0
ZXJzKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7
CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJBUk02NDo6c3VwcG9y
dHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNlbWFudGljcygpKSB7Cisg
ICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2YVNjcmlwdFNlbWFu
dGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIG1fZ3ByLCBCcmFuY2hJ
ZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0byBzcGlsbFJlY29yZCA9IG1f
aml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0
LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhoYXNTZW5zaWJsZURv
dWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93IDogb3BlcmF0aW9uVG9J
bnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5zaWxlbnRGaWxsQWZ0ZXJDYWxs
KHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBub3REb3VibGUubGluaygmbV9qaXQpOworICAgICAgICBhdXRv
IG5vdE90aGVyID0gbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0sIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RPdGhlci5s
aW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZk5vdEJvb2xlYW4oSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcikpOworICAgICAg
ICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvV29yZCh2YWx1ZUdQUiwgbV9ncHIpOwor
CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7
CisgICAgfQorCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3Rh
dGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vy
cmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMu
bnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5U
eXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0
YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9j
b2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIs
ICIsIGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkK
K3sKKyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8g
cmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dM
bihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig
KGF1dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5p
c0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRh
dGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBkYXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVk
ZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29k
ZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlu
a0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQot
ICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2
ZVBsYW4gPSBWZWN0b3I8c3RkOjp0dXBsZTxSZWcsIFZpcnR1YWxSZWdpc3RlciwgU3BlY3VsYXRl
ZFR5cGU+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAg
ICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNs
b3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQor
ICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAg
ICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVz
dCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZl
IG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxh
bjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3
ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsK
IAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTk3LDYgKzIxMiw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJl
c3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwog
CiAgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNl
SklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHVi
Q2FsbDsKIApAQCAtMjA0LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0
QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFn
aWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBz
aWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNv
bXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEg
cGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJ
ZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVChWTSYsIENv
ZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZVR5cGUg
eworICAgICAgICAgICAgQmFzZWxpbmUsCisgICAgICAgICAgICBMT0wKKyAgICAgICAgfTsKKyAg
ICAgICAgCisgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayosIENvbXBpbGVUeXBlLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAg
ICAgICAgIH5KSVQoKTsKIAogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VK
SVQ6OnZtKCk7IH0KQEAgLTIyMCwyMiArMjM2LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5
dGVjb2RlSW5kZXgoMCkpCisKKyAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUs
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7Cisg
ICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBieXRlY29k
ZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxv
Y2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVU
eXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlW
YWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI0MywyMSArMjU5LDIxIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RhdGljIHZvaWQgY29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtp
bmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0
dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAg
ICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAg
IGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ss
IENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4
ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKICAgICAgICAgfQpAQCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZv
ckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxG
b3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwo
cmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzUzLDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3Qg
SnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyBy
ZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQg
YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVn
IHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1w
LCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyArMzY1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lk
IGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlE
ICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKQEAgLTM1MCw3ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM5Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BT
dHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBO
RXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAg
ICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRl
clZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1NDAsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lk
IGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJ
bXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC01MTcs
MTIgKzU0OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93
T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVy
YXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xv
d0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0
KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1w
bChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYsOSArNTg3
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRo
X3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVn
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02MTAsNyArNjUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3RydWN0aW9u
Kik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02Nzgs
NzggKzcyMSw4MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1l
bnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90
b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNs
b3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNv
bnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0Umln
aHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hp
ZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVk
KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3
RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
VmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNl
bHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
SlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTc2NCw4ICs4MTAs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdl
dENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzc4LDM4ICs4MjIsMTggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5v
blByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2
b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7Ci0KLSAgICAgICAgSnVt
cCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAg
ICAgICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwot
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFp
dGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAg
ICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldCk7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAg
ICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleCht
X3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlT
bG93Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBi
b29sIGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtODkxLDYgKzkxNSwyNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAg
ICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVw
ZGF0ZVRvcENhbGxGcmFtZSgpOworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb24pOworICAgICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiBjYWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4p
OworICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRvIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZhbHVl
RlBSLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykK
ICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJn
cy4uLik7CkBAIC05MDIsNiArOTQ2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBO
b1Byb2ZpbGluZwogICAgICAgICB9OwogCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgor
ICAgICAgICBib29sIHRyeUVtaXRMT0xCaXRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKTsKKwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5h
bWUgU25pcHBldEdlbmVyYXRvcj4KICAgICAgICAgdm9pZCBlbWl0Qml0QmluYXJ5T3BGYXN0UGF0
aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kg
c2hvdWxkRW1pdFByb2ZpbGluZyA9IFByb2ZpbGluZ1BvbGljeTo6Tm9Qcm9maWxpbmcpOwogCkBA
IC05NjEsNiArMTAwOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBy
dW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0
aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29t
cGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsK
ICAgICAgICAgCkBAIC05NzEsNiArMTAyMSwyOTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUg
Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9
IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBS
VGVtcCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRG
UFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAg
R1BSUmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIg
Yml0cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJl
ZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBt
X29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5v
dENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxP
cGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6Cisg
ICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAg
ICAgfTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOwor
ICAgICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQ
UlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAg
ICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYg
bV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIE51bWJlck9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOdW1i
ZXJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5O
dW1iZXJPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICAvLyBTcGVjdWxhdGUgbnVtYmVyK2Jvb2xlYW4rb3RoZXIs
IGFuZCBjb252ZXJ0IHRvIGkzMi4gVXNlZnVsIGZvciBiaXRvcHMuCisgICAgICAgIGNsYXNzIElu
dDMyQ29udmVydGluZ09wZXJhbmQgeyAKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50
MzJDb252ZXJ0aW5nT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAg
ICAgICAgICB+SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdw
cigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAg
ICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUm
IHByb3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFu
ZCkpOworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKwor
ICAgICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcu
b3BlcmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2Nl
ZFJlZzsKKyAgICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRT
dGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0cnVjdCBSZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVn
XTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3Jl
Z107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1ty
ZWddOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB3aWxsRGVmKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdQUlJlZyYg
Z3ByID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9
IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVy
YW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEZQUlJlZyYgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsK
KyAgICAgICAgICAgICAgICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVn
IGdwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZWdWYWx1ZShncHIpLm9wZXJhbmQuaXNWYWxpZCgpKTsKKworICAgICAg
ICAgICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
KGdwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAg
IGlmICghbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWdWYWx1ZShmcHIpLm9w
ZXJhbmQuaXNWYWxpZCgpKTsKKworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9
IGZwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisjaWYg
QVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50VXNlQ291bnRzLm9wZXJh
bmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZUludDMyQ29udmVydGluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCksIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNPdGhlciB8IFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWND
ZWxsQ2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJp
bmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxh
dGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7Cisg
ICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAg
ICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1
cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50
ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAg
ICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBz
ZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFs
dWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUg
cmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAg
IHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBTYXZl
UGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVu
dFNwaWxsQmVmb3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUgPSBJbnZhbGlkR1BSUmVnLCBGUFJSZWcg
dG9JZ25vcmVGUFIgPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0
ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9y
ZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kVG9J
Z25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVy
OwogCiAgICAgICAgIFZlY3RvcjxGYXJDYWxsUmVjb3JkPiBtX2ZhckNhbGxzOwpAQCAtOTkwLDcg
KzEzMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9q
bXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3Jk
PiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2Nv
cGllZEdldFB1dEluZm9zOwpAQCAtMTAyNyw2ICsxMzYzLDg3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9z
aG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAg
ICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cwor
ICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBH
UFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZwciB7IElu
dmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxvY2VkUmVn
JiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IG90aGVy
LmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
ICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAgZnByID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1
Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9Owor
ICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBib29sIGlz
QWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdW
YWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQg
IT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQgIT0gb3Ro
ZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9IG90aGVy
LmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
ICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAg
IH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFuZHM8
QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8
UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9j
a1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3Bl
cmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRU
b1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09
IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIu
cHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXpl
KCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAg
ICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAgICAgICAgdm9pZCBkdW1wUmVn
YWxsb2NTdGF0ZSgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBt
X2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVs
bHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+PiBt
X3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1
ZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczx1bnNpZ25l
ZCwgdHJ1ZT4+IG1fdXNlQ291bnRzOworICAgICAgICBPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4g
bV9jdXJyZW50VXNlQ291bnRzOworICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAxNj4g
bV9zcGlsbENhbmRpZGF0ZXM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7
CisKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsK
KyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAg
ICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxP
TCB7IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Qnl0ZWNvZGVJbmRleCwgSnVt
cExpc3Q+PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24g
MjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsODYgKzQyLDg4IEBACiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5o
IgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQ
cmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBE
b3VibGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFs
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpn
cmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhh
bkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRl
clRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwg
ZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywg
dHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0
cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEsMzIgKzE1Myw5MSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsK
LSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworCisg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgcmVzdWx0KTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9w
MSwgaW5wdXRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQoaW5wdXRHUFIpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NU
aGFuLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKGlucHV0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1
bHQsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29k
ZU51bWJlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigw
KSkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICB9CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBk
b3VibGVDb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3Vi
bGVDb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24g
ZG91YmxlQ29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0
aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1l
ZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1t
ZWRpYXRlCiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwgbGhzLmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0
aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB8fCAhcHJlZGljdGlvbkZvcihvcDEpIHx8ICFw
cmVkaWN0aW9uRm9yKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5m
cHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChs
aHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOwor
ICAgICAgICB9CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKQEAgLTIyOSwxNyArMjkwLDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXAoY28KIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcg
bGhzR1BSOworICAgIEdQUlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBs
aHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdl
dExIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3By
KCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAg
IGF1dG8gZ2V0UkhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNU
ZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAg
IH07CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAg
ICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3Ay
aW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAg
IGdldFJIUygpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudElu
dChvcDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVn
VDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9
IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIs
IHJlZ1QxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
ICAgICB9CiB9CiAKQEAgLTI1NSw0MyArMzQyLDg5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BS
OworICAgIEdQUlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1w
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9
IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBs
YWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8g
Z2V0UkhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5n
cHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRH
UFIgPSByZWdUMjsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygp
OwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwot
ICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDAp
OworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJl
c3VsdEdQUik7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGdldFJI
UygpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEp
OwotICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3Ax
aW1tKSwgcmVnVDApOworICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNH
UFIsIEltbTMyKG9wMWltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNv
bXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgICAgICBnZXRMSFMo
KTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOwogICAgIH0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29u
ZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlv
biwgb3BlcmF0aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
U2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3Bl
cmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6
ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJh
dGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAg
YXV0byBmYWxsdGhyb3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBOb25aZXJvIDogWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGZhbGx0aHJvdWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0
aGUgc2xvdyBwYXRoOgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50
IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRp
bmctcG9pbnQgbnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRp
bmctcG9pbnQgbnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBp
c09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjAp
OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMzAwLDgg
KzQzMyw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9
CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkg
ewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAg
ICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjYsOCArNDU3
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAg
ICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAg
ICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MSwxMiArNDgwLDEx
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQu
Ci0KICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWls
MSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIo
cmVnVDEpOworICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAg
ICAgIEp1bXAgZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVt
YmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QxKTsKICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY5
LDkgKzQ5Nyw5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAg
ICAgICAgZmFpbDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAg
ICAgZmFpbDMubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAK
LSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC0z
ODEsMTEgKzUwOSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7IC8vIE9P
UFM6IGVuc3VyZSBmb3IgYWxsIG9wY29kZXMgcHJvdmVuVHlwZSBhZ3JlZXMgdy8gdGhlIHByZWRp
Y3Rpb24gcHJvcGFnYXRpb24uCisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAg
ICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwgZnByKTsKKyAgICAgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBhZGREb3Vi
bGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgICAgIHNldERvdWJs
ZShzcmNEc3QsIGZwcik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3Bl
Y0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwg
aW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigpOwor
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBh
ZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0RG91
YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1i
ZXIoc3JjRHN0KSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91Ymxl
KEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNE
c3QsIGZwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21l
IEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAg
ICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzkzLDExICs1NjMsNjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0
aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxv
dywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgewor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRG
UFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5m
cHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwgcmVz
dWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsK
KyAgICAgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIp
OworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBGUFIsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3Zl
cmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7
CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0
RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnBy
KCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAg
ICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAg
ICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOdW1iZXIoc3JjRHN0KSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lID0gMS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUp
LCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5w
dXRGUFIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93
Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIo
aW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0g
U3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJv
eEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KQEAgLTQwNyw1NCArNjI4LDExMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5z
dHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1f
bGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpIHx8
IHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKwor
ICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0
VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0VGVt
cC5mcHIoKTsKKworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2Vw
dGlvbkNoZWNrKE1hdGg6OmZtb2REb3VibGUsIHJlc3VsdEZQUiwgbGhzRlBSLCByaHNGUFIpOwor
CisgICAgICAgICAgICBzZXREb3VibGUoZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUg
Y29ycmVjdCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBY
ODZSZWdpc3RlcnM6OmVheCk7CisgICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAg
ICBhdXRvIGVkeCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0
ZXJzOjplY3g7CisgICAgQVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9
IGVkeCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1Q0KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBlYXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJl
ZyBsaHNHUFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOwor
ICAgICAgICBjbG9iYmVyKGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4
VGVtcC5lbXBsYWNlKCp0aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMs
IGVkeCk7CisgICAgICAgIGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBl
YXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAt
PmdwcigpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVt
cC5lbXBsYWNlKCp0aGlzLCBsaHMpOworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJo
cyk7CisgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6
IG5ldyBuYW1lLCBsaWtlIHNwaWxsRXhwZWN0aW5nU2xvd1BhdGgKKworICAgICAgICBlbnN1cmVT
bG93Q2FzZShlYXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxo
cykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMsIGxoc0dQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzIocmhzLCByaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAg
ICAgICAgbW92ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGhzR1BSID0g
cmVnVDQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgbGhzR1BSLCByaHMs
IGVjeCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICAgICAgbW92ZShsaHNHUFIsIGVh
eCk7CisgICAgfQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3QzMihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgz
NjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAgeDg2Q29u
dmVydFRvRG91YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4KTsKLSAgICBKdW1wIG51bWVy
YXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3Rl
ZEltbTMyKDApKTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhp
cyk7Ci0gICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vsc2Ug
Ly8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsK
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgZWF4KTsK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUobGhzKSwgU3BlY0JpZ0ludCkgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShyaHMpLCBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
aWdJbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBlYXgpOwogfQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKQEAg
LTQ2NCw3ICs3NDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1w
TGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3NCw2ICs3
NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAg
ICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkp
IHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYyLDE1ICs4NDAs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3Vi
bGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlv
biwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIs
IHJlZ1QzLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CkBAIC03MjQsMTMgKzEwMDAsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmVnYXRlKGNvbnN0IEluc3RydWN0aQogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdh
dGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3
aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbikpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9z
ZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50
Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJ
Q1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRo
TmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSwgc2xvd0Nhc2UpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KK2Jvb2wgSklUOjp0cnlFbWl0TE9MQml0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGlmICgh
dXNlTE9MKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworCisgICAgYXV0
byBiaXRPcCA9IFsmXSAoR1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQUikgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxP
cCwgT3BCaXRhbmQ+KQorICAgICAgICAgICAgYW5kMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXRv
cj4pCisgICAgICAgICAgICBvcjMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0eG9yPikKKyAgICAg
ICAgICAgIHhvcjMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wTHNoaWZ0PikKKyAgICAgICAgICAgIGxz
aGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wVXJzaGlmdD4pCisgICAgICAgICAgICB1cnNoaWZ0
MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHBy
IChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BSc2hpZnQ+KQorICAgICAgICAgICAgcnNoaWZ0MzIobGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1
bHRHUFIpOworICAgIH07CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyQ29udmVydGlu
ZyhvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyQ29udmVydGluZyhvcDIpKSB7CisgICAgICAg
IEludDMyQ29udmVydGluZ09wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQz
MkNvbnZlcnRpbmdPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKyAg
ICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3As
IHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03NDEsMTcgKzEwNzAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgorICAg
IGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAg
ICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTc2MCwzMyArMTA4MCwxMDYgQEAgdm9pZCBKSVQ6
OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgICAgICBsZWZ0T3BlcmFuZC5zZXRD
b25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKICAgICBlbHNlIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQz
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVm
dE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICAvLyBPT1BT
OiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJl
Z1QyOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICBpZiAoIWxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKLSAgICBTbmlwcGV0
R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKIAorICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2Vu
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAg
IEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxp
bmsodGhpcyk7CisKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1
bHRSZWdzLmdwcigpLCByZXN1bHQpOworCiAgICAgaWYgKHByb2ZpbGluZ1BvbGljeSA9PSBQcm9m
aWxpbmdQb2xpY3k6OlNob3VsZEVtaXRQcm9maWxpbmcpCi0gICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1bHRSZWdzLmdwcigpKTsKIAotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJl
cikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMy
T25seSB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAg
IHJlc3VsdElzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBp
bnB1dEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBj
YXNlIGZvciBCaWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50
MzIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAg
ICBib3hJbnQzMihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIp
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNC
aWdJbnQ7IAorICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04
MDMsNyArMTE5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGkK
IAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0UmVncyk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDks
MTkgKzEyNDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRG
YXN0UGF0aDxPcD4oY3VycmVudEluc3RydWN0aW9uKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kOwpAQCAtODczLDIxICsxMjU1LDc3IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQ
YXRoKGNvbnN0IEkKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkg
fHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcg
c2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBJbnZhbGlkRlBSUmVnOworCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNj
cmF0Y2hUZW1wRlBSOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4g
aGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlBSLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3Jh
dGNoVGVtcEZQUi0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworCisgICAgICAgIGlmICghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vs
c2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisgICAgRlBS
UmVnIHNjcmF0Y2hGUFIyID0gZnBSZWdUMjsKKwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25z
dCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAg
IGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAogICAgIEpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIHNuaXBw
ZXRTaGlmdFR5cGUpOworICAgICAgICBzY3JhdGNoRlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
Miwgc25pcHBldFNoaWZ0VHlwZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExp
c3QoKS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRS
ZWdzLmdwcigpLCByZXN1bHQpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikg
JiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNw
ZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShy
ZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgICAgIHNldEpTVmFsdWUo
cmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JzaGlmdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTAyLDE4ICsxMzQwLDY2IEBA
IHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
QWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOwor
ICAgICAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVz
dWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5t
X2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBtb3Zl
KGxocy5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQu
Z3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
ICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91
YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0
RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAg
ICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZw
cigpOworICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0g
bV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJp
dHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudElu
c3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFs
dWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJ
Q1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVBZGRPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9u
UHJvZmlsZWRGdW5jdGlvbj4KQEAgLTkyNCwxNSArMTQxMCwzNSBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIEFyaXRoTmVn
YXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3Qu
Ci0gICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1
ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KLSAgICBKU1ZhbHVlUmVncyBz
cmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAg
ICBKU1ZhbHVlUmVncyBzcmNSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNyY1RlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcmNUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wZXJhbmQpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBzcmNSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzcmNUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyaXRoTmVnYXRl
IGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisg
ICAgICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNo
dWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCisgICAgICAgIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKKyAgICB9CiAjZWxzZQogICAgIEpTVmFsdWVS
ZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNS
ZWdzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC05NDEsMTkgKzE0
NDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogCiAgICAg
bWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBzY3Jh
dGNoR1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7
Ci0KICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9u
LCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgYm9vbCBn
ZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElD
R2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChzcmNSZWdzLmdwcigpKTsKICAgICAgICAgYWRk
U2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsK
QEAgLTk2Myw3ICsxNDcyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1h
dGhJQzwKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxl
ZEZ1bmN0aW9uPgpAQCAtOTc0LDM5ICsxNDkwLDgyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCisgICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7
CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LnNlY29uZCgpKTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQorICAgICAg
ICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsK
KyAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQorICAgICAgICByaWdodE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisKKyAgICBS
RUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXND
b25zdCgpKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7Cisg
ICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVt
cDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKICNlbHNl
CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwog
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwogICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBy
aWdodEZQUiA9IGZwUmVnVDE7CiAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogI2Vu
ZGlmCiAKLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7
CisgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICB9Cisg
ICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkgeworICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7Cisg
ICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAg
IGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwot
ICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxl
ZnRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdw
cigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAg
IHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxl
ZnRUZW1wRlAtPmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
ICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAg
ICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisgICAgICAgIGlmICgh
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAg
ICB9CiAKLSAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCBy
aWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVnVDAsIGZw
UmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgIG1hdGhJQy0+bV9nZW5lcmF0b3Ig
PSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIp
OwogICAgIAogICAgIEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50
KHJpZ2h0T3BlcmFuZCkpKTsKICAgICAKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZh
bGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7Ci0KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IGlubGluZVN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgpAQCAtMTAxNSwxNyArMTU3NCwzNCBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAKICAgICBib29sIGdlbmVy
YXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAgICBp
ZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEp
OworICAgICAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgewor
ICAgICAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAg
ICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIH0KKwogICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsZWZ0UmVncy5ncHIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocmlnaHRSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzUsMTEg
KzE2MTEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAg
IH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBy
ZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKHN0ZDo6
aXNfc2FtZV92PE9wLCBPcEFkZD4pCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0hlYXBCaWdJbnQ7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBh
dGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9u
KQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlv
blN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVu
dEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
U3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA0OCw4ICsxNjMzLDggQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vsc2UKICAgICBK
U1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTEwODUs
NyArMTY3MCw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hG
dW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5j
dGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmlu
ZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDk1LDE2ICsxNjgwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0jZW5kaWYKLSAg
ICAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9v
cGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTE1LDE1ICsxNjkwLDM2IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKIAogICAgIEFTU0VSVCghKEdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6
aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKIAotICAgIGlmIChH
ZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBlbHNlIGlmIChH
ZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSB9OworICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxp
ZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAgICAgICBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmlnaHRSZWdzLmdwcigpID09IHJlZ1QyID8gcmVnVDMgOiByZWdUMiB9Owor
ICAgIH0gZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmln
aHRPcGVyYW5kKSkgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
bGVmdFJlZ3MuZ3ByKCkgPT0gcmVnVDAgPyByZWdUMSA6IHJlZ1QwIH07CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKSB9OworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworI2VuZGlmCisgICAgCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAg
YXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgogCisgICAgaWYgKEdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgIGVsc2UgaWYgKEdlbmVyYXRv
cjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQpAQCAtMTE1NiwyMyArMTc1
Miw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OwotI2VuZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotCi0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwotICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLQogICAg
IFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0
KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExODgsNjIgKzE3NjcsMjM3IEBAIHZvaWQgSklUOjplbWl0
X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFu
dERvdWJsZShvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3Bl
cmFuZENvbnN0YW50RG91YmxlKG9wMikpOwogI2VuZGlmCi0KICAgICBSRUxFQVNFX0FTU0VSVCgh
bGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7Cisg
ICAgRlBSUmVnIHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVt
cDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOwor
ICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gbGVmdFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOwor
ICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxlZnRUZW1wRlAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBz
Y3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxlZnRUZW1wRlAtPmZwcigp
OworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7
CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7
CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVn
IHJpZ2h0RlBSID0gZnBSZWdUMTsKKwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICgh
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKKyAgICAKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG51bGxwdHI7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKKyAg
ICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogCiAgICAgSklURGl2R2VuZXJhdG9y
IGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmln
aHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
LCBhcml0aFByb2ZpbGUpOworICAgICAgICBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKIAogICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpIHsKICAgICAgICAgZ2VuLmVu
ZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
TGlzdCgpLCByZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwogCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCkuZW1wdHkoKSk7
CiAgICAgICAgIEFTU0VSVChnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkpOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9kaXYpOwogICAgICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
ICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
dWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElD
KiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgICAgICBpZiAo
YXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwgYXJpdGhQcm9maWxlLmRp
ZE9ic2VydmVOZWdaZXJvRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc1Rl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVz
dWx0RlBSID0gcmVzdWx0VGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShsaHNHUFIsIGxoc0ZQUik7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUocmhzR1BSLCByaHNGUFIpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIs
IHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVpl
cm8sIGJyYW5jaDMyKEJlbG93LCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihCZWxvdywg
cmhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIG11
bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJs
ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAg
ICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
TXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
TXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0
aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBh
cml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9Owor
CisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkp
IHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAg
cmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1YkRv
dWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNE
b3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJm
bG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRv
dWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBi
aXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRo
SUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRl
Y29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgd2lsbERlZihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRv
cDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJvb2wg
SklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBy
ZWdUMCk7CkBAIC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJs
b2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciBy
ZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAg
ICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQog
ewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3LDQ0
IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxl
T3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFp
bENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRB
cmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nh
c2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0K
ICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNo
b3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxl
IGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisg
ICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPwor
CisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3Ip
IGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3Bl
cnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2tw
b2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENo
ZWNrcG9pbnRTbG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAg
PSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1Qw
ID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsK
KyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBy
ZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihp
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJl
ZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2
ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
ICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzog
TG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2Fz
ZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMg
b3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZO
b3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BS
KTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1
bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAg
ICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3Vs
dEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQ
Uik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0
ZXJzLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
aXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRo
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVj
a3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAg
ICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qz
OwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHko
dm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQ
YXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2
bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2tw
b2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0pOworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJh
dGlvbkRvbmUubGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01
MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAg
ICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxp
bmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEs
NyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAg
fQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGNvbnN0IGNo
YXIqIEpJVENvZGU6OnR5cGVOYW1lKEpJVFR5cGUgamkKICAgICAgICAgcmV0dXJuICJMTEludCI7
CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgcmV0dXJuICJCYXNlbGlu
ZSI7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAiTE9MIjsKICAg
ICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuICJERkciOwogICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgpAQCAtMTA4LDcgKzExMCw3IEBAIEpJVENvZGVXaXRoQ29kZVJlZjo6
SklUQ29kZVdpdGhDb2RlUmVmKEMKIAogSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhD
b2RlUmVmKCkKIHsKLSAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChpc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkp
CisgICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNERkdPckZUTChqaXRU
eXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKSkKICAgICAgICAgJiYgbV9y
ZWYuZXhlY3V0YWJsZU1lbW9yeSgpKQogICAgICAgICBkYXRhTG9nKCJEZXN0cm95aW5nIEpJVCBj
b2RlIGF0ICIsIHBvaW50ZXJEdW1wKG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSksICJcbiIpOwog
fQpAQCAtMjM3LDYgKzIzOSwxMSBAQCBOYXRpdmVET01KSVRDb2RlOjpOYXRpdmVET01KSVRDb2Rl
KENvZGVSCiAjaWYgRU5BQkxFKEpJVCkKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3Rl
cnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxT
aXRlSW5kZXgpCiB7CisgICAgLy8gRm9yIEJhc2VsaW5lIEpJVCwgdGhpcyBpcyB0cml2aWFsbHkg
dHJ1ZS4KKyAgICAvLyBGb3IgTE9MIEpJVCwgZXZlcnl0aGluZyBpcyBhbHJlYWR5IHNwaWxsZWQg
dG8gdGhlIHN0YWNrIGF0IGVhY2ggb3Bjb2RlLCBzbyB3aGVuIHdlCisgICAgLy8gZ28gdG8gdGhl
IG9wX2NhdGNoLCB0aGUgbGl2ZSBzdGF0ZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIHJpZ2h0IHBs
YWNlIG9uIHRoZSBzdGFjay4KKyAgICAvLyBBbHNvLCBvcF9jYXRjaCBoYXMgbm8gaW5jb21pbmcg
cmVnaXN0ZXIvdHlwZSBwcm9vZiBzdGF0ZSwgc28gaXQncyB0cml2aWFsIHRvIGNhdGNoCisgICAg
Ly8gYW4gZXhjZXB0aW9uIGluIExPTCBqdXN0IGJ5IGp1bXBpbmcgdG8gb3BfY2F0Y2guCiAgICAg
cmV0dXJuIHsgfTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklUVHlwZSA6
IHVpbnQ4X3QgewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVuaywKICAg
ICBCYXNlbGluZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJVAogfTsK
QEAgLTY3LDM2ICs2OCwyMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogdHlw
ZU5hbWUoSklUVHlwZSk7CiAKLSAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKSVRUeXBlOjpCYXNlbGluZUpJVDsKLSAgICB9Ci0gICAgCiAg
ICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCiAgICAgewogICAgICAgICByZXR1cm4gSklU
VHlwZTo6RlRMSklUOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJ
VChKSVRUeXBlIGppdFR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAg
ICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRU
eXBlOjpERkdKSVQ7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICAgICAg
cmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6
Tm9uZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBzdGF0aWMgYm9vbCBpc0V4ZWN1dGFi
bGVTY3JpcHQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChqaXRUeXBl
KSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAgICAgICAgY2FzZSBKSVRUeXBlOjpI
b3N0Q2FsbFRodW5rOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0
OgorCisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6Cisg
ICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJ
VDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA3LDcg
Kzk1LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAg
ICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklU
VHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTE2LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0
VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAg
IGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjQs
NiArMTE3LDI0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29s
IGNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgorICAgICAg
ICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIHN0YXRpYyBib29sIGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklUVHlw
ZSBleHBlY3RlZEhpZ2hlcikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhlY3V0
YWJsZVNjcmlwdChleHBlY3RlZExvd2VyKSk7CkBAIC0xNDUsOSArMTU2LDE5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBpc0xvd2VyT3JTYW1lVGllcihleHBlY3RlZExvd2VyLCBl
eHBlY3RlZEhpZ2hlcik7CiAgICAgfQorCisgICAgc3RhdGljIGJvb2wgdXNlc1JlcGxhY2VtZW50
Q29kZUJsb2NrKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBl
ID09IEpJVFR5cGU6OkxPTEpJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRU
eXBlID09IEpJVFR5cGU6OkZUTEpJVDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaXNP
cHRpbWl6aW5nSklUKEpJVFR5cGUgaml0VHlwZSkKICAgICB7CisgICAgICAgIHJldHVybiBqaXRU
eXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCB8fCBq
aXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RG
R09yRlRMKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBlID09
IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBnZW5lcmljVW53
aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYQogICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUg
b2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKICAgICAg
ICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMg
dG8gaGFuZGxlci0+dGFyZ2V0CiAgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0gICAg
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmppdFR5cGUoKSkpCisgICAgICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJl
dGVyID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+
dGFyZ2V0KS5wdHIoKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBjYXRjaFJvdXRpbmUgPSBo
YW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsx
NDUsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8g
T09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBk
b24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1
Nyw2ICsxNTgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxs
IHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKQEAgLTE2NywyNSArMTY5LDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAo
aXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpo
YXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNywyNyArMTkwLDM2IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwg
dGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVt
cCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3Vs
dCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAg
IAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRl
Y29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
bV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5s
YXN0KCkuZHN0ID0gZHN0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5k
KEp1bXBMaXN0IHsgfSk7CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBq
dW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwg
UmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAot
ICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOwor
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3Vs
dCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBK
dW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5
LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRl
Y29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQor
ICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC00
MDYsMTEgKzM5OCw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0
KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjcwNzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICB9OwogCi0gICAgICAgIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJs
b2NrLT5qaXRUeXBlKCkpOworICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklU
Q29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSk7CiAKICAgICAgICAgaWYgKG1f
Z2VuZXJhdGVGYXN0UGF0aE9uUmVwYXRjaCkgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCAr
MTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoYwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJv
cGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmly
dHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTEsNiArNTMsMjggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09QUzogSWYg
d2UgY2hhbmdlIHJlZ2FsbG9jIHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUgTiByZWdpc3RlcnMgcGVy
IGxvY2FsLCB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIHR3byByZWdz
LgorICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNyYykgPT0g
SW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQo
KSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMTQsNTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5v
blZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdpc3RlcklE
IHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7
Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdFJl
ZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVnOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gYWxs
b2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
YWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAg
ICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNo
UmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFJl
ZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAgc2NyYXRj
aFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdFJlZyk7
CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgYXV0byBi
dXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxs
b2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRlY29kZS5t
X2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUu
bV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0
cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyArMTcwLDUw
IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1
YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVl
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7CisgICAg
R1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxDZWxsT3Bl
cmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gaGFzSW5z
dGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVjdG9yVGVt
cC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNlVGVtcC5l
bXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9yVGVtcC0+
Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVnVDE7Cisg
ICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAgLy8gV2Ug
ZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgot
ICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblBy
b3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVjayB0aGF0
IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmpl
Y3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVybywgQWRk
cmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7CisgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwogICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlz
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKIAog
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEs
NDAgKzIyMyw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhl
IG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byBy
ZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwg
YmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSBy
ZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBDaGVjayB0
aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hl
Y2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAg
ICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdU
MywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25hbDxDZWxs
T3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHBy
b3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVUZW1wOwor
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAgICBHUFJU
ZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAg
ICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKworICAgICAg
ICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAg
IHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2
YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAgIHZhbHVl
VGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wQ2Vs
bC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVU
ZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENlbGwtPmdw
cigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3Qp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2UoKnRoaXMs
IHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisK
KyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHBy
b3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAg
ICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICByZXN1
bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBwcm90b0dQ
UiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsK
KyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNl
T2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRUZW1wLmdw
cigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFs
dWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNlIHJlZ1Qw
IGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3
ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUg
Y2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdl
dF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBn
ZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwgLy8gcmVz
dWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1QxLCAvLyBw
cm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2Vu
ID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHViSW5mbygp
LT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICszMjQsMjkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Vt
cHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCArMzU0LDcy
IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0g
ICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAg
ICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9
IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
dXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2VsbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8g
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1wR1BSKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihFcXVh
bCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Qw
KTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI4LDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3Ro
ZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNTUs
MTIgKzQ2MiwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RyCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisjaWYg
Q1BVKEFSTTY0KQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCBpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB0ZXN0NjQo
WmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAg
ICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDk4LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRl
c3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxOdW1iZXIp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVyVGFnUmVn
aXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAjaWYgVVNF
KEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MjgsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmln
X2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwg
PSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJbnQpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCaWdJbnQp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQo
aW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0lu
dDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0g
YnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJ
bnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzQ2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSks
IHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRV
Uk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0z
MTMsMTggKzU5NCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25z
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGlu
dCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2
YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5
cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwog
Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzY0Myw2MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVj
dCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIoKTsgLy8g
c3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmpl
Y3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
ICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MjcsNDEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAg
IGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJbW0gPSBi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc0ltbS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKIAorICAg
ICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NzAsMjAzIEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wp
KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkg
eworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgdmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIp
OworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7
CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodmFsdWVH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNo
SWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
eW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0cmluZy5s
aW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3lt
Ym9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDAp
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQor
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVu
Y3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBm
dW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJSZWcgZnVu
Y3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIgPSBuYW1l
LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
b3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwgdmFsdWVH
UFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQUiwgdmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6IHN0cmluZ3MsIGJpdGlu
dCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgorICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQg
YmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFs
c2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMg
d2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwg
YmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgotICAgIC8v
IFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRh
ZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2NChUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisgICAgICAgIC8vIEludmVy
dCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJv
b2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBjbGVhciBvdGhlciB0aGFu
IHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1
dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVl
KHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cg
Yml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgeG9yNjQo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pm
YWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSB0cnVlOwogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9j
b25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
c3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0z
MigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBo
YW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNj
cmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAg
ICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJl
Z1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
Y29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
Y29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVx
dWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2VzIGlubGluZQorICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9OworCisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BS
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNj
cmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNo
Mi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBS
LCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NzUsMTI5IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0
KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGlu
ayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAt
IGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAg
SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMp
OwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAg
ICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Cisg
ICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAv
LyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAg
ICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFy
Z2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwor
ICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMTA2LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRl
ZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVy
KSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC01MDAsMTAgKzExMzQsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKSB7CisgICAg
ICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MTUsNjUgKzExNjUs
MzQyIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKICAgICBBU1NF
UlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVy
czo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3Bl
Y2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQb2ludGVyKSkpIHsKKyAg
ICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7
CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYXV0byBlcXVh
bCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50
ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRh
ZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
IEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0
ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/
IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1
YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBl
KHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVG
YWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAg
ICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9i
amVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhz
R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOwor
CisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgeG9yNjQo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsK
KyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRH
UFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQ
UlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsK
KyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUz
MihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICBBU1NFUlQodXNl
TE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9
IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0
YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7Cisg
ICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3Zl
blR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAg
Q2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qo
cmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVT
eW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhz
R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENv
bXBhcmUsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJp
bmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQo
bGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhz
R1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIElu
dDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBS
ID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJl
LCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICBO
dW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIE51bWJlck9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0
aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQ
Uik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOwor
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRh
cmdldCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwg
cmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1Qx
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIHhvcjMyKFRy
dXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6
ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwg
cmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0
YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
amVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IFdlIGNhbiBtYWtlIHRoaXMgYSBzaW5nbGUgYnJh
bmNoIGlmIHRoZSByZXN0b3JlIGRvZXNuJ3QgY2xvYmJlciByZXR1cm5WYWx1ZUdQUi4KKyAgICAg
ICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhz
R1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
ICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4
OSw3NCArMTUxNiwxNzggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3Ry
dQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhz
OworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDog
Tm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5k
T3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJv
dmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1Zh
bHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNl
bGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBs
aHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
U3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChvcGVyYXRpb25Db21w
YXJlU3RyaW5nRXEsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAg
ICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7
CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNy
YzIsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
IAogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3Vt
aW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVm
dCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlm
IChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsK
LSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJh
Z21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0
aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkg
cmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8g
VGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAx
PDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBh
dCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxs
IGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJl
Z1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdo
Qml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2
NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwg
cmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVn
VDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBp
cyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1Qx
LCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGZhbHNlKTsKKyNlbHNlCisgICAg
ICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3Mp
LgorICAgICAgICAgICAgbW92ZShsaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBvcjY0
KHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZXN1bHRHUFIpKTsKKworICAgICAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKKyAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgICAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIobGhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKGxoc0dQUikpOworICAgICAgICAgICAgbGVmdE9LLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJoc0dQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyaHNHUFIpKTsKKyAgICAg
ICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKworICAgICAgICAgICAgaWYgKGlzRXEpCisgICAg
ICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworI2VuZGlmCisgICAgICAgIH0KIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdU
MSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBk
byAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7Cisg
ICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBp
cyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50
IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBz
aW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVp
cmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBU
aGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8
PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0
IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3
aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91
YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisK
KyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAg
SnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMg
YSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVn
VDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3Jl
IHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8g
dGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
NSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBz
bG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJs
ZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVu
IHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsK
LSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJp
Z2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxz
ICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAg
ICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChy
ZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZp
cnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0
CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJh
bmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJl
Z1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJl
Z1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTY3NCw2OCArMTcwNSwxNjQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEg
PSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1f
cmhzOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJl
Z1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwogCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9
IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEg
PyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisg
ICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlw
ZShyaHMpKSkgeworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKwor
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywg
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJo
cykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpbmdFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihncENvbXBhcmUsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAg
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
ICAgICAgICAgLy8gT09QUzogY2FuIGRvIGEgbG90IGJldHRlciBoZXJlLgorICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBz
cGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAu
Z3ByKCk7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAo
YXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUg
fHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQg
PT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJp
Z2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwot
ICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhl
IDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQz
Mi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBp
cyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93
LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAv
LyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJl
Z1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUs
IHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVF
cXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWws
IHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGZhbHNl
KTsKKyNlbHNlCisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgICAgIG1vdmUobGhzR1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAg
IG9yNjQocmhzR1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbCh0ZW1wR1BSKSk7CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMg
YSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBh
bmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICAg
ICAgYXV0byBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRPSy5saW5r
KHRoaXMpOworICAgICAgICAgICAgYXV0byByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyaHNHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7CisgICAg
ICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgICAgICBpZiAoaXNFcSkKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworI2VuZGlmCisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCBy
aHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVF
cXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0
IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAg
ICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAg
Z290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdv
dG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAg
ICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAgICAgICAg
Ki8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhl
IDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQz
Mi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFs
dWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVy
ZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90
IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNl
dAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4K
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCBy
ZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAg
ICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJy
YW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwg
dGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJ
bnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdl
IGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0lu
dDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdz
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGlm
ICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhp
cyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBz
bG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJs
ZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVu
IHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsK
LSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMy
KHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJp
Z2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDAp
LCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJl
IGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3Vi
bGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhl
biB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJp
Z2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1Qw
KSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzE4
NzUsMjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBj
b21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25l
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJh
bmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRH
UFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29k
ZU51bWJlcjsKKyAgICAgICAgfQogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1l
cmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDAp
KTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0Jp
Z0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVn
KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAg
YXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmln
SW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmlu
ZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJl
Z1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVj
dD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3Qo
cmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNy
YykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMu
CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1Ig
ZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlG
cmFtZSk7CkBAIC04ODgsOSArMjE1NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50
X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRT
Y29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVn
VDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxs
OyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsg
KnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5n
cHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjE4NSwxNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJ
VGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTkyMiw5ICsyMjEwLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IElu
c3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAg
anVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENo
YXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7Cisg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzIyMzQsMTQ3IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFi
bGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5k
ZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJl
Z1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8v
IE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dl
clJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMg
PSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkp
OwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1l
ZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNf
c2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBF
cXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1
bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNj
cmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BS
LCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAg
ICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwg
cmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisK
KyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAg
ICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90
SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxP
cEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1
bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3Ry
dWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
KQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUg
c2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0
aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAg
ICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nh
cmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdD
IHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0g
ICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9
IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVk
KCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjM4NSwyMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBl
bHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA0NSwxMyAr
MjQwOSw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3Ry
dWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJl
SUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBh
dXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyY0Rz
dCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAg
fSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUg
cHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAo
aXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92
ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFu
IGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBK
dW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAg
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RD
ZWxsLmlzU2V0KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMg
cmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdU
MSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFsdWUo
c3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVn
VDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyNDk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNv
ZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEu
bV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBS
ZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI1MDQsMzEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQgY2Fj
aGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdU
MzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wNDsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlz
LCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3By
VGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcgPSBj
YWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdw
cigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAgIHNj
cmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVt
cDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVE
YXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpA
QCAtMTA4Niw2NCArMjU0NiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
aGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIs
IHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQot
Ly8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1
c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0g
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJn
ZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghIShw
cm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRHUFIp
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDAp
KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9M
IHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBoZXJl
LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
ZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjIsOCAr
MjU5MSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZv
aWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBP
U1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmlu
aXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxl
Rm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFyIHJlZ2lz
dGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAgIHVpbnQ2
NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7
CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1
cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJl
dHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjYxOSwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQog
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhl
IEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNG
cm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BF
bnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI2MzYsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5v
T3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChq
dW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkg
dGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAg
ICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjY2Miw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2Ft
cGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI2NzIsMTggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9y
ZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhw
KSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAg
ICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjY5Myw0MiBAQCB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29w
ZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJl
c3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxP
TCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNj
b3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwog
I2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5m
dW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBm
dW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI3NTcsNDYgQEAgdm9pZCBKSVQ6
OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7
CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAg
ICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVzZXQoKTsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQor
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1
bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsK
ICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5j
dGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMjgyNywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1f
YXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNp
emUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0
ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9
IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdHUFIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYw
LDE0ICsyODQ4LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28K
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQUiA9
IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGFyZ0dQUiA9PSByZXR1cm5WYWx1ZUdQUik7CisgICAgfQorCisgICAgLy8g
T09QUzogSW5saW5lIHRoZSBhbGxvY2F0aW9uIHBhdGggaGVyZSwgaXQgbWF0dGVycyBmb3Igc3Vu
c3BpZGVyLWNyeXB0by1hZXMKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBh
cmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUlu
ZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQ
Uik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMjg4
NCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRv
clZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VW
YWx1ZSB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5
LDYgKzI5MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisgICAgLy8gT09QUzoKICAgICBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyOTYyLDggQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUg
KzI5ODksMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoYwogICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJs
ZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBB
cmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMg
PSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVK
dW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFk
ZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAg
IAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMzAwNiwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjCiAKICAgICBMYWJlbCBuZXh0SG90
UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQo
QnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJs
ZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZh
bEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9k
ZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJ
bmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUx
MCwzNyArMzAzOSw4MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8v
IENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9w
ZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
YmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9y
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1
cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVy
YXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MK
LSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qx
LCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQp
LCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0
J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJz
dE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQo
QmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUK
KyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7
CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQ
UiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBp
cyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAg
ICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qx
KTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2Fj
aGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBK
dW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAg
ICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5l
CisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAg
ICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7Cisg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0
ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Cisg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVy
ZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwy
MSArMzEyMyw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVs
b3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0
cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBp
bmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
bmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5l
bXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5k
ZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVy
YXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAg
ICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwg
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0
b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDAp
OwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDAp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsK
IAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMTc3LDUxIEBAIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6
IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9y
VGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgq
dGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVt
ZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAt
PmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9
IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGlu
Qm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQo
KSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5s
aW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5k
ZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3Jh
dGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTU5OCw2ICszMjMxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0
IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90
eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1
bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzI5Myw5IEBAIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2
ICszMzEwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0No
aWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFt
ZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIw
ICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNr
ZW5UYWlsPigpOwpAQCAtMTcwMiwxMSArMzM0MywyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1
bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3
b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJ
bnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7
CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJl
Z1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xNzE0LDI5ICszMzY0LDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0
aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVy
c1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJl
Z1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNU
b1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAg
ICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVt
UGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAg
ICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdU
MCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE3NDQsNDkgKzM0MTMsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Fy
Z3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUo
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsg
aW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2Vu
ZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBi
cmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAg
ICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgp
OwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShq
c1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Cisg
ICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90
b3R5cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0
KHZhbHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgp
LCB2YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nh
c2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0g
ZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigp
ID09IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdz
LnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkp
OworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2Fk
UHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0
Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxNiw2ICsxNDE2LDggQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOworCisgICAgLy9kYXRhTG9nTG4oImNvbXBhcmVMZXNzLCBsaHM6ICIsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgIiByaHM6ICIsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKSk7CiAgICAgCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihnbG9iYWxPYmplY3QsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsK
IH0KQEAgLTE0ODMsNiArMTQ4NSw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25Db21wYXIKICAgICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7
CiAgICAgSlNWYWx1ZSBzcmMyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCisgICAg
Ly9kYXRhTG9nTG4oInN0cmljdGVxLCBsaHM6ICIsIHNyYzEsICIgcmhzOiAiLCBzcmMyKTsKKwog
ICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChnbG9iYWxPYmplY3QsIHNyYzEsIHNyYzIp
OwogfQogCkBAIC0xODcxLDcgKzE4NzUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VSVChvcHRpbWl6ZWRDb2Rl
QmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+aml0
VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc0RG
R09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgaWYgKHZv
aWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBvcHRp
bWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0df
RVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIsIGJ5dGVjb2Rl
SW5kZXgpKTsKQEAgLTM0MTksNiArMzQyMyw0MiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxv
Y2sqIGxvbENvZGVCbG9jaykpCit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhh
dCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAor
ICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyhsb2xDb2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBpZiAoZ2V0ZW52KCJwcmludEVhY2hK
ZXR0aXNvbiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaEpldHRpc29uIikpKQorICAgICAg
ICBkYXRhTG9nTG4oImpldHRpc29uLCBmb3JjaW5nIHJlb3B0IG5vdzogIiwgKmxvbENvZGVCbG9j
ayk7CisgICAgbG9sQ29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygp
OworICAgIAorICAgIC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJvZmlsZXMgaGVyZSwgc2luY2Ug
d2UncmUgamV0dGlzb25pbmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0ZSB3LyB0aGluZ3Mgd2UgY2Fy
ZSBhYm91dC4KKworICAgIHNhbml0aXplU3RhY2tGb3JWTShsb2xDb2RlQmxvY2stPnZtKCkpOwor
CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbG9sQ29kZUJsb2NrLCAi
OiBFbnRlcmVkIHJlb3B0aW1pemUgZnJvbSBMT0wiKTsKKworICAgIENvZGVCbG9jayogbGxpbnRD
b2RlQmxvY2sgPSBsb2xDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgLy8gV2UgbXVzdCBi
ZSBjYWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBibG9jay4KKyAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUobGxpbnRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisgICAgQ29k
ZUJsb2NrKiByZXBsYWNlbWVudCA9IGxsaW50Q29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOworICAg
IGlmICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxpbnRDb2RlQmxvY2spIHsKKyAg
ICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbGxpbnRDb2RlQmxvY2ss
ICI6IE5vdCByZW9wdGltaXppbmcgTE9MIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRp
c29uZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHRo
ZSByZXBsYWNlbWVudCBtdXN0IGJlIG9wdGltaXplZCBjb2RlLiBVc2UgdGhpcyBhcyBhbiBvcHBv
cnR1bml0eQorICAgIC8vIHRvIGNoZWNrIG91ciBsb2dpYy4KKyAgICBBU1NFUlQobGxpbnRDb2Rl
QmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOworICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQobG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworCisgICAgLy8gT09Q
UzogZmlndXJlIG91dCBzdHVjayBpbiBhIGxvb3AgbG9naWMKKyAgICBsb2xDb2RlQmxvY2stPmpl
dHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwgQ291bnRSZW9wdGltaXphdGlv
bik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcw
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxOCw2ICszMTgsOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblZhbHVlCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NU
eXBlUHJvZmlsZXJMb2csIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsKIAorSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cs
IHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI3MDc4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjgxLDggKzI3Nyw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAg
ICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01NTgs
NyArNTUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJl
Z2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBw
aW5nIG9uIEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC02MzksOCArNjMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3NSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzc4LDggKzc2Myw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4ICs4MDIsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMTAwLDggKzEwODEsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyNTcsOCArMTIzNiw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsOCBAQAogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01Miw1MSArNTQsMTE3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQ
UjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkp
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BS
ID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5
cGVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgp
ID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAg
ICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsK
KyAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
bW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJh
c2VHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQ
Uik7CisgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihw
cm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9w
ZXJ0eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNl
TE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxs
Q2hlY2spKQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwg
aW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncyk7CisgICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShw
cm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBT
cGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAg
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0K
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlW
YWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIs
IHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1LDQx
ICsxNzMsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgeworICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
ICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncyk7CisgICAgICAgIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJ
bmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3LDYgKzI1
Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRl
eCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHBy
b3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMxOSw4ICs0
MjEsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8v
IHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2Us
IHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJs
ZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUs
CiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwg
ZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0NCw3IEBAIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2U7CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7
CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAt
MzU1LDEzICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAg
IGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0
U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBM
YWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRC
eVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BT
OiBEbyBiZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwog
CkBAIC0zOTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlv
bkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQYXRoSm1wLCBkb25lLCBkb25l
KSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsK
ICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1
dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoYwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9u
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBh
Y2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBy
ZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3Ig
eyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigp
OworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFz
ZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dl
dHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0
ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUs
IHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
Z2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdw
cigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBp
bnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVy
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJf
dCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29y
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQ
UiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nl
c3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vz
c29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ3MiwxOCArNjMzLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsK
KworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qy
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNl
cXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDkyLDI1
ICs2ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4
KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
KHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUy
MCwxOSArNzE3LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJh
c2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQ
UiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBw
cm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BS
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01NDEsMjIxICs3ODksMzY4
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9
IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Qp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJy
YXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVH
UFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFy
cmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7
CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFs
dWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRo
aXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRo
aXNWUmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c0dQUikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhp
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlz
SW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBk
aXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0
dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8v
IHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0
ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhh
dCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2Ug
ZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1Qw
LCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVl
R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1w
bGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9
IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVn
KCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7
CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1
YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3Jh
dGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRp
cmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVj
ZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJh
c2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlk
c1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNl
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsK
KyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRl
eCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
IAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgr
K107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykK
K3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAo
IW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7
ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC04NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29w
ZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2Rl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEp
KTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDAp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29u
c3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CkBAIC04NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1w
bGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BS
ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAg
ICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BS
LCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFy
OgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTg5NCw5ICsxMzMwLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29s
dmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05MDksMjkgKzEz
NDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC05NDAsMTUgKzEzNzYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29w
ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBy
ZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2Ny
YXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BS
KSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBv
cGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12
b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUxICsxNDEzLDg0IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1
Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNl
IHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2Jq
ZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhl
IHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9
IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFs
PEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAg
ICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAg
ICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgICAgICAgICAg
c2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIg
PSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVy
ZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0
KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVx
dWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBv
ZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAg
ICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1t
MzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZM
aW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0z
MihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNv
bihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUu
bGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAg
IG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9m
ZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMy
KG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9m
ZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0
R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8g
VERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAq
b3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
LCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2Nh
bENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTAzNiwxMCArMTUwNCwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogCkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQog
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVz
dWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBi
cmVhazsKQEAgLTEwODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFu
ZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
IGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFu
ZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3Jl
UHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMjksMjEgKzE1NzksNDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7
CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1
ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwg
c3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZh
bHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAg
ICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBH
UFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1Qw
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1
dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAg
ICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsK
KyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CisgICAgICAgICAg
ICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNl
SW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE1NCwyOCAr
MTYzMiw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
ICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZv
ckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAgICAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY3Jh
dGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihn
ZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFRE
WiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0
Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVl
LCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAg
aWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKCZt
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVz
ZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1
dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1
ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOwor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50
U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3Qp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkwLDEyICsxNjk3LDIxIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBz
Y3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2Ny
YXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBv
ZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBp
ZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBh
Z2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBM
b2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVt
cCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVt
cCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8v
IER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBh
bHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1LDMyIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2Ny
YXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGlu
ZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2Rl
IHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBAIC0xMjQyLDEw
ICsxNzY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdl
dFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikgewpAQCAtMTI2MSw2MSArMTc4NCwxNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1l
bnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3Vt
ZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3Vt
ZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBH
UFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsK
KyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3Vt
ZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1
ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdU
MDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQ
UiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNl
TE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1h
a2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3Vu
ZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVk
IGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0
byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2Ug
cnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0
IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwK
KwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlz
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93
bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQo
dmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0g
Z3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BS
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
Y3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAg
IH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVy
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAg
fQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVu
dFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQo
KTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2ls
ZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAg
ICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVl
Tm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6Cisg
ICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdl
IGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRl
LiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBk
b2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90
IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0
IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90
Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
ICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkK
KyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7Cisg
ICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAg
ICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzMjcsMTEgKzE5NjcsMjYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+Ojpv
ZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShi
YXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxG
aWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTM0MSwxMCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQo
Y29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFu
ZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBzdG9y
ZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJu
YWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMTQ0Nyw4
ICsyMTE1LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAog
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdU
MCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAg
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVy
LCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4g
c2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGls
bFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisK
ICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0NjYs
NiArMjE1MSw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXMKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3Vz
ZUxPTCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIApAQCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0UHJpdmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBBU1NF
UlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpv
cGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJ
KHJldmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAg
ICBBU1NFUlRfVU5VU0VEKHByb2ZpbGVkREZHQ29kZUJsb2NrLCAhcHJvZmlsZWRERkdDb2RlQmxv
Y2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAi
LCAqY29kZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7CiAgICAgCkBAIC01NSw3ICs1NSw3
IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0KQogewogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxvY2spOwot
ICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTUgKzMxLDIyIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCiAK
KyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpJVFdv
cmtsaXN0OjpQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFdvcmtsaXN0OjpQ
bGFuPiB7CiBwdWJsaWM6Ci0gICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICA6IG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKLSAgICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCisgICAgICAgIDogbV9sbGludENvZGVCbG9jayhjb2RlQmxvY2spCisgICAg
ICAgICwgbV9jb2RlQmxvY2tUb0NvbXBpbGUoY29tcGlsZVR5cGUgPT0gSklUOjpDb21waWxlVHlw
ZTo6TE9MID8gbV9sbGludENvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSA6IG1fbGxpbnRDb2Rl
QmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLCBtX2Nv
ZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
CiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBp
bGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBpbiBjb25jdXJyZW50IGdjCisgICAg
ICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2NrKSB7CisgICAg
ICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnByb3RlY3QobV9jb2RlQmxv
Y2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUlu
VGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgp
CiAgICAgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5saW5rKCk7
CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9jaykKKyAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnVucHJvdGVjdChtX2Nv
ZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAgICAgICAgIHN3aXRjaCAocmVzdWx0
KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgICAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlv
biBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fbGxpbnRDb2Rl
QmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGls
YXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1l
U29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29v
bigpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRp
b24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENvbXBpbGF0aW9u
U3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxvY2spOwotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2Nr
VG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxvY2tUb0Nv
bXBpbGUpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+aml0U29vbigpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxv
Y2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsgfQorICAgIENv
ZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jazsgfQorICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2stPnZtKCk7IH0KICAgICAKICAgICBi
b29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTgwLDE1ICs5MywxNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBzdGF0aWMgdm9pZCBjb21waWxl
Tm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBQ
bGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAg
UGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwogICAgICAgICBwbGFuLmZpbmFs
aXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworICAgIENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAgICBMb2NrIG1fbG9jazsKICAgICBi
b29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07CkBAIC0yMzMsOSArMjQ3LDExIEBA
IHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAgICAgY29kZUJs
b2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRpb25zOjpmb3JjZUxPTCgpID8gSklU
OjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmU7CiAgICAgCiAg
ICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKLSAgICAgICAgUGxhbjo6Y29t
cGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBQ
bGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjQ5LDcgKzI2NSw3
IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAgICAgCiAg
ICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsKICAgICAgICAgICAgIG1fcGxhbm5l
ZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRS
ZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAg
ICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywg
Y29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIG1f
cGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQocGxhbik7CiAg
ICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7CkBAIC0yNzMsMTQgKzI4
OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgLy8g
VGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29uY3VycmVudCBKSVQgdGhyZWFk
IGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8vIHRocmVhZCBjb21waWxlcy4g
VGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRo
cmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29tZWRheS4KLSAgICBQbGFuOjpj
b21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgUGxh
bjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsK
ICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZdIHsKKyAgICAgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFj
ZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIyLDI0IEBAIHZvaWQgSklUV29ya2xp
c3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAgICAgCiAgICAgLy8gTm93IGl0IG1p
Z2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0
ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKLSAgICAvLyBiYXNl
bGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKLSAgICAKLSAgICAvLyBP
SywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworCisg
ICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBsb2xDb2Rl
QmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIEpJVDo6Y29tcGls
ZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxv
bENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGxvbENvZGVCbG9jayk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2
aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdpdGggdGhlCisg
ICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCisgICAgICAgIEpJ
VDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklU
Q29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7
CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYg
bXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6
ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFsaXplKCk7CiAgICAgICAgIAogICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAgICAgbV9wbGFubmVkLnJlbW92
ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29k
ZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcwNzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVMYXRlcihDb2Rl
QmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRl
eCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAg
ICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdCgpOwogICAgIHN0YXRp
YyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpOwpAQCAtNjYsNiAr
NjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsKICAgICBmcmllbmQgY2xhc3MgVGhy
ZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5k
ZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIHZv
aWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAgIFBsYW5zIG1fcXVldWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNzA3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3Jv
QXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVf
dCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFy
cmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsg
eyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0Nh
bGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0
ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIp
KTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgIGlmIChpc1dlYkFz
c2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQo
MCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZp
c2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNh
bGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdh
bm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNw
aWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYg
KG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsOCArMzYyLDEwIEBAIGlubGlu
ZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KIH0KIAogLy8gUmV0dXJucyB0cnVl
IGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhl
dXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKK2lubGluZSBDb2RlQmxv
Y2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMgdy5yLnQgTE9MLgorCiAgICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJzIGRvbid0IHNl
dCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQgYWxsLgogICAg
IEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBAIC0zNzIsMjkgKzM3NCw0NSBAQCBp
bmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgaWYgKCFjb2RlQmxv
Y2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVh
Y2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNo
b2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9i
YWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAgYXV0byBsb2xDb2RlQmxvY2sgPSBb
Jl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogcmVwbGFjZW1lbnQg
PSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChy
ZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRUeXBlKCkpIHsK
ICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwog
ICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5j
b21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICAg
ICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOwor
ICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZGF0YUxvZygiVW5l
eHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2Nr
IGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBF
bnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBF
bnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
CiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRoIGV4ZWN1dGVD
b3VudGVyID0gIiwKQEAgLTQwNSwxOCArNDIzLDIxIEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5
cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxs
cHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgIGlmICghaml0
Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykpCisgICAgQ29kZUJsb2NrKiBj
b21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxv
Y2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9U
V08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2Rl
QmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOwor
CisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAog
ICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVC
bG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKKyAgICAgICAg
TExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxl
QWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNoZWNrKTsKLSAg
ICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChN
dXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CisgICAgTExJTlRf
UkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChN
dXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiB9CiAjZWxzZSAv
LyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKK3N0YXRpYyBTbG93UGF0aFJl
dHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24o
KTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwpAQCAtNDI2LDMxICs0
NDcsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogTExJTlRf
U0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAg
cmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9s
b2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wo
ZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0g
ICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxl
ZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1l
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJs
ZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwiLCBQ
cm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9m
b3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5
T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRh
YmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9j
b25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganND
YXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+
Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICBy
ZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkp
LT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9u
X2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gZW50cnlPU1Io
Y2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpz
RXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrKQogewogICAgIFVO
VVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0
cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFy
aXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0Zv
ckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVj
ayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKQEAg
LTQ3OSwxOSArNTAwLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgICAg
ICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICAKLSAgICBp
ZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRV
Uk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
KTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAib3NyRW50cnki
LCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKIAotICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNv
bXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29t
cGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogCi0gICAgY29u
c3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpOworICAgIGNv
bnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVCbG9jay0+aml0Q29kZU1hcCgp
OwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNv
ZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUxv
Y2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisKKyAgICBjYWxsRnJhbWUtPnNl
dENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgTExJTlRfUkVUVVJOX1RX
TyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CiAjZWxzZSAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJl
dmlzaW9uIDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBAIHN0YXRpYyB2b2lkIGRpc2Fi
bGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRp
b25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgT3B0aW9uczo6Zm9y
Y2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IDE7CisKICNpZiAhZGVmaW5l
ZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpID0g
dHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcgQEAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCB1c2VKSVRD
YWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNl
UHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJz
ZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNz
ZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBO
b3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwcml2YXRlIHN0YXRp
YyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAg
U2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQK
ICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgbGxpbnRfaGFuZGxlX3VjYXVn
aHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAgICAgICAgICAg
ICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9w
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAg
ICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
IHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMs
IHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzk4LDcgKzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwTExJbnQoQ29kZUJsb2NrKiBj
b2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6
OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAg
Ly8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdhbnQgdG8gZG8gd2l0aCB0aGUgbm8gTExJbnQg
b3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2
bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25N
dXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9u
IDI3MDc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGls
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRG
R0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21w
aWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNl
REZHSklUKCkpCisgICAgICAgIHJldHVybiBqc051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYg
KCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0
aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0
cnVlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCShyZXZpc2lvbiAyNzA3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgVk1UcmFw
czo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoZm91bmRDb2RlQmxvY2stPmppdFR5cGUo
KSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3VuZENvZGVCbG9jay0+aml0VHlw
ZSgpKSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKCptX2xvY2spOwogICAg
ICAgICBpZiAoIWxvY2tlcikKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBTaWduYWxT
ZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgVk1UcmFwczo6
aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
ICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZU
TChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29u
KFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAgICAgIGNhbGxGcmFtZSA9IGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQpJbmRleDogVG9vbHMvU2Ny
aXB0cy9jb21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb21wYXJl
LXJlc3VsdHMJKHJldmlzaW9uIDI3MDc4OSkKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1
bHRzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsOCArMTczLDggQEAgZGVmIGNvbXB1dGVNdWx0aXBs
ZUh5cG90aGVzZXNTaWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFrZG93bnMoYSwgYik6CiAgICAg
bmFtZUxlbmd0aCA9IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJr
ZXJdKQotICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKKyAgICBhTGVuZ3RoID0gbGVu
KGFbdW5pdE1hcmtlcl0pICsgMworICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkgKyAz
CiAgICAgcmF0aW9MZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAgIHBWYWx1ZUhlYWRlciA9ICJw
VmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZSkiCkBAIC0yMDMs
NyArMjAzLDcgQEAgZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIHBMZW5ndGggKz0gMgog
CiAgICAgc3RyaW5ncyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0
aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57
cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3Qi
LCBhU2NvcmU9YVt1bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9
bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJi
IC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExl
bmd0aD1wTGVuZ3RoKSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtrZXk6XntuYW1lTGVuZ3RofX18
e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9fSB8e2NvbXBhcmU6XntyYXRp
b0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0KGtleT0ic3VidGVzdCIsIGFT
Y29yZT0iYTogIiArIGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjogIiArIGJbdW5pdE1hcmtlcl0s
IG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGgg
LCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1
ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5IGluIGEua2V5cygpOgogICAg
ICAgICBpZiBrZXkgPT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAgIGNvbnRpbnVlCkluZGV4OiBM
YXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAyNzA3ODkpCisr
KyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQsNyArNCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1bm5lciA9IHsK
ICAgICBuZXZlcklubGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAotICAgIG51bWJl
ck9mREZHQ29tcGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVyT2ZERkdDb21w
aWxlczogKGZ1bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICByZXR1cm4gKGYp
ID0+IHsKKyAgICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8gRW11bGF0ZSBy
dW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJpbmcgYmVmb3Jl
IHJldHVybmluZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAg
bWFwID0gbmV3IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAuZ2V0KGYpIHx8
IDA7CisgICAgICAgICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNldChmLCBjb3Vu
dCk7CisgICAgICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAgICAgICB9Owor
ICAgIH0pKCksCiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3Q29kZUJsb2Nr
CiB9OwogCkBAIC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUodGhlRnVuY3Rp
b24sIF9hLCBfYgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOwogICAKICAg
dHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpCisgICAgd2hp
bGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1ZXMucHVzaChl
dmFsKF9hKSk7CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAgfSBjYXRjaCAo
ZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVuY3Rpb24gZGZn
SW5jcmVtZW50KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAgICAgICBy
ZXR1cm4gYXJndW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSkK
KyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6IDA7CiAgICAg
CiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417424</attachid>
            <date>2021-01-11 18:24:58 -0800</date>
            <delta_ts>2021-01-12 12:30:04 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>566536</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ2NyeXB0by1hZXMtU1AnXTsKKwog
aWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJ
dGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3RpbwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblNl
dFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2NjMsOCBAQCBw
cml2YXRlOgogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1iZXIiLCBmdW5j
dGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzREZH
RW5hYmxlZCIsIGZ1bmN0aW9uSXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImRyb3BBbGxMb2NrcyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsKIAogICAgICAg
ICBpZiAoT3B0aW9uczo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGlu
ZygpKSB7CkBAIC0yNjUzLDYgKzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uQXNEb3VibAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIo
bnVtKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxl
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oT3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwogSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxvY2sgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpk
dW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZH
T3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJs
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDggQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVy
ZUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCkBAIC0yNjks
NyArMjcxLDcgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Qmxv
Y2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxC
bG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBkdW1wSGVhZGVy
KGJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMgQEAgdm9pZCBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91dC5wcmludCgi
YmIjIiwgYmxvY2suaW5kZXgoKSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRpY3Rpb25zQXRI
ZWFkKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhlYWQ6IFsiKTsK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlvbnNBdEhlYWQt
PmF0KGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0
LCBwcmVkaWN0aW9ucy5hcmd1bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2NhbHMoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAgICAgICAgICAg
ICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQorCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKICAgICAg
ICAgICAgIGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChpICsgYmxv
Y2subGVhZGVyT2Zmc2V0KCkpOwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGljU3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgogY2xhc3MgQ29k
ZUJsb2NrQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiA9IElD
U3RhdHVzTWFwKCkpOwotICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOworICAgIHN0
YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0
ZWNvZGVHcmFwaCYsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1
ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CiAK
ICAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgog
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2b2lkIGR1bXAo
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1
Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4gc3BlY3Vs
YXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQorICAg
IHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6
OmRhdGFGaWxlKCkpCiAgICAgewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2Rl
QmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywgc3Bl
Y3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVJbmRleEltcGwoVmlyCiAgICAgLy8gTm8gdXNlcy4KICAgICBjYXNlIG9wX25ld19yZWdleHA6
CiAgICAgY2FzZSBvcF9kZWJ1ZzoKLSAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgIGNhc2Ugb3Bf
bG9vcF9oaW50OgogICAgIGNhc2Ugb3Bfam1wOgogICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKQEAg
LTEwMyw2ICsxMDIsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmly
CiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgICAgIHJldHVybjsKIAorICAgIFVTRVMoT3BK
bmVxUHRyLCB2YWx1ZSwgc3BlY2lhbFBvaW50ZXIpCiAgICAgVVNFUyhPcFRvVGhpcywgc3JjRHN0
KQogICAgIFVTRVMoT3BDaGVja1RkeiwgdGFyZ2V0VmlydHVhbFJlZ2lzdGVyKQogICAgIFVTRVMo
T3BJZGVudGl0eVdpdGhQcm9maWxlLCBzcmNEc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3OCw3ICsxNzgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmlu
CiAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnQo
c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbnNT
aXplKCkpOwotICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQg
JiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCisgICAgaWYgKCh0aGlzLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgdGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCkgJiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCiAgICAgICAgIG91dC5wcmludCgiIChTaG91
bGRBbHdheXNCZUlubGluZWQpIik7CiAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklu
bGluZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7CkBAIC0yMzQsNyAr
MjM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElD
U3RhdHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAg
IEJ5dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVj
dGlvbnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBX
VEY6Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBC
eXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKQEAgLTI5NSw2ICsyOTUsNyBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX293bmVyRXhlY3V0
YWJsZShvdGhlci52bSgpLCB0aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAg
ICAsIG1fdm0ob3RoZXIubV92bSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcihvdGhl
ci5tX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpCisgICAgLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxl
cyhvdGhlci5tX2FyZ3VtZW50VmFsdWVQcm9maWxlcykKICAgICAsIG1fY29uc3RhbnRSZWdpc3Rl
cnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykKICAgICAsIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKQEAgLTMwOSw3
ICszMTAsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAg
QVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwogCiAgICAgQVNTRVJUKHNvdXJjZSgp
LnByb3ZpZGVyKCkpOwotICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygp
KTsKKworICAgIG1fbnVtUGFyYW1ldGVycyA9IG90aGVyLm51bVBhcmFtZXRlcnMoKTsKICAgICAK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTg1MCw3ICs4NTIs
NyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIC8vIHRvIHRoZSBDb2RlQmxvY2suIEhv
d2V2ZXIsIGl0cyBsaWZlY3ljbGUgaXMgdGllZCBkaXJlY3RseSB0byB0aGUgQ29kZUJsb2NrLCBh
bmQKICAgICAvLyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIHRoZSBDb2RlQmxv
Y2sgZGVzdHJ1Y3RzLgogCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpp
dENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKICNlbmRpZgogICAgIHZt
LmhlYXAuY29kZUJsb2NrU2V0KCkucmVtb3ZlKHRoaXMpOwpAQCAtMTAzNyw3ICsxMDM5LDcgQEAg
Ym9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29ucwogICAgIC8vIEludGVycHJl
dGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29u
ZWQgd2hlbgogICAgIC8vIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBi
YXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwogICAgIC8vIHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUg
dGhhdCB0aGlzIG1lYW5zIHRoYXQgaXQncyBsaXZlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA0
NSw3ICsxMDQ3LDcgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29ucwog
CiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoVk0mIHZt
KQogewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAg
aWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gIXZtLmhlYXAuaXNNYXJrZWQodGhpcyk7CiB9CkBAIC0xMDU4LDYgKzEw
NjAsOCBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUgaml0VHlwCiAgICAgICAg
ICAgICByZXR1cm4gMTBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAg
ICAgICAgICAgICByZXR1cm4gMzBfbXM7CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgor
ICAgICAgICAgICAgcmV0dXJuIDM1X21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoK
ICAgICAgICAgICAgIHJldHVybiA0MF9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6
CkBAIC0xMDc0LDYgKzEwNzgsOCBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUg
aml0VHlwCiAgICAgICAgIC8vIEVmZmVjdGl2ZWx5IDEwIGFkZGl0aW9uYWwgc2Vjb25kcywgc2lu
Y2UgQmFzZWxpbmVKSVQgYW5kCiAgICAgICAgIC8vIEludGVycHJldGVyVGh1bmsgc2hhcmUgYSBD
b2RlQmxvY2suCiAgICAgICAgIHJldHVybiAxNV9zOworICAgIGNhc2UgSklUVHlwZTo6TE9MSklU
OgorICAgICAgICByZXR1cm4gMThfczsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAg
ICAgcmV0dXJuIDIwX3M7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkBAIC0xMTY5LDcgKzEx
NzUsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdP
ckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0g
bV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgCiAgICAgICAgIGRmZ0NvbW1vbi0+cmVj
b3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKQEAgLTEyMTcsNyArMTIyMyw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICAvLyBJbiByYXJl
IGFuZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2Rl
QmxvY2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCiAgICAgLy8gdGhhdCB3ZSBtaWdodCBkZWNpZGUg
dGhhdCB0aGUgQ29kZUJsb2NrIHNob3VsZCBiZSBqZXR0aXNvbmVkIGR1ZSB0byBvbGQgYWdlLCBz
byB0aGUKICAgICAvLyBpc01hcmtlZCBjaGVjayBkb2Vzbid0IHByb3RlY3QgdXMuCi0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE1MTks
OCArMTUyNSwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAK
ICNlbmRpZgogICAgIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkgfHwg
aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgeworICAgICAgICAvLyBPT1BTOiBTZXBhcmF0
ZSBwYXJ0IG9mIHRoaXMgb3V0IGludG8gaXRzIG93biBmdW5jdGlvbiBmb3IgSklUIElDcy4gU2lu
Y2Ugc29tZSBvZiB0aGVzZSBjYWNoZXMgYXJlbid0IGp1c3QgZm9yIExMSW50LgogICAgICAgICBm
aW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CisgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoISFqaXRDb2RlKCkpCkBAIC0xNTI4LDcgKzE1MzYsNyBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRh
KiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICBkZmdDb21tb24t
PnJlY29yZGVkU3RhdHVzZXMuZmluYWxpemUodm0pOwogICAgIH0KQEAgLTE1NDgsNiArMTU1Niw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAg
IGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CiAgICAgICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291
bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoK
QEAgLTE1OTAsNyArMTU5OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpnZXRJQ1N0YXR1c01hcChjb25z
dCBDb24KICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKENvZGVPcmlnaW4oYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4KSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmJ5VmFsSW5mbyA9IGJ5
VmFsSW5mbzsKICAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBpZiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmNhbGxzKQogICAgICAgICAgICAg
ICAgIHJlc3VsdC5hZGQocGFpci5maXJzdCwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNh
bGxTdGF0dXMgPSBwYWlyLnNlY29uZC5nZXQoKTsKQEAgLTE4MTAsNyArMTgxOSw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7
CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAg
IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAg
ICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0cyhsb2NrZXIsIHZpc2l0b3IpOwpAQCAtMTgyMyw3ICsx
ODMyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgogICAgIFVO
VVNFRF9QQVJBTSh2aXNpdG9yKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xODY3LDcgKzE4
NzYsNyBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKICAgICAgICAg
cmV0dXJuIHRoaXM7CiAgICAgQ29kZUJsb2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOwogICAg
IGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoc2Vs
ZkpJVFR5cGUpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjp1c2VzUmVwbGFjZW1lbnRDb2RlQmxv
Y2soc2VsZkpJVFR5cGUpKSB7CiAgICAgICAgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgY2FuIGJl
IG51bGwgaWYgd2UndmUgaGFkIGEgbWVtb3J5IGNsZWFuIHVwIGFuZCB0aGUgZXhlY3V0YWJsZQog
ICAgICAgICAgICAgLy8gaGFzIGJlZW4gcHVyZ2VkIG9mIGl0cyBjb2RlQmxvY2tzIChzZWUgRXhl
Y3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpKS4gUmVnYXJkbGVzcywKICAgICAgICAgICAgIC8vIHRo
ZSBjdXJyZW50IGNvZGVCbG9jayBpcyBzdGlsbCBsaXZlIG9uIHRoZSBzdGFjaywgYW5kIGFzIGFu
IG9wdGltaXppbmcgSklUCkBAIC0xOTMxLDcgKzE5NDAsNyBAQCBIYW5kbGVySW5mbyogQ29kZUJs
b2NrOjpoYW5kbGVyRm9ySW5kZXgoCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb2RlQmxvY2s6
Om5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFs
Q2FsbFNpdGUpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgUkVMRUFTRV9BU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0
Q29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKSk7CiAgICAgQVNTRVJUKCEhaGFuZGxlckZvcklu
ZGV4KG9yaWdpbmFsQ2FsbFNpdGUuYml0cygpKSk7CiAgICAgQ29kZU9yaWdpbiBvcmlnaW5hbE9y
aWdpbiA9IGNvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSk7CkBAIC0yMjMxLDUxICsyMjQwLDU1
IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKICAgICBEZWZlckdD
Rm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBhY2Nv
bXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAvLyAxKSBNYWtlIHN1cmUgdGhhdCBpZiB0aGlz
IENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0
byBpdAorICAgIC8vIDEpIElmIHdlJ3JlIERGRy9GVEwsIG1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMg
Q29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRv
IGl0CiAgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQg
Ynl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KICAgICAvLyAyKSBNYWtlIHN1
cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4n
dCBjYWxsIHRoaXMgQ29kZUJsb2NrLgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xl
YXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxh
dGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQotICAgICAgICAgICAgY29tcGlsYXRpb24tPnNl
dEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRo
aXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQg
d2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KLSAgICAgICAgaWYgKCFqaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0g
cmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhl
YXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewor
ICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlz
b25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0
IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCisgICAgICAgICAgICBpZiAoIWppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgeworICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVz
eSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxvZygiICAg
IERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6YXRpb24gaWYgdGhhdCdzIHdoYXQg
dGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pIHsK
ICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3
NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsK
KyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9u
IGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgaWYgKHRoaXMg
IT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ugd2VyZSBu
ZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZvciBPU1IgZW50cnkgY29kZQog
ICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8vIE9yLCB3ZSdyZSBhbiBMT0wgQ29kZUJsb2Nr
IGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAgICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFm
dGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiByZWFzb24gIT0gUHJvZmlsZXI6
OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
Vk1UcmFwcykKICAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCiAgICAgLy8gSmV0dGlzb24gY2FuIGhhcHBlbiBkdXJpbmcgR0MuIFdl
IGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVhZCBleGVjdXRhYmxlCiAgICAgLy8g
YmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0IHRvIHRoZSByZW1lbWJlcmVkIHNl
dC4KQEAgLTIzOTAsNyArMjQwMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0Nh
bGwoQ2FsbEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAgICAg
ICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwogICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSwgIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxs
ZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLiIpOwogICAgICAgICByZXR1cm47CkBAIC0yNDgzLDEy
ICsyNDk2LDE0IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygKIHsK
ICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAgaWYg
KE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJ
VCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21w
aWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4gKG1f
aGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXI7CiAgICAgfQogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNl
bWVudCgpOwotICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyOworICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZH
T3JGVEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcjsKIH0KIAogaW50MzJfdCBDb2RlQmxvY2s6OmNvZGVUeXBlVGhyZXNob2xk
TXVsdGlwbGllcigpIGNvbnN0CkBAIC0yNzA5LDcgKzI3MjQsNyBAQCB2b2lkIENvZGVCbG9jazo6
Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCkKIHsKICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7Ci0gICAgaWYgKHR5cGUgIT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiB0eXBlICE9IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAgICBkYXRhTG9nTG4oKnRoaXMs
ICI6IGV4cGVjdGVkIHRvIGhhdmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlKTsKICAg
ICAgICAgQ1JBU0hfV0lUSF9JTkZPKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGppdENvZGUoKS5n
ZXQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpKTsKICAgICB9CkBAIC0yNzI3LDcgKzI3
NDIsNyBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVw
bGFjZW1lbnQgJiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7
CiAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CkBAIC0yNzU2LDcgKzI3NzEsOCBAQCB2b2lkIENvZGVC
bG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiB1aW50MzJfdCBDb2RlQmxvY2s6
OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAv
L0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7IC8vIE9PUFM6IFdl
IGNhbGwgdGhpcyBmcm9tIHRoZSBMT0wgY29tcGlsZXIgdGhyZWFkIGJlZm9yZSBpbnN0YWxsLgor
CiAgICAgLy8gQ29tcHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4g
VGhpcyBpcyBjYWxsZWQgaW5mcmVxdWVudGx5CiAgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29w
IHdvbid0IGh1cnQgdXMuCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsK
QEAgLTI4MzYsNyArMjg1Miw3IEBAIERGRzo6Q29kZU9yaWdpblBvb2wmIENvZGVCbG9jazo6Y29k
ZU9yaWcKIAogc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0
CiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBp
ZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzLnNp
emUoKTsKQEAgLTI4NDcsNyArMjg2Myw3IEBAIGNvbnN0IElkZW50aWZpZXImIENvZGVCbG9jazo6
aWRlbnRpZmllcigKICAgICBzaXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQogICAgICAgICByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSk7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJz
W2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkBAIC0yOTQ4LDcgKzI5NjQsOCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVO
b3coKQogI2lmIEVOQUJMRShERkdfSklUKQogdm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRF
eGl0U2l0ZXMoKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSk7CisgICAgLy8gT09QUworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShhbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkpKTsKICAgICAKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRl
cm5hdGl2ZSgpOwpAQCAtMzA1MCw2ICszMDY3LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFt
ZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJh
c2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApA
QCAtMzIyNiwxNCArMzI0NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6YWRkQnJlYWtwb2ludCh1bnNp
Z25lZCBuCiB7CiAgICAgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsKICAgICBB
U1NFUlQobV9udW1CcmVha3BvaW50cyk7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAg
ICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJCcmVha3BvaW50
KTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZShDb2RlQmxvY2s6OlN0ZXBw
aW5nTW9kZSBtb2RlKQogewogICAgIG1fc3RlcHBpbmdNb2RlID0gbW9kZTsKLSAgICBpZiAobW9k
ZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKQorICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6
aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25EdWVUb0RlYnVnZ2VyU3RlcHBpbmcpOwogfQogCkBAIC0zNDIxLDkgKzM0MzksOSBAQCBPcHRp
b25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OmJ5dGVjCiB7CiAgICAgT3B0aW9uYWw8Qnl0
ZWNvZGVJbmRleD4gYnl0ZWNvZGVJbmRleDsKICAgICBKSVRUeXBlIGppdFR5cGUgPSB0aGlzLT5q
aXRUeXBlKCk7Ci0gICAgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8
fCBqaXRUeXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIGlmIChKSVRDb2RlOjpjYWxs
U2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoaml0VHlwZSkpCiAgICAgICAgIGJ5dGVjb2RlSW5kZXgg
PSBjYWxsU2l0ZUluZGV4LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBlbHNlIGlmIChqaXRUeXBlID09
IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgIGVs
c2UgewogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRD
b2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpKTsKICAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBj
b2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpOwpAQCAtMzQ2Niw3ICszNDg0LDcgQEAgYm9vbCBDb2Rl
QmxvY2s6Omhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcAogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5
IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAgICAvLyBj
YXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5kbGVyIHNh
ZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50IG9mIG1f
aml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmhhc0luc3RhbGxlZFZN
VHJhcHNCcmVha3BvaW50cygpOwogI2Vsc2UKQEAgLTM0ODAsNyArMzQ5OCw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1h
eSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAgICAgLy8g
Y2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFuZGxlciBz
YWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBt
X2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGF1dG8mIGNvbW1vbkRhdGEgPSAqbV9qaXRDb2RlLT5kZmdDb21tb24oKTsK
ICAgICBjb21tb25EYXRhLmluc3RhbGxWTVRyYXBCcmVha3BvaW50cyh0aGlzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDM4LDcgKzQzOCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQmFzZWxp
bmVKSVRQcm9maWxpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKKyAgICAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgp
OworICAgICAgICByZXR1cm4gdHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0eXBlID09
IEpJVFR5cGU6OkxPTEpJVDsKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUxMSw2
ICs1MTIsNyBAQCBwdWJsaWM6CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJ
bmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1
ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25z
dCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
QXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CkBAIC01MzksNyArNTQxLDcgQEAgcHVibGljOgog
ICAgIC8vIEhhdmluZyBjb2RlIG9yaWdpbnMgaW1wbGllcyB0aGF0IHRoZXJlIGhhcyBiZWVuIHNv
bWUgaW5saW5pbmcuCiAgICAgYm9vbCBoYXNDb2RlT3JpZ2lucygpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSk7CisgICAgICAgIHJldHVy
biBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSk7CiAgICAgfQogICAgICAgICAKICAgICBi
b29sIGNhbkdldENvZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3Zh
bHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlm
IChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAg
IGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRp
bmdKSVRUeXBlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
OSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpCiAgICAgY2FzZSBF
eGl0RnJvbUFueXRoaW5nOgogICAgICAgICBvdXQucHJpbnQoIkZyb21Bbnl0aGluZyIpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0RnJvbUxPTDoKKyAgICAgICAgb3V0LnByaW50KCJG
cm9tTE9MIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRGcm9tREZHOgogICAgICAg
ICBvdXQucHJpbnQoIkZyb21ERkciKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBlbnVt
IEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiAgICAgRXhpdEZyb21Bbnl0aGluZywKKyAgICBF
eGl0RnJvbUxPTCwKICAgICBFeGl0RnJvbURGRywKICAgICBFeGl0RnJvbUZUTAogfTsKQEAgLTM4
LDYgKzM5LDggQEAgZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogaW5saW5lIEV4aXRp
bmdKSVRUeXBlIGV4aXRpbmdKSVRUeXBlRm9yKEpJVFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIEV4aXRG
cm9tTE9MOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gRXhpdEZy
b21ERkc7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VU
YWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1
YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2Ft
ZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkg
PSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywg
c2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNp
emVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1D
b25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1B
cmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51
bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNr
Q2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6
VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1B
cmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0
aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6
ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0
IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMp
CiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3Rh
bnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1l
bnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJn
dW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxs
ZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApA
QCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5k
c0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVl
ID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAg
ICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxs
KGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXpl
X3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQog
ICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9
Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUo
KSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90
IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAg
ICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0g
bnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50
cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6
ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5z
aXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJl
dHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAg
ICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6
ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxv
Y2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBu
dW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBp
ZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAg
IHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAg
ICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0g
dHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+Cisg
ICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1w
bGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYm
IHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxv
Y2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAg
CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVG
b3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUg
PD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7
CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
VG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAg
ICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6
ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3Jvdyhu
ZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNp
emVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBz
aXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXpl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVk
VmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlv
bikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZElu
ZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQu
dG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50
KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwog
ICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5
cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChv
cGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7
CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAg
ICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiAr
Mzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9D
b25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSAr
NDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJn
dW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxv
Y2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAg
ICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50
cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAg
IH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6
Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVu
dHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1w
cy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3Vt
ZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25z
dGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2Ug
bV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWdu
ZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3Ry
ZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAog
ewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50
SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01Nywx
MCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcElu
ZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAg
IGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNh
bGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5k
czxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBD
b21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0g
bnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBA
QCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6Iiwg
dG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9u
SGFuZGxpbmdDYWxsU2l0ZSA9IGppdC0+Y29kZUJsb2NrKCktPmppdENvZGUoKS0+bGl2ZVJlZ2lz
dGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoaml0LT5jb2RlQmxvY2so
KSwgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOwogICAgICAgICBtX25lZWRzVG9SZXN0b3JlUmVn
aXN0ZXJzSWZFeGNlcHRpb24gPSBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgPiAwOwogICAgICAgICBpZiAo
bV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKQotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5
cGUoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChq
aXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNG
b3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9u
SGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwogICAgICAgICBt
X2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAg
LTcxMCw3ICs3MTAsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNz
CiAgICAgICAgIC8vIFdlIHNldCB0aGVzZSB0byBpbmRpY2F0ZSB0byB0aGUgc3R1YiB0byByZW1v
dmUgaXRzZWxmIGZyb20gdGhlIENvZGVCbG9jaydzCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5k
bGVyIHRhYmxlIHdoZW4gaXQgaXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIGNvZGVCbG9ja1RoYXRP
d25zRXhjZXB0aW9uSGFuZGxlcnMgPSBjb2RlQmxvY2s7Ci0gICAgICAgIEFTU0VSVChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0
VHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9ja1Ro
YXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOwogICAgICAgICBjYWxsU2l0ZUlu
ZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcgPSBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9u
SGFuZGxpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRl
CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lu
bGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUp
OworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUg
dmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxO
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAg
ZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAg
IGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlk
VmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBm
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpA
QCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAg
ICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9v
bCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCht
X3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIo
KSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lz
dGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50
KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7
IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsx
MTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJn
dW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJn
dW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgp
IHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQog
CiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxp
bmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9m
ZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29u
c3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
QmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWls
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQ
YXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFj
dFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQo
bnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxU
b3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQKIFNVUFBSRVNTX0FTQU4KIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChjb2Rl
QmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkp
OwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgQVNTRVJUKCFjb2RlQmxv
Y2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDcgQEAgdm9pZCBhZGp1c3RBbmRK
dW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIGlmIChleGl0SW5saW5lQ2FsbEZyYW1lKQog
ICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXRJbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKIAorICAgIC8vIE9PUFM6IE1ha2UgdGhpcyBkbyB0aGUg
cmlnaHQgdGhpbmcgYmFzZWQgb24gTE9MIG9yIG5vdC4KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
a0ZvckV4aXQgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwog
ICAgIEFTU0VSVChjb2RlQmxvY2tGb3JFeGl0ID09IGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5l
VmVyc2lvbigpKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2Nr
Rm9yRXhpdC0+aml0VHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjpyZWNvbnN0cnVjCiB7CiAgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOwogICAgIHVuc2lnbmVkIG51bVRtcHM7
CkBAIC0xNTUsNiArMTU0LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25z
dHJ1YwogICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
ICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwo
KSArIDE7CiAgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNh
bGxGcmFtZS0+dG1wT2Zmc2V0OwogICAgIH0gZWxzZSB7CisgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOyAvLyBPT1BTOiBi
eXRlY29kZVZlcnNpb24KICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2st
Pm51bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICsz
NTMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MjYgKzUyLDE3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENhbGxGcmFtZUYKIGJv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBl
KCkpIHsKLSAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBKSVRUeXBl
OjpOb25lOgotICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gSklUQ29kZTo6Y2Fs
bFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpOwogfQogCiBi
b29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5
cGUoKSkgeworICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJ
VFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBl
OjpGVExKSVQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzksOCArNzAsNiBAQCBib29sIENh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0
Q2FsbFRodW5rOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwxMCArNDU2LDEwIEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIEhhbmRsZXJJbmZvKiBmaW5kRXgKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
dmlzaXRvci0+Y2FsbEZyYW1lKCk7CiAgICAgdW5zaWduZWQgZXhjZXB0aW9uSGFuZGxlckluZGV4
OwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KQotICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5k
ZXgoKS5iaXRzKCk7Ci0gICAgZWxzZQorICAgIGlmIChKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVC
eXRjb2RlSW5kZXgoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBleGNlcHRpb25IYW5k
bGVySW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKKyAgICBlbHNl
CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRl
eCgpLmJpdHMoKTsKIAogICAgIHJldHVybiBjb2RlQmxvY2stPmhhbmRsZXJGb3JJbmRleChleGNl
cHRpb25IYW5kbGVySW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxOCBAQAogI2luY2x1
ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVkZSAiQ29kZUJsb2Nr
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAi
REZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCisj
aW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRl
ICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgpAQCAtNDksNiArNTUsOCBAQAogI2luY2x1ZGUgPHd0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgogCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogbmFtZXNw
YWNlIEpJVEludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CkBAIC02MCw2ICs2OCw4OTEgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
U2Vjb25kcyB0b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGls
ZVRpbWU7CiAKK3ZvaWQgSklUOjpzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIHNldFR5cGUgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9jdXJyZW50UHJlZGljdGlv
bnMub3BlcmFuZChyZWcpID0gdHlwZTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlID0g
WyZdIChhdXRvIGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9kc3QsIHR5cGUpOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgIC8vc2V0RHN0
VHlwZShieXRlY29kZSwgcHJvZmlsZXMuZ2V0KCZieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9wcm9maWxlKSk7CisgICAgICAgIC8vIFdlIHJhY2lseSByZWFkIHRoaXMsIHNpbmNlIGl0
IHNob3VsZCBvbmx5IGdyb3cgaW4gdGhlIHR5cGVzIGl0IHJlcHJlc2VudHMuCisgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICB9OworCisgICAgYXV0byB0eXBlRm9yID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgLT4gU3BlY3VsYXRlZFR5cGUgeworICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgfTsKKworICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QXJndW1lbnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGw6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFk
YXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUu
bV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVy
YXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEu
bV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
dmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9z
cmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFBy
aXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lk
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BU
cnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBl
X29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVy
ZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRB
c0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1
cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAg
IHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmln
SW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNw
ZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ug
Y2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJp
bmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9t
dWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1f
cmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBt
ZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNB
bnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cisg
ICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5h
TkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIg
dy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkgfHwg
ISEocmlnaHQgJiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3QpKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgfD0gU3BlY0JpZ0ludDsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJl
c3VsdCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2Vy
dmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQg
JiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0
KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0
LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFu
ZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNv
ZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRl
Y29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmln
SW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBj
YXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29k
ZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0
aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29k
ZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBl
ID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJv
bCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVm
ZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBp
ZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEg
dGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUg
bmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAg
ICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9h
ZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2Zp
bGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNl
dFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFz
ZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BT
dHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19m
dW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5j
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdH
ZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dl
bmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVu
dW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNP
d25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVy
dHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5h
bWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVy
aWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZh
bDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JI
b2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1
bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1l
bnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFy
Z3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRl
cmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlz
ZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25s
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xl
c3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5l
ZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVm
aW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5k
ZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jv
b2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19u
dW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhf
cHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRl
bnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24g
PSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAz
MiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUp
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9m
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3Rv
bToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9t
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmlu
Z0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxf
d2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVy
bmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9i
ZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgor
ICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAg
Y2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBj
YXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6
CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9h
Y2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1w
OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9q
ZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRf
b3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9q
ZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ug
b3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToK
KyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNl
IG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVy
OgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2Fz
ZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRj
aF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJp
bmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19z
Y29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJv
ZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVy
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAg
Y2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAK
KyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21f
ZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToK
KyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRf
ZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJp
dHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2No
ZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGlu
dF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3df
ZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1w
b2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNo
ZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNl
IGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5f
ZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxs
X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1
ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgor
ICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRf
aG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9l
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
c2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9v
cGVuOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9j
b25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAg
IGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9p
dGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9u
X2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGlu
dF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hl
Y2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdh
c21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5l
X3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQorewor
ICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ss
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5y
ZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJl
ZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRb
aV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7
CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAo
VmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2Rl
QmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9n
cmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgt
PmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3Ig
KHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUg
PSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9w
cmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247
CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFy
ZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwg
bV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5j
YWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBib29sIGNv
bXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRzLnJlc2l6ZShtX2dyYXBoLT5z
aXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBNYXli
ZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFjdCBv
ZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAgICAg
Ly8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBl
bmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzogSG93
IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERG
Uy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNp
Y0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0
aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAg
IGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2Nr
LmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2st
PmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRy
eUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7IGkgKyBibG9jay5sZWFkZXJP
ZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1dGVVc2VDb3Vu
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91c2VDb3Vu
dHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNo
ZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hl
Y2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50
LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNv
dW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlv
bnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVj
dWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcHV0ZVVzZUNvdW50cyA9IGZh
bHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNyArOTYwLDEzIEBAIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24u
cmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAg
ICByZXR1cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAg
ICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxv
Y2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03NSw2ICs5NzQs
NyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX2Nh
bkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQog
ICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6TE9MKQogewog
fQogCkBAIC0xMzcsMTEgKzEwMzcsMjUgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBO
RVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZp
bmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6
IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkg
eyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBp
ZiAoZ2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93
Q2FsbENhc2VzIikpKSB7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBjYk5h
bWU7IFwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChjYk5hbWUpOyBcCisgICAg
ICAgICAgICAgICAgU3RyaW5nIGtleSA9IGNiTmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3Ry
aW5nOjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVz
W2N1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07IFwKKyAgICAgICAgICAgICAgICBwcm9i
ZShbPV0oUHJvYmU6OkNvbnRleHQmKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgc2xvd0NhbGxD
YXNlUmFuKGtleSk7IFwKKyAgICAgICAgICAgICAgICB9KTsgXAorICAgICAgICAgICAgfSBcCisg
ICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUp
OyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAg
ICAgICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNu
YW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA3MCw0NiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAog
ICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAog
I2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25h
bWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAm
JiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nh
c2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2Fz
ZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
bG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3Zv
aWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3N0YXRpYyB2
b2lkIHNsb3dDYWxsQ2FzZVJhbihTdHJpbmcga2V5KQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtd
IHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgpOworICAgIH0pOworCisgICAgYXV0byYg
bWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2NF90IHZhbHVlID0gKyttYXAuYWRkKGtl
eSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgodmFsdWUgJSAxMDAwKSA9PSAwKQorICAg
ICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRp
Y3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAg
ICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAg
LTIzMSwxNSArMTE2NSw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAo
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xv
d0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJ
bmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgp
ID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVj
dGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQn
cyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAg
YnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5y
ZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1f
Z3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgewor
ICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2Nr
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3Vj
Y2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVu
ZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAg
ICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50
OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVu
dEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxl
YWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChm
YWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQg
ZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9
IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3Vy
cmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2Nr
KCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVk
ZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1Nl
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRb
cHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3Jz
W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJn
ZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICAgICAg
bV9jdXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3VzZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+
aW5kZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3BpbGxDYW5kaWRhdGVzLmNsZWFyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dD
YXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5k
ZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+
IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAgICAgICAgLy8gTGV0J3Mg
ZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KKyAgICAgICAgICAgIGJy
ZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAg
ICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIo
KTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKQEAgLTI3OCw0
NiArMTI4MSw1MiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IH0KICNlbmRpZgogCisKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBkYXRhTG9n
TG4oIlJlZyBhbGxvYyBiZWZvcmUgYmMjIiwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAg
ICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsK
KyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoaW5fYnlfdmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChsZXNzZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoaXNfY2FsbGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5
cGVvZl9pc19vYmplY3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlv
bikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0KQotICAgICAgICBERUZJTkVfU0xPV19P
UChwdXNoX3dpdGhfc2NvcGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2Fs
X2Vudmlyb25tZW50KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfYnlfdmFsX3dpdGhfdGhp
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcykKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUCh1
bnJlYWNoYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQpCi0gICAgICAgIERF
RklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKHNw
cmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9X
X09QKHRvX2luZGV4X3N0cmluZykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1l
bnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHkpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X3Byb21pc2UpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5l
cmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHBvdykKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoaW5fYnlfdmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKS5tX2RzdCwg
U3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGxlc3MsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BMZXNzPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AobGVzc2VxLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLm1fZHN0LCBT
cGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlciwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdyZWF0ZXI+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChncmVhdGVyZXEsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+
KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1
Y3RvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCkubV9kc3QsIFNw
ZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUeXBlb2Y+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9T
TE9XX09QKHR5cGVvZl9pc19vYmplY3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJ
c09iamVjdD4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHR5
cGVvZl9pc19mdW5jdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rp
b24+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisg
ICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSwgVmlydHVhbFJlZ2lzdGVyKCks
IFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9u
bWVudCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4o
KS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfYnlf
dmFsX3dpdGhfdGhpcywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+
KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRf
d2l0aF90aGlzLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9T
TE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNf
ZGVjbF9pbl9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9p
c3RpbmdGdW5jRGVjbEluRXZhbD4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERFRklO
RV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05v
bmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSwgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUCh1bnJlYWNo
YWJsZSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19P
UCh0aHJvd19zdGF0aWNfZXJyb3IsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAg
IERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdBcnJheUJ1ZmZlcj4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xP
V19PUChzcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCkubV9kc3QsIFNw
ZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0
aCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCkubV9kc3Qs
IFNwZWNJbnQzMk9ubHkpCisgICAgICAgIERFRklORV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3By
b3BlcnR5LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5Pigp
Lm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5
X2VudW1lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0
b3I+KCkubV9kc3QsIFNwZWNDZWxsKQorICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9z
dHJpbmcsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLm1fZHN0LCBT
cGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKS5tX2Rz
dCwgU3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Nj
b3BlZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1
bWVudHM+KCkubV9kc3QsIFNwZWNTY29wZWRBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlQ2xvbmVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5LCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLm1fZHN0LCBTcGVjQ2VsbE90aGVy
KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVJlc3Q+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoY3JlYXRlX3Byb21pc2UsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9t
aXNlPigpLm1fZHN0LCBTcGVjUHJvbWlzZU9iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bmV3X3Byb21pc2UsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLm1fZHN0
LCBTcGVjUHJvbWlzZU9iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVy
YXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKS5tX2RzdCwg
U3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2Vu
ZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCku
bV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVy
YXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKS5tX2RzdCwgU3Bl
Y09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChwb3csIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQb3c+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQp
CiAKICAgICAgICAgREVGSU5FX09QKG9wX2FkZCkKICAgICAgICAgREVGSU5FX09QKG9wX2JpdG5v
dCkKQEAgLTM5OCw3ICsxNDA3LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJfYmVnaW4pCiAgICAgICAgIERF
RklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2VuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2xzaGlm
dCkKKyNpZiBDUFUoWDg2XzY0KQogICAgICAgICBERUZJTkVfT1Aob3BfbW9kKQorI2Vsc2UKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AobW9kLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigp
Lm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQorI2VuZGlmCiAgICAgICAg
IERFRklORV9PUChvcF9tb3YpCiAgICAgICAgIERFRklORV9PUChvcF9tdWwpCiAgICAgICAgIERF
RklORV9PUChvcF9uZWdhdGUpCkBAIC00NzQsMTAgKzE0ODcsNzIgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWwpCiAKKyAgICAgICAgREVGSU5FX09QKG9wX2lzX2NhbGxhYmxlKQorCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsK
KyAgICAgICAgICAgIGlmICghbV9jaGVja2VkVXNlTE9MKSB7CisgICAgICAgICAgICAgICAgc3dp
dGNoIChvcGNvZGVJRCkgeworICAgICAgICAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF90aHJvdzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2pt
cDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3ByaXZh
dGVfbmFtZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHk6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5
X3dpdGhfcHJvZmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRy
b2xfZmxvdzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAi
LCBvcGNvZGVJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworCisgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkJiBjb3VudGVyID0gbV9jdXJyZW50
VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgLS1jb3VudGVyOwor
ICAgICAgICAgICAgICAgIGlmICghY291bnRlcikgeworICAgICAgICAgICAgICAgICAgICAvLyBP
T1BTOiBEbyB0aGlzIGxhemlseSBpbiBzbG93IHBhdGggY3JlYXRpb24vc3BpbGxGb3JDYWxsCisg
ICAgICAgICAgICAgICAgICAgIC8vbV9zcGlsbENhbmRpZGF0ZXMuYXBwZW5kKG9wZXJhbmQpOwor
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBn
cHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGdwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2Ji
ZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGZwcik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBm
b3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZD
aGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNr
cG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5k
ZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNDk4LDYgKzE1NzMsMjAgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogICAgIG1fam1wVGFibGUuY2xlYXIoKTsK
IH0KIAorc3RhdGljIHZvaWQgc2xvd0Nhc2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShv
bmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKwor
ICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsr
bWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkg
PT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogewogICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsK
QEAgLTUxNiwxNCArMTYwNSwyNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJv
ZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVk
IGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1f
c2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsK
KyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGluayh0aGlzKTsKKworICAgICAg
ICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisKKyAgICAgICAgaWYgKGdldGVu
digicHJpbnRTbG93Q2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSkpIHsK
KyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG5hbWU7CisgICAgICAgICAgICBtX2NvZGVC
bG9jay0+ZHVtcChuYW1lKTsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBuYW1lLnRvU3RyaW5n
KCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsg
IiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsKKyAgICAg
ICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZVJhbihrZXkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlID0gbnVsbHB0cjsKICAgICAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKQEAgLTU4MCw3ICsxNjgwLDYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX25lcSkKQEAgLTU5OSw2ICsxNjk4LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9y
X29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2Vu
ZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGRlYykKQEAgLTYzMSwxOSArMTczMywyMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3Bl
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChjaGVja190ZHopCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9TTE9XX09QKHRvX3Byb3BlcnR5X2tleSkKKyAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AoaXNfY2FsbGFibGUpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RU
bywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkg
fHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQo
KSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAg
ICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9
PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNl
dCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Cisg
ICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
JnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBz
byB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwog
ICAgIH0KQEAgLTY4OCw2ICsxNzk0LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2lu
ZyhKSVRDb21waQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBP
T1BTOiBoZWxwZnVsIGZvciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNo
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3
OCw2ICsxODg2LDg4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkK
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgYm9vbCBwcmludEVh
Y2hPU1IgPSBnZXRlbnYoInByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFj
aE9TUiIpKTsKKworICAgIGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1
bXBMaXN0IGV4aXRDb21tb247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBz
KSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAg
ICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0
aGlzKTsKKworICAgICAgICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAgICAgICAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5kdW1wKHByaW50U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHBy
aW50U3RyZWFtLnRvQ1N0cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVm
KCk7IC8vIGxlYWsgaXQuCisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBl
eGl0IGF0IGJjIyIsICBieXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMu
CisKKyAgICAgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4
aXRDb21tb24uYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4
aXRDb21tb24uZW1wdHkoKSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0aGlzKTsKKworCisg
ICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOwor
ICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlu
cyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBi
ZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdp
c3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJl
Z2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwor
ICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJh
cnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcp
LCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihy
ZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7Cisg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkp
OworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBU
cnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0
aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFn
UmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQ
QyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0
aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVt
YmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0
aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMy
KAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAg
ICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRy
YW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAg
ICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xp
bmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5h
dGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAg
ICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRh
dGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAg
IG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIs
IE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0
b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29u
IGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExM
SW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAg
ICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05NjcsNyArMjE1Nyw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQg
PSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAg
ICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05NzgsNyArMjE2OCw3IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2Nr
ZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
cmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAg
IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VM
T0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRl
ZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjYyLDk1MSBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9P
UFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4
aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRK
dW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0
SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorVmVjdG9yPFJlZywgMzI+IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8g
T09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJl
bnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgVmVjdG9yPFJlZywgMzI+
IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQg
YWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKGFs
bG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hcHBl
bmQocmVnKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30K
Kworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMy
Pj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxs
b3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVu
IHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21w
aWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdh
bnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4u
CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJl
Z3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwor
dm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtz
IGN1cnJlbnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5p
Y2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8v
aWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRl
eCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJ
VDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRl
ZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAg
ICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJ
VDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9P
UFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnBy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJl
Zyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7
CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQg
Ym90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAg
ICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9w
ZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAv
LyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJl
Y2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAg
Ly8gLSBWYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAv
LyAtIH5WYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBk
ZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVw
IGZ1bGx5CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5
IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5W
YWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAg
ICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5k
ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwor
dm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xv
YmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgewor
ICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVy
KGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2
ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxk
IGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElm
TmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1Zh
bHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1h
a2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJh
bmQpKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0
b0lnbm9yZSwgRlBSUmVnIHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQg
YmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVy
YW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0
ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUu
b3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3Bp
bGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWcuZnByKCkgIT0gdG9JZ25v
cmVGUFIpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gdG9J
Z25vcmUpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKworICAgIHJl
c3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMs
IDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJD
YWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVj
b3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsK
KyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3Jk
LnNhdmVQbGFuKTsKK30KKworc3RhdGljIHZvaWQgYWRkTG9hZENvdW50KHVpbnQ2NF90IGNvdW50
KQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb3VudGVyOworICAgIGZvciAodWludDY0X3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgaWYgKGNv
dW50ZXIgJSAxMDAwMCA9PSAwKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJSdW50aW1lIGxvYWQg
Y291bnQ6ICIsIGNvdW50ZXIpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2
ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBj
b25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgdWludDY0X3QgbG9hZENvdW50ID0gMDsK
KyAgICBmb3IgKGF1dG8mIHR1cGxlIDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHN0
ZDo6Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBzdGQ6
OmdldDwxPih0dXBsZSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUgPSBzdGQ6
OmdldDwyPih0dXBsZSk7CisKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQo
IWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgRGlzYWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaCgqdGhpcyk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUpKQorICAgICAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBicmFuY2hJZkludDMy
KEpTVmFsdWVSZWdzIHsgc2NyYXRjaCB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAgICAgICAgaXNJbnQzMi5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gs
IHJlZy5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICArK2xvYWRDb3VudDsKKyAgICB9CisKKyAgICBp
ZiAoZmFsc2UgJiYgbG9hZENvdW50KSB7CisgICAgICAgIHByb2JlKFs9XSAoUHJvYmU6OkNvbnRl
eHQmKSB7CisgICAgICAgICAgICBhZGRMb2FkQ291bnQobG9hZENvdW50KTsKKyAgICAgICAgfSk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKHNsb3dDYXNl
LnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklU
OjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAv
LyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBK
U1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwg
YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2ln
blJlZyhncHIsIG9wZXJhbmQpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJP
bmx5OworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBG
UFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0
ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAu
Z3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAg
ICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMg
KC9jaGVja3BvaW50cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3Np
Z25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQor
Cit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFs
dWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5v
cGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BS
VGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQor
CitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6
R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFs
aWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6
RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6
RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisg
ICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9j
ayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBp
ZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9j
YXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5k
LCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAg
ICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2Vs
bE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJl
ZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAg
ICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9q
aXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9q
aXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0
LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKwor
SklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitK
SVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBt
X2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5k
LmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0g
bV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICgh
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkp
IHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIo
SlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpT
VmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmls
dGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9q
aXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgbV9qaXQuYXNzaWduUmVn
KG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Ok51bWJl
ck9wZXJhbmQ6Ok51bWJlck9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBS
UmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6
On5OdW1iZXJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJS
ZWcgSklUOjpOdW1iZXJPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlk
RlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAg
ICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigp
OworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRl
bXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
KworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQu
YnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMp
OworCisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1
ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgfQorCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworICAgIHJl
dHVybiBtX2ZwcjsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpJbnQzMkNvbnZl
cnRpbmdPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjp+
SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZUlu
dDMyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIG9wIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgICAgICBtX2dwciA9IG9wLmdwcigpOworICAgICAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX29wZXJh
bmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVy
YW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKwor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0IH07CisgICAgICAgIEZQ
UlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0
LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICAgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFs
dWVHUFIsIG1fZ3ByLCBmcHIpOworICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02
NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQz
MkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9q
aXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dw
cik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVs
c2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFu
Y2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nl
c3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGls
bEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8g
b3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBm
cHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7
CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIs
IG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICB9IGVsc2UgaWYg
KG1faml0LnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4obV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBt
X2ppdC5zcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAgIG1f
aml0LmFuZDMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICB9IGVsc2Ug
aWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlT3RoZXIobV9vcGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAg
ICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQ
Ui5mcHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25lOworCisgICAgICAgIGF1dG8gaXNJbnQz
MiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBub3REb3VibGUgPSBtX2ppdC5icmFuY2hJZk5vdERv
dWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0
ZXJzKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7
CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJBUk02NDo6c3VwcG9y
dHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNlbWFudGljcygpKSB7Cisg
ICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2YVNjcmlwdFNlbWFu
dGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIG1fZ3ByLCBCcmFuY2hJ
ZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0byBzcGlsbFJlY29yZCA9IG1f
aml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0
LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhoYXNTZW5zaWJsZURv
dWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93IDogb3BlcmF0aW9uVG9J
bnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5zaWxlbnRGaWxsQWZ0ZXJDYWxs
KHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBub3REb3VibGUubGluaygmbV9qaXQpOworICAgICAgICBhdXRv
IG5vdE90aGVyID0gbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0sIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RPdGhlci5s
aW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZk5vdEJvb2xlYW4oSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcikpOworICAgICAg
ICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvV29yZCh2YWx1ZUdQUiwgbV9ncHIpOwor
CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7
CisgICAgfQorCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3Rh
dGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vy
cmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMu
bnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5U
eXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0
YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9j
b2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIs
ICIsIGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkK
K3sKKyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8g
cmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dM
bihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig
KGF1dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5p
c0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRh
dGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBkYXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVk
ZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29k
ZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlu
a0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQot
ICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2
ZVBsYW4gPSBWZWN0b3I8c3RkOjp0dXBsZTxSZWcsIFZpcnR1YWxSZWdpc3RlciwgU3BlY3VsYXRl
ZFR5cGU+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAg
ICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNs
b3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQor
ICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAg
ICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVz
dCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZl
IG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxh
bjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3
ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsK
IAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTk2LDcgKzIxMSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRk
cmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7
CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZh
Y2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50
ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBK
SVRTdHViQ2FsbDsKIApAQCAtMjA0LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBh
dGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0
aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAg
Ly8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUg
YXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3
aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8g
Zml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNo
UHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVChW
TSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgICAgIGVudW0gY2xhc3MgQ29tcGls
ZVR5cGUgeworICAgICAgICAgICAgQmFzZWxpbmUsCisgICAgICAgICAgICBMT0wKKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayosIENvbXBpbGVUeXBlLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSk7CiAgICAgICAgIH5KSVQoKTsKIAogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRl
cmZhY2VKSVQ6OnZtKCk7IH0KQEAgLTIyMCwyMiArMjM2LDIyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAgdm9pZCBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCisKKyAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGls
ZVR5cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9y
dCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBi
eXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxp
bmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlW
YWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENv
bXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0g
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
UHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI0MywyMSArMjU5LDIxIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAg
ICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAg
ICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkK
ICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29k
ZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJy
YXlNb2RlKTsKICAgICAgICAgfQpAQCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
cGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAg
ICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQg
c3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJl
ckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisK
ICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNl
cHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzUzLDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0g
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
Y29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2
b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAs
IFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nh
c2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVt
cChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyAr
MzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9w
Y29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKQEAgLTM1MCw3ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBi
b29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM5
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21w
aWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7
IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFU
eXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVy
TW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3Vs
ZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1NDAs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBA
IC01MTcsMTIgKzU0OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBTbG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9u
LCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNs
b3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGlu
c3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVy
dCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVy
T2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lk
IGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYs
OSArNTg3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0
eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NzUsNiArNjE2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9pc19jYWxsYWJsZShjb25zdCBJbnN0cnVjdGlv
biopOwogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgdm9pZCBlbWl0X29wX2lzX2JpZ19pbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICNlbHNlCkBAIC02MTAsNyArNjUyLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3Ry
dWN0aW9uKik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBA
IC02NzgsNzggKzcyMiw4MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxs
X2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3Rf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
Y2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9u
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAg
ICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0g
ICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7
CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAg
ICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNp
Z25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQp
OworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1
bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVz
dWx0R1BSID0gSW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAg
ICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRo
KTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBz
Y29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
IHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAg
ICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJh
bmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODExLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAg
dm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAg
ICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdp
c3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKTsKQEAgLTc3OCwzOCArODIzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1
Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQg
ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVj
dGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNo
RnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2
b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0
cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBh
dGNoRnVuY3Rpb24pOwotCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0
ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0
aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtE
dW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAg
ICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwot
ICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB2b2lk
IGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVj
dGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNo
RnVuY3Rpb24sIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0Fs
bFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgbGlua0Fs
bFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNs
b3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBt
X2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAg
ICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlm
IChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93
Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgp
OwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAg
LTg5MSw2ICs5MTYsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0
aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3MuLi4g
YXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAg
ICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAg
ICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgRlBSUmVn
IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzZXR1cEFyZ3Vt
ZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxG
cmFtZSgpOworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwor
ICAgICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
dHVybiBjYWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVw
QXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwpAQCAtOTAyLDYgKzk0Nyw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTm9Qcm9maWxpbmcKICAgICAgICAgfTsKIAorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgYm9vbCB0cnlFbWl0TE9MQml0RmFz
dFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CiAgICAgICAg
IHZvaWQgZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHNob3VsZEVtaXRQcm9maWxpbmcgPSBQcm9maWxp
bmdQb2xpY3k6Ok5vUHJvZmlsaW5nKTsKIApAQCAtOTYxLDYgKzEwMDksOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7
IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7Cisg
ICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAg
ICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTcxLDYgKzEwMjIsMjky
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4K
ICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7
CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAg
IH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxp
ZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJU
ZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50
MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5J
bnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAz
MiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBi
ZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAg
ICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNl
bGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52
YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAg
ICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVn
IGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVP
cGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAg
ICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1f
ZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3Bl
cmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOdW1iZXJPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgTnVtYmVyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+TnVtYmVyT3BlcmFuZCgpOworICAgICAgICAgICAg
RlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsK
KyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU3Bl
Y3VsYXRlIG51bWJlcitib29sZWFuK290aGVyLCBhbmQgY29udmVydCB0byBpMzIuIFVzZWZ1bCBm
b3IgYml0b3BzLgorICAgICAgICBjbGFzcyBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIHsgCisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQoSklUJiwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyQ29udmVydGluZ09wZXJh
bmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9
OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJv
dmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmls
dGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAg
ICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9j
b2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAg
R1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQo
b3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAg
ICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFs
bG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJl
Z1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdW
YWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVn
VmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUFJSZWcmIGZw
ciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJ
bnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFu
ZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlk
RlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnVmFsdWUoZ3ByKS5v
cGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkg
PSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lm
IEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVy
YW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBm
cHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcmVnVmFsdWUoZnByKS5vcGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAg
ICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShm
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRl
Y29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVP
dGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAg
ICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFz
Q2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4o
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFi
bHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQ
UlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBG
UFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBS
UmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsg
Ly8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24n
dCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9p
ZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAg
ICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdu
b3JlID0gSW52YWxpZEdQUlJlZywgRlBSUmVnIHRvSWdub3JlRlBSID0gSW52YWxpZEZQUlJlZyk7
CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29y
ZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3Jl
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAg
ICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAg
ICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8RmFyQ2FsbFJl
Y29yZD4gbV9mYXJDYWxsczsKQEAgLTk5MCw3ICsxMzI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Ns
b3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsK
ICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTEwMjcsNiAr
MTM2NCw4NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVk
T3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3Ry
dWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZl
IGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0
aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAg
IHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdw
ciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIp
CisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50
IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAg
ICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAg
ICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAg
ICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAg
ICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dF
bnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAg
IERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0
YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1Jl
ZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAg
ICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAg
ICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3Bl
cmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRU
b1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAg
QVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxh
dGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAg
ICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkp
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVn
aXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0
YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0
ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworICAg
ICAgICBWZWN0b3I8T3BlcmFuZHM8dW5zaWduZWQsIHRydWU+PiBtX3VzZUNvdW50czsKKyAgICAg
ICAgT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+IG1fY3VycmVudFVzZUNvdW50czsKKyAgICAgICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMTY+IG1fc3BpbGxDYW5kaWRhdGVzOworCisgICAgICAg
IFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFs
PEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWdu
ZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsK
KyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8
c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDg2ICs0Miw4
OCBAQAogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIK
IAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsK
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNz
VGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpn
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5s
ZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9y
RXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JF
cXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJs
ZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxz
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxz
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVz
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTUxLDMyICsxNTMsOTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQo
Y29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFu
LCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1Qw
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigw
KSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVz
c1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBX
ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFz
dCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0
YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChz
aG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkg
fHwgIXByZWRpY3Rpb25Gb3Iob3AxKSB8fCAhcHJlZGljdGlvbkZvcihvcDIpKSB7CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlz
YWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yMjksMTcgKzI5
MCw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvCiAKIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAg
ICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShv
cDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNH
UFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIp
OworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBy
ZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBv
cDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1t
MzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgICAgICBnZXRMSFMo
KTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9u
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBAIC0yNTUsNDMgKzM0Miw4
OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiAKIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAg
IGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJo
c0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJo
c0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJl
c3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
cmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlv
biwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0g
PSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pLCByZXN1bHRHUFIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVn
VDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAg
ICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKICAgICB9
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBp
bnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2Fz
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNv
bmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcg
cmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUg
Zm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0
aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25z
dGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxv
YXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0MzMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdp
c3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzQ1Nyw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChz
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMSk7CkBAIC0zNTEsMTIgKzQ4MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7
CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAg
IEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9
IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQz
MihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAg
ICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs0OTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAg
ICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAg
IGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBS
SFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1MDksNTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBi
eXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAg
IGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYg
cHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2Jz
ZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1cmUgZm9yIGFsbCBvcGNvZGVzIHBy
b3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uLgorICAgICAgICAg
ICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5w
dXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAx
LjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnBy
KTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAg
ICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25l
KSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcg
ZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9
IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7
CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQ
Uiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpT
VmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwg
aW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8
IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92
ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNTYzLDYyIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0
ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsK
LSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1
dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAg
ICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUo
cmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJs
ZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNy
Y0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIo
Jm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBS
LCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAg
ICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0RlBSID0g
aW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7Cisg
ICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGxv
YWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICBzdWJE
b3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJs
ZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRH
UFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0
R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0K
IH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzYyOCwxMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKChz
aG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSB8fCBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkg
JiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJo
cykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhNYXRoOjpmbW9kRG91YmxlLCBy
ZXN1bHRGUFIsIGxoc0ZQUiwgcmhzRlBSKTsKKworICAgICAgICAgICAgc2V0RG91YmxlKGRzdCwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAogICAg
IC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0
aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8g
ZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVk
eDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9
PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBl
Y3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAg
ICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAg
ICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxh
Y2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRl
bXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FT
U0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhU
ZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIo
KSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAg
ICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1w
LT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFtZSwgbGlrZSBzcGlsbEV4cGVjdGlu
Z1Nsb3dQYXRoCisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50
MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAg
ICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVj
eCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQs
IHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAg
SnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVk
SW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFs
LCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90
TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4
NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0
b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVk
SW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAg
ICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjpl
bWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQorICAgIGJveEludDMy
KGVkeCwgSlNWYWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsK
LSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0K
IAogI2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArNzQxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAog
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBk
b3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExp
c3Qgbm90SW50MzJPcDI7CkBAIC00NzQsNiArNzUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVn
VDEsIHJlZ1QwKTsKQEAgLTU2MiwxNSArODQwLDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBT
bG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9w
ZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24g
Kmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICsx
MDAwLDY2IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBl
bWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQg
d291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNl
IHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRl
PihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUsIHNs
b3dDYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+Citib29sIEpJVDo6dHJ5RW1pdExP
TEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKworICAgIGF1dG8gYml0T3AgPSBbJl0gKEdQUlJlZyBsaHNHUFIs
IEdQUlJlZyByaHNHUFIpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0YW5kPikKKyAgICAgICAgICAgIGFu
ZDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0b3I+KQorICAgICAgICAgICAgb3IzMihsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PE9wLCBPcEJpdHhvcj4pCisgICAgICAgICAgICB4b3IzMihsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9w
LCBPcExzaGlmdD4pCisgICAgICAgICAgICBsc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFVy
c2hpZnQ+KQorICAgICAgICAgICAgdXJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wUnNoaWZ0
PikKKyAgICAgICAgICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICB9OworCisgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAgICBiaXRPcChs
aHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MkNvbnZlcnRpbmcob3AyKSkgeworICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpA
QCAtNzQxLDE3ICsxMDcwLDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNv
bnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNl
bHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9w
PihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAKICAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBAIC03
NjAsMzMgKzEwODAsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25z
dCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAg
ICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikp
OwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4g
aGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNl
CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7
CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAg
IGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmls
aW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRl
Y29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwg
cmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlz
dCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzExOTYsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0
UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDE5ICsxMjQyLDggQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7
Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNl
bmRpZgorICAgIGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlv
bikpCisgICAgICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwog
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTg3MywyMSArMTI1NSw3NyBAQCB2
b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
IAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0
Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVm
dFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVt
cDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6
IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsg
bGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmln
aHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1
bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBS
ZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisK
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlm
CiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRj
aEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFz
dFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
cmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVj
QmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTkwMiwxOCArMTM0MCw2NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAg
ICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdw
cigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhz
RlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIo
T3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkg
eworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZw
cigpOworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIGFkZERvdWJsZShs
aHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNT
bG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUg
KzE0MTAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBz
YW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVu
dEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBz
bG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1l
IHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1l
bnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUg
c2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAg
ICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7
CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxNDQ3LDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElD
RmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRl
JiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0
ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+
Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFn
ZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAg
IFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgp
OwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAg
ICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
c3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTQ3MiwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOwor
ICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3NCwzOSArMTQ5MCw4
MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0
RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVm
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9w
ZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0
VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdl
dE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQ
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+
ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmln
aHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAg
ICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAot
ICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlk
Q29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRv
ciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
KTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0
RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6
OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAg
aWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAo
IUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5k
aWYKQEAgLTEwMTUsMTcgKzE1NzQsMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJp
bmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5l
cmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVy
YXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAg
IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAg
bGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2Ug
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3By
KCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3Mu
Z3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIo
KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGlu
ZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNjExLDIwIEBAIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJl
cikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNI
ZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJv
ZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
biByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5l
cmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCAr
MTYzMyw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVl
UmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkg
fTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE2NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
IHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7
CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAt
MTA5NSwxNiArMTY4MCw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9w
ZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAt
MTExNSwxNSArMTY5MCwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAo
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9
PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNS
aWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAg
ICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVn
VDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxz
ZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7
CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE3NTIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYy
ICsxNzY3LDIzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRP
cGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNl
bmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdo
dFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
IHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAg
IGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRl
bXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7Cisg
ICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsK
KyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxl
ZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBp
ZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAg
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBS
ZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVm
dEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRG
YXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVz
dWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3Vs
dFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJU
KGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBl
KHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
TXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
cy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzR1BSLCBsaHNGUFIpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQUiwgcmhzRlBSKTsKKyAgICAg
ICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxv
dywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIGF1dG8gZG9u
ZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihCZWxvdywgbGhzR1BSLCBU
cnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5l
Z2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIHJoc0dQUiwgVHJ1c3RlZEltbTMyKDApKSk7Cisg
ICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIHNldEludDMy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSBy
ZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVt
YmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
ZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCBy
aHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11
bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
SklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRv
TWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11
bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9w
dGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGlt
aXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2Zp
bGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
OworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBs
aHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOwor
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnBy
KCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0
ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxo
cy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikp
IHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCBy
aHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0
cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElD
U2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25W
YWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9
CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VC
LCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Q2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRk
Q2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIg
aW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9y
ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZv
ckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9w
Y29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRD
YWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5
LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9w
OjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1
Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudElu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExv
Z2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2Vz
IHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93
biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVn
KCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRv
IHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1
bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBi
cmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUs
MzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAg
ICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hl
Y2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1w
bCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAg
c2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisKICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMsIHJlZ1QwIH07Cisg
ICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdUMCk7CisgICAgICAgIHNldEpTVmFs
dWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUu
bV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0
aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBz
WzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDExIEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGls
bEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBz
aG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBs
ZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAg
SnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMzcg
KzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAg
bW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9u
ZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNl
dCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
OwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVy
U2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAg
ICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVz
LT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhk
b25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIHNs
b3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAgICB3
aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRl
cmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAorICAgICAgICBK
dW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBs
KCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgdmFsdWVDaGVj
a3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHNsb3dD
YXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAgICAgICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgd2lsbERlZihieXRlY29k
ZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgdmFs
dWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CkBAIC01MTUs
MTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwg
c2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1NSw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVW
UmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNl
Lmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogICAg
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsK
QEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwor
ICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJS
ZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRDb2RlOjp0eXBlTmFtZShKSVRUeXBl
IGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVK
SVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAgIGNhc2UgSklUVHlwZTo6TE9MSklU
OgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAg
ICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwOCw3ICsx
MTAsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29kZVJlZihDCiAKIEpJVENv
ZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZigpCiB7Ci0gICAgaWYgKChPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkgJiYgT3B0
aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQorICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCkgfHwgKGlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlz
YXNzZW1ibHkoKSkpCiAgICAgICAgICYmIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSkKICAgICAg
ICAgZGF0YUxvZygiRGVzdHJveWluZyBKSVQgY29kZSBhdCAiLCBwb2ludGVyRHVtcChtX3JlZi5l
eGVjdXRhYmxlTWVtb3J5KCkpLCAiXG4iKTsKIH0KQEAgLTIzNyw2ICsyMzksMTEgQEAgTmF0aXZl
RE9NSklUQ29kZTo6TmF0aXZlRE9NSklUQ29kZShDb2RlUgogI2lmIEVOQUJMRShKSVQpCiBSZWdp
c3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxp
bmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KQogeworICAgIC8vIEZvciBCYXNl
bGluZSBKSVQsIHRoaXMgaXMgdHJpdmlhbGx5IHRydWUuCisgICAgLy8gRm9yIExPTCBKSVQsIGV2
ZXJ5dGhpbmcgaXMgYWxyZWFkeSBzcGlsbGVkIHRvIHRoZSBzdGFjayBhdCBlYWNoIG9wY29kZSwg
c28gd2hlbiB3ZQorICAgIC8vIGdvIHRvIHRoZSBvcF9jYXRjaCwgdGhlIGxpdmUgc3RhdGUgbXVz
dCBhbHJlYWR5IGJlIGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUgc3RhY2suCisgICAgLy8gQWxz
bywgb3BfY2F0Y2ggaGFzIG5vIGluY29taW5nIHJlZ2lzdGVyL3R5cGUgcHJvb2Ygc3RhdGUsIHNv
IGl0J3MgdHJpdmlhbCB0byBjYXRjaAorICAgIC8vIGFuIGV4Y2VwdGlvbiBpbiBMT0wganVzdCBi
eSBqdW1waW5nIHRvIG9wX2NhdGNoLgogICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiAr
NTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90IHsKICAgICBIb3N0Q2FsbFRodW5r
LAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxpbmVKSVQsCisgICAgTE9MSklULAog
ICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02NywzNiArNjgsMjMgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJVFR5cGUpOwogCi0gICAgc3RhdGlj
IEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewotICAgICAgICByZXR1cm4gSklUVHlwZTo6
QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBKSVRUeXBlIHRvcFRpZXJKSVQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCi0g
ICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRUeXBlKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVK
SVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6REZHSklUOwotICAgICAgICBjYXNlIEpJ
VFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpGVExKSVQ7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
CiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0KEpJVFR5cGUgaml0VHlwZSkKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6Ok5v
bmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAgICAgICBjYXNlIEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAg
ICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoK
KyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNh
c2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNl
bGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgorICAg
ICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxU
aHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNhc2UgSklUVHlw
ZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTExNiw2ICsxMDgsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBl
OjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDYgKzExNywyNCBAQCBwdWJsaWM6CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgo
SklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAg
ICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5r
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBzdGF0aWMgYm9vbCBpc0xvd2VyVGllcihK
SVRUeXBlIGV4cGVjdGVkTG93ZXIsIEpJVFR5cGUgZXhwZWN0ZWRIaWdoZXIpCiAgICAgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0V4ZWN1dGFibGVTY3JpcHQoZXhwZWN0ZWRMb3dlcikpOwpA
QCAtMTQ1LDkgKzE1NiwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXNMb3dl
ck9yU2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRIaWdoZXIpOwogICAgIH0KKworICAg
IHN0YXRpYyBib29sIHVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhKSVRUeXBlIGppdFR5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgaml0VHlw
ZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAg
fQogICAgIAogICAgIHN0YXRpYyBib29sIGlzT3B0aW1pemluZ0pJVChKSVRUeXBlIGppdFR5cGUp
CiAgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0
VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNERkdPckZUTChKSVRUeXBlIGppdFR5cGUpCisgICAg
ewogICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9
PSBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSogY2EKICAg
ICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFjaGluZSBmcmFtZSBp
cyB1dHRlcmx5IG1lYW5pbmdsZXNzCiAgICAgICAgIC8vIGFuZCBjYW4gY2F1c2UgYW4gb3ZlcmZs
b3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdldAogICAgICAgICAv
LyBpbiB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoIUpJ
VENvZGU6OmlzREZHT3JGVEwoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkKICAg
ICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxl
QWRkcmVzcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQg
Y2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNl
LgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRh
ZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6
IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qg
c3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xNjcsMjUgKzE2OSw2IEBA
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2Fs
bDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQotICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxT
bG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2Vz
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0
ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0K
LQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIgIT0gc2xvd0Nh
c2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5k
ZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7CkBAIC0yMDcs
MjcgKzE5MCwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlCiAg
ICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNsb3dDYXNlJiBK
SVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShq
dW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nhc2VzLnNpemUo
KSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVjb2RlSW5kZXgp
IHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5zYXZlUGxhbiA9
IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFkc3QuaXNWYWxp
ZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJlc3VsdCA9IHJl
c3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAgICAgICAgbV9z
bG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IH0pOworICAgIH0KKyAgICBy
ZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBq
dW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRz
dCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRo
aXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAgYXV0byYgc2xv
d0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChjb25zdCBKdW1w
JiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0uYXBw
ZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKEp1bXAganVt
cCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICszOTgsNiBAQCBBTFdBWVNfSU5MSU5F
IGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0
aElDLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
TWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAjZW5k
aWYKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKKyAgICAgICAgYm9v
bCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5q
aXRUeXBlKCkpOwogCiAgICAgICAgIGlmIChtX2dlbmVyYXRlRmFzdFBhdGhPblJlcGF0Y2gpIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0x
ODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4
ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5Pigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
OCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFj
ZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklU
OjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
c3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5n
ZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwg
d2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRH
UFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
Q29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAg
R1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRv
clRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxv
Y2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdU
MDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBy
ZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVs
c2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5
ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJl
ZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwog
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUp
OwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBp
bnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9P
UFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNv
bnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFj
ZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgq
dGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOwor
ICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBp
bnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdU
MCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1
Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5v
dCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29u
c3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMs
OTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5k
cyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJz
LgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUg
d2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90
byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkg
dGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0
KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBD
ZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1
bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9
OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BS
UmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0
VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNo
MlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxs
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwt
PmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKwor
ICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9
IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRl
bXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAg
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5n
cHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAg
ICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBl
bmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3Bl
Y3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJl
Z1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBi
YXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQg
Zm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAg
ICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAg
ICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAg
ICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5z
dGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5w
cm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAg
IGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJU
ZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOwor
CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAg
ICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02
NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRl
c3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIo
Y29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9u
WmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQz
MikKQEAgLTI4MiwyMSArNTI4LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJ
ZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRH
UFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1
OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9
IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDMsNjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0
ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWws
IEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
Ynl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1
cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI3LDQxIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0
ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
T2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYg
KGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcwLDIwMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFu
Y2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5n
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24g
eyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFt
ZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BS
ID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzog
d2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVj
dHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93Lgor
ICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYg
dGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUK
LSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3Ig
MSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGlu
dmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBp
biwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0
aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93
IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3Bl
Y3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwg
d2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAg
ICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9
IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3Jh
dGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIu
ZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwg
c2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAKLSAgICBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
IGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlv
biA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFs
dWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRj
aDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAg
ICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7
CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0g
ICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihz
cmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRl
c0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNl
cyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0g
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSks
IHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Cisg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAg
ICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEw
ICsxMTM0LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVj
T3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTY1LDM0MiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNp
YWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNy
YykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2Vs
bCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9o
YXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
ICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVj
aWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQo
dXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3Nh
bWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlm
ICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2Vs
bE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qocmhz
KSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNH
UFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21w
YXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVt
cC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAg
IGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhz
RlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxo
c0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09Q
UzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93
UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6Omlz
X3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsK
KyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8g
ZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxo
cyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJo
cykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxo
c0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1Rl
bXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNl
cyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
cT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1
ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+
KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAg
R1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAg
fQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1t
MzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8
T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxo
c0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0
aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8g
ZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3Rv
cmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJv
dyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE1
MTYsMTc4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2Rl
Lm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFs
OworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQg
OiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUo
cmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFs
dWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykp
IHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAg
ICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQob3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0VxLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWlzRXEpCisgICAgICAgICAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAg
ICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZw
cigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51
bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZw
cigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09Q
UzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdU
MSk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CiAKICNpZiBV
U0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlw
ZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmln
aHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBp
cyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9u
ZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGlt
cGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5n
bGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVk
IGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmlj
ayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8g
aXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAg
IC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMg
b25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBl
cXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVn
VDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCBy
ZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMp
OwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIs
IHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCBy
ZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAg
ICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIp
OwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxl
c3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGgg
aWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAgICAgICAgICAg
Ly8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAg
ICAgICAgIG1vdmUobGhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgb3I2NChyaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVzdWx0
R1BSKSk7CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUu
IEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0
ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICAgICAgSnVtcCBs
ZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyaHNHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7CisgICAgICAgICAgICBy
aWdodE9LLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChpc0VxKQorICAgICAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyNlbmRpZgorICAgICAgICB9CiAKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0
RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xl
YW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisj
aWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3Vt
aW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAg
ICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkK
KyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBp
dHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
bW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAo
dG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQo
VHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFs
dWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292
ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAg
ICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwor
ICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC02NzQsNjggKzE3MDUsMTY0IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8g
RXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91Ymxl
RXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBp
ZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkp
IHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21w
YXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAg
IC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRp
dmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwog
I2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5n
ICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0
IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0
KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBD
ZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwot
Ci0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQg
d291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNo
SWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50
MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmlu
ZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxs
LCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmlu
ZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVn
VDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7
Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSks
IHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
NjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBi
cmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQp
OwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFz
dCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2
NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9y
ZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRv
IHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7CisjZWxz
ZQorICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChs
aHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOwor
CisgICAgICAgICAgICBtb3ZlKGxoc0dQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBvcjY0KHJo
c0dQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwodGVt
cEdQUikpOworCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91Ymxl
LiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4g
dGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAgIGF1dG8g
bGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0aGlzKTsK
KyAgICAgICAgICAgIGF1dG8gcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAgICAgICAg
cmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgaWYgKGlzRXEpCisgICAgICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdU
MSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkg
ewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGlu
ayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElm
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xv
d1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2Vu
OworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAg
IGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAg
ICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdo
dCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQg
d291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNo
SWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFu
IEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxl
YXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJl
ciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAg
ICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMp
OworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2
NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1
YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7
CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
YXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisg
ICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBk
byBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ug
b25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAg
ICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAo
dG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
b3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJz
dCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAor
ICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdU
MCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxODc1LDIyOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9w
U3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZS
ZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNW
UmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAg
SnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGlu
ayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMs
IGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90
Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNO
dW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0lu
dDsKKyAgICAgICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdU
MCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7
Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYg
KHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorICAgIHJl
c2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdp
dGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpA
QCAtODg4LDkgKzIxNTQsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShj
b25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Ug
a25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBj
dXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhl
cjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRT
Y29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9m
ZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDAp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIxODUsMTcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
JnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSAr
MjIxMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJs
ZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRp
bmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMjM0LDE0NyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1w
VGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBX
ZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0
c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAm
dm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBu
b0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxP
cCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAg
ICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQ
dHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBj
b21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3
YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAg
IGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29t
cGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0
ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0g
ICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0K
LSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAg
ICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0K
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAg
ICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVt
aXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENU
SSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJl
Z2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJv
bG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3Vy
ZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8
IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIzODUsMjMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzI0MDksODQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlE
KiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0
cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92
ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYg
KGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFw
VG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0
KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBp
ZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5
cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0
ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShz
cmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0
eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RD
ZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwg
c3JjRHN0KTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1Nl
dCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisK
KyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNy
Y0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0Pwor
ICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFs
T2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5h
bE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEwNTksNiArMjQ5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlz
KGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2Fs
bGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0
ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVk
Q2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJ
RCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyNTA0LDMxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0
aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3By
VGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVl
KTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
Z3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3Bl
cmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAg
ICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNoUmVn
ID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIo
KTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwg
cmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURh
dGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYs
NjQgKzI1NDYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAog
ICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2Uo
cmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cg
Y2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0z
MigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0g
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVuVHlw
ZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
fQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0
aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTYyLDggKzI1OTEsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogeworICAg
IHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVy
IHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3Bz
Rm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enpp
bmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTOiBjbGVhciByZWdpc3RlciBzdGF0
ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgogICAgICAgICB1aW50NjRfdCogcHRy
ID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAg
ICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJh
bmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9t
SW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI2MTksMTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBF
TkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0
aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1l
T3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFt
ZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNjM2LDEwIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXpl
ZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90
KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRo
aXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BB
UkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI2NjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3Vu
dCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNjcyLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19y
ZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBP
YmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdS
ZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0
PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI2OTMsNDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5j
Q29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
IAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1
bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29w
ZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBz
Y29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1w
bGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQt
PmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25E
ZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0g
T3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMp
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rp
b247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNzU3LDQ2IEBAIHZvaWQgSklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2Nv
cGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3BlLnJlc2V0KCk7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVH
UFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlv
bkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIs
IGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1
bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVu
Y3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxz
ZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAg
ICAgfQogfQogCkBAIC0xMzQ5LDkgKzI4MjcsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAg
ICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2
YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAg
ICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAu
ZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5n
cHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjg0
OCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXpl
SW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcmdHUFIgPT0gcmV0dXJuVmFsdWVHUFIpOworICAgIH0KKworICAgIC8vIE9PUFM6IElu
bGluZSB0aGUgYWxsb2NhdGlvbiBwYXRoIGhlcmUsIGl0IG1hdHRlcnMgZm9yIHN1bnNwaWRlci1j
cnlwdG8tYWVzCisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI4ODQsMzYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7
ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAq
dGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7
CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0
dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NDA5LDYgKzI5MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHko
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisgICAgLy8gT09QUzoKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAg
UGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyOTYyLDggQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBo
ZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI5ODksMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X2VudW1lcmFibGVfaW5kZXhlZAogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBl
TWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2Rl
KHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBl
cyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5z
dHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNs
b3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAt
MTQ3OCwxMyArMzAwNiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBt
X2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwg
ZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsK
KworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2Vu
dW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEw
LDM3ICszMDM5LDgxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8g
Q2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3Bl
cmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBi
YXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JW
YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7
Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJh
dG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vzcwot
ICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
QWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCks
IHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAKLSAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zm
c2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBz
aWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQor
ICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsK
KyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAg
ICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEp
OworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNo
ZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1
bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUK
KyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAg
ICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRl
cmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
Z1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIx
ICszMTIzLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxv
dywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3Ry
dWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGlu
ZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlu
ZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVt
cGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRl
eEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJh
dG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAg
IH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBB
ZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rv
ck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7
Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJh
c2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwog
CiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NzQsMjEgKzMxNzcsNTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVz
cyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRl
eE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9y
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzog
S25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JU
ZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0
aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1l
cmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+
Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0g
cmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKworICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgp
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
LCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxp
bmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1l
c1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRl
eEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNTk4LDYgKzMyMzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5
cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29k
ZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVt
cExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszMjkzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JD
YWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5v
bkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBw
cm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYg
KzMzMTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hp
Y2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1l
KCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAg
IT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tl
blRhaWw+KCk7CkBAIC0xNjg0LDYgKzMzMjUsNDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaQogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2lzX2NhbGxh
YmxlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIGF1dG8g
aXNGdW5jdGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAgICBhdXRvIG5v
dE9iamVjdCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAg
IGF1dG8gc2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgCisgICAgICAgIG5vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRv
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0Z1bmN0aW9uLmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUwor
Cit9CisKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTcwMiwxMSArMzM3OSwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChj
b25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BB
cmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJl
Z3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQzMihkc3QsIHJl
c3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHQg
PSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3Rf
bGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzE0LDI5
ICszNDAwLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2ln
bmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKLSAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBK
dW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihu
dW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdU
MCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVh
bCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1t
MzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAg
ICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAg
ICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0z
MihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIHplcm9MZW5n
dGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CiAjZWxzZQot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE3NDQsNDkgKzM0NDksOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0
IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJn
dW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVt
cCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2Rl
VG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7
CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUo
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsg
aW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgYXJn
dW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgp
LCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2Fk
MzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyks
IHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRW
YWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZVZh
bHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90
eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdCh2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7
CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0gZWxzZSB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hH
UFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigpID09
IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dD
YXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdExvYWRQcm90
b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQyNCw2ICsxNDI0LDggQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OworCisgICAgLy9kYXRhTG9nTG4oImNvbXBhcmVMZXNzLCBsaHM6ICIsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AxKSwgIiByaHM6ICIsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiAg
ICAgCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKIH0KQEAgLTE0OTEs
NiArMTQ5Myw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXIKICAg
ICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1
ZSBzcmMyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCisgICAgLy9kYXRhTG9nTG4o
InN0cmljdGVxLCBsaHM6ICIsIHNyYzEsICIgcmhzOiAiLCBzcmMyKTsKKwogICAgIHJldHVybiBK
U1ZhbHVlOjpzdHJpY3RFcXVhbChnbG9iYWxPYmplY3QsIHNyYzEsIHNyYzIpOwogfQogCkBAIC0x
ODc5LDcgKzE4ODMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1p
CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7Cisg
ICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc0RGR09yRlRMKG9wdGlt
aXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgaWYgKHZvaWQqIGRhdGFCdWZm
ZXIgPSBERkc6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxv
Y2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQob3B0aW1p
emVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIsIGJ5dGVjb2RlSW5kZXgpKTsKQEAg
LTM0MzMsNiArMzQzNyw0MiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2hl
Y2tJCiAgICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVC
bG9jaykpCit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBH
QyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAorICAgIC8vIHJlYWxs
eSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xDb2RlQmxv
Y2stPnZtKCkuaGVhcCk7CisKKyAgICBpZiAoZ2V0ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpICYm
ICEhYXRvaShnZXRlbnYoInByaW50RWFjaEpldHRpc29uIikpKQorICAgICAgICBkYXRhTG9nTG4o
ImpldHRpc29uLCBmb3JjaW5nIHJlb3B0IG5vdzogIiwgKmxvbENvZGVCbG9jayk7CisgICAgbG9s
Q29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOworICAgIAorICAg
IC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJvZmlsZXMgaGVyZSwgc2luY2Ugd2UncmUgamV0dGlz
b25pbmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0ZSB3LyB0aGluZ3Mgd2UgY2FyZSBhYm91dC4KKwor
ICAgIHNhbml0aXplU3RhY2tGb3JWTShsb2xDb2RlQmxvY2stPnZtKCkpOworCisgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbG9sQ29kZUJsb2NrLCAiOiBFbnRlcmVkIHJl
b3B0aW1pemUgZnJvbSBMT0wiKTsKKworICAgIENvZGVCbG9jayogbGxpbnRDb2RlQmxvY2sgPSBs
b2xDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgLy8gV2UgbXVzdCBiZSBjYWxsZWQgd2l0
aCB0aGUgYmFzZWxpbmUgY29kZSBibG9jay4KKyAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGlu
ZUNvZGUobGxpbnRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisgICAgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCA9IGxsaW50Q29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOworICAgIGlmICghcmVwbGFj
ZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxpbnRDb2RlQmxvY2spIHsKKyAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbGxpbnRDb2RlQmxvY2ssICI6IE5vdCByZW9w
dGltaXppbmcgTE9MIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHRoZSByZXBsYWNlbWVu
dCBtdXN0IGJlIG9wdGltaXplZCBjb2RlLiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eQorICAg
IC8vIHRvIGNoZWNrIG91ciBsb2dpYy4KKyAgICBBU1NFUlQobGxpbnRDb2RlQmxvY2stPmhhc09w
dGltaXplZFJlcGxhY2VtZW50KCkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdK
SVQobG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworCisgICAgLy8gT09QUzogZmlndXJlIG91
dCBzdHVjayBpbiBhIGxvb3AgbG9naWMKKyAgICBsb2xDb2RlQmxvY2stPmpldHRpc29uKFByb2Zp
bGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwgQ291bnRSZW9wdGltaXphdGlvbik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxOSw2ICszMTksOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblZhbHVl
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJM
b2csIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJv
Y2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsKIAorSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2Rl
QmxvY2sqIGxvbENvZGVCbG9jaykpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjgxLDggKzI3Nyw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9n
ZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01NTgsNyArNTUyLDYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBM
YWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVj
dGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4K
QEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC02MzksOCArNjMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzc4LDggKzc2Myw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4ICs4MDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CkBAIC0xMTAwLDggKzEwODEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKQEAgLTEyNTcsOCArMTIzNiw2IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5
dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01Miw1MSArNTQsMTE3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qx
KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAgIGlm
IChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7Cisg
ICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0K
IAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6
Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5r
KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAg
bm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYg
KG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92ZShHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAg
IH0KIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBl
R1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNw
ZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlz
SW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkK
KyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7
CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0wo
KSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
ICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlT
bG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1LDQxICsxNzMsNzMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9w
ZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncyk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1l
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3LDYgKzI1Nyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBz
cGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlz
SW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlm
IChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMxOSw4ICs0MjEsMTEgQEAgSklU
UHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUg
cmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1
ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5t
ZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0
ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0NCw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklU
OjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7
CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9
IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2Rl
KSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzU1LDEzICs0NjAs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAK
ICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlW
YWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0
aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
QEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9i
eXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBEbyBiZXR0ZXIg
aWYgd2UgY2FuIQorCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogCkBAIC0zOTQsMTMg
KzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQYXRoSm1wLCBkb25lLCBkb25lKSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRl
Y29kZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CkBAIC00
MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Ywogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7
ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29y
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIo
KTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0
ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBp
bnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBh
Y2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0
ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdU
Mik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVyIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0ZXIgeyAq
dGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOworICAgICAg
ICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBnZXR0ZXJH
UFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29y
LmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0
dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMs
IHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2Ug
eyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0
eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBh
Y2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBy
ZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOCArNjMz
LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdp
c3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDkyLDI1ICs2ODcsMjcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJh
cnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkp
OworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVy
blZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUyMCwxOSArNzE3LDcw
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBi
YXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBw
cm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOworICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBw
cm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9
IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7Cisg
ICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIg
YXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lz
dGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01NDEsMjIxICs3ODksMzY4IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxz
W21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJh
c2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFs
dWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Cisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJh
c2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1v
ZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1l
dGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1v
ZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2Rl
LmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFIgPSB1c2VMT0wo
KSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEu
YXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9k
ZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1
bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAK
KyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUuZW1wbGFjZSgq
dGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0aGlz
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BSID0g
cmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0aGlz
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOworICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRo
aXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRl
Y29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8v
IEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhl
IG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0
ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRo
QmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0
dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgot
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcs
IHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZS
ZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywg
dmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUt
PmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVn
VDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21h
TW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpA
QCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0g
ICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJ
bmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklU
SW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVElu
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVh
bFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC04NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC04NjcsMjEg
KzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZv
ckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRH
UFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4g
c2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywg
c2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGlj
YWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5t
X2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTg5NCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5
cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1
bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05MDksMjkgKzEzNDUsMjkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
cmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRH
UFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC05NDAsMTUgKzEzNzYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lk
IEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9h
ZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
c2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJS
ZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1p
dEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkK
LXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUxICsxNDEzLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0
YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9m
ZnNldFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BS
UmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
ICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9m
ZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBz
Y29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BS
ID0gcmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAg
ICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3Bl
R1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJk
YTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQ
UiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAg
ICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAg
ICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYg
KEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNo
MzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJ
c05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNl
dCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAg
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7
CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7Cisg
ICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoq
PihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgot
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0g
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3Qp
OworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFu
ZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIs
IGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6
CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTAzNiwxMCArMTUwNCwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJl
c29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAg
ICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC0x
MDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
ICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3Qp
OwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEw
ODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2Nv
cGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpT
VmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0
Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lk
IEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0
Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90
aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwot
ICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSAr
IG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTExMjksMjEgKzE1NzksNDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0
YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBHUFJS
ZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVl
KTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAg
ICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xv
dCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24n
dCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRk
aXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5q
ZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAg
ICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBPcHRpb25h
bDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsK
KyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcgYnV0dGVy
Zmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2Nv
cGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9
IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7IC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogICAgICAg
ICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVn
UHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAgICAgICAgICAg
IGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CisgICAgICAgICAgICBuZWdQdHIob2Zm
c2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNlSW5kZXgoYnV0dGVy
Zmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE1NCwyOCArMTYzMiw1NyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAgICAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVj
YXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3Rh
dGljYWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAg
ICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKCZtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3RvcmU2
NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAg
ICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIo
c2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisK
KyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAg
ICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkwLDEyICsxNjk3LDIxIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJl
c2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBm
cm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3du
IGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywg
cmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVU
eXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxM
ZXhpY2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0
IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRp
YWxpemVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0
byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUg
cmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdv
bid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBAIC0xMjQyLDEwICsxNzY3LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29w
ZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0
ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikg
ewpAQCAtMTI2MSw2MSArMTc4NCwxNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVu
dHMpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1l
bnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVn
VDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVu
dHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1l
bnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1l
bnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgdmFs
dWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFy
Z3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAg
dmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVzcyhh
cmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwgISEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
YXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhh
dCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5v
dC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxs
b2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAg
ICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2Rl
IG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5j
aCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIC8vIHZh
bHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWND
ZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBK
dW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1
ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFu
ZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZh
bHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0g
dmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsK
KyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVy
LCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY3JhdGNoVmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigp
OworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAg
b3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIH0KKwogICAgIEp1
bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVzZUxP
TCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG93
bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgs
ICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMp
OworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3Jk
PiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8gbmVl
ZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50
U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNv
cmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
dGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5vdENl
bGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1Nl
dCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93
IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5j
aCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2Us
IGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVs
YXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVj
dXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29k
ZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkg
eworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoZ3ByRm9y
T3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICB2YWx1ZUdQ
UiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQ
UiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVz
ZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAg
IHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAg
ZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RD
ZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzMjcsMTEgKzE5NjcsMjYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgLy8g
T09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVj
Q2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkp
LCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVs
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM0MSwxMCArMTk5
NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAg
c3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAg
cHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBzdG9yZVB0cih2YWx1ZUdQ
UiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMTQ0Nyw4ICsyMTE1LDI1IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAgICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzY3JhdGNoR1BS
KTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxS
ZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNp
bGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisKICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0NjYsNiArMjE1MSw4IEBA
IHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXMKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNl
OworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIApA
QCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5h
bWVXaQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBBU1NFUlQoKHB1dEtpbmQg
PT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVj
dCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBv
cF9wdXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQg
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAgICBBU1NFUlRfVU5V
U0VEKHByb2ZpbGVkREZHQ29kZUJsb2NrLCAhcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2Nr
LCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7CiAgICAgCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0KQogewogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHJl
c3VsdDogIiwgcmVzdWx0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDIyIEBA
CiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3
dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpJVFdvcmtsaXN0OjpQbGFu
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFdvcmtsaXN0OjpQbGFuPiB7CiBwdWJs
aWM6Ci0gICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAg
ICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKKyAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVU
eXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
CisgICAgICAgIDogbV9sbGludENvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9jb2Rl
QmxvY2tUb0NvbXBpbGUoY29tcGlsZVR5cGUgPT0gSklUOjpDb21waWxlVHlwZTo6TE9MID8gbV9s
bGludENvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSA6IG1fbGxpbnRDb2RlQmxvY2spIAorICAg
ICAgICAsIG1faml0KG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLCBtX2NvZGVCbG9ja1RvQ29t
cGlsZSwgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAg
ICAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKKyAgICAg
ICAgLy8gT09QUzogdmlzaXQgdGhpcyBpbiBjb25jdXJyZW50IGdjCisgICAgICAgIGlmIChtX2Nv
ZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2NrKSB7CisgICAgICAgICAgICBtX2Nv
ZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUp
OworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCkKQEAg
LTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgpCiAgICAgewogICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5saW5rKCk7CisKKyAgICAgICAg
YXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgICAgICBpZiAobV9j
b2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9jaykKKyAgICAgICAgICAgICAgICBt
X2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnVucHJvdGVjdChtX2NvZGVCbG9ja1RvQ29t
cGlsZSk7CisgICAgICAgIH0pOworCiAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgICAg
IGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5U
KG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7
CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fbGxpbnRDb2RlQmxvY2ssICJkZWxh
eUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKICAgICAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVk
LiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOworICAgICAg
ICAgICAgbV9sbGludENvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQg
Y29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxvY2spOwotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT5v
d25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAg
ICAgICAgICAgbV9sbGludENvZGVCbG9jay0+aml0U29vbigpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTcxLDggKzg0LDggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBW
TSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsgfQorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jazsgfQorICAgIFZNJiB2bSgpIHsg
cmV0dXJuIG1fbGxpbnRDb2RlQmxvY2stPnZtKCk7IH0KICAgICAKICAgICBib29sIGlzRmluaXNo
ZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTgwLDE1ICs5MywxNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBQbGFuIHBsYW4oY29k
ZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgUGxhbiBwbGFuKGNv
ZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAg
ICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwogICAgICAgICBwbGFuLmZpbmFsaXplKCk7CiAgICAg
fQogICAgIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVC
bG9jayogbV9sbGludENvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrVG9Db21w
aWxlOwogICAgIEpJVCBtX2ppdDsKICAgICBMb2NrIG1fbG9jazsKICAgICBib29sIG1faXNGaW5p
c2hlZENvbXBpbGluZyB7IGZhbHNlIH07CkBAIC0yMzMsOSArMjQ3LDExIEBAIHZvaWQgSklUV29y
a2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAgICAgY29kZUJsb2NrLT5kb250SklU
QW55dGltZVNvb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEpJVDo6Q29tcGls
ZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRpb25zOjpmb3JjZUxPTCgpID8gSklUOjpDb21waWxlVHlw
ZTo6TE9MIDogSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmU7CiAgICAgCiAgICAgaWYgKCFPcHRp
b25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKLSAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2Rl
QmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBQbGFuOjpjb21waWxl
Tm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjQ5LDcgKzI2NSw3IEBAIHZvaWQgSklU
V29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAgICAgCiAgICAgICAgIGlmICht
X251bUF2YWlsYWJsZVRocmVhZHMpIHsKICAgICAgICAgICAgIG1fcGxhbm5lZC5hZGQoY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4o
Y29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICBSZWZQ
dHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUs
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIG1fcGxhbnMuYXBwZW5k
KHBsYW4pOwogICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBt
X2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7CkBAIC0yNzMsMTQgKzI4OSwyNCBAQCB2b2lk
IEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgLy8gVGhpcyB3b3JrcyBh
cm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVk
LCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9i
YWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJl
IHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29tZWRheS4KLSAgICBQbGFuOjpjb21waWxlTm93KGNv
ZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgUGxhbjo6Y29tcGlsZU5v
dyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKIH0K
IAorLyoKIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYgdm0g
PSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorCisg
ICAgYXV0byBpc0NvbXBpbGVkID0gWyZdIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKwor
ICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBib29sIGlz
UGxhbm5lZDsKQEAgLTI5NiwxNyArMzIyLDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVO
b3coQ29kZUJsb2NrKiAKICAgICB9CiAgICAgCiAgICAgLy8gTm93IGl0IG1pZ2h0IGJlIGNvbXBp
bGVkIQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKQorICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQg
dGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKLSAgICAvLyBiYXNlbGluZSBKSVQuCi0g
ICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKLSAgICAKLSAgICAvLyBPSywganVzdCBjb21w
aWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11
c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworCisgICAgaWYgKE9wdGlv
bnM6OmZvcmNlTE9MKCkpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgbG9sQ29k
ZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3Vj
Y2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxvbENvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGxvbENvZGVCbG9jayk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVt
cHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdpdGggdGhlCisgICAgICAgIC8vIGJh
c2VsaW5lIEpJVC4KKyAgICAgICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCisgICAgICAgIEpJVDo6Y29tcGlsZSh2
bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25N
dXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgfQogfQor
Ki8KIAogdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYgbXlQbGFucykKIHsK
QEAgLTMxNCw3ICszNDcsNyBAQCB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5z
JiBtCiAgICAgICAgIHBsYW4tPmZpbmFsaXplKCk7CiAgICAgICAgIAogICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5jb2Rl
QmxvY2soKSk7CisgICAgICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrS2V5KCkp
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3Qu
aAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3Jr
bGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVMYXRlcihDb2RlQmxvY2sqLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsK
LSAgICB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAgICAgc3RhdGljIEpJ
VFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdCgpOwogICAgIHN0YXRpYyBKSVRXb3JrbGlz
dCogZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpOwpAQCAtNjYsNiArNjUsNyBAQCBwcml2
YXRlOgogICAgIGNsYXNzIFRocmVhZDsKICAgICBmcmllbmQgY2xhc3MgVGhyZWFkOwogICAgIAor
ICAgIC8vdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIHZvaWQgZmluYWxpemVQ
bGFucyhQbGFucyYpOwogICAgIAogICAgIFBsYW5zIG1fcXVldWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpy
ZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1
cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3Qg
eyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3Jv
QXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxP
YmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5j
dGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKICNlbmRpZgog
ICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJ
VENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5s
YWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9u
ZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQoMCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAg
ICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMg
b24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgp
OworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5
dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAg
ICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOCArMzYzLDEwIEBAIGlubGluZSBib29sIHNob3Vs
ZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3Vs
ZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKK2lubGluZSBDb2RlQmxvY2sqIGppdENvbXBp
bGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiB7Cisg
ICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMgdy5yLnQgTE9MLgorCiAgICAgRGVmZXJHQ0ZvckFX
aGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJzIGRvbid0IHNldCB0b3AgY2FsbGZy
YW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQgYWxsLgogICAgIEFTU0VSVChPcHRp
b25zOjp1c2VKSVQoKSk7CiAgICAgCkBAIC0zNzMsMjkgKzM3NSw0NSBAQCBpbmxpbmUgYm9vbCBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZK
SVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2Rl
QmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRl
ciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBi
ZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogICAgIAogICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgp
LnBvbGwodm0pOwotICAgIAorCisgICAgYXV0byBsb2xDb2RlQmxvY2sgPSBbJl0oKSAtPiBDb2Rl
QmxvY2sqIHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2st
Pm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVw
bGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKwor
ICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJ
VFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2Rl
QmxvY2stPmppdFNvb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBj
b2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazogewog
ICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIo
Y29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBpZiAo
YXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2Rl
IGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVh
azsKICAgICB9CisgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAi
LCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5
T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2lu
ZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2lu
ZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksCiAgICAgICAgICpj
b2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwK
QEAgLTQwNiwxOCArNDI0LDIxIEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1Io
Q29kZUIKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9
CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgIGlmICghaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykpCisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVC
bG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spOworICAgIGlm
ICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwg
bnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJPU1Ig
ZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGls
ZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworCisgICAgY2FsbEZy
YW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAogICAgIGlmIChraW5k
ID09IFByb2xvZ3VlKQotICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKKyAgICAgICAgTExJTlRfUkVUVVJO
X1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBu
dWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNoZWNrKTsKLSAgICBMTElOVF9SRVRV
Uk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0
eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CisgICAgTExJTlRfUkVUVVJOX1RXTyhj
b21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0
eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiB9CiAjZWxzZSAvLyBFTkFCTEUoSklU
KQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50
cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRy
eUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICBMTElO
VF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwpAQCAtNDI3LDMxICs0NDgsMzEgQEAgc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogTExJTlRfU0xPV19QQVRIX0RF
Q0woZW50cnlfb3NyKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5
T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CisgICAg
cmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5
X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1
bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVu
dHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVj
dXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2Fs
bCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxv
Y2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CiB9
CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVC
bG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQ
cm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rp
b24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9y
Q29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3Vl
KTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxs
X2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlP
U1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFi
bGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2Fy
aXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgp
LT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlD
aGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShw
Yyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5q
c0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50
cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwor
ICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hl
Y2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKQEAgLTQ4MCwxOSArNTAx
LDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgICAgICBMTElOVF9SRVRV
Uk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICAKLSAgICBpZiAoIWppdENvbXBp
bGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpKQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0
SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAg
ICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxw
dHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAi
b3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKIAotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvbXBpbGVkQ29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29tcGlsZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogCi0gICAgY29uc3QgSklUQ29kZU1h
cCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpOworICAgIGNvbnN0IEpJVENvZGVN
YXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVCbG9jay0+aml0Q29kZU1hcCgpOwogICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAog
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhj
b21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgTExJTlRfUkVUVVJOX1RXTyhqdW1wVGFyZ2V0
LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CiAjZWxzZSAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRp
b25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAg
ICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgT3B0aW9uczo6Zm9yY2VMT0woKSA9IDE7
CisgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAg
ICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcgQEAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VK
SVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlUHVibGljU3RhdGlj
Q2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRl
cnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAogICAg
IHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0
cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwcml2YXRlIHN0YXRpYyBkYXRhIGZpZWxk
cyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDcgKzU5Myw3
IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAg
ICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgbGxpbnRfaGFuZGxlX3VjYXVnaHRfZXhjZXB0aW9u
LiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gYnkg
aWdub3JpbmcgaXQuCiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAgICAgICAgIGlmICh0
b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IHRv
cENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRvcENvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9j
ayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njcmlw
dEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcg
KzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwTExJbnQoQ29kZUJsb2NrKiBjb2RlQmwKIHN0YXRp
YyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYgRU5B
QkxFKEpJVCkKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0s
IGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgLy8gT09QUzogRmln
dXJlIG91dCB3aGF0IHdlIHdhbnQgdG8gZG8gd2l0aCB0aGUgbm8gTExJbnQgb3B0aW9uLi4uLgor
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2Nr
LCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVzKEpT
VmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNl
OwogI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisg
ICAgICAgIHJldHVybiBqc051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYgKCFPcHRpb25zOjp1
c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNlREZH
SklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vsc2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFs
bFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICBp
ZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3VuZENvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAg
ICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKCptX2xvY2spOwogICAgICAgICBpZiAoIWxv
Y2tlcikKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFn
YWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNv
ZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoY29k
ZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkp
CisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQpJbmRleDogVG9vbHMvU2NyaXB0cy9jb21wYXJl
LXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCSh3b3JraW5n
IGNvcHkpCkBAIC0xODIsOCArMTgyLDggQEAgZGVmIGNvbXB1dGVNdWx0aXBsZUh5cG90aGVzZXNT
aWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFrZG93bnMoYSwgYik6CiAgICAgbmFtZUxlbmd0aCA9
IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKQotICAgIGJM
ZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKKyAgICBhTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtl
cl0pICsgMworICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkgKyAzCiAgICAgcmF0aW9M
ZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAgIHBWYWx1ZUhlYWRlciA9ICJwVmFsdWUgKHNpZ25p
ZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZSkiCkBAIC0yMTIsNyArMjEyLDcgQEAg
ZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIHBMZW5ndGggKz0gMgogCiAgICAgc3RyaW5n
cyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6
XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9
fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9YVt1
bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwg
YUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlv
TGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3Ro
KSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtrZXk6XntuYW1lTGVuZ3RofX18e2FTY29yZTpee2FM
ZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9fSB8e2NvbXBhcmU6XntyYXRpb0xlbmd0aH19fHtw
TWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0KGtleT0ic3VidGVzdCIsIGFTY29yZT0iYTogIiAr
IGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjogIiArIGJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9
bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJi
IC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExl
bmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5IGluIGEua2V5cygpOgogICAgICAgICBpZiBrZXkg
PT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAgIGNvbnRpbnVlCkluZGV4OiBMYXlvdXRUZXN0cy9y
ZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcmVz
b3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBMYXlvdXRUZXN0
cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCwy
MSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1bm5lciA9IHsKICAgICBuZXZlcklu
bGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAotICAgIG51bWJlck9mREZHQ29tcGls
ZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVyT2ZERkdDb21waWxlczogKGZ1bmN0
aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICByZXR1cm4gKGYpID0+IHsKKyAgICAg
ICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVy
T2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8gRW11bGF0ZSBydW5uaW5nIHRoaXMg
ZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJpbmcgYmVmb3JlIHJldHVybmluZyB0
cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAgbWFwID0gbmV3IFdl
YWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAuZ2V0KGYpIHx8IDA7CisgICAgICAg
ICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNldChmLCBjb3VudCk7CisgICAgICAg
ICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAgICAgICB9OworICAgIH0pKCksCiAg
ICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3Q29kZUJsb2NrCiB9OwogCkBAIC0x
NDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUodGhlRnVuY3Rpb24sIF9hLCBfYgog
ICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOwogICAKICAgdHJ5IHsKLSAgICB3
aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpCisgICAgd2hpbGUgKCFkZmdDb21w
aWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7Cisg
ICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAgfSBjYXRjaCAoZSkgewogICAgIGV4
Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVuY3Rpb24gZGZnSW5jcmVtZW50KGFy
Z3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAgICAgICByZXR1cm4gYXJndW1l
bnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSkKKyAgICBpZiAoIWRm
Z0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuICJz
dGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6IDA7CiAgICAgCiAgICAgcmV0dXJu
IGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417479</attachid>
            <date>2021-01-12 12:30:04 -0800</date>
            <delta_ts>2021-01-12 12:44:59 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>572827</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ2NyeXB0by1hZXMtU1AnXTsKKwog
aWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJ
dGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3RpbwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblNl
dFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2NjMsOCBAQCBw
cml2YXRlOgogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1iZXIiLCBmdW5j
dGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzREZH
RW5hYmxlZCIsIGZ1bmN0aW9uSXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImRyb3BBbGxMb2NrcyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsKIAogICAgICAg
ICBpZiAoT3B0aW9uczo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGlu
ZygpKSB7CkBAIC0yNjUzLDYgKzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uQXNEb3VibAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIo
bnVtKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxl
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oT3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwogSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxvY2sgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpk
dW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZH
T3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJs
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDggQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVy
ZUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCkBAIC0yNjks
NyArMjcxLDcgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Qmxv
Y2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxC
bG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBkdW1wSGVhZGVy
KGJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMgQEAgdm9pZCBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91dC5wcmludCgi
YmIjIiwgYmxvY2suaW5kZXgoKSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRpY3Rpb25zQXRI
ZWFkKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhlYWQ6IFsiKTsK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlvbnNBdEhlYWQt
PmF0KGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0
LCBwcmVkaWN0aW9ucy5hcmd1bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2NhbHMoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAgICAgICAgICAg
ICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQorCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKICAgICAg
ICAgICAgIGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChpICsgYmxv
Y2subGVhZGVyT2Zmc2V0KCkpOwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGljU3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgogY2xhc3MgQ29k
ZUJsb2NrQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiA9IElD
U3RhdHVzTWFwKCkpOwotICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOworICAgIHN0
YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0
ZWNvZGVHcmFwaCYsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1
ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CiAK
ICAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgog
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2b2lkIGR1bXAo
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1
Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4gc3BlY3Vs
YXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQorICAg
IHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6
OmRhdGFGaWxlKCkpCiAgICAgewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2Rl
QmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywgc3Bl
Y3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVJbmRleEltcGwoVmlyCiAgICAgLy8gTm8gdXNlcy4KICAgICBjYXNlIG9wX25ld19yZWdleHA6
CiAgICAgY2FzZSBvcF9kZWJ1ZzoKLSAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgIGNhc2Ugb3Bf
bG9vcF9oaW50OgogICAgIGNhc2Ugb3Bfam1wOgogICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKQEAg
LTEwMyw2ICsxMDIsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmly
CiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgICAgIHJldHVybjsKIAorICAgIFVTRVMoT3BK
bmVxUHRyLCB2YWx1ZSwgc3BlY2lhbFBvaW50ZXIpCiAgICAgVVNFUyhPcFRvVGhpcywgc3JjRHN0
KQogICAgIFVTRVMoT3BDaGVja1RkeiwgdGFyZ2V0VmlydHVhbFJlZ2lzdGVyKQogICAgIFVTRVMo
T3BJZGVudGl0eVdpdGhQcm9maWxlLCBzcmNEc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3OCw3ICsxNzgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmlu
CiAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnQo
c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbnNT
aXplKCkpOwotICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQg
JiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCisgICAgaWYgKCh0aGlzLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgdGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCkgJiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCiAgICAgICAgIG91dC5wcmludCgiIChTaG91
bGRBbHdheXNCZUlubGluZWQpIik7CiAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklu
bGluZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7CkBAIC0yMzQsNyAr
MjM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElD
U3RhdHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAg
IEJ5dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVj
dGlvbnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBX
VEY6Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBC
eXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKQEAgLTI5NSw2ICsyOTUsNyBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX293bmVyRXhlY3V0
YWJsZShvdGhlci52bSgpLCB0aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAg
ICAsIG1fdm0ob3RoZXIubV92bSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcihvdGhl
ci5tX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpCisgICAgLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxl
cyhvdGhlci5tX2FyZ3VtZW50VmFsdWVQcm9maWxlcykKICAgICAsIG1fY29uc3RhbnRSZWdpc3Rl
cnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykKICAgICAsIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKQEAgLTMwOSw3
ICszMTAsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAg
QVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwogCiAgICAgQVNTRVJUKHNvdXJjZSgp
LnByb3ZpZGVyKCkpOwotICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygp
KTsKKworICAgIG1fbnVtUGFyYW1ldGVycyA9IG90aGVyLm51bVBhcmFtZXRlcnMoKTsKICAgICAK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTg1MCw3ICs4NTIs
NyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIC8vIHRvIHRoZSBDb2RlQmxvY2suIEhv
d2V2ZXIsIGl0cyBsaWZlY3ljbGUgaXMgdGllZCBkaXJlY3RseSB0byB0aGUgQ29kZUJsb2NrLCBh
bmQKICAgICAvLyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIHRoZSBDb2RlQmxv
Y2sgZGVzdHJ1Y3RzLgogCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpp
dENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKICNlbmRpZgogICAgIHZt
LmhlYXAuY29kZUJsb2NrU2V0KCkucmVtb3ZlKHRoaXMpOwpAQCAtMTAzNyw3ICsxMDM5LDcgQEAg
Ym9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29ucwogICAgIC8vIEludGVycHJl
dGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29u
ZWQgd2hlbgogICAgIC8vIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBi
YXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwogICAgIC8vIHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUg
dGhhdCB0aGlzIG1lYW5zIHRoYXQgaXQncyBsaXZlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA0
NSw3ICsxMDQ3LDcgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29ucwog
CiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoVk0mIHZt
KQogewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAg
aWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gIXZtLmhlYXAuaXNNYXJrZWQodGhpcyk7CiB9CkBAIC0xMDU4LDYgKzEw
NjAsOCBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUgaml0VHlwCiAgICAgICAg
ICAgICByZXR1cm4gMTBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAg
ICAgICAgICAgICByZXR1cm4gMzBfbXM7CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgor
ICAgICAgICAgICAgcmV0dXJuIDM1X21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoK
ICAgICAgICAgICAgIHJldHVybiA0MF9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6
CkBAIC0xMDc0LDYgKzEwNzgsOCBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUg
aml0VHlwCiAgICAgICAgIC8vIEVmZmVjdGl2ZWx5IDEwIGFkZGl0aW9uYWwgc2Vjb25kcywgc2lu
Y2UgQmFzZWxpbmVKSVQgYW5kCiAgICAgICAgIC8vIEludGVycHJldGVyVGh1bmsgc2hhcmUgYSBD
b2RlQmxvY2suCiAgICAgICAgIHJldHVybiAxNV9zOworICAgIGNhc2UgSklUVHlwZTo6TE9MSklU
OgorICAgICAgICByZXR1cm4gMThfczsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAg
ICAgcmV0dXJuIDIwX3M7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkBAIC0xMTY5LDcgKzEx
NzUsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdP
ckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0g
bV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgCiAgICAgICAgIGRmZ0NvbW1vbi0+cmVj
b3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKQEAgLTEyMTcsNyArMTIyMyw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICAvLyBJbiByYXJl
IGFuZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2Rl
QmxvY2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCiAgICAgLy8gdGhhdCB3ZSBtaWdodCBkZWNpZGUg
dGhhdCB0aGUgQ29kZUJsb2NrIHNob3VsZCBiZSBqZXR0aXNvbmVkIGR1ZSB0byBvbGQgYWdlLCBz
byB0aGUKICAgICAvLyBpc01hcmtlZCBjaGVjayBkb2Vzbid0IHByb3RlY3QgdXMuCi0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE1MTks
OCArMTUyNSwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAK
ICNlbmRpZgogICAgIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkgfHwg
aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgeworICAgICAgICAvLyBPT1BTOiBTZXBhcmF0
ZSBwYXJ0IG9mIHRoaXMgb3V0IGludG8gaXRzIG93biBmdW5jdGlvbiBmb3IgSklUIElDcy4gU2lu
Y2Ugc29tZSBvZiB0aGVzZSBjYWNoZXMgYXJlbid0IGp1c3QgZm9yIExMSW50LgogICAgICAgICBm
aW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CisgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoISFqaXRDb2RlKCkpCkBAIC0xNTI4LDcgKzE1MzYsNyBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRh
KiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICBkZmdDb21tb24t
PnJlY29yZGVkU3RhdHVzZXMuZmluYWxpemUodm0pOwogICAgIH0KQEAgLTE1NDgsNiArMTU1Niw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAg
IGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CiAgICAgICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291
bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoK
QEAgLTE1OTAsNyArMTU5OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpnZXRJQ1N0YXR1c01hcChjb25z
dCBDb24KICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKENvZGVPcmlnaW4oYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4KSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmJ5VmFsSW5mbyA9IGJ5
VmFsSW5mbzsKICAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBpZiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmNhbGxzKQogICAgICAgICAgICAg
ICAgIHJlc3VsdC5hZGQocGFpci5maXJzdCwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNh
bGxTdGF0dXMgPSBwYWlyLnNlY29uZC5nZXQoKTsKQEAgLTE4MTAsNyArMTgxOSw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7
CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAg
IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAg
ICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0cyhsb2NrZXIsIHZpc2l0b3IpOwpAQCAtMTgyMyw3ICsx
ODMyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgogICAgIFVO
VVNFRF9QQVJBTSh2aXNpdG9yKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xODY3LDcgKzE4
NzYsNyBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKICAgICAgICAg
cmV0dXJuIHRoaXM7CiAgICAgQ29kZUJsb2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOwogICAg
IGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoc2Vs
ZkpJVFR5cGUpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjp1c2VzUmVwbGFjZW1lbnRDb2RlQmxv
Y2soc2VsZkpJVFR5cGUpKSB7CiAgICAgICAgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgY2FuIGJl
IG51bGwgaWYgd2UndmUgaGFkIGEgbWVtb3J5IGNsZWFuIHVwIGFuZCB0aGUgZXhlY3V0YWJsZQog
ICAgICAgICAgICAgLy8gaGFzIGJlZW4gcHVyZ2VkIG9mIGl0cyBjb2RlQmxvY2tzIChzZWUgRXhl
Y3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpKS4gUmVnYXJkbGVzcywKICAgICAgICAgICAgIC8vIHRo
ZSBjdXJyZW50IGNvZGVCbG9jayBpcyBzdGlsbCBsaXZlIG9uIHRoZSBzdGFjaywgYW5kIGFzIGFu
IG9wdGltaXppbmcgSklUCkBAIC0xOTMxLDcgKzE5NDAsNyBAQCBIYW5kbGVySW5mbyogQ29kZUJs
b2NrOjpoYW5kbGVyRm9ySW5kZXgoCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb2RlQmxvY2s6
Om5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFs
Q2FsbFNpdGUpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgUkVMRUFTRV9BU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0
Q29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKSk7CiAgICAgQVNTRVJUKCEhaGFuZGxlckZvcklu
ZGV4KG9yaWdpbmFsQ2FsbFNpdGUuYml0cygpKSk7CiAgICAgQ29kZU9yaWdpbiBvcmlnaW5hbE9y
aWdpbiA9IGNvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSk7CkBAIC0yMjMxLDUxICsyMjQwLDU1
IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKICAgICBEZWZlckdD
Rm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBhY2Nv
bXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAvLyAxKSBNYWtlIHN1cmUgdGhhdCBpZiB0aGlz
IENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0
byBpdAorICAgIC8vIDEpIElmIHdlJ3JlIERGRy9GVEwsIG1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMg
Q29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRv
IGl0CiAgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQg
Ynl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KICAgICAvLyAyKSBNYWtlIHN1
cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4n
dCBjYWxsIHRoaXMgQ29kZUJsb2NrLgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xl
YXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxh
dGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQotICAgICAgICAgICAgY29tcGlsYXRpb24tPnNl
dEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRo
aXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQg
d2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KLSAgICAgICAgaWYgKCFqaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0g
cmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhl
YXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewor
ICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlz
b25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0
IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCisgICAgICAgICAgICBpZiAoIWppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgeworICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVz
eSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxvZygiICAg
IERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6YXRpb24gaWYgdGhhdCdzIHdoYXQg
dGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pIHsK
ICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3
NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsK
KyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9u
IGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgaWYgKHRoaXMg
IT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ugd2VyZSBu
ZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZvciBPU1IgZW50cnkgY29kZQog
ICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8vIE9yLCB3ZSdyZSBhbiBMT0wgQ29kZUJsb2Nr
IGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAgICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFm
dGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiByZWFzb24gIT0gUHJvZmlsZXI6
OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
Vk1UcmFwcykKICAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCiAgICAgLy8gSmV0dGlzb24gY2FuIGhhcHBlbiBkdXJpbmcgR0MuIFdl
IGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVhZCBleGVjdXRhYmxlCiAgICAgLy8g
YmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0IHRvIHRoZSByZW1lbWJlcmVkIHNl
dC4KQEAgLTIzOTAsNyArMjQwMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0Nh
bGwoQ2FsbEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAgICAg
ICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwogICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSwgIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxs
ZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLiIpOwogICAgICAgICByZXR1cm47CkBAIC0yNDgzLDEy
ICsyNDk2LDE0IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygKIHsK
ICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAgaWYg
KE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJ
VCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21w
aWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4gKG1f
aGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXI7CiAgICAgfQogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNl
bWVudCgpOwotICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyOworICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZH
T3JGVEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcjsKIH0KIAogaW50MzJfdCBDb2RlQmxvY2s6OmNvZGVUeXBlVGhyZXNob2xk
TXVsdGlwbGllcigpIGNvbnN0CkBAIC0yNzA5LDcgKzI3MjQsNyBAQCB2b2lkIENvZGVCbG9jazo6
Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCkKIHsKICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7Ci0gICAgaWYgKHR5cGUgIT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiB0eXBlICE9IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAgICBkYXRhTG9nTG4oKnRoaXMs
ICI6IGV4cGVjdGVkIHRvIGhhdmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlKTsKICAg
ICAgICAgQ1JBU0hfV0lUSF9JTkZPKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGppdENvZGUoKS5n
ZXQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpKTsKICAgICB9CkBAIC0yNzI3LDcgKzI3
NDIsNyBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVw
bGFjZW1lbnQgJiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7
CiAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CkBAIC0yNzU2LDcgKzI3NzEsOCBAQCB2b2lkIENvZGVC
bG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiB1aW50MzJfdCBDb2RlQmxvY2s6
OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAv
L0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7IC8vIE9PUFM6IFdl
IGNhbGwgdGhpcyBmcm9tIHRoZSBMT0wgY29tcGlsZXIgdGhyZWFkIGJlZm9yZSBpbnN0YWxsLgor
CiAgICAgLy8gQ29tcHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4g
VGhpcyBpcyBjYWxsZWQgaW5mcmVxdWVudGx5CiAgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29w
IHdvbid0IGh1cnQgdXMuCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsK
QEAgLTI4MzYsNyArMjg1Miw3IEBAIERGRzo6Q29kZU9yaWdpblBvb2wmIENvZGVCbG9jazo6Y29k
ZU9yaWcKIAogc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0
CiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBp
ZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzLnNp
emUoKTsKQEAgLTI4NDcsNyArMjg2Myw3IEBAIGNvbnN0IElkZW50aWZpZXImIENvZGVCbG9jazo6
aWRlbnRpZmllcigKICAgICBzaXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQogICAgICAgICByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSk7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJz
W2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkBAIC0yOTQ4LDcgKzI5NjQsOCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVO
b3coKQogI2lmIEVOQUJMRShERkdfSklUKQogdm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRF
eGl0U2l0ZXMoKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSk7CisgICAgLy8gT09QUworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShhbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkpKTsKICAgICAKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRl
cm5hdGl2ZSgpOwpAQCAtMzA1MCw2ICszMDY3LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFt
ZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJh
c2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApA
QCAtMzIyNiwxNCArMzI0NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6YWRkQnJlYWtwb2ludCh1bnNp
Z25lZCBuCiB7CiAgICAgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsKICAgICBB
U1NFUlQobV9udW1CcmVha3BvaW50cyk7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAg
ICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJCcmVha3BvaW50
KTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZShDb2RlQmxvY2s6OlN0ZXBw
aW5nTW9kZSBtb2RlKQogewogICAgIG1fc3RlcHBpbmdNb2RlID0gbW9kZTsKLSAgICBpZiAobW9k
ZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKQorICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6
aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25EdWVUb0RlYnVnZ2VyU3RlcHBpbmcpOwogfQogCkBAIC0zNDIxLDkgKzM0MzksOSBAQCBPcHRp
b25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OmJ5dGVjCiB7CiAgICAgT3B0aW9uYWw8Qnl0
ZWNvZGVJbmRleD4gYnl0ZWNvZGVJbmRleDsKICAgICBKSVRUeXBlIGppdFR5cGUgPSB0aGlzLT5q
aXRUeXBlKCk7Ci0gICAgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8
fCBqaXRUeXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIGlmIChKSVRDb2RlOjpjYWxs
U2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoaml0VHlwZSkpCiAgICAgICAgIGJ5dGVjb2RlSW5kZXgg
PSBjYWxsU2l0ZUluZGV4LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBlbHNlIGlmIChqaXRUeXBlID09
IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgIGVs
c2UgewogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRD
b2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpKTsKICAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBj
b2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpOwpAQCAtMzQ2Niw3ICszNDg0LDcgQEAgYm9vbCBDb2Rl
QmxvY2s6Omhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcAogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5
IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAgICAvLyBj
YXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5kbGVyIHNh
ZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50IG9mIG1f
aml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmhhc0luc3RhbGxlZFZN
VHJhcHNCcmVha3BvaW50cygpOwogI2Vsc2UKQEAgLTM0ODAsNyArMzQ5OCw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1h
eSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAgICAgLy8g
Y2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFuZGxlciBz
YWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBt
X2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGF1dG8mIGNvbW1vbkRhdGEgPSAqbV9qaXRDb2RlLT5kZmdDb21tb24oKTsK
ICAgICBjb21tb25EYXRhLmluc3RhbGxWTVRyYXBCcmVha3BvaW50cyh0aGlzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDM4LDcgKzQzOCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQmFzZWxp
bmVKSVRQcm9maWxpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKKyAgICAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgp
OworICAgICAgICByZXR1cm4gdHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0eXBlID09
IEpJVFR5cGU6OkxPTEpJVDsKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUxMSw2
ICs1MTIsNyBAQCBwdWJsaWM6CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJ
bmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1
ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25z
dCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
QXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CkBAIC01MzksNyArNTQxLDcgQEAgcHVibGljOgog
ICAgIC8vIEhhdmluZyBjb2RlIG9yaWdpbnMgaW1wbGllcyB0aGF0IHRoZXJlIGhhcyBiZWVuIHNv
bWUgaW5saW5pbmcuCiAgICAgYm9vbCBoYXNDb2RlT3JpZ2lucygpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSk7CisgICAgICAgIHJldHVy
biBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSk7CiAgICAgfQogICAgICAgICAKICAgICBi
b29sIGNhbkdldENvZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3Zh
bHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlm
IChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAg
IGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRp
bmdKSVRUeXBlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
OSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpCiAgICAgY2FzZSBF
eGl0RnJvbUFueXRoaW5nOgogICAgICAgICBvdXQucHJpbnQoIkZyb21Bbnl0aGluZyIpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0RnJvbUxPTDoKKyAgICAgICAgb3V0LnByaW50KCJG
cm9tTE9MIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRGcm9tREZHOgogICAgICAg
ICBvdXQucHJpbnQoIkZyb21ERkciKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBlbnVt
IEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiAgICAgRXhpdEZyb21Bbnl0aGluZywKKyAgICBF
eGl0RnJvbUxPTCwKICAgICBFeGl0RnJvbURGRywKICAgICBFeGl0RnJvbUZUTAogfTsKQEAgLTM4
LDYgKzM5LDggQEAgZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogaW5saW5lIEV4aXRp
bmdKSVRUeXBlIGV4aXRpbmdKSVRUeXBlRm9yKEpJVFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIEV4aXRG
cm9tTE9MOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gRXhpdEZy
b21ERkc7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VU
YWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1
YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2Ft
ZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkg
PSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywg
c2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNp
emVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1D
b25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1B
cmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51
bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNr
Q2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6
VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1B
cmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0
aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6
ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0
IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMp
CiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3Rh
bnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1l
bnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJn
dW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxs
ZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApA
QCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5k
c0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVl
ID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAg
ICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxs
KGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXpl
X3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQog
ICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9
Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUo
KSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90
IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAg
ICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0g
bnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50
cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6
ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5z
aXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJl
dHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAg
ICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6
ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxv
Y2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBu
dW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBp
ZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAg
IHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAg
ICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0g
dHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+Cisg
ICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1w
bGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYm
IHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxv
Y2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAg
CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVG
b3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUg
PD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7
CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
VG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAg
ICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6
ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3Jvdyhu
ZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNp
emVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBz
aXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXpl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVk
VmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlv
bikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZElu
ZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQu
dG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50
KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwog
ICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5
cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChv
cGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7
CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAg
ICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiAr
Mzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9D
b25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSAr
NDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJn
dW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxv
Y2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAg
ICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50
cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAg
IH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6
Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVu
dHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1w
cy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3Vt
ZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25z
dGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2Ug
bV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWdu
ZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3Ry
ZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAog
ewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50
SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01Nywx
MCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcElu
ZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAg
IGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNh
bGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5k
czxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBD
b21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0g
bnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBA
QCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6Iiwg
dG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9u
SGFuZGxpbmdDYWxsU2l0ZSA9IGppdC0+Y29kZUJsb2NrKCktPmppdENvZGUoKS0+bGl2ZVJlZ2lz
dGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoaml0LT5jb2RlQmxvY2so
KSwgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOwogICAgICAgICBtX25lZWRzVG9SZXN0b3JlUmVn
aXN0ZXJzSWZFeGNlcHRpb24gPSBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgPiAwOwogICAgICAgICBpZiAo
bV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKQotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5
cGUoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChq
aXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNG
b3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9u
SGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwogICAgICAgICBt
X2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAg
LTcxMCw3ICs3MTAsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNz
CiAgICAgICAgIC8vIFdlIHNldCB0aGVzZSB0byBpbmRpY2F0ZSB0byB0aGUgc3R1YiB0byByZW1v
dmUgaXRzZWxmIGZyb20gdGhlIENvZGVCbG9jaydzCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5k
bGVyIHRhYmxlIHdoZW4gaXQgaXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIGNvZGVCbG9ja1RoYXRP
d25zRXhjZXB0aW9uSGFuZGxlcnMgPSBjb2RlQmxvY2s7Ci0gICAgICAgIEFTU0VSVChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0
VHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9ja1Ro
YXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOwogICAgICAgICBjYWxsU2l0ZUlu
ZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcgPSBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9u
SGFuZGxpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRl
CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lu
bGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUp
OworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUg
dmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxO
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAg
ZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAg
IGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlk
VmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBm
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpA
QCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAg
ICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9v
bCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCht
X3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIo
KSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lz
dGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50
KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7
IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsx
MTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJn
dW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJn
dW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgp
IHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQog
CiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxp
bmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9m
ZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29u
c3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
QmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWls
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQ
YXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFj
dFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQo
bnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxU
b3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQKIFNVUFBSRVNTX0FTQU4KIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChjb2Rl
QmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkp
OwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgQVNTRVJUKCFjb2RlQmxv
Y2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDcgQEAgdm9pZCBhZGp1c3RBbmRK
dW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIGlmIChleGl0SW5saW5lQ2FsbEZyYW1lKQog
ICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXRJbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKIAorICAgIC8vIE9PUFM6IE1ha2UgdGhpcyBkbyB0aGUg
cmlnaHQgdGhpbmcgYmFzZWQgb24gTE9MIG9yIG5vdC4KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
a0ZvckV4aXQgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwog
ICAgIEFTU0VSVChjb2RlQmxvY2tGb3JFeGl0ID09IGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5l
VmVyc2lvbigpKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2Nr
Rm9yRXhpdC0+aml0VHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjpyZWNvbnN0cnVjCiB7CiAgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOwogICAgIHVuc2lnbmVkIG51bVRtcHM7
CkBAIC0xNTUsNiArMTU0LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25z
dHJ1YwogICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
ICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwo
KSArIDE7CiAgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNh
bGxGcmFtZS0+dG1wT2Zmc2V0OwogICAgIH0gZWxzZSB7CisgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOyAvLyBPT1BTOiBi
eXRlY29kZVZlcnNpb24KICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2st
Pm51bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICsz
NTMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MjYgKzUyLDE3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENhbGxGcmFtZUYKIGJv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBl
KCkpIHsKLSAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBKSVRUeXBl
OjpOb25lOgotICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gSklUQ29kZTo6Y2Fs
bFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpOwogfQogCiBi
b29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5
cGUoKSkgeworICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJ
VFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBl
OjpGVExKSVQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzksOCArNzAsNiBAQCBib29sIENh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0
Q2FsbFRodW5rOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwxMCArNDU2LDEwIEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIEhhbmRsZXJJbmZvKiBmaW5kRXgKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
dmlzaXRvci0+Y2FsbEZyYW1lKCk7CiAgICAgdW5zaWduZWQgZXhjZXB0aW9uSGFuZGxlckluZGV4
OwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KQotICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5k
ZXgoKS5iaXRzKCk7Ci0gICAgZWxzZQorICAgIGlmIChKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVC
eXRjb2RlSW5kZXgoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBleGNlcHRpb25IYW5k
bGVySW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKKyAgICBlbHNl
CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRl
eCgpLmJpdHMoKTsKIAogICAgIHJldHVybiBjb2RlQmxvY2stPmhhbmRsZXJGb3JJbmRleChleGNl
cHRpb25IYW5kbGVySW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxOCBAQAogI2luY2x1
ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVkZSAiQ29kZUJsb2Nr
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAi
REZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCisj
aW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRl
ICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgpAQCAtNDksNiArNTUsOCBAQAogI2luY2x1ZGUgPHd0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgogCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogbmFtZXNw
YWNlIEpJVEludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CkBAIC02MCw2ICs2OCw4OTEgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
U2Vjb25kcyB0b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGls
ZVRpbWU7CiAKK3ZvaWQgSklUOjpzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIHNldFR5cGUgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9jdXJyZW50UHJlZGljdGlv
bnMub3BlcmFuZChyZWcpID0gdHlwZTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlID0g
WyZdIChhdXRvIGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9kc3QsIHR5cGUpOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgIC8vc2V0RHN0
VHlwZShieXRlY29kZSwgcHJvZmlsZXMuZ2V0KCZieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9wcm9maWxlKSk7CisgICAgICAgIC8vIFdlIHJhY2lseSByZWFkIHRoaXMsIHNpbmNlIGl0
IHNob3VsZCBvbmx5IGdyb3cgaW4gdGhlIHR5cGVzIGl0IHJlcHJlc2VudHMuCisgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICB9OworCisgICAgYXV0byB0eXBlRm9yID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgLT4gU3BlY3VsYXRlZFR5cGUgeworICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgfTsKKworICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QXJndW1lbnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGw6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFk
YXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUu
bV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVy
YXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEu
bV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
dmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9z
cmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFBy
aXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lk
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BU
cnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBl
X29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVy
ZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRB
c0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1
cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAg
IHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmln
SW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNw
ZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ug
Y2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJp
bmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9t
dWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1f
cmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBt
ZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNB
bnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cisg
ICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5h
TkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIg
dy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkgfHwg
ISEocmlnaHQgJiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3QpKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgfD0gU3BlY0JpZ0ludDsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJl
c3VsdCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2Vy
dmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQg
JiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0
KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0
LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFu
ZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNv
ZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRl
Y29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmln
SW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBj
YXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29k
ZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0
aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29k
ZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBl
ID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJv
bCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVm
ZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBp
ZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEg
dGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUg
bmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAg
ICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9h
ZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2Zp
bGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNl
dFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFz
ZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BT
dHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19m
dW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5j
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdH
ZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dl
bmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVu
dW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNP
d25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVy
dHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5h
bWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVy
aWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZh
bDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JI
b2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1
bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1l
bnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFy
Z3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRl
cmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlz
ZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25s
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xl
c3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5l
ZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVm
aW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5k
ZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jv
b2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19u
dW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhf
cHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRl
bnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24g
PSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAz
MiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUp
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9m
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3Rv
bToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9t
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmlu
Z0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxf
d2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVy
bmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9i
ZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgor
ICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAg
Y2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBj
YXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6
CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9h
Y2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1w
OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9q
ZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRf
b3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9q
ZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ug
b3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToK
KyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNl
IG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVy
OgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2Fz
ZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRj
aF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJp
bmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19z
Y29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJv
ZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVy
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAg
Y2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAK
KyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21f
ZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToK
KyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRf
ZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJp
dHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2No
ZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGlu
dF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3df
ZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1w
b2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNo
ZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNl
IGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5f
ZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxs
X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1
ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgor
ICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRf
aG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9l
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
c2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9v
cGVuOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9j
b25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAg
IGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9p
dGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9u
X2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGlu
dF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hl
Y2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdh
c21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5l
X3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQorewor
ICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ss
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5y
ZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJl
ZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRb
aV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7
CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAo
VmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2Rl
QmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9n
cmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgt
PmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3Ig
KHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUg
PSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9w
cmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247
CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFy
ZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwg
bV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5j
YWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBib29sIGNv
bXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRzLnJlc2l6ZShtX2dyYXBoLT5z
aXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBNYXli
ZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFjdCBv
ZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAgICAg
Ly8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBl
bmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzogSG93
IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERG
Uy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNp
Y0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0
aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAg
IGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2Nr
LmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2st
PmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRy
eUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7IGkgKyBibG9jay5sZWFkZXJP
ZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1dGVVc2VDb3Vu
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91c2VDb3Vu
dHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNo
ZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hl
Y2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50
LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNv
dW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlv
bnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVj
dWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcHV0ZVVzZUNvdW50cyA9IGZh
bHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNyArOTYwLDEzIEBAIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24u
cmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAg
ICByZXR1cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAg
ICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxv
Y2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03NSw2ICs5NzQs
NyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX2Nh
bkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQog
ICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6TE9MKQogewog
fQogCkBAIC0xMzcsMTEgKzEwMzcsMjUgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBO
RVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZp
bmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6
IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkg
eyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBp
ZiAoZ2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93
Q2FsbENhc2VzIikpKSB7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBjYk5h
bWU7IFwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChjYk5hbWUpOyBcCisgICAg
ICAgICAgICAgICAgU3RyaW5nIGtleSA9IGNiTmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3Ry
aW5nOjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVz
W2N1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07IFwKKyAgICAgICAgICAgICAgICBwcm9i
ZShbPV0oUHJvYmU6OkNvbnRleHQmKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgc2xvd0NhbGxD
YXNlUmFuKGtleSk7IFwKKyAgICAgICAgICAgICAgICB9KTsgXAorICAgICAgICAgICAgfSBcCisg
ICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUp
OyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAg
ICAgICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNu
YW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA3MCw0NiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAog
ICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAog
I2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25h
bWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAm
JiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nh
c2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2Fz
ZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
bG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3Zv
aWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3N0YXRpYyB2
b2lkIHNsb3dDYWxsQ2FzZVJhbihTdHJpbmcga2V5KQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtd
IHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgpOworICAgIH0pOworCisgICAgYXV0byYg
bWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2NF90IHZhbHVlID0gKyttYXAuYWRkKGtl
eSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgodmFsdWUgJSAxMDAwKSA9PSAwKQorICAg
ICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRp
Y3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAg
ICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAg
LTIzMSwxNSArMTE2NSw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAo
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xv
d0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJ
bmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgp
ID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVj
dGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQn
cyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAg
YnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5y
ZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1f
Z3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgewor
ICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2Nr
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3Vj
Y2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVu
ZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAg
ICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50
OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVu
dEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxl
YWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChm
YWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQg
ZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9
IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3Vy
cmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2Nr
KCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVk
ZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1Nl
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRb
cHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3Jz
W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJn
ZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICAgICAg
bV9jdXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3VzZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+
aW5kZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3BpbGxDYW5kaWRhdGVzLmNsZWFyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dD
YXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5k
ZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+
IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAgICAgICAgLy8gTGV0J3Mg
ZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KKyAgICAgICAgICAgIGJy
ZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAg
ICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIo
KTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKQEAgLTI3OCw0
NiArMTI4MSw0NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IH0KICNlbmRpZgogCisKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBkYXRhTG9n
TG4oIlJlZyBhbGxvYyBiZWZvcmUgYmMjIiwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAg
ICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsK
KyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoaW5fYnlfdmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChsZXNzZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoaXNfY2FsbGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5
cGVvZl9pc19vYmplY3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlv
bikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0KQotICAgICAgICBERUZJTkVfU0xPV19P
UChwdXNoX3dpdGhfc2NvcGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2Fs
X2Vudmlyb25tZW50KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfYnlfdmFsX3dpdGhfdGhp
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcykKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUCh1
bnJlYWNoYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQpCi0gICAgICAgIERF
RklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKHNw
cmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9X
X09QKHRvX2luZGV4X3N0cmluZykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1l
bnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHkpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X3Byb21pc2UpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5l
cmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHBvdykKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoaW5fYnlfdmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKS5tX2RzdCwg
U3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4p
CisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHVz
aF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIp
CisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisg
ICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3Rl
cigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3Ro
aXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
cmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLm1f
ZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJv
cGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvciwgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJy
YXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJl
YWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5
X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLm1fZHN0
LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0NlbGwpCisgICAg
ICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1lbnRzKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY1Njb3BlZEFy
Z3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCkubV9kc3Qs
IFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50
c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0
ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKS5tX2RzdCwg
U3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2Jq
ZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklO
RV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5tX2RzdCwgU3Bl
Y0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVfT1Aob3BfYWRk
KQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzOTksMTEgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3Vw
ZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJfZW5k
KQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQpCiAgICAgICAg
IERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19PUChtb2QsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJlciB8
IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikKICAgICAgICAg
REVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkKQEAgLTQ3NCwx
MCArMTQ3OSw4MiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAgICAgIERFRklO
RV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAgICBERUZJTkVfT1Aob3Bf
aXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfZnVuY3Rpb24pCisg
ICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBERUZJTkVfT1Ao
b3BfdHlwZW9mKQorCisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQorICAgICAgICBERUZJTkVf
T1Aob3BfbGVzc2VxKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcikKKyAgICAgICAgREVG
SU5FX09QKG9wX2dyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoKQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9jaGVja2VkVXNl
TE9MKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90aHJvdzoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2ptcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lu
c3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZToKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBvcGNvZGVJRCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICBhdXRvIGNv
dW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIHVu
c2lnbmVkJiBjb3VudGVyID0gbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgLS1jb3VudGVyOworICAgICAgICAgICAgICAgIGlmICghY291bnRlcikg
eworICAgICAgICAgICAgICAgICAgICAvLyBPT1BTOiBEbyB0aGlzIGxhemlseSBpbiBzbG93IHBh
dGggY3JlYXRpb24vc3BpbGxGb3JDYWxsCisgICAgICAgICAgICAgICAgICAgIC8vbV9zcGlsbENh
bmRpZGF0ZXMuYXBwZW5kKG9wZXJhbmQpOworCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGUFJSZWcg
ZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChmcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9i
YmVyKGZwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7
CisgICAgICAgICAgICAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2Nr
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAg
ICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVj
dGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAg
ICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQg
IiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAg
fQpAQCAtNDk4LDYgKzE1NzUsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3Mo
KQogICAgIG1fam1wVGFibGUuY2xlYXIoKTsKIH0KIAorc3RhdGljIHZvaWQgc2xvd0Nhc2VSYW4o
U3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3Ry
aW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNl
cy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQo
KTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1
ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwg
IjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ewogICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKQEAgLTUxNiwxNCArMTYwNywyNSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0g
UmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9
IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Ns
b3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBt
X2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6
IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVj
b2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVj
b2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHNbMF0ubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1f
Ynl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CisKKyAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSAmJiBhdG9pKGdl
dGVudigicHJpbnRTbG93Q2FzZXMiKSkpIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFt
IG5hbWU7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChuYW1lKTsKKyAgICAgICAgICAg
IFN0cmluZyBrZXkgPSBuYW1lLnRvU3RyaW5nKCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlciht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsgIiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpXTsKKyAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4
dCYpIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZVJhbihrZXkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQ
cm9maWxlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKQEAg
LTU4MCw3ICsxNjgyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9j
aGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lcSkKQEAgLTU5OSw2ICsx
NzAwLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKHVuc2lnbmVkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGRlYykKQEAgLTYzMSwxOSArMTczNSwzMiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChjaGVja190ZHopCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHRvX3Byb3Bl
cnR5X2tleSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaXNfY2FsbGFibGUpCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikKKyAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKKyAgICAgICAgREVG
SU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mKQorCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKGxlc3MpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGxlc3NlcSkKKyAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ3JlYXRlcikKKyAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AoZ3JlYXRlcmVxKQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RU
bywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkg
fHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQo
KSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAg
ICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9
PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNl
dCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Cisg
ICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
JnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBz
byB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwog
ICAgIH0KQEAgLTY4OCw2ICsxODA1LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2lu
ZyhKSVRDb21waQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBP
T1BTOiBoZWxwZnVsIGZvciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNo
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3
OCw2ICsxODk3LDg4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkK
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgYm9vbCBwcmludEVh
Y2hPU1IgPSBnZXRlbnYoInByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFj
aE9TUiIpKTsKKworICAgIGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1
bXBMaXN0IGV4aXRDb21tb247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBz
KSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAg
ICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0
aGlzKTsKKworICAgICAgICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAgICAgICAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5kdW1wKHByaW50U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHBy
aW50U3RyZWFtLnRvQ1N0cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVm
KCk7IC8vIGxlYWsgaXQuCisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBl
eGl0IGF0IGJjIyIsICBieXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMu
CisKKyAgICAgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4
aXRDb21tb24uYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4
aXRDb21tb24uZW1wdHkoKSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0aGlzKTsKKworCisg
ICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOwor
ICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlu
cyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBi
ZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdp
c3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJl
Z2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwor
ICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJh
cnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcp
LCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihy
ZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7Cisg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkp
OworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBU
cnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0
aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFn
UmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQ
QyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0
aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVt
YmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0
aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMy
KAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAg
ICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRy
YW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAg
ICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xp
bmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5h
dGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAg
ICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRh
dGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAg
IG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIs
IE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0
b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29u
IGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExM
SW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAg
ICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05NjcsNyArMjE2OCw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQg
PSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAg
ICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05NzgsNyArMjE3OSw3IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2Nr
ZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
cmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAg
IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VM
T0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRl
ZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjczLDk1MSBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9P
UFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4
aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRK
dW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0
SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorVmVjdG9yPFJlZywgMzI+IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8g
T09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJl
bnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgVmVjdG9yPFJlZywgMzI+
IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQg
YWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKGFs
bG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hcHBl
bmQocmVnKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30K
Kworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMy
Pj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxs
b3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVu
IHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21w
aWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdh
bnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4u
CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJl
Z3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwor
dm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtz
IGN1cnJlbnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5p
Y2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8v
aWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRl
eCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJ
VDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRl
ZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAg
ICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJ
VDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9P
UFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnBy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJl
Zyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7
CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQg
Ym90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAg
ICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9w
ZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAv
LyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJl
Y2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAg
Ly8gLSBWYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAv
LyAtIH5WYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBk
ZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVw
IGZ1bGx5CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5
IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5W
YWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAg
ICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5k
ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwor
dm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xv
YmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgewor
ICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVy
KGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2
ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxk
IGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElm
TmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1Zh
bHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1h
a2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJh
bmQpKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0
b0lnbm9yZSwgRlBSUmVnIHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQg
YmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVy
YW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0
ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUu
b3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3Bp
bGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWcuZnByKCkgIT0gdG9JZ25v
cmVGUFIpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gdG9J
Z25vcmUpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKworICAgIHJl
c3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMs
IDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJD
YWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVj
b3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsK
KyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3Jk
LnNhdmVQbGFuKTsKK30KKworc3RhdGljIHZvaWQgYWRkTG9hZENvdW50KHVpbnQ2NF90IGNvdW50
KQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb3VudGVyOworICAgIGZvciAodWludDY0X3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgaWYgKGNv
dW50ZXIgJSAxMDAwMCA9PSAwKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJSdW50aW1lIGxvYWQg
Y291bnQ6ICIsIGNvdW50ZXIpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2
ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBj
b25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgdWludDY0X3QgbG9hZENvdW50ID0gMDsK
KyAgICBmb3IgKGF1dG8mIHR1cGxlIDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHN0
ZDo6Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBzdGQ6
OmdldDwxPih0dXBsZSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUgPSBzdGQ6
OmdldDwyPih0dXBsZSk7CisKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQo
IWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgRGlzYWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaCgqdGhpcyk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUpKQorICAgICAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBicmFuY2hJZkludDMy
KEpTVmFsdWVSZWdzIHsgc2NyYXRjaCB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAgICAgICAgaXNJbnQzMi5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gs
IHJlZy5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICArK2xvYWRDb3VudDsKKyAgICB9CisKKyAgICBp
ZiAoZmFsc2UgJiYgbG9hZENvdW50KSB7CisgICAgICAgIHByb2JlKFs9XSAoUHJvYmU6OkNvbnRl
eHQmKSB7CisgICAgICAgICAgICBhZGRMb2FkQ291bnQobG9hZENvdW50KTsKKyAgICAgICAgfSk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKHNsb3dDYXNl
LnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklU
OjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAv
LyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBK
U1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwg
YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2ln
blJlZyhncHIsIG9wZXJhbmQpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJP
bmx5OworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBG
UFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0
ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAu
Z3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAg
ICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMg
KC9jaGVja3BvaW50cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3Np
Z25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQor
Cit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFs
dWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5v
cGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BS
VGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQor
CitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6
R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFs
aWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6
RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6
RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisg
ICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9j
ayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBp
ZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9j
YXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5k
LCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAg
ICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2Vs
bE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJl
ZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAg
ICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9q
aXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9q
aXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0
LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKwor
SklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitK
SVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBt
X2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5k
LmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0g
bV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICgh
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkp
IHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIo
SlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpT
VmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmls
dGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9q
aXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgbV9qaXQuYXNzaWduUmVn
KG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Ok51bWJl
ck9wZXJhbmQ6Ok51bWJlck9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBS
UmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6
On5OdW1iZXJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJS
ZWcgSklUOjpOdW1iZXJPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlk
RlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAg
ICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigp
OworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRl
bXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
KworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQu
YnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMp
OworCisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1
ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgfQorCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworICAgIHJl
dHVybiBtX2ZwcjsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpJbnQzMkNvbnZl
cnRpbmdPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjp+
SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZUlu
dDMyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIG9wIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgICAgICBtX2dwciA9IG9wLmdwcigpOworICAgICAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX29wZXJh
bmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVy
YW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKwor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0IH07CisgICAgICAgIEZQ
UlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0
LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICAgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFs
dWVHUFIsIG1fZ3ByLCBmcHIpOworICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02
NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQz
MkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9q
aXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dw
cik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVs
c2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFu
Y2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nl
c3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGls
bEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8g
b3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBm
cHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7
CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIs
IG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICB9IGVsc2UgaWYg
KG1faml0LnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4obV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBt
X2ppdC5zcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAgIG1f
aml0LmFuZDMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICB9IGVsc2Ug
aWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlT3RoZXIobV9vcGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAg
ICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQ
Ui5mcHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25lOworCisgICAgICAgIGF1dG8gaXNJbnQz
MiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBub3REb3VibGUgPSBtX2ppdC5icmFuY2hJZk5vdERv
dWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0
ZXJzKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7
CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJBUk02NDo6c3VwcG9y
dHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNlbWFudGljcygpKSB7Cisg
ICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2YVNjcmlwdFNlbWFu
dGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIG1fZ3ByLCBCcmFuY2hJ
ZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0byBzcGlsbFJlY29yZCA9IG1f
aml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0
LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhoYXNTZW5zaWJsZURv
dWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93IDogb3BlcmF0aW9uVG9J
bnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5zaWxlbnRGaWxsQWZ0ZXJDYWxs
KHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBub3REb3VibGUubGluaygmbV9qaXQpOworICAgICAgICBhdXRv
IG5vdE90aGVyID0gbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0sIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RPdGhlci5s
aW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZk5vdEJvb2xlYW4oSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcikpOworICAgICAg
ICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvV29yZCh2YWx1ZUdQUiwgbV9ncHIpOwor
CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7
CisgICAgfQorCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3Rh
dGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vy
cmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMu
bnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5U
eXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0
YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9j
b2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIs
ICIsIGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkK
K3sKKyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8g
cmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dM
bihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig
KGF1dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5p
c0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRh
dGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBkYXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVk
ZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29k
ZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlu
a0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQot
ICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2
ZVBsYW4gPSBWZWN0b3I8c3RkOjp0dXBsZTxSZWcsIFZpcnR1YWxSZWdpc3RlciwgU3BlY3VsYXRl
ZFR5cGU+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAg
ICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNs
b3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQor
ICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAg
ICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVz
dCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZl
IG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxh
bjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3
ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsK
IAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTk2LDcgKzIxMSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRk
cmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7
CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZh
Y2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50
ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBK
SVRTdHViQ2FsbDsKIApAQCAtMjA0LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBh
dGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0
aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAg
Ly8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUg
YXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3
aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8g
Zml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNo
UHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVChW
TSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgICAgIGVudW0gY2xhc3MgQ29tcGls
ZVR5cGUgeworICAgICAgICAgICAgQmFzZWxpbmUsCisgICAgICAgICAgICBMT0wKKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayosIENvbXBpbGVUeXBlLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSk7CiAgICAgICAgIH5KSVQoKTsKIAogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRl
cmZhY2VKSVQ6OnZtKCk7IH0KQEAgLTIyMCwyMiArMjM2LDIyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAgdm9pZCBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCisKKyAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGls
ZVR5cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9y
dCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBi
eXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxp
bmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlW
YWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENv
bXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0g
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
UHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI0MywyMSArMjU5LDIxIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAg
ICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAg
ICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkK
ICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29k
ZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJy
YXlNb2RlKTsKICAgICAgICAgfQpAQCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
cGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAg
ICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQg
c3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJl
ckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisK
ICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNl
cHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzUzLDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0g
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
Y29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2
b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAs
IFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nh
c2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVt
cChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyAr
MzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9w
Y29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKQEAgLTM1MCw3ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBi
b29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM5
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21w
aWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7
IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFU
eXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVy
TW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3Vs
ZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1NDAs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBA
IC01MTcsMTIgKzU0OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBTbG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9u
LCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNs
b3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGlu
c3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVy
dCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVy
T2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lk
IGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYs
OSArNTg3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0
eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02MTAsNyArNjUxLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3Ry
dWN0aW9uKik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBA
IC02NzgsNzggKzcyMSw5OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxs
X2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3Rf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lk
IGVtaXRJc0NhbGxhYmxlSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQg
ZW1pdF9vcF9pc19jYWxsYWJsZShjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVt
aXRfb3BfdHlwZW9mX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfdHlwZW9mX2lzX2Z1bmN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAg
IHZvaWQgZW1pdF9vcF90eXBlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZW1pdENvbXBhcmVPcEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF9ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9ncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Rh
aWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9f
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93
UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25z
dCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1
bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9u
Kik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IFZp
cnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7CisjZWxz
ZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpT
VmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODI3LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRD
b25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODM5LDE4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Q
cm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
PEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUg
UmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwotCi0gICAgICAgIEp1bXAg
Z2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAg
ICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAg
ICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRl
ci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNG
b3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAg
ICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29k
ZUluZGV4KTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAK
LSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2Vz
KFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xv
d0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAg
VU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nh
c2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTg5MSw2ICs5MzIsMjYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAg
c2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRh
dGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVy
YXRpb25UeXBlIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAg
ICB7CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsK
KyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgICAgICAgICAgYXV0byBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUZQ
UiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsOworICAgICAgICB9CisKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3Mu
Li4pOwpAQCAtOTAyLDYgKzk2Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTm9Q
cm9maWxpbmcKICAgICAgICAgfTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAg
ICAgICAgYm9vbCB0cnlFbWl0TE9MQml0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNuaXBwZXRHZW5lcmF0b3I+CiAgICAgICAgIHZvaWQgZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHNo
b3VsZEVtaXRQcm9maWxpbmcgPSBQcm9maWxpbmdQb2xpY3k6Ok5vUHJvZmlsaW5nKTsKIApAQCAt
OTYxLDYgKzEwMjUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVu
UHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlv
bihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBp
bGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIApAQCAtOTcxLDYgKzEwMzgsMjkyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNv
cGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJ
bnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6Cisg
ICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRl
bXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBS
UmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJp
dHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RD
ZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3Bl
cmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAg
ICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAg
ICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBOdW1iZXJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTnVtYmVy
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+TnVt
YmVyT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IElu
dmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgLy8gU3BlY3VsYXRlIG51bWJlcitib29sZWFuK290aGVyLCBh
bmQgY29udmVydCB0byBpMzIuIFVzZWZ1bCBmb3IgYml0b3BzLgorICAgICAgICBjbGFzcyBJbnQz
MkNvbnZlcnRpbmdPcGVyYW5kIHsgCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMy
Q29udmVydGluZ09wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkludDMyQ29udmVydGluZ09wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIo
KTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAg
ICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBw
cm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQp
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50
U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAg
ICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9w
ZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRS
ZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBz
dHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWdd
OworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVn
XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdw
ciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJ
bnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFu
ZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlk
R1BSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBGUFJSZWcmIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAg
ICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBn
cHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcmVnVmFsdWUoZ3ByKS5vcGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAg
ICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShn
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnVmFsdWUoZnByKS5vcGVy
YW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBm
cHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFT
U0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5k
KG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVJbnQzMkNvbnZlcnRpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2Vs
bENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAg
IHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
U3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBk
YXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9
IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAg
dm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0
RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVl
KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJl
c3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2
b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBs
YW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRT
cGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlID0gSW52YWxpZEdQUlJlZywgRlBSUmVnIHRv
SWdub3JlRlBSID0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVy
Q2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVG
cm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdu
b3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsK
IAogICAgICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4gbV9mYXJDYWxsczsKQEAgLTk5MCw3ICsx
MzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1w
VGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4g
bV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3Bp
ZWRHZXRQdXRJbmZvczsKQEAgLTEwMjcsNiArMTM4MCw4NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAg
Ly8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAg
ICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BS
UmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZh
bGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5n
cHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0Fs
bG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFs
dWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9
IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVy
LmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9
OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFs
bG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJl
Z1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwg
dHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tT
dGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9S
ZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBv
dGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnBy
b3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgp
ID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAg
IHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2Fs
bG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9n
cmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxw
dHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9w
cmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+
IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8dW5zaWduZWQs
IHRydWU+PiBtX3VzZUNvdW50czsKKyAgICAgICAgT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+IG1f
Y3VycmVudFVzZUNvdW50czsKKyAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMTY+IG1f
c3BpbGxDYW5kaWRhdGVzOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOwor
CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7Cisg
ICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAg
ICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wg
eyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBM
aXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDg2ICs0Miw4OCBAQAogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIK
ICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJp
bnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5B
bmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0
ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3Nl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JF
cXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRy
dWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQ2LDM3ICsxNDgsMTYxIEBA
IHZvaWQgSklUOjplbWl0X29wX2piZWxvd2VxKGNvbnN0IEluc3RydWMKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0Q29tcGFyZU9w
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGdwQ29tcGFyZSwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbXBhcmUpCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxo
cyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5t
X3JoczsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCks
IHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91Ymxl
Q29tcGFyZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKHJocykpIHx8ICFwcmVkaWN0aW9uRm9yKGxocykgfHwgIXByZWRpY3Rpb25Gb3Io
cmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgY29tcGFyZURvdWJsZShkb3VibGVDb21wYXJlLCBsaHNUZW1wLmZwcigpLCByaHNU
ZW1wLmZwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICB9CisKKyAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVk
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJl
ZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbEFuZE9yZGVyZWQpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94
SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMSkpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KGlucHV0R1BSKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5w
dXRHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29u
ZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0
aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNv
bmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxv
d2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBj
b25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRv
IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQog
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxo
cy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhz
LmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AyKSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AxKSB8fCAhcHJlZGljdGlv
bkZvcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJo
cy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CkBAIC0yMjksMTcgKzM1NSw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGNvCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsK
KyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBb
Jl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdl
dFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3By
KCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMy
X3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0
YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMo
KTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0z
MihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNv
bmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJn
ZXQpOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQog
fQogCkBAIC0yNTUsNDMgKzQwNyw4OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQo
Y29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBH
UFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0gewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhp
cywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9
IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBs
YWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDI7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAg
ICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAg
Y29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAg
ICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIp
OwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAg
ICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAg
ICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0z
MihvcDFpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIo
Y29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAg
ICAgIGdldFJIUygpOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKICAgICB9Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwg
b3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVy
YXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGlu
c3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBv
cGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0
cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3Bl
cmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFs
bHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxs
dGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cg
cGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50
IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50
IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0OTgsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAg
ICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAg
ICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzUyMiw2IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAg
ICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFk
ZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTEsMTIgKzU0NSwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1w
IGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs1NjIs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZh
aWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwz
LmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1
NzQsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNy
Y0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3Qg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1
cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHBy
b3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFic29s
dXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0
LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRB
c0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91Ymxl
KEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNE
c3QsIGZwcik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0Rz
dCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0
ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQz
Mi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBl
bnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAg
Ym94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShz
cmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Cisg
ICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5Mywx
MSArNjI4LDYyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAg
ICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAg
ICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
RlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlu
cHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91
YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUo
c3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgRlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVt
cEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9
IDEuMDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQ
Uik7CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5w
dXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5w
dXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRy
dXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BS
LCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNE
c3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJ
bnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIz
MihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00
MDcsNTQgKzY5MywxMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9u
Kgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
b2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSB8fCBzaG91bGRT
cGVjdWxhdGVEb3VibGUocmhzKSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisKKyAgICAgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7
CisKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVj
ayhNYXRoOjpmbW9kRG91YmxlLCByZXN1bHRGUFIsIGxoc0ZQUiwgcmhzRlBSKTsKKworICAgICAg
ICAgICAgc2V0RG91YmxlKGRzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3Qg
Zm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0
ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBl
ZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4
OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwog
ICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
b3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
NCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1w
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BS
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAg
Y2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1w
bGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOwor
ICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+
Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsK
KworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAg
ICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAtPmdwcigpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFt
ZSwgbGlrZSBzcGlsbEV4cGVjdGluZ1Nsb3dQYXRoCisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
ZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJo
cywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1v
dmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0Owor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAg
IH0KIAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
MzIoWmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihO
b3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkp
OwogICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0Rv
dWJsZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3Np
dGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigw
KSk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAg
IGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVh
eCB9KTsKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBK
SVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAg
IGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51
bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxo
cyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwg
U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyAr
ODA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90
SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzQsNiArODE2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hh
cmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MiwxNSArOTA1LDEzIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dP
cGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywg
cmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwpAQCAtNzI0LDEzICsxMDY1LDY2IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0
PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24p
KTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0
aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVt
aXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmls
ZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
TmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+
Citib29sIEpJVDo6dHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoIXVzZUxPTCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKworICAgIGF1dG8gYml0T3Ag
PSBbJl0gKEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAuZ3ByKCk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0
YW5kPikKKyAgICAgICAgICAgIGFuZDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0b3I+KQorICAg
ICAgICAgICAgb3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJpdHhvcj4pCisgICAgICAgICAgICB4
b3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcExzaGlmdD4pCisgICAgICAgICAgICBsc2hpZnQzMihs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PE9wLCBPcFVyc2hpZnQ+KQorICAgICAgICAgICAgdXJzaGlmdDMyKGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8T3AsIE9wUnNoaWZ0PikKKyAgICAgICAgICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsK
KyAgICB9OworCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdw
cigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AyKSkgeworICAgICAgICBJbnQzMkNv
bnZlcnRpbmdPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJDb252ZXJ0
aW5nT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJp
dE9wKGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlm
CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQxLDE3ICsxMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRC
aXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5
RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1
cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQ7CkBAIC03NjAsMzMgKzExNDUsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0
QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQz
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5k
LmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNv
bWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAg
ICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKwor
ICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5k
LmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRv
ciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3Bl
cmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3Jh
dGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQo
Z2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMp
OworCisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5n
cHIoKSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9s
aWN5OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9m
aWxlZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkK
KyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBT
cGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJ
c0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3Ig
QmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50
MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzEy
NjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFu
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDE5ICsxMzA3
LDggQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgorICAgIGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8
T3A+KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAgICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAg
LTg3MywyMSArMTMyMCw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25z
dCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hG
UFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBy
aWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVt
cEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ax
KTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3Vs
dFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBG
UFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAg
ICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3Jh
dGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihs
ZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdz
LAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRU
eXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBw
ZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAg
QVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGlu
ayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7
CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIo
KSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50
QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwg
cmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMiwxOCArMTQwNSw2NiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2Fk
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50
MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAg
ICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5m
cHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRG
UFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0g
U3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpP
dmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7
CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMu
ZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAg
ICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0
aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVk
RnVuY3Rpb24+CkBAIC05MjQsMTUgKzE0NzUsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5l
Zml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8v
IFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyBy
ZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0
aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFs
dWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0
cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAv
LyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcg
cmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxNTEyLDIyIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+
bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAg
TWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0
aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElD
R2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVk
SW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNl
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMs
NyArMTUzNywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAg
ICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQs
IHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3Zl
blR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0lu
dDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlv
bj4KQEAgLTk3NCwzOSArMTU1NSw4MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmlu
YXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVy
YW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNu
aXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQo
KSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNl
dENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9B
U1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7
CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJl
ZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRU
ZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1Q0OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIg
PSBmcFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0g
ICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmly
c3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5l
cmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAg
ICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
IHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAg
IH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0
Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQ
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNo
RlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQ
LT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJp
Z2h0RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5l
cmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0g
ICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJh
dG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAK
ICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9w
ZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENv
bnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVT
dGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTUsMTcgKzE2MzksMzQgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxp
bmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0
YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgp
KSB7CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAg
ICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAg
ICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAg
ICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNjc2LDIw
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNl
bmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVn
cy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
MSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVf
djxPcCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBU
b3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0
aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24g
cHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVj
dGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKQEAgLTEwNDgsOCArMTY5OCw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE3MzUs
NyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRj
aEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24p
Cit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlv
blN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVu
dEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
U3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwxNiArMTc0NSw2IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3Qo
KSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5
cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNSwxNSArMTc1NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVm
dE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9y
Ojppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9y
Ojppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFu
dChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVs
c2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFu
ZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdz
LmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsK
KyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xv
d1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVm
dE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmln
aHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9m
aWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE4MTcsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRp
ZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERp
dj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0
T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAg
ICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vj
b25kKCkpOwogCkBAIC0xMTg4LDYyICsxODMyLDIzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
b3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25z
dGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJl
ZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRU
ZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAg
cmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNo
R1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRl
bXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAg
ICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAg
ICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAg
ICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXND
b25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZw
UmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQ
UiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywK
LSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hG
UFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAK
ICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlz
dCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwg
cmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAg
ICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
TmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJo
c0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9
IHJlc3VsdFRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
bGhzR1BSLCBsaHNGUFIpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJo
c0dQUiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRGUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93
LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAg
ICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFu
Y2gzMihCZWxvdywgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIHJoc0dQUiwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZw
cigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUo
bGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAg
ICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVs
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11
bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAg
ICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVs
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBz
bG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAg
ICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdw
cigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhz
RlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJh
bmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsK
KyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhz
LmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBz
dWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9j
YXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxP
cFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9w
dGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29k
ZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1Qw
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxE
ZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29t
cGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpA
QCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAg
ICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgog
ICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSko
KTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2
ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3Bv
aW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9P
UFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBp
bnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
ICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6
OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiBy
ZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVz
LT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisK
KyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93
LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRD
aGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50
U2xvdyk7CisKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1w
IHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0
VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdU
MCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAg
IHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwog
CiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0
b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDEx
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQog
ICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxs
eSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBi
eXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1
bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHko
cmVnVDApOwogCkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAg
ICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsK
KyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNo
ZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsK
IAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQ
Uik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1
bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRv
bmVHUFIgfSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNs
b3dQYXRoKTsKKworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFu
Y2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAg
ICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsK
ICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9w
ZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93
UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAg
ICAgICAgd2lsbERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25l
LmxpbmsodGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1
NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJS
ZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMp
OwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRD
b2RlOjp0eXBlTmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBK
SVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDoKQEAgLTEwOCw3ICsxMTAsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVX
aXRoQ29kZVJlZihDCiAKIEpJVENvZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZigp
CiB7Ci0gICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQorICAgIGlm
ICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKGlzREZHT3JGVEwoaml0VHlwZSgpKSAm
JiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCiAgICAgICAgICYmIG1fcmVmLmV4ZWN1
dGFibGVNZW1vcnkoKSkKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBKSVQgY29kZSBhdCAi
LCBwb2ludGVyRHVtcChtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpLCAiXG4iKTsKIH0KQEAgLTIz
Nyw2ICsyMzksMTEgQEAgTmF0aXZlRE9NSklUQ29kZTo6TmF0aXZlRE9NSklUQ29kZShDb2RlUgog
I2lmIEVOQUJMRShKSVQpCiBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4
KQogeworICAgIC8vIEZvciBCYXNlbGluZSBKSVQsIHRoaXMgaXMgdHJpdmlhbGx5IHRydWUuCisg
ICAgLy8gRm9yIExPTCBKSVQsIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBzcGlsbGVkIHRvIHRoZSBz
dGFjayBhdCBlYWNoIG9wY29kZSwgc28gd2hlbiB3ZQorICAgIC8vIGdvIHRvIHRoZSBvcF9jYXRj
aCwgdGhlIGxpdmUgc3RhdGUgbXVzdCBhbHJlYWR5IGJlIGluIHRoZSByaWdodCBwbGFjZSBvbiB0
aGUgc3RhY2suCisgICAgLy8gQWxzbywgb3BfY2F0Y2ggaGFzIG5vIGluY29taW5nIHJlZ2lzdGVy
L3R5cGUgcHJvb2Ygc3RhdGUsIHNvIGl0J3MgdHJpdmlhbCB0byBjYXRjaAorICAgIC8vIGFuIGV4
Y2VwdGlvbiBpbiBMT0wganVzdCBieSBqdW1waW5nIHRvIG9wX2NhdGNoLgogICAgIHJldHVybiB7
IH07CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90
IHsKICAgICBIb3N0Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxp
bmVKSVQsCisgICAgTE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02Nywz
NiArNjgsMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJ
VFR5cGUpOwogCi0gICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRp
YyBKSVRUeXBlIHRvcFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZU
TEpJVDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlw
ZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6REZH
SklUOwotICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBK
SVRUeXBlOjpGVExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0
KEpJVFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAg
ICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxU
aHVuazoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAg
ICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBj
YXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEx
Niw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsK
ICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpMT0xKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJ
VFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDYgKzExNywy
NCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsU2l0
ZUJpdHNBcmVCeXRjb2RlSW5kZXgoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChqaXRUeXBlKSB7CisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoK
KyAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBK
SVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBzdGF0
aWMgYm9vbCBpc0xvd2VyVGllcihKSVRUeXBlIGV4cGVjdGVkTG93ZXIsIEpJVFR5cGUgZXhwZWN0
ZWRIaWdoZXIpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0V4ZWN1dGFibGVTY3Jp
cHQoZXhwZWN0ZWRMb3dlcikpOwpAQCAtMTQ1LDkgKzE1NiwxOSBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRI
aWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBib29sIHVzZXNSZXBsYWNlbWVudENvZGVCbG9j
ayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRU
eXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBK
SVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGlzT3B0aW1pemlu
Z0pJVChKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBK
SVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQgfHwgaml0VHlwZSA9
PSBKSVRUeXBlOjpMT0xKSVQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNERkdPckZUTChK
SVRUeXBlIGppdFR5cGUpCisgICAgewogICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBl
OjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYg
dm0sIENhbGxGcmFtZSogY2EKICAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBp
biB0aGUgbWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCiAgICAgICAgIC8vIGFu
ZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRs
ZXItPnRhcmdldAogICAgICAgICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAgICBpZiAo
IUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBl
KCkpKQorICAgICAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSkKICAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCku
cHRyKCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+
bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAg
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1h
a2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3Bp
bGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU4
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVu
Y3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9u
IHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CkBAIC0xNjcsMjUgKzE2OSw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
ciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Q2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0g
c2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xv
d0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0g
ICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5k
ZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5l
IHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MCwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdB
WVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBp
ZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRl
eCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2Fz
ZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRz
dCA9IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlz
dCB7IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3Qp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3Ig
KGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0
eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRl
eCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7
CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAg
c2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICsz
OTgsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAg
ICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQot
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsx
NDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHNob3Vs
ZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0
VHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6Omlz
REZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpOwogCiAgICAgICAgIGlmIChtX2dlbmVyYXRl
RmFzdFBhdGhPblJlcGF0Y2gpIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcs
OCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAg
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAg
LTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4
ZWQKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJh
YmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQ
cmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUx
LDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4g
cmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3Qg
bmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3Bl
cmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNy
Yy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwz
MiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0g
ICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRv
clJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQ
UlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2Ny
YXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAt
PmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7Cisg
ICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikK
LSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
LCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAg
ICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFs
bG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJl
ZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5U
eXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0
dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1Q
dHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNl
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rv
cjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFz
SW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VW
YWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVj
dG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0
aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBj
b25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJ
bnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJl
c3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25z
dHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVt
cC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQ
UiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0K
IAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5j
ZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAg
Ly8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScg
aS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24u
Ci0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRl
c3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1
bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZh
bHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAg
ICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0
aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBz
aW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNl
IGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0g
ICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwg
LSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNl
LgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8g
cmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8K
LSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
T3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENl
bGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisK
KyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0
aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVH
UFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdw
cigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAg
ICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAg
IHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1
ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90
b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVt
cC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5l
bXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhp
cywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7Cisg
ICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKwor
ICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAg
ICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAg
ICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gy
VGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAg
ICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBw
cm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8v
IFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlz
IGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRo
YXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVj
a2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAg
cmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAg
ICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gK
KyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNl
T2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBn
ZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5
OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBp
bnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2Zf
aXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0y
MTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNv
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1Vu
ZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVt
cCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFu
Y2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAg
ICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQy
OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihj
b25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVh
bikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAg
ICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxO
dW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIs
IG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFn
UmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI4LDU2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChy
ZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAg
IGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdU
MSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lO
VDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93
aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0g
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDMs
NjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVl
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5
cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRl
bXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBj
b21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9y
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAg
IGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlz
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwor
ICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEyIEBAIHZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVz
dWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVy
blZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSAr
NzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmso
dGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3Zl
KHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAg
ICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmso
dGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9w
ZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1
MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
LSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRl
U3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3Ry
aW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5
bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmlu
Zy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0
cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3Bl
Y1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChz
cmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAo
c3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAg
ICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBu
YW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24s
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywg
dmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBz
dHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8v
IFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVy
bywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0
aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0
ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2
ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdp
bGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAg
ICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0
YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xl
YXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNl
IG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFn
YWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQg
ZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Cisg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBj
YXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZw
U2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRo
aXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElm
RmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
biwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6
OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwor
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29u
ZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2
YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBp
bmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24g
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRj
aDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsK
KworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0
Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQ
UiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BS
LCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVl
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAg
IGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Cisg
ICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisK
KyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAt
IHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsK
KworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
LCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAg
ICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKwor
ICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisK
KyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUu
bGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5k
ZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090
aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NTE1LDY1ICsxMTY1LDM0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0
cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9p
bnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEu
bV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRy
KHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUz
MihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBi
b29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29t
cGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNF
cSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisK
KyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhz
KSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpT
VmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxs
KHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxo
cywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmlu
ZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJo
cywgcmhzR1BSKTsKKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhz
R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BS
KSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29t
cGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJo
c0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFy
ZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBo
ZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxo
c0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3Zv
aWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Cisg
ICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhw
ciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYg
KCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMp
KSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNH
UFIpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkg
eworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
SW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykp
IHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBs
aHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5m
cHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJo
c0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2
YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
Owordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
Owordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSBy
ZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlz
IGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFs
dWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2
b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhy
b3c+KCk7CkBAIC01ODksNzQgKzE1MTYsMTc4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlz
RXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBE
b3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAg
IGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
b3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihy
aHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBo
ZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CiAKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVs
IHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlz
IERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAg
cmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8g
ZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAg
ICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlz
IERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3Vs
ZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51
bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwg
dGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFs
bCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRo
ZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9u
bHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAg
ICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVn
VDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBh
dCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhp
bmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVk
IHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7
CisjZWxzZQorICAgICAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBj
b3ZlciBzdHJpbmdzKS4KKyAgICAgICAgICAgIG1vdmUobGhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgb3I2NChyaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVzdWx0R1BSKSk7CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgorICAgICAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAg
IGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJ
bnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhz
R1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlm
IChpc0VxKQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGFyZTY0
KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyNlbmRpZgorICAg
ICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwg
cmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVn
VDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhp
Z2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAg
IElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3Rv
IHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENl
bGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAg
IGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8g
VGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUg
bmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIK
KyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGws
IHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVh
dmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBh
ZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwg
cmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1Qz
LCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
NSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisK
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQg
bGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAg
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBz
b21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQot
ICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRo
ZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBm
aW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxl
ZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlz
IGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwg
YW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1w
IGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAg
SnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAot
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAg
ICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
YXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE3MDUsMTY0IEBAIHZvaWQgSklUOjpj
b21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIg
PSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJl
Z1QwLCBzcmMyLCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1f
bGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAorICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0
byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENv
bXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxo
cyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywg
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOwor
CisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChs
aHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BS
KTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4K
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0g
bGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJo
c0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENv
dWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxl
ZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwot
ICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQg
aXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290
byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBp
bnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2Vk
IGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBp
cyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBi
aXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQot
ICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRK
dW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8v
IEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFu
ZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBj
b3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQz
Miwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGlj
X2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBtb3ZlKGxoc0dQUiwgdGVtcEdQUik7
CisgICAgICAgICAgICBvcjY0KHJoc0dQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwodGVtcEdQUikpOworCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hp
Y2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJs
ZS4KKyAgICAgICAgICAgIGF1dG8gbGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAgICAgICAg
ICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHRPSyA9IGJyYW5jaElm
SW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJo
c0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgaWYg
KGlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyNlbmRpZgor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
bGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
LSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUp
CisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQor
ICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0
IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFr
ZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBp
bnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2Vk
IGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRo
YXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxs
IG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8v
IElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25s
eSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3Ig
ZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShy
ZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RP
ZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAg
ICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSks
IHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAg
YXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1
bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3Ry
aW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhl
cmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90
aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkg
eworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVF
cXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQot
ICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRo
ZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBm
aW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxl
ZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
cmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0
aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMg
ZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAg
ICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlz
KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNzQ4LDg5ICsxODc1LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0
IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudElu
c3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJo
c0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhz
R1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNy
Y1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVn
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmlj
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90
Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNw
ZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikK
KyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlz
KTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgp
OworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwor
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRl
YWwgd2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBz
byB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwog
CiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIxNTQsMjMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNv
ZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3Bl
KSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3Bl
cmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkg
KzIxODUsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFi
bGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwot
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC05MjIsOSArMjIxMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
Y2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBU
YWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsy
MjM0LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAg
U3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0
R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxs
Rm9yQ2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxv
Y2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1
Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2Rl
YnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0g
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wg
aXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBh
cmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3Jj
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNj
cmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBh
cmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihF
cXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQog
Ci0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAg
ICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBh
cmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVn
VDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRf
b3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxs
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIs
IHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0
IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3Rl
ciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwog
ICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91
ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2
b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQg
aW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+
bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAg
ICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZv
ciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJs
ZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAg
IH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIz
ODUsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBy
ZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdw
cigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSks
IHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
c2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEwNDUsMTMgKzI0MDksODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9U
aGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
cmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9z
cmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3Qo
KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmln
aHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5l
ZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVj
dE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7Cisg
ICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBz
aW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAg
ICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgbG9h
ZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAg
ICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBP
T1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAg
ICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjQ5NCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9u
ID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0g
cmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsy
NTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBS
ZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2Fs
bGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQu
ZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
Y2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9
IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigp
OworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0
YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJU
ZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywg
ZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI1NDYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1
Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVj
a1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMg
d29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhj
ZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC0xMTYyLDggKzI1OTEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBp
dCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUu
CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5F
YXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BT
OiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgog
ICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIo
aW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8g
c2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0
aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMg
KzI2MTksMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93
IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGlt
aXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29w
eUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDEx
ICsyNjM2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAg
IC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkp
OyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBp
biBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAg
KzI2NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQq
PigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNjcyLDE4IEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9
IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdF
eHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1
ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChy
ZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI2OTMsNDIgQEAg
dm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNj
b3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsK
KyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAg
IE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBl
bHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNzU3LDQ2
IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5t
X3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3Bl
LnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdw
cigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAj
ZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4
cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI4MjcsMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQg
PSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
Mih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTM2MCwxNCArMjg0OCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQ
UlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBs
YWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmdHUFIgPT0gcmV0dXJuVmFsdWVHUFIpOworICAg
IH0KKworICAgIC8vIE9PUFM6IElubGluZSB0aGUgYWxsb2NhdGlvbiBwYXRoIGhlcmUsIGl0IG1h
dHRlcnMgZm9yIHN1bnNwaWRlci1jcnlwdG8tYWVzCisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVt
aXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgs
IHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAg
LTEzODEsMTUgKzI4ODQsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI5MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7
CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsy
OTYyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9P
UFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI5ODksMTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0
aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZv
ckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAK
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJh
ZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMzAwNiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfZW51bWVyYWJsZV9pbmRleGVkCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVs
KCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFk
VHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwg
ZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICszMDM5LDgxIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9y
IH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworCisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BS
ID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCi0gICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAK
LSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5s
aW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxp
bmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNF
aWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndp
c2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1Qx
KTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMTIzLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAg
R1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAg
ICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIp
OwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAs
IFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRj
aEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVz
RWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJp
bmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1
NzQsMjEgKzMxNzcsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMy
KEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpl
bmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOwor
ICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+
IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1w
LmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBp
bmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVt
ZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdU
MTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwor
ICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmlj
UHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0g
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAg
IAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMyMzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9j
YXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmls
ZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszMjkzLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2Vu
KCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSBy
ZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJv
bG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMzMTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAg
ICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9
IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNjg0LDYgKzMzMjUsMTQ0IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMs
IG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZG
dW5jdGlvbihpbnB1dEdQUik7CisgICAgICAgIGF1dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RP
YmplY3QoaW5wdXRHUFIpOworICAgICAgICAKKyAgICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAKKyAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBub3RP
YmplY3QubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgCisgICAgICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wSXNDYWxsYWJsZT4oY3VycmVudEluc3RydWN0aW9uKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX2Z1bmN0aW9uKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wVHlw
ZW9mSXNGdW5jdGlvbj4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNPYmplY3Q+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVy
YW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIp
OworICAgICAgICAKKyAgICAgICAgYXV0byBpc051bGwgPSBicmFuY2hJZkVxdWFsKEpTVmFsdWVS
ZWdzIHsgaW5wdXRHUFIgfSwganNOdWxsKCkpOworICAgICAgICBhdXRvIGlzTm9uTnVsbE5vbkNl
bGwgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgYXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZGdW5jdGlvbihpbnB1dEdQUik7CisgICAgICAg
IGF1dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpOworICAgICAgICAK
KyAgICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAKKyAgICAgICAgaXNO
dWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGlzTm9uTnVsbE5vbkNlbGwubGluayh0aGlzKTsKKyAgICAgICAgaXNGdW5jdGlv
bi5saW5rKHRoaXMpOworICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF90eXBlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4o
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX3ZhbHVlOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyAgICAgICAgSnVtcCBzbG93UGF0aDsKKyAgICAgICAg
ZW1pdFR5cGVPZigKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSwgcmVzdWx0
R1BSLAorICAgICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUsIGJvb2wgZmFsbHNUaHJvdWdo
KSB7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0tPnNtYWxsU3RyaW5n
cy50eXBlU3RyaW5nKHR5cGUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZh
bGxzVGhyb3VnaCkKKyAgICAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKEp1bXAgdGhlU2xvd1BhdGgpIHsKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHRoZVNsb3dQYXRoOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgIH0gZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RW51bWVyYWJsZUxlbmd0aD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIGJh
c2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhpbnB1dEdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcwMiwxMSArMzQ4MSwyMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVn
czo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdU
MCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3Mo
cmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszNTAyLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9y
ZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVt
UGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihu
dW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXAp
KTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhh
bk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIo
SW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
Ym94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhp
cyk7CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdU
MCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigw
KSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzM1NTEsOTkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBs
b2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhp
cyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVn
VDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZC
b3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5k
ZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1v
dmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dFJlZ3MpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9m
Qm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGlu
ZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3Rv
dHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQ
Uiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIs
IGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVy
OworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdU
Mik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdz
LnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVn
VDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQo
dmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxv
YWRHUFIoKSkpOworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAg
IGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
KyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyNCw2ICsxNDI0LDgg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgLy9kYXRhTG9nTG4oImNvbXBhcmVMZXNzLCBs
aHM6ICIsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgIiByaHM6ICIsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKSk7CiAgICAgCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihnbG9iYWxP
YmplY3QsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDIpKTsKIH0KQEAgLTE0OTEsNiArMTQ5Myw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Db21wYXIKICAgICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBzcmMyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIp
OwogCisgICAgLy9kYXRhTG9nTG4oInN0cmljdGVxLCBsaHM6ICIsIHNyYzEsICIgcmhzOiAiLCBz
cmMyKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChnbG9iYWxPYmplY3QsIHNy
YzEsIHNyYzIpOwogfQogCkBAIC0xODc5LDcgKzE4ODMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1p
emVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VSVChvcHRp
bWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVC
bG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRD
b2RlOjppc0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgCiAg
ICAgaWYgKHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZy
YW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIENPREVC
TE9DS19MT0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIs
IGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTM0MzMsNiArMzQzNyw0MiBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQs
IChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpCit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZl
cmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3
b3VsZG4ndAorICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyhsb2xDb2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBpZiAoZ2V0ZW52KCJw
cmludEVhY2hKZXR0aXNvbiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaEpldHRpc29uIikp
KQorICAgICAgICBkYXRhTG9nTG4oImpldHRpc29uLCBmb3JjaW5nIHJlb3B0IG5vdzogIiwgKmxv
bENvZGVCbG9jayk7CisgICAgbG9sQ29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVk
aWN0aW9ucygpOworICAgIAorICAgIC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJvZmlsZXMgaGVy
ZSwgc2luY2Ugd2UncmUgamV0dGlzb25pbmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0ZSB3LyB0aGlu
Z3Mgd2UgY2FyZSBhYm91dC4KKworICAgIHNhbml0aXplU3RhY2tGb3JWTShsb2xDb2RlQmxvY2st
PnZtKCkpOworCisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbG9sQ29k
ZUJsb2NrLCAiOiBFbnRlcmVkIHJlb3B0aW1pemUgZnJvbSBMT0wiKTsKKworICAgIENvZGVCbG9j
ayogbGxpbnRDb2RlQmxvY2sgPSBsb2xDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgLy8g
V2UgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBibG9jay4KKyAgICBBU1NF
UlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUobGxpbnRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwor
CisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGxsaW50Q29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpOworICAgIGlmICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxpbnRDb2RlQmxv
Y2spIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbGxpbnRD
b2RlQmxvY2ssICI6IE5vdCByZW9wdGltaXppbmcgTE9MIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBi
ZWVuIGpldHRpc29uZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhl
cndpc2UsIHRoZSByZXBsYWNlbWVudCBtdXN0IGJlIG9wdGltaXplZCBjb2RlLiBVc2UgdGhpcyBh
cyBhbiBvcHBvcnR1bml0eQorICAgIC8vIHRvIGNoZWNrIG91ciBsb2dpYy4KKyAgICBBU1NFUlQo
bGxpbnRDb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOworICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQobG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworCisg
ICAgLy8gT09QUzogZmlndXJlIG91dCBzdHVjayBpbiBhIGxvb3AgbG9naWMKKyAgICBsb2xDb2Rl
QmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwgQ291bnRSZW9w
dGltaXphdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1Nf
RU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw2ICszMTksOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblZhbHVlCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blByb2Nlc3NUeXBlUHJvZmlsZXJMb2csIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsK
IAorSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6
YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjgx
LDggKzI3Nyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAg
ICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CkBAIC01NTgsNyArNTUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAg
Ly8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lz
dGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzksOCArNjMwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3NSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzc4LDgg
Kzc2Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4ICs4MDIsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMTAwLDggKzEwODEsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyNTcsOCArMTIzNiw2
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRl
IDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJp
bnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01Miw1
MSArNTQsMTE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4
aW5nVHlwZUdQUjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywg
cHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3Vs
dEdQUjsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBp
bmRleGluZ1R5cGVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOworICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVy
cy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkg
ewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsK
LSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisg
ICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBw
cm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENl
bGwubGluayh0aGlzKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9
IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBw
cm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChw
cm9wZXJ0eUdQUik7CisgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSks
IFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
YmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQor
ICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJv
cGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4Owot
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVn
VDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICAr
K21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA1LDQxICsxNzMsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0K
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBn
ZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUs
Ci0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55
U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21f
Z2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTU3LDYgKzI1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0
ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0
dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAg
ICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAg
LTMxOSw4ICs0MjEsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1
bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlO
YW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9w
ZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0NCw3IEBAIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAg
ICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9h
ZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5
dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwpAQCAtMzU1LDEzICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3Rh
dGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNl
Ci0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAg
ICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAog
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgp
OyAvLyBPT1BTOiBEbyBiZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwogCkBAIC0zOTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQYXRoSm1wLCBk
b25lLCBkb25lKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRl
TmFtZT4oKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2YXRlRmllbGRQ
dXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9wcml2YXRlX25hbWUoYwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNz
b3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
YWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vz
c29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
clNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0g
Z2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3Bl
cnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5t
X2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBh
Y2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1
dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29y
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQ
UiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nl
c3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTQ3MiwxOCArNjMzLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAg
ICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUg
ZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpA
QCAtNDkyLDI1ICs2ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVs
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTUyMCwxOSArNzE3LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBw
cm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJv
cGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJh
c2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
Y3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01NDEsMjIx
ICs3ODksMzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpUcnlH
ZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
SnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRl
eGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0
YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAg
ICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0
aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZS
ZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAg
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBw
ZW5kKGdlbik7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAg
Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHRoaXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7Cisg
ICAgfQogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3ModGhpc0dQUikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBH
UFJSZWcgdGhpc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJ
ZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcg
PSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8v
IHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUg
ZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2
YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVl
R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2
YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0
ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1
dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklY
TUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5
IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3Vs
ZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIs
IGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9p
bkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5C
eUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsK
ICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVz
b2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
bWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1f
bG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3Bl
KSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkp
LCByZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCkBAIC04NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVn
VDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNv
bnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2Nv
cGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAg
ICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBP
cHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29w
ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3Bl
VmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
c2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7
ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwg
cmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTg5NCw5ICsx
MzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05
MDksMjkgKzEzNDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC05NDAsMTUgKzEzNzYsMjAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6
OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQ
UlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1
cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJl
U2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBz
Y3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihK
U1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAzLDYgQEAgdm9pZCBK
SVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcp
OwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVn
VDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUxICsxNDEzLDg0IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1Qw
OwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVn
IG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAg
IE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUp
OworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BS
ID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAg
aml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJh
bmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRH
UFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1w
IGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRy
dXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0
V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNP
dXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihv
ZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9m
ZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZz
ZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQ
Uiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCks
IHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFy
KHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTAzNiwx
MCArMTUwNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRH
UFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlz
Tm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogCkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwog
ICAgICAgICBicmVhazsKQEAgLTEwODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQs
IHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVz
c09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwot
ICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMjksMjEgKzE1NzksNDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90
KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1f
b3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7
CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAg
ICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAg
YnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFs
dWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQ
UiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9m
ZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZv
aWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7
CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVn
VDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJl
Z1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVy
Zmx5R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7Cisg
ICAgICAgICAgICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVl
R1BSLCBCYXNlSW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTE1NCwyOCArMTYzMiw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFs
aXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRv
IGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0
byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2Fk
UHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywg
c2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93
YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNj
b3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3Bl
cmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHlu
YW1pYzoKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkwLDEyICsxNjk3
LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhl
IGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBz
aW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2Ny
YXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hH
UFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2
YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1LDMyIEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQo
KTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20g
YWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55
IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdU
MCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUK
IAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBp
c0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBA
IC0xMjQyLDEwICsxNzY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTI2MSw2MSArMTc4NCwxNzggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAg
ICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
LSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0
KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRy
ZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3Vt
ZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1
ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNH
UFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2
NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAg
IGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8v
IE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJh
bmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0
IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUg
Y2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3Rh
dGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8g
LSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2ls
ZW50IGZpbGwKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBp
ZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4K
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZv
ck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0g
cmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3du
ZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVn
IG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVy
KSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5k
KG93bmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVn
VDApOworICAgIH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAg
ICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkg
eworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWND
ZWxsKSkKKyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQ
Uik7CisgICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlv
bmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFs
dWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwo
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0o
KSwgb3duZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVy
Q2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgp
KQogICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAg
aWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhp
cyk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRo
YXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBu
b3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2Fs
bG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0Cisg
ICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29k
ZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFu
Y2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAg
ICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFs
dWU7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1
ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgp
KSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzMjcsMTEgKzE5
NjcsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJv
dmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQo
aW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTM0MSwxMCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJu
YWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMs
IGJhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25D
ZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAg
ICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpA
QCAtMTQ0Nyw4ICsyMTE1LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAg
ICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93
bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsK
KyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDA7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZt
KCksIG93bmVyLCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGls
bFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJl
Y29yZCk7CisKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAK
QEAgLTE0NjYsNiArMjE1MSw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2so
UmVnaXMKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsK
KyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIApAQCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisK
ICAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0
ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9j
aykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHByb2ZpbGVkREZHQ29kZUJsb2NrLCAhcHJvZmlsZWRE
RkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxh
dGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7CiAgICAgCkBAIC01
NSw3ICs1NSw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2Rl
QmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBv
ZiAiLCAqY29kZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0KTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTUgKzMxLDIyIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiVk1Jbmxp
bmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpJVFdvcmtsaXN0OjpQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFdv
cmtsaXN0OjpQbGFuPiB7CiBwdWJsaWM6Ci0gICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICA6IG1fY29k
ZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVC
bG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBQbGFuKENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDogbV9sbGludENvZGVCbG9jayhjb2RlQmxv
Y2spCisgICAgICAgICwgbV9jb2RlQmxvY2tUb0NvbXBpbGUoY29tcGlsZVR5cGUgPT0gSklUOjpD
b21waWxlVHlwZTo6TE9MID8gbV9sbGludENvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSA6IG1f
bGxpbnRDb2RlQmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2NrVG9Db21waWxlLT52
bSgpLCBtX2NvZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUNvbXBpbGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBpbiBjb25jdXJyZW50
IGdjCisgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2Nr
KSB7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnByb3RlY3Qo
bV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUluVGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aW5hbGl6ZSgpCiAgICAgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2pp
dC5saW5rKCk7CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7
CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9j
aykKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnVucHJv
dGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAgICAgICAgIHN3aXRj
aCAocmVzdWx0KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJj
b21waWxhdGlvbiBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1f
bGxpbnRDb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIp
KTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBK
SVQgY29tcGlsYXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRK
SVRBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENv
bXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmRvbnRKSVRB
bnl0aW1lU29vbigpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+bV9kaWRGYWlsSklU
Q29tcGlsYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxv
Y2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrVG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2Rl
QmxvY2tUb0NvbXBpbGUpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+aml0U29vbigp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4g
bV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsg
fQorICAgIENvZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9j
azsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2stPnZtKCk7IH0KICAg
ICAKICAgICBib29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTgwLDE1ICs5Mywx
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7CiAgICAg
fQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBzdGF0aWMgdm9p
ZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBp
bGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewot
ICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsK
KyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwogICAgICAgICBw
bGFuLmZpbmFsaXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsKKyAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAgICBMb2NrIG1fbG9j
azsKICAgICBib29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07CkBAIC0yMzMsOSAr
MjQ3LDExIEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAg
ICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKworICAgIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRpb25zOjpmb3JjZUxP
TCgpID8gSklUOjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmU7
CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKLSAgICAgICAg
UGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjQ5
LDcgKzI2NSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAg
ICAgICAgCiAgICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsKICAgICAgICAgICAg
IG1fcGxhbm5lZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFu
ID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNv
ZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKICAgICAg
ICAgICAgIG1fcGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQo
cGxhbik7CiAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7CkBAIC0y
NzMsMTQgKzI4OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2Nr
CiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29uY3VycmVudCBK
SVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8vIHRocmVhZCBj
b21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBoYWQgbXVsdGlw
bGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29tZWRheS4KLSAg
ICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7
CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3co
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZdIHsKKyAgICAgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1p
emVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIyLDI0IEBAIHZvaWQg
SklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAgICAgCiAgICAgLy8g
Tm93IGl0IG1pZ2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZp
b3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKLSAg
ICAvLyBiYXNlbGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKLSAgICAK
LSAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKLSAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxv
Y2spOworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBsb2xDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIEpJ
VDo6Y29tcGlsZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwg
SklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIGxvbENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGxvbENv
ZGVCbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdl
IGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdp
dGggdGhlCisgICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29kZUJsb2NrLT5yZXNl
dEpJVERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCisg
ICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNl
bGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNv
ZGVCbG9jayk7CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFu
cyhQbGFucyYgbXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lkIEpJVFdvcmtsaXN0
OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFsaXplKCk7CiAgICAg
ICAgIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAgICAgbV9wbGFu
bmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxhbm5lZC5yZW1vdmUo
cGxhbi0+Y29kZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVM
YXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0
ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgCiAgICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdCgpOwog
ICAgIHN0YXRpYyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpOwpA
QCAtNjYsNiArNjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsKICAgICBmcmllbmQg
Y2xhc3MgVGhyZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkp
OwogICAgIHZvaWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAgIFBsYW5zIG1fcXVl
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
bWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0
b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRv
cltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAg
ICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+
IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRy
LmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgIGlm
IChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVs
QXRPZmZzZXQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENh
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQ
YXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAg
ICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBX
ZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8g
bV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigm
bV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNl
dF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOCArMzYzLDEw
IEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KIH0KIAogLy8gUmV0
dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wgaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKK2lubGlu
ZSBDb2RlQmxvY2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMgdy5yLnQgTE9M
LgorCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJz
IGRvbid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQg
YWxsLgogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBAIC0zNzMsMjkgKzM3
NSw0NSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgaWYg
KCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9s
ZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRl
cigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBK
SVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJVFdvcmtsaXN0Ojpl
bnN1cmVHbG9iYWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAgYXV0byBsb2xDb2Rl
QmxvY2sgPSBbJl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogcmVw
bGFjZW1lbnQgPSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAg
ICAgIGlmIChyZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2so
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRU
eXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBp
bGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2UgSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUOworICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZGF0
YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4i
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygiVW5leHBlY3RlZCBj
b2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgU2xv
d1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFy
ICpuYW1lLCBFbnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlP
U1IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFy
ICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksCiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRo
IGV4ZWN1dGVDb3VudGVyID0gIiwKQEAgLTQwNiwxOCArNDI0LDIxIEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxs
cHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAg
IGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykpCisgICAgQ29k
ZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZt
LCBjb2RlQmxvY2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5U
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19F
VkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xv
Z3VlIikpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2sp
OwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBMTElOVF9SRVRVUk5f
VFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsK
KyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5l
eGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNo
ZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNz
Rm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7Cisg
ICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNz
Rm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiB9
CiAjZWxzZSAvLyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9T
UihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKK3N0YXRpYyBT
bG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5kb250SklUQW55
dGltZVNvb24oKTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwpAQCAt
NDI3LDMxICs0NDgsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2Rl
QgogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVOVVNFRF9QQVJBTShw
Yyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9v
c3IiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19Q
QVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVOVVNFRF9QQVJB
TShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5
X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1Io
Y2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpz
RXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NhbGwiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9m
dW5jdGlvbl9mb3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0
dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+
anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxG
cmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1
dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBj
KTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpz
Q2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3Ny
X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4g
ZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9X
X1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrKQog
ewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlD
aGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNv
ZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
YXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29w
X29zcikKQEAgLTQ4MCwxOSArNTAxLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3Ny
KQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAg
ICAKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxv
Y2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBM
TElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19M
T0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAi
b3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKIAotICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAg
QVNTRVJUKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgfHwgY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwog
Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgp
OworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVCbG9jay0+aml0
Q29kZU1hcCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2Nh
dGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBBU1NF
UlQoY29kZUxvY2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisKKyAgICBjYWxs
RnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgTExJTlRf
UkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CiAjZWxzZSAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBAIHN0YXRpYyB2
b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgT3B0
aW9uczo6Zm9yY2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IDE7CisKICNp
ZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5k
bGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3
LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29s
LCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
Qm9vbCwgdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUs
IHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0YSBmaWVsZHMgaW5z
aWRlIGNsYXNzZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRz
LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwcml2
YXRlIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCBm
b3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5j
ZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1Vu
dmVyaWZpZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgbGxpbnRfaGFu
ZGxlX3VjYXVnaHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAg
ICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAgICAgICAgICAg
ICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
ayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkg
ewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBD
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUlu
ZGV4KGJpdHMsIHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwTExJbnQoQ29k
ZUJsb2NrKiBjb2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2Vl
ZCk7CisgICAgLy8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdhbnQgdG8gZG8gd2l0aCB0aGUg
bm8gTExJbnQgb3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6
Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBp
bGF0aW9uU3VjY2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RS
dW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBu
dW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2
ZU1hbnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0
aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBqc051bWJlcigwKTsgLy8gT09QUwor
CiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQo
KSB8fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29t
cGlsZXMgPSB0cnVlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTVRyYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZv
aWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoZm91bmRDb2RlQmxvY2st
PmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3VuZENvZGVCbG9j
ay0+aml0VHlwZSgpKSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKCptX2xv
Y2spOwogICAgICAgICBpZiAoIWxvY2tlcikKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRo
ZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQg
Vk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxlIChjYWxsRnJh
bWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2st
PmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQpJbmRleDog
VG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9jb21wYXJlLXJlc3VsdHMJKHJldmlzaW9uIDI3MTM3NikKKysrIFRvb2xzL1NjcmlwdHMvY29t
cGFyZS1yZXN1bHRzCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOCArMTgyLDggQEAgZGVmIGNvbXB1
dGVNdWx0aXBsZUh5cG90aGVzZXNTaWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFrZG93bnMoYSwg
Yik6CiAgICAgbmFtZUxlbmd0aCA9IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0aCA9IGxlbihh
W3VuaXRNYXJrZXJdKQotICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKKyAgICBhTGVu
Z3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMworICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFy
a2VyXSkgKyAzCiAgICAgcmF0aW9MZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAgIHBWYWx1ZUhl
YWRlciA9ICJwVmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZSki
CkBAIC0yMTIsNyArMjEyLDcgQEAgZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIHBMZW5n
dGggKz0gMgogCiAgICAgc3RyaW5ncyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57
bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtj
b21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9
InN1YnRlc3QiLCBhU2NvcmU9YVt1bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1hcmtlcl0sIG5h
bWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBj
b21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhl
YWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtrZXk6XntuYW1l
TGVuZ3RofX18e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9fSB8e2NvbXBh
cmU6XntyYXRpb0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0KGtleT0ic3Vi
dGVzdCIsIGFTY29yZT0iYTogIiArIGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjogIiArIGJbdW5p
dE1hcmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3Ro
PWJMZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFy
a2VyPXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5IGluIGEua2V5
cygpOgogICAgICAgICBpZiBrZXkgPT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAgIGNvbnRpbnVl
CkluZGV4OiBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTQsNyArNCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1
bm5lciA9IHsKICAgICBuZXZlcklubGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAot
ICAgIG51bWJlck9mREZHQ29tcGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVy
T2ZERkdDb21waWxlczogKGZ1bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICBy
ZXR1cm4gKGYpID0+IHsKKyAgICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8g
RW11bGF0ZSBydW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJp
bmcgYmVmb3JlIHJldHVybmluZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAg
ICAgICAgICAgbWFwID0gbmV3IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAu
Z2V0KGYpIHx8IDA7CisgICAgICAgICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNl
dChmLCBjb3VudCk7CisgICAgICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAg
ICAgICB9OworICAgIH0pKCksCiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3
Q29kZUJsb2NrCiB9OwogCkBAIC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUo
dGhlRnVuY3Rpb24sIF9hLCBfYgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNo
OwogICAKICAgdHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkp
CisgICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1
ZXMucHVzaChldmFsKF9hKSk7CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAg
fSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVu
Y3Rpb24gZGZnSW5jcmVtZW50KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQog
ICAgICAgICByZXR1cm4gYXJndW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFy
Z3VtZW50KSkKKyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6
IDA7CiAgICAgCiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417481</attachid>
            <date>2021-01-12 12:44:59 -0800</date>
            <delta_ts>2021-01-12 16:59:01 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>572827</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ2NyeXB0by1hZXMtU1AnXTsKKwog
aWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJ
dGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3RpbwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblNl
dFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25Jc0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2NjMsOCBAQCBw
cml2YXRlOgogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1iZXIiLCBmdW5j
dGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzREZH
RW5hYmxlZCIsIGZ1bmN0aW9uSXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImRyb3BBbGxMb2NrcyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsKIAogICAgICAg
ICBpZiAoT3B0aW9uczo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGlu
ZygpKSB7CkBAIC0yNjUzLDYgKzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uQXNEb3VibAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIo
bnVtKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxl
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oT3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwogSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxvY2sgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpk
dW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZH
T3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJs
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDggQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVy
ZUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCkBAIC0yNjks
NyArMjcxLDcgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Qmxv
Y2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
SUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxC
bG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBkdW1wSGVhZGVy
KGJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMgQEAgdm9pZCBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91dC5wcmludCgi
YmIjIiwgYmxvY2suaW5kZXgoKSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRpY3Rpb25zQXRI
ZWFkKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhlYWQ6IFsiKTsK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlvbnNBdEhlYWQt
PmF0KGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0
LCBwcmVkaWN0aW9ucy5hcmd1bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2NhbHMoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAgICAgICAgICAg
ICAgZHVtcFNwZWN1bGF0aW9uKG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQorCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKICAgICAg
ICAgICAgIGF1dG8mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChpICsgYmxv
Y2subGVhZGVyT2Zmc2V0KCkpOwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGljU3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgogY2xhc3MgQ29k
ZUJsb2NrQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiA9IElD
U3RhdHVzTWFwKCkpOwotICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6
OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOworICAgIHN0
YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0
ZWNvZGVHcmFwaCYsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1
ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CiAK
ICAgICB2b2lkIGR1bXBJZGVudGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgog
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2b2lkIGR1bXAo
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1
Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4gc3BlY3Vs
YXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQorICAg
IHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6
OmRhdGFGaWxlKCkpCiAgICAgewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2Rl
QmxvY2tUeXBlPjo6ZHVtcEdyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywgc3Bl
Y3VsYXRpb25BdEhlYWQsIHByaW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVJbmRleEltcGwoVmlyCiAgICAgLy8gTm8gdXNlcy4KICAgICBjYXNlIG9wX25ld19yZWdleHA6
CiAgICAgY2FzZSBvcF9kZWJ1ZzoKLSAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgIGNhc2Ugb3Bf
bG9vcF9oaW50OgogICAgIGNhc2Ugb3Bfam1wOgogICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKQEAg
LTEwMyw2ICsxMDIsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmly
CiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgICAgIHJldHVybjsKIAorICAgIFVTRVMoT3BK
bmVxUHRyLCB2YWx1ZSwgc3BlY2lhbFBvaW50ZXIpCiAgICAgVVNFUyhPcFRvVGhpcywgc3JjRHN0
KQogICAgIFVTRVMoT3BDaGVja1RkeiwgdGFyZ2V0VmlydHVhbFJlZ2lzdGVyKQogICAgIFVTRVMo
T3BJZGVudGl0eVdpdGhQcm9maWxlLCBzcmNEc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3OCw3ICsxNzgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmlu
CiAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnQo
c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbnNT
aXplKCkpOwotICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQg
JiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCisgICAgaWYgKCh0aGlzLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgdGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCkgJiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCiAgICAgICAgIG91dC5wcmludCgiIChTaG91
bGRBbHdheXNCZUlubGluZWQpIik7CiAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklu
bGluZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7CkBAIC0yMzQsNyAr
MjM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElD
U3RhdHVzTWFwIHN0YXR1c01hcDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAg
IEJ5dGVjb2RlR3JhcGggZ3JhcGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVj
dGlvbnMoKSwgZ3JhcGgsIG91dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBX
VEY6Om51bGxvcHQsIG91dCwgc3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBC
eXRlY29kZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBp
dCwgY29uc3QgSUNTdGF0dXNNYXAmIHN0YXR1c01hcCkKQEAgLTI5NSw2ICsyOTUsNyBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX293bmVyRXhlY3V0
YWJsZShvdGhlci52bSgpLCB0aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAg
ICAsIG1fdm0ob3RoZXIubV92bSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcihvdGhl
ci5tX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpCisgICAgLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxl
cyhvdGhlci5tX2FyZ3VtZW50VmFsdWVQcm9maWxlcykKICAgICAsIG1fY29uc3RhbnRSZWdpc3Rl
cnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVycykKICAgICAsIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKQEAgLTMwOSw3
ICszMTAsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAg
QVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwogCiAgICAgQVNTRVJUKHNvdXJjZSgp
LnByb3ZpZGVyKCkpOwotICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygp
KTsKKworICAgIG1fbnVtUGFyYW1ldGVycyA9IG90aGVyLm51bVBhcmFtZXRlcnMoKTsKICAgICAK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTg1MCw3ICs4NTIs
NyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIC8vIHRvIHRoZSBDb2RlQmxvY2suIEhv
d2V2ZXIsIGl0cyBsaWZlY3ljbGUgaXMgdGllZCBkaXJlY3RseSB0byB0aGUgQ29kZUJsb2NrLCBh
bmQKICAgICAvLyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIHRoZSBDb2RlQmxv
Y2sgZGVzdHJ1Y3RzLgogCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpp
dENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKICNlbmRpZgogICAgIHZt
LmhlYXAuY29kZUJsb2NrU2V0KCkucmVtb3ZlKHRoaXMpOwpAQCAtMTAzNyw3ICsxMDM5LDcgQEAg
Ym9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29ucwogICAgIC8vIEludGVycHJl
dGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29u
ZWQgd2hlbgogICAgIC8vIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBi
YXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwogICAgIC8vIHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUg
dGhhdCB0aGlzIG1lYW5zIHRoYXQgaXQncyBsaXZlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA0
NSw3ICsxMDQ3LDcgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoY29ucwog
CiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoVk0mIHZt
KQogewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAg
aWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gIXZtLmhlYXAuaXNNYXJrZWQodGhpcyk7CiB9CkBAIC0xMDU4LDYgKzEw
NjAsOCBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUgaml0VHlwCiAgICAgICAg
ICAgICByZXR1cm4gMTBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAg
ICAgICAgICAgICByZXR1cm4gMzBfbXM7CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgor
ICAgICAgICAgICAgcmV0dXJuIDM1X21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoK
ICAgICAgICAgICAgIHJldHVybiA0MF9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6
CkBAIC0xMDc0LDYgKzEwNzgsOCBAQCBzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlKEpJVFR5cGUg
aml0VHlwCiAgICAgICAgIC8vIEVmZmVjdGl2ZWx5IDEwIGFkZGl0aW9uYWwgc2Vjb25kcywgc2lu
Y2UgQmFzZWxpbmVKSVQgYW5kCiAgICAgICAgIC8vIEludGVycHJldGVyVGh1bmsgc2hhcmUgYSBD
b2RlQmxvY2suCiAgICAgICAgIHJldHVybiAxNV9zOworICAgIGNhc2UgSklUVHlwZTo6TE9MSklU
OgorICAgICAgICByZXR1cm4gMThfczsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAg
ICAgcmV0dXJuIDIwX3M7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkBAIC0xMTY5LDcgKzEx
NzUsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdP
ckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0g
bV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgCiAgICAgICAgIGRmZ0NvbW1vbi0+cmVj
b3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKQEAgLTEyMTcsNyArMTIyMyw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICAvLyBJbiByYXJl
IGFuZCB3ZWlyZCBjYXNlcywgdGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYSBiYXNlbGluZSBDb2Rl
QmxvY2suIE9uZSB0aGF0IEkgZm91bmQgd2FzCiAgICAgLy8gdGhhdCB3ZSBtaWdodCBkZWNpZGUg
dGhhdCB0aGUgQ29kZUJsb2NrIHNob3VsZCBiZSBqZXR0aXNvbmVkIGR1ZSB0byBvbGQgYWdlLCBz
byB0aGUKICAgICAvLyBpc01hcmtlZCBjaGVjayBkb2Vzbid0IHByb3RlY3QgdXMuCi0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE1MTks
OCArMTUyNSwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAK
ICNlbmRpZgogICAgIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkgfHwg
aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgeworICAgICAgICAvLyBPT1BTOiBTZXBhcmF0
ZSBwYXJ0IG9mIHRoaXMgb3V0IGludG8gaXRzIG93biBmdW5jdGlvbiBmb3IgSklUIElDcy4gU2lu
Y2Ugc29tZSBvZiB0aGVzZSBjYWNoZXMgYXJlbid0IGp1c3QgZm9yIExMSW50LgogICAgICAgICBm
aW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CisgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoISFqaXRDb2RlKCkpCkBAIC0xNTI4LDcgKzE1MzYsNyBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRh
KiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICBkZmdDb21tb24t
PnJlY29yZGVkU3RhdHVzZXMuZmluYWxpemUodm0pOwogICAgIH0KQEAgLTE1NDgsNiArMTU1Niw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAg
IGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CiAgICAgICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291
bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoK
QEAgLTE1OTAsNyArMTU5OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpnZXRJQ1N0YXR1c01hcChjb25z
dCBDb24KICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKENvZGVPcmlnaW4oYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4KSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmJ5VmFsSW5mbyA9IGJ5
VmFsSW5mbzsKICAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBpZiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmNhbGxzKQogICAgICAgICAgICAg
ICAgIHJlc3VsdC5hZGQocGFpci5maXJzdCwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNh
bGxTdGF0dXMgPSBwYWlyLnNlY29uZC5nZXQoKTsKQEAgLTE4MTAsNyArMTgxOSw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7
CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAg
IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAg
ICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0cyhsb2NrZXIsIHZpc2l0b3IpOwpAQCAtMTgyMyw3ICsx
ODMyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgogICAgIFVO
VVNFRF9QQVJBTSh2aXNpdG9yKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xODY3LDcgKzE4
NzYsNyBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKICAgICAgICAg
cmV0dXJuIHRoaXM7CiAgICAgQ29kZUJsb2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOwogICAg
IGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoc2Vs
ZkpJVFR5cGUpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjp1c2VzUmVwbGFjZW1lbnRDb2RlQmxv
Y2soc2VsZkpJVFR5cGUpKSB7CiAgICAgICAgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgY2FuIGJl
IG51bGwgaWYgd2UndmUgaGFkIGEgbWVtb3J5IGNsZWFuIHVwIGFuZCB0aGUgZXhlY3V0YWJsZQog
ICAgICAgICAgICAgLy8gaGFzIGJlZW4gcHVyZ2VkIG9mIGl0cyBjb2RlQmxvY2tzIChzZWUgRXhl
Y3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpKS4gUmVnYXJkbGVzcywKICAgICAgICAgICAgIC8vIHRo
ZSBjdXJyZW50IGNvZGVCbG9jayBpcyBzdGlsbCBsaXZlIG9uIHRoZSBzdGFjaywgYW5kIGFzIGFu
IG9wdGltaXppbmcgSklUCkBAIC0xOTMxLDcgKzE5NDAsNyBAQCBIYW5kbGVySW5mbyogQ29kZUJs
b2NrOjpoYW5kbGVyRm9ySW5kZXgoCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb2RlQmxvY2s6
Om5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFs
Q2FsbFNpdGUpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgUkVMRUFTRV9BU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0
Q29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKSk7CiAgICAgQVNTRVJUKCEhaGFuZGxlckZvcklu
ZGV4KG9yaWdpbmFsQ2FsbFNpdGUuYml0cygpKSk7CiAgICAgQ29kZU9yaWdpbiBvcmlnaW5hbE9y
aWdpbiA9IGNvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSk7CkBAIC0yMjMxLDUxICsyMjQwLDU1
IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKICAgICBEZWZlckdD
Rm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBhY2Nv
bXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAvLyAxKSBNYWtlIHN1cmUgdGhhdCBpZiB0aGlz
IENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0
byBpdAorICAgIC8vIDEpIElmIHdlJ3JlIERGRy9GVEwsIG1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMg
Q29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRv
IGl0CiAgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQg
Ynl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KICAgICAvLyAyKSBNYWtlIHN1
cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4n
dCBjYWxsIHRoaXMgQ29kZUJsb2NrLgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RG
R09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xl
YXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxh
dGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQotICAgICAgICAgICAgY29tcGlsYXRpb24tPnNl
dEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRo
aXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQg
d2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KLSAgICAgICAgaWYgKCFqaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0g
cmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhl
YXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewor
ICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlz
b25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0
IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCisgICAgICAgICAgICBpZiAoIWppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgeworICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVz
eSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxvZygiICAg
IERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6YXRpb24gaWYgdGhhdCdzIHdoYXQg
dGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pIHsK
ICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3
NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsK
KyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9u
IGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgaWYgKHRoaXMg
IT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ugd2VyZSBu
ZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZvciBPU1IgZW50cnkgY29kZQog
ICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8vIE9yLCB3ZSdyZSBhbiBMT0wgQ29kZUJsb2Nr
IGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAgICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFm
dGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiByZWFzb24gIT0gUHJvZmlsZXI6
OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
Vk1UcmFwcykKICAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCiAgICAgLy8gSmV0dGlzb24gY2FuIGhhcHBlbiBkdXJpbmcgR0MuIFdl
IGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVhZCBleGVjdXRhYmxlCiAgICAgLy8g
YmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0IHRvIHRoZSByZW1lbWJlcmVkIHNl
dC4KQEAgLTIzOTAsNyArMjQwMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0Nh
bGwoQ2FsbEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAgICAg
ICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwogICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSwgIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxs
ZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLiIpOwogICAgICAgICByZXR1cm47CkBAIC0yNDgzLDEy
ICsyNDk2LDE0IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygKIHsK
ICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAgaWYg
KE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJ
VCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21w
aWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4gKG1f
aGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXI7CiAgICAgfQogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNl
bWVudCgpOwotICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyOworICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZH
T3JGVEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcjsKIH0KIAogaW50MzJfdCBDb2RlQmxvY2s6OmNvZGVUeXBlVGhyZXNob2xk
TXVsdGlwbGllcigpIGNvbnN0CkBAIC0yNzA5LDcgKzI3MjQsNyBAQCB2b2lkIENvZGVCbG9jazo6
Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCkKIHsKICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7Ci0gICAgaWYgKHR5cGUgIT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiB0eXBlICE9IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAgICBkYXRhTG9nTG4oKnRoaXMs
ICI6IGV4cGVjdGVkIHRvIGhhdmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlKTsKICAg
ICAgICAgQ1JBU0hfV0lUSF9JTkZPKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGppdENvZGUoKS5n
ZXQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpKTsKICAgICB9CkBAIC0yNzI3LDcgKzI3
NDIsNyBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVw
bGFjZW1lbnQgJiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7
CiAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CkBAIC0yNzU2LDcgKzI3NzEsOCBAQCB2b2lkIENvZGVC
bG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiB1aW50MzJfdCBDb2RlQmxvY2s6
OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAv
L0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7IC8vIE9PUFM6IFdl
IGNhbGwgdGhpcyBmcm9tIHRoZSBMT0wgY29tcGlsZXIgdGhyZWFkIGJlZm9yZSBpbnN0YWxsLgor
CiAgICAgLy8gQ29tcHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4g
VGhpcyBpcyBjYWxsZWQgaW5mcmVxdWVudGx5CiAgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29w
IHdvbid0IGh1cnQgdXMuCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsK
QEAgLTI4MzYsNyArMjg1Miw3IEBAIERGRzo6Q29kZU9yaWdpblBvb2wmIENvZGVCbG9jazo6Y29k
ZU9yaWcKIAogc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0
CiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBp
ZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzLnNp
emUoKTsKQEAgLTI4NDcsNyArMjg2Myw3IEBAIGNvbnN0IElkZW50aWZpZXImIENvZGVCbG9jazo6
aWRlbnRpZmllcigKICAgICBzaXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQogICAgICAgICByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSk7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJz
W2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkBAIC0yOTQ4LDcgKzI5NjQsOCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVO
b3coKQogI2lmIEVOQUJMRShERkdfSklUKQogdm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRF
eGl0U2l0ZXMoKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSk7CisgICAgLy8gT09QUworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShhbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkpKTsKICAgICAKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRl
cm5hdGl2ZSgpOwpAQCAtMzA1MCw2ICszMDY3LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFt
ZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJh
c2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApA
QCAtMzIyNiwxNCArMzI0NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6YWRkQnJlYWtwb2ludCh1bnNp
Z25lZCBuCiB7CiAgICAgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsKICAgICBB
U1NFUlQobV9udW1CcmVha3BvaW50cyk7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAg
ICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJCcmVha3BvaW50
KTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZShDb2RlQmxvY2s6OlN0ZXBw
aW5nTW9kZSBtb2RlKQogewogICAgIG1fc3RlcHBpbmdNb2RlID0gbW9kZTsKLSAgICBpZiAobW9k
ZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKQorICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6
aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25EdWVUb0RlYnVnZ2VyU3RlcHBpbmcpOwogfQogCkBAIC0zNDIxLDkgKzM0MzksOSBAQCBPcHRp
b25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OmJ5dGVjCiB7CiAgICAgT3B0aW9uYWw8Qnl0
ZWNvZGVJbmRleD4gYnl0ZWNvZGVJbmRleDsKICAgICBKSVRUeXBlIGppdFR5cGUgPSB0aGlzLT5q
aXRUeXBlKCk7Ci0gICAgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8
fCBqaXRUeXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIGlmIChKSVRDb2RlOjpjYWxs
U2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoaml0VHlwZSkpCiAgICAgICAgIGJ5dGVjb2RlSW5kZXgg
PSBjYWxsU2l0ZUluZGV4LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBlbHNlIGlmIChqaXRUeXBlID09
IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgIGVs
c2UgewogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRD
b2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpKTsKICAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBj
b2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgpOwpAQCAtMzQ2Niw3ICszNDg0LDcgQEAgYm9vbCBDb2Rl
QmxvY2s6Omhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcAogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5
IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAgICAvLyBj
YXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5kbGVyIHNh
ZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50IG9mIG1f
aml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmhhc0luc3RhbGxlZFZN
VHJhcHNCcmVha3BvaW50cygpOwogI2Vsc2UKQEAgLTM0ODAsNyArMzQ5OCw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1h
eSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAgICAgLy8g
Y2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFuZGxlciBz
YWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBt
X2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGF1dG8mIGNvbW1vbkRhdGEgPSAqbV9qaXRDb2RlLT5kZmdDb21tb24oKTsK
ICAgICBjb21tb25EYXRhLmluc3RhbGxWTVRyYXBCcmVha3BvaW50cyh0aGlzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDM4LDcgKzQzOCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQmFzZWxp
bmVKSVRQcm9maWxpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKKyAgICAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgp
OworICAgICAgICByZXR1cm4gdHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0eXBlID09
IEpJVFR5cGU6OkxPTEpJVDsKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUxMSw2
ICs1MTIsNyBAQCBwdWJsaWM6CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJ
bmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1
ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25z
dCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
QXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CkBAIC01MzksNyArNTQxLDcgQEAgcHVibGljOgog
ICAgIC8vIEhhdmluZyBjb2RlIG9yaWdpbnMgaW1wbGllcyB0aGF0IHRoZXJlIGhhcyBiZWVuIHNv
bWUgaW5saW5pbmcuCiAgICAgYm9vbCBoYXNDb2RlT3JpZ2lucygpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSk7CisgICAgICAgIHJldHVy
biBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSk7CiAgICAgfQogICAgICAgICAKICAgICBi
b29sIGNhbkdldENvZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3Zh
bHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlm
IChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAg
IGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRp
bmdKSVRUeXBlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
OSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpCiAgICAgY2FzZSBF
eGl0RnJvbUFueXRoaW5nOgogICAgICAgICBvdXQucHJpbnQoIkZyb21Bbnl0aGluZyIpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0RnJvbUxPTDoKKyAgICAgICAgb3V0LnByaW50KCJG
cm9tTE9MIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRGcm9tREZHOgogICAgICAg
ICBvdXQucHJpbnQoIkZyb21ERkciKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBlbnVt
IEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiAgICAgRXhpdEZyb21Bbnl0aGluZywKKyAgICBF
eGl0RnJvbUxPTCwKICAgICBFeGl0RnJvbURGRywKICAgICBFeGl0RnJvbUZUTAogfTsKQEAgLTM4
LDYgKzM5LDggQEAgZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogaW5saW5lIEV4aXRp
bmdKSVRUeXBlIGV4aXRpbmdKSVRUeXBlRm9yKEpJVFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIEV4aXRG
cm9tTE9MOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gRXhpdEZy
b21ERkc7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VU
YWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1
YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2Ft
ZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkg
PSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywg
c2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNp
emVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1D
b25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1B
cmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51
bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNr
Q2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6
VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1
ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1B
cmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0
aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6
ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0
IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMp
CiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3Rh
bnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1l
bnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJn
dW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxs
ZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApA
QCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5k
c0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVl
ID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRz
KCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAg
ICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAg
ICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxs
KGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXpl
X3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQog
ICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9
Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUo
KSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90
IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAg
ICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0g
bnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50
cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6
ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5z
aXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJl
dHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAg
ICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6
ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxv
Y2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBu
dW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBp
ZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAg
IHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAg
ICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0g
dHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+Cisg
ICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1w
bGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYm
IHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxv
Y2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNb
Y29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3Qg
aWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAg
CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVG
b3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUg
PD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7
CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
VG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAg
ICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6
ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3Jvdyhu
ZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNp
emVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBz
aXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXpl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVk
VmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlv
bikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZElu
ZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9w
ZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQu
dG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50
KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwog
ICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5
cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChv
cGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7
CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAg
ICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiAr
Mzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9D
b25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSAr
NDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJn
dW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxv
Y2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAg
ICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50
cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAg
IH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6
Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVu
dHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1w
cy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3Vt
ZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25z
dGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2Ug
bV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWdu
ZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3Ry
ZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAog
ewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50
SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01Nywx
MCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcElu
ZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAg
IGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNh
bGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5k
czxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBD
b21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0g
bnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBA
QCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6Iiwg
dG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9u
SGFuZGxpbmdDYWxsU2l0ZSA9IGppdC0+Y29kZUJsb2NrKCktPmppdENvZGUoKS0+bGl2ZVJlZ2lz
dGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoaml0LT5jb2RlQmxvY2so
KSwgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOwogICAgICAgICBtX25lZWRzVG9SZXN0b3JlUmVn
aXN0ZXJzSWZFeGNlcHRpb24gPSBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgPiAwOwogICAgICAgICBpZiAo
bV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKQotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5
cGUoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChq
aXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNG
b3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9u
SGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwogICAgICAgICBt
X2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAg
LTcxMCw3ICs3MTAsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNz
CiAgICAgICAgIC8vIFdlIHNldCB0aGVzZSB0byBpbmRpY2F0ZSB0byB0aGUgc3R1YiB0byByZW1v
dmUgaXRzZWxmIGZyb20gdGhlIENvZGVCbG9jaydzCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5k
bGVyIHRhYmxlIHdoZW4gaXQgaXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIGNvZGVCbG9ja1RoYXRP
d25zRXhjZXB0aW9uSGFuZGxlcnMgPSBjb2RlQmxvY2s7Ci0gICAgICAgIEFTU0VSVChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0
VHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9ja1Ro
YXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOwogICAgICAgICBjYWxsU2l0ZUlu
ZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcgPSBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9u
SGFuZGxpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRl
CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lu
bGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUp
OworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUg
dmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxO
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAg
ZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAg
IGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlk
VmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBm
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpA
QCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAg
ICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9v
bCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudCht
X3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIo
KSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lz
dGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50
KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7
IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsx
MTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJn
dW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJn
dW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgp
IHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQog
CiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxp
bmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9m
ZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29u
c3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
QmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWls
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQ
YXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFj
dFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQo
bnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxU
b3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQKIFNVUFBSRVNTX0FTQU4KIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChjb2Rl
QmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkp
OwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgQVNTRVJUKCFjb2RlQmxv
Y2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDcgQEAgdm9pZCBhZGp1c3RBbmRK
dW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIGlmIChleGl0SW5saW5lQ2FsbEZyYW1lKQog
ICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXRJbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKIAorICAgIC8vIE9PUFM6IE1ha2UgdGhpcyBkbyB0aGUg
cmlnaHQgdGhpbmcgYmFzZWQgb24gTE9MIG9yIG5vdC4KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
a0ZvckV4aXQgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwog
ICAgIEFTU0VSVChjb2RlQmxvY2tGb3JFeGl0ID09IGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5l
VmVyc2lvbigpKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2Nr
Rm9yRXhpdC0+aml0VHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjpyZWNvbnN0cnVjCiB7CiAgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOwogICAgIHVuc2lnbmVkIG51bVRtcHM7
CkBAIC0xNTUsNiArMTU0LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25z
dHJ1YwogICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
ICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwo
KSArIDE7CiAgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNh
bGxGcmFtZS0+dG1wT2Zmc2V0OwogICAgIH0gZWxzZSB7CisgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOyAvLyBPT1BTOiBi
eXRlY29kZVZlcnNpb24KICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2st
Pm51bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICsz
NTMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MjYgKzUyLDE3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENhbGxGcmFtZUYKIGJv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBl
KCkpIHsKLSAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBKSVRUeXBl
OjpOb25lOgotICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gSklUQ29kZTo6Y2Fs
bFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpOwogfQogCiBi
b29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5
cGUoKSkgeworICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJ
VFR5cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBl
OjpGVExKSVQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzksOCArNzAsNiBAQCBib29sIENh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0
Q2FsbFRodW5rOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwxMCArNDU2LDEwIEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIEhhbmRsZXJJbmZvKiBmaW5kRXgKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
dmlzaXRvci0+Y2FsbEZyYW1lKCk7CiAgICAgdW5zaWduZWQgZXhjZXB0aW9uSGFuZGxlckluZGV4
OwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KQotICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5k
ZXgoKS5iaXRzKCk7Ci0gICAgZWxzZQorICAgIGlmIChKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVC
eXRjb2RlSW5kZXgoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBleGNlcHRpb25IYW5k
bGVySW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKKyAgICBlbHNl
CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRl
eCgpLmJpdHMoKTsKIAogICAgIHJldHVybiBjb2RlQmxvY2stPmhhbmRsZXJGb3JJbmRleChleGNl
cHRpb25IYW5kbGVySW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxOCBAQAogI2luY2x1
ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVkZSAiQ29kZUJsb2Nr
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAi
REZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCisj
aW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRl
ICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgpAQCAtNDksNiArNTUsOCBAQAogI2luY2x1ZGUgPHd0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgogCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogbmFtZXNw
YWNlIEpJVEludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CkBAIC02MCw2ICs2OCw4OTEgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
U2Vjb25kcyB0b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGls
ZVRpbWU7CiAKK3ZvaWQgSklUOjpzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIHNldFR5cGUgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9jdXJyZW50UHJlZGljdGlv
bnMub3BlcmFuZChyZWcpID0gdHlwZTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlID0g
WyZdIChhdXRvIGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIHNldFR5
cGUoYnl0ZWNvZGUubV9kc3QsIHR5cGUpOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgIC8vc2V0RHN0
VHlwZShieXRlY29kZSwgcHJvZmlsZXMuZ2V0KCZieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9wcm9maWxlKSk7CisgICAgICAgIC8vIFdlIHJhY2lseSByZWFkIHRoaXMsIHNpbmNlIGl0
IHNob3VsZCBvbmx5IGdyb3cgaW4gdGhlIHR5cGVzIGl0IHJlcHJlc2VudHMuCisgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2Zp
bGUubV9wcmVkaWN0aW9uKTsKKyAgICB9OworCisgICAgYXV0byB0eXBlRm9yID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgLT4gU3BlY3VsYXRlZFR5cGUgeworICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgfTsKKworICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QXJndW1lbnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGw6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWxXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFk
YXRhLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUu
bV9pdGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVy
YXRvck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEu
bV9kb25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
dmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9z
cmMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFBy
aXZhdGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lk
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BU
cnlHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBl
X29mOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2Ugb3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVy
ZmxvdygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRB
c0RvdWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1
cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAg
IHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmln
SW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNw
ZWN1bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ug
Y2FuIGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJp
bmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9t
dWw6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1f
cmhzKTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBt
ZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNB
bnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cisg
ICAgICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5h
TkZyb21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAm
IFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIg
dy8gYmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkgfHwg
ISEocmlnaHQgJiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3QpKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgfD0gU3BlY0JpZ0ludDsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJl
c3VsdCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFu
ZGxlKGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0lu
dDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8g
YmV0dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGlu
IHNvbWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJl
c3VsdAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBT
cGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VXJzaGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBz
cmMsIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2Vy
dmVJbnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQg
JiBTcGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNE
b3VibGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlz
Qnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0
KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0
LCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFu
ZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNv
ZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5t
X2RzdCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRl
Y29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmln
SW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBj
YXNlIG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29k
ZSkgeworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTHNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0
aW9uLT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29k
ZS5tX3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBl
ID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJv
bCkpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9jYXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVm
ZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBp
ZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEg
dGhpbmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUg
bmV2ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAg
ICBicmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9h
ZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2Zp
bGUpIHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNl
dFR5cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFz
ZWQgb24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BT
dHJjYXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19m
dW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNw
ZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5j
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdH
ZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dl
bmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVu
dW1lcmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNP
d25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVy
dHlFbnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5h
bWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVy
aWNQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZh
bDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JI
b2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1
bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1l
bnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFy
Z3VtZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRl
cmZseT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3
X3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlz
ZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25s
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVx
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xl
c3NlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93
ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5l
ZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVm
aW5lZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5k
ZWZpbmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jv
b2xlYW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19u
dW1iZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhf
cHJvZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRl
bnRpdHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24g
PSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAz
MiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUp
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9m
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3Rv
bToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9t
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmlu
Z0lkZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxf
d2l0aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVy
bmFsX2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9i
ZWdpbjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWw6CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgor
ICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAg
Y2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBj
YXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6
CisgICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9h
Y2Nlc3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1w
OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9q
ZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRf
b3JfbnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9q
ZXE6CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ug
b3Bfam5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToK
KyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNl
IG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVy
OgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2Fz
ZSBvcF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRj
aF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJp
bmc6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19z
Y29wZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJv
ZmlsZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDoKKyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVy
X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAg
Y2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
Y3JlYXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAK
KyAgICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21f
ZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToK
KyAgICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRf
ZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJp
dHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2No
ZWNrOgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGlu
dF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3df
ZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1w
b2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNo
ZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNl
IGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5f
ZWFybHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxs
X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1
ZToKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgor
ICAgIGNhc2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRf
aG9zdF9jYWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9l
eGNlcHRpb246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
c2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9pdGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9v
cGVuOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9j
b25zdHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAg
IGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9p
dGVyYXRvcl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9u
X2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGlu
dF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hl
Y2tfdGFnOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdh
c21fdHJhbXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5l
X3dhc21fY2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQorewor
ICAgIG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ss
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5y
ZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJl
ZGljdGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRb
aV0gPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7
CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAo
VmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2Rl
QmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9n
cmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgt
PmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3Ig
KHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUg
PSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9w
cmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247
CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFy
ZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwg
bV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5j
YWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBib29sIGNv
bXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRzLnJlc2l6ZShtX2dyYXBoLT5z
aXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBNYXli
ZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFjdCBv
ZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAgICAg
Ly8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBl
bmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzogSG93
IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERG
Uy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNp
Y0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0
aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAg
IGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2Nr
LmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2st
PmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRy
eUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7IGkgKyBibG9jay5sZWFkZXJP
ZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1dGVVc2VDb3Vu
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91c2VDb3Vu
dHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNo
ZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hl
Y2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50
LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNv
dW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlv
bnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVj
dWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcHV0ZVVzZUNvdW50cyA9IGZh
bHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNyArOTYwLDEzIEBAIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24u
cmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAg
ICByZXR1cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAg
ICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxv
Y2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03NSw2ICs5NzQs
NyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX2Nh
bkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQog
ICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6TE9MKQogewog
fQogCkBAIC0xMzcsMTEgKzEwMzcsMjUgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBO
RVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZp
bmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6
IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkg
eyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBp
ZiAoZ2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93
Q2FsbENhc2VzIikpKSB7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBjYk5h
bWU7IFwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChjYk5hbWUpOyBcCisgICAg
ICAgICAgICAgICAgU3RyaW5nIGtleSA9IGNiTmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3Ry
aW5nOjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVz
W2N1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07IFwKKyAgICAgICAgICAgICAgICBwcm9i
ZShbPV0oUHJvYmU6OkNvbnRleHQmKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgc2xvd0NhbGxD
YXNlUmFuKGtleSk7IFwKKyAgICAgICAgICAgICAgICB9KTsgXAorICAgICAgICAgICAgfSBcCisg
ICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsgXAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUp
OyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkgJiYgZHN0LmlzVmFsaWQoKSkge1wKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSB0eXBlOyBcCisgICAgICAgICAgICAgICAgd2lsbERlZihkc3QpOyBcCisgICAgICAg
ICAgICB9IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNu
YW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA3MCw0NiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAog
ICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAog
I2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25h
bWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAm
JiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nh
c2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2Fz
ZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
bG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3Zv
aWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3N0YXRpYyB2
b2lkIHNsb3dDYWxsQ2FzZVJhbihTdHJpbmcga2V5KQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtd
IHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgpOworICAgIH0pOworCisgICAgYXV0byYg
bWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2NF90IHZhbHVlID0gKyttYXAuYWRkKGtl
eSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgodmFsdWUgJSAxMDAwKSA9PSAwKQorICAg
ICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRp
Y3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAg
ICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAg
LTIzMSwxNSArMTE2NSw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAo
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xv
d0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJ
bmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgp
ID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVj
dGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQn
cyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAg
YnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5y
ZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1f
Z3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgewor
ICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2Nr
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3Vj
Y2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVu
ZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAg
ICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50
OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVu
dEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxl
YWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChm
YWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQg
ZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9
IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3Vy
cmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2Nr
KCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVk
ZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1Nl
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRb
cHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3Jz
W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJn
ZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGlj
dGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICAgICAg
bV9jdXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3VzZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+
aW5kZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3BpbGxDYW5kaWRhdGVzLmNsZWFyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dD
YXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5k
ZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+
IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAgICAgICAgLy8gTGV0J3Mg
ZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KKyAgICAgICAgICAgIGJy
ZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAg
ICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIo
KTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKQEAgLTI3OCw0
NiArMTI4MSw0NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IH0KICNlbmRpZgogCisKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBkYXRhTG9n
TG4oIlJlZyBhbGxvYyBiZWZvcmUgYmMjIiwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAg
ICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsK
KyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoaW5fYnlfdmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChsZXNzZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXIp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoaXNfY2FsbGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5
cGVvZl9pc19vYmplY3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlv
bikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0KQotICAgICAgICBERUZJTkVfU0xPV19P
UChwdXNoX3dpdGhfc2NvcGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhpY2Fs
X2Vudmlyb25tZW50KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfYnlfdmFsX3dpdGhfdGhp
cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcykKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUCh1
bnJlYWNoYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQpCi0gICAgICAgIERF
RklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKHNw
cmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9X
X09QKHRvX2luZGV4X3N0cmluZykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1l
bnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHkpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X3Byb21pc2UpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5l
cmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHBvdykKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoaW5fYnlfdmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKS5tX2RzdCwg
U3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4p
CisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHVz
aF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIp
CisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisg
ICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3Rl
cigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3Ro
aXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
cmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLm1f
ZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJv
cGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvciwgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJy
YXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJl
YWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5
X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLm1fZHN0
LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0NlbGwpCisgICAg
ICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1lbnRzKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY1Njb3BlZEFy
Z3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCkubV9kc3Qs
IFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50
c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0
ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKS5tX2RzdCwg
U3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2Jq
ZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklO
RV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5tX2RzdCwgU3Bl
Y0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVfT1Aob3BfYWRk
KQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzOTksMTEgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3Vw
ZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJfZW5k
KQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQpCiAgICAgICAg
IERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19PUChtb2QsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJlciB8
IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikKICAgICAgICAg
REVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkKQEAgLTQ3NCwx
MCArMTQ3OSw4MiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAgICAgIERFRklO
RV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAgICBERUZJTkVfT1Aob3Bf
aXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfZnVuY3Rpb24pCisg
ICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBERUZJTkVfT1Ao
b3BfdHlwZW9mKQorCisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQorICAgICAgICBERUZJTkVf
T1Aob3BfbGVzc2VxKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcikKKyAgICAgICAgREVG
SU5FX09QKG9wX2dyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoKQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9jaGVja2VkVXNl
TE9MKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90aHJvdzoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2ptcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lu
c3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZToKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBvcGNvZGVJRCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICBhdXRvIGNv
dW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIHVu
c2lnbmVkJiBjb3VudGVyID0gbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgLS1jb3VudGVyOworICAgICAgICAgICAgICAgIGlmICghY291bnRlcikg
eworICAgICAgICAgICAgICAgICAgICAvLyBPT1BTOiBEbyB0aGlzIGxhemlseSBpbiBzbG93IHBh
dGggY3JlYXRpb24vc3BpbGxGb3JDYWxsCisgICAgICAgICAgICAgICAgICAgIC8vbV9zcGlsbENh
bmRpZGF0ZXMuYXBwZW5kKG9wZXJhbmQpOworCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGUFJSZWcg
ZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChmcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9i
YmVyKGZwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7
CisgICAgICAgICAgICAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2Nr
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAg
ICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVj
dGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAg
ICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQg
IiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAg
fQpAQCAtNDk4LDYgKzE1NzUsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3Mo
KQogICAgIG1fam1wVGFibGUuY2xlYXIoKTsKIH0KIAorc3RhdGljIHZvaWQgc2xvd0Nhc2VSYW4o
U3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3Ry
aW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNl
cy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQo
KTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1
ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwg
IjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ewogICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKQEAgLTUxNiwxNCArMTYwNywyNSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0g
UmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9
IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Ns
b3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBt
X2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6
IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVj
b2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVj
b2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHNbMF0ubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1f
Ynl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CisKKyAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSAmJiBhdG9pKGdl
dGVudigicHJpbnRTbG93Q2FzZXMiKSkpIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFt
IG5hbWU7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChuYW1lKTsKKyAgICAgICAgICAg
IFN0cmluZyBrZXkgPSBuYW1lLnRvU3RyaW5nKCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlciht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsgIiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpXTsKKyAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4
dCYpIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZVJhbihrZXkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQ
cm9maWxlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKQEAg
LTU4MCw3ICsxNjgyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9j
aGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lcSkKQEAgLTU5OSw2ICsx
NzAwLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKHVuc2lnbmVkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGRlYykKQEAgLTYzMSwxOSArMTczNSwzMiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChjaGVja190ZHopCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHRvX3Byb3Bl
cnR5X2tleSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaXNfY2FsbGFibGUpCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikKKyAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKKyAgICAgICAgREVG
SU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mKQorCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKGxlc3MpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGxlc3NlcSkKKyAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ3JlYXRlcikKKyAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AoZ3JlYXRlcmVxKQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RU
bywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkg
fHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVt
cHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQo
KSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAg
ICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9
PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNl
dCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Cisg
ICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0g
KGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBj
YXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
JnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBz
byB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0
aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwog
ICAgIH0KQEAgLTY4OCw2ICsxODA1LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2lu
ZyhKSVRDb21waQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBP
T1BTOiBoZWxwZnVsIGZvciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNo
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3
OCw2ICsxODk3LDg4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkK
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgYm9vbCBwcmludEVh
Y2hPU1IgPSBnZXRlbnYoInByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFj
aE9TUiIpKTsKKworICAgIGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1
bXBMaXN0IGV4aXRDb21tb247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBz
KSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAg
ICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0
aGlzKTsKKworICAgICAgICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAgICAgICAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5kdW1wKHByaW50U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHBy
aW50U3RyZWFtLnRvQ1N0cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVm
KCk7IC8vIGxlYWsgaXQuCisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBl
eGl0IGF0IGJjIyIsICBieXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMu
CisKKyAgICAgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4
aXRDb21tb24uYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4
aXRDb21tb24uZW1wdHkoKSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0aGlzKTsKKworCisg
ICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOwor
ICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlu
cyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBi
ZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdp
c3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJl
Z2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwor
ICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJh
cnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcp
LCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihy
ZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7Cisg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkp
OworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBU
cnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0
aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFn
UmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQ
QyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0
aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVt
YmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0
aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMy
KAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAg
ICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRy
YW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAg
ICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xp
bmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5h
dGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAg
ICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRh
dGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAg
IG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIs
IE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0
b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29u
IGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExM
SW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAg
ICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05NjcsNyArMjE2OCw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQg
PSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAg
ICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05NzgsNyArMjE3OSw3IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2Nr
ZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
cmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAg
IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VM
T0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRl
ZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjczLDk1MSBAQCBTZWNv
bmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVD
b21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwog
fQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9P
UFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4
aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRK
dW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0
SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCYW5rPgorVmVjdG9yPFJlZywgMzI+IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8g
T09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJl
bnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgVmVjdG9yPFJlZywgMzI+
IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQg
YWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKGFs
bG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hcHBl
bmQocmVnKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAg
ICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30K
Kworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6
IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNv
ZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2Jh
Ymx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzog
VGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMy
Pj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVz
dWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxs
b3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVu
IHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21w
aWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdh
bnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4u
CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJl
Z3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwor
dm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtz
IGN1cnJlbnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5p
Y2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8v
aWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRl
eCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJ
VDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRl
ZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAg
ICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJ
VDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9P
UFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnBy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJl
Zyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7
CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQg
Ym90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAg
ICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9w
ZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAv
LyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJl
Y2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAg
Ly8gLSBWYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAv
LyAtIH5WYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBk
ZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVw
IGZ1bGx5CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5
IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5W
YWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAg
ICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5k
ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwor
dm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xv
YmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgewor
ICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVy
KGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2
ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxk
IGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElm
TmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1Zh
bHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1h
a2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJh
bmQpKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0
b0lnbm9yZSwgRlBSUmVnIHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQg
YmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVy
YW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0
ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUu
b3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3Bp
bGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJl
ZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWcuZnByKCkgIT0gdG9JZ25v
cmVGUFIpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gdG9J
Z25vcmUpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKworICAgIHJl
c3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMs
IDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJD
YWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVj
b3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsK
KyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3Jk
LnNhdmVQbGFuKTsKK30KKworc3RhdGljIHZvaWQgYWRkTG9hZENvdW50KHVpbnQ2NF90IGNvdW50
KQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb3VudGVyOworICAgIGZvciAodWludDY0X3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgaWYgKGNv
dW50ZXIgJSAxMDAwMCA9PSAwKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJSdW50aW1lIGxvYWQg
Y291bnQ6ICIsIGNvdW50ZXIpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2
ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBj
b25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgdWludDY0X3QgbG9hZENvdW50ID0gMDsK
KyAgICBmb3IgKGF1dG8mIHR1cGxlIDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHN0
ZDo6Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBzdGQ6
OmdldDwxPih0dXBsZSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUgPSBzdGQ6
OmdldDwyPih0dXBsZSk7CisKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQo
IWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgRGlzYWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaCgqdGhpcyk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUpKQorICAgICAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBicmFuY2hJZkludDMy
KEpTVmFsdWVSZWdzIHsgc2NyYXRjaCB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICAg
ICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAgICAgICAgaXNJbnQzMi5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gs
IHJlZy5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICArK2xvYWRDb3VudDsKKyAgICB9CisKKyAgICBp
ZiAoZmFsc2UgJiYgbG9hZENvdW50KSB7CisgICAgICAgIHByb2JlKFs9XSAoUHJvYmU6OkNvbnRl
eHQmKSB7CisgICAgICAgICAgICBhZGRMb2FkQ291bnQobG9hZENvdW50KTsKKyAgICAgICAgfSk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKHNsb3dDYXNl
LnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklU
OjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAv
LyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBK
U1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwg
YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2ln
blJlZyhncHIsIG9wZXJhbmQpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJP
bmx5OworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBG
UFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0
ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAu
Z3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAg
ICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMg
KC9jaGVja3BvaW50cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWdu
UmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6
c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdw
ciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3Np
Z25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQor
Cit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFs
dWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5v
cGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BS
VGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7
CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQor
CitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6
R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFs
aWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6
RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6
RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisg
ICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30K
KworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9j
ayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBp
ZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9j
YXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5k
LCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAg
ICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2Vs
bE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJl
ZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAg
ICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9q
aXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9q
aXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0
LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKwor
SklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAg
ICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVy
YW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsK
KyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
X29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9w
ZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitK
SVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2so
bV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBt
X2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5k
LmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0g
bV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICgh
aXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkp
IHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIo
SlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5z
cGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpT
VmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmls
dGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9q
aXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgbV9qaXQuYXNzaWduUmVn
KG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Ok51bWJl
ck9wZXJhbmQ6Ok51bWJlck9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBS
UmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6
On5OdW1iZXJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJS
ZWcgSklUOjpOdW1iZXJPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlk
RlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAg
ICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigp
OworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRl
bXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
KworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQu
YnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMp
OworCisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1
ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgfQorCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworICAgIHJl
dHVybiBtX2ZwcjsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpJbnQzMkNvbnZl
cnRpbmdPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjp+
SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAo
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZUlu
dDMyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIG9wIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgICAgICBtX2dwciA9IG9wLmdwcigpOworICAgICAgICBtX2ppdC5sb2NrKG1f
Z3ByKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX29wZXJh
bmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVy
YW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKwor
ICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0IH07CisgICAgICAgIEZQ
UlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0
LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICAgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBt
X2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFs
dWVHUFIsIG1fZ3ByLCBmcHIpOworICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02
NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQz
MkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9q
aXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dw
cik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVs
c2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFu
Y2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nl
c3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGls
bEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8g
b3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBm
cHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7
CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIs
IG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICB9IGVsc2UgaWYg
KG1faml0LnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4obV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBt
X2ppdC5zcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAgIG1f
aml0LmFuZDMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICB9IGVsc2Ug
aWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlT3RoZXIobV9vcGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAg
ICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQ
Ui5mcHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25lOworCisgICAgICAgIGF1dG8gaXNJbnQz
MiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBub3REb3VibGUgPSBtX2ppdC5icmFuY2hJZk5vdERv
dWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0
ZXJzKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7
CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJBUk02NDo6c3VwcG9y
dHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNlbWFudGljcygpKSB7Cisg
ICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2YVNjcmlwdFNlbWFu
dGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIG1fZ3ByLCBCcmFuY2hJ
ZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0byBzcGlsbFJlY29yZCA9IG1f
aml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0
LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhoYXNTZW5zaWJsZURv
dWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93IDogb3BlcmF0aW9uVG9J
bnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5zaWxlbnRGaWxsQWZ0ZXJDYWxs
KHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBub3REb3VibGUubGluaygmbV9qaXQpOworICAgICAgICBhdXRv
IG5vdE90aGVyID0gbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0sIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RPdGhlci5s
aW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZk5vdEJvb2xlYW4oSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcikpOworICAgICAg
ICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvV29yZCh2YWx1ZUdQUiwgbV9ncHIpOwor
CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUo
bV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7
CisgICAgfQorCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5l
ZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5y
ZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVh
bjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hH
UFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkK
K3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNw
ZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
eXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UK
KyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOwor
ICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihv
cGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qmln
SW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsK
KyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkp
OworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3Rh
dGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vy
cmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMu
bnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5U
eXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0
YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9j
b2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIs
ICIsIGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkK
K3sKKyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8g
cmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9j
YXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dM
bihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig
KGF1dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5p
c0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRh
dGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBkYXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVk
ZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29k
ZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlu
a0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQot
ICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2
ZVBsYW4gPSBWZWN0b3I8c3RkOjp0dXBsZTxSZWcsIFZpcnR1YWxSZWdpc3RlciwgU3BlY3VsYXRl
ZFR5cGU+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQ
bGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAg
ICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNs
b3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQor
ICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAg
ICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVz
dCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZl
IG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxh
bjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3
ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsK
IAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTk2LDcgKzIxMSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRk
cmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7
CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZh
Y2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50
ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBK
SVRTdHViQ2FsbDsKIApAQCAtMjA0LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBh
dGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0
aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAg
Ly8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUg
YXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3
aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8g
Zml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNo
UHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVChW
TSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgICAgIGVudW0gY2xhc3MgQ29tcGls
ZVR5cGUgeworICAgICAgICAgICAgQmFzZWxpbmUsCisgICAgICAgICAgICBMT0wKKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayosIENvbXBpbGVUeXBlLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSk7CiAgICAgICAgIH5KSVQoKTsKIAogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRl
cmZhY2VKSVQ6OnZtKCk7IH0KQEAgLTIyMCwyMiArMjM2LDIyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAgdm9pZCBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCisKKyAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGls
ZVR5cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9y
dCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBi
eXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxp
bmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlW
YWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENv
bXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0g
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
UHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI0MywyMSArMjU5LDIxIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAg
ICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAg
ICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkK
ICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29k
ZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJy
YXlNb2RlKTsKICAgICAgICAgfQpAQCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
cGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAg
ICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQg
c3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJl
ckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisK
ICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNl
cHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzUzLDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0g
ICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
Y29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2
b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAs
IFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAg
IHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nh
c2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVt
cChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyAr
MzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9w
Y29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKQEAgLTM1MCw3ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBi
b29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM5
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21w
aWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7
IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFU
eXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVy
TW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3Vs
ZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1NDAs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2ln
bmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBA
IC01MTcsMTIgKzU0OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBTbG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9u
LCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNs
b3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGlu
c3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVy
dCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVy
T2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lk
IGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYs
OSArNTg3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0
eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02MTAsNyArNjUxLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3Ry
dWN0aW9uKik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBA
IC02NzgsNzggKzcyMSw5OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxs
X2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3Rf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lk
IGVtaXRJc0NhbGxhYmxlSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQg
ZW1pdF9vcF9pc19jYWxsYWJsZShjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVt
aXRfb3BfdHlwZW9mX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfdHlwZW9mX2lzX2Z1bmN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAg
IHZvaWQgZW1pdF9vcF90eXBlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZW1pdENvbXBhcmVPcEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAg
ICAgICB2b2lkIGVtaXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF9ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9ncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Rh
aWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pn
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9f
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93
UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25z
dCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1
bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9u
Kik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IFZp
cnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7CisjZWxz
ZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpT
VmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODI3LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRD
b25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODM5LDE4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Q
cm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
PEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUg
UmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwotCi0gICAgICAgIEp1bXAg
Z2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAg
ICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAg
ICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRl
ci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNG
b3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAg
ICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29k
ZUluZGV4KTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAK
LSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2Vz
KFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xv
d0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAg
VU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nh
c2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTg5MSw2ICs5MzIsMjYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAg
c2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRh
dGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVy
YXRpb25UeXBlIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAg
ICB7CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsK
KyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgICAgICAgICAgYXV0byBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUZQ
UiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsOworICAgICAgICB9CisKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3Mu
Li4pOwpAQCAtOTAyLDYgKzk2Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTm9Q
cm9maWxpbmcKICAgICAgICAgfTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAg
ICAgICAgYm9vbCB0cnlFbWl0TE9MQml0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNuaXBwZXRHZW5lcmF0b3I+CiAgICAgICAgIHZvaWQgZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHNo
b3VsZEVtaXRQcm9maWxpbmcgPSBQcm9maWxpbmdQb2xpY3k6Ok5vUHJvZmlsaW5nKTsKIApAQCAt
OTYxLDYgKzEwMjUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVu
UHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlv
bihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBp
bGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIApAQCAtOTcxLDYgKzEwMzgsMjkyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNv
cGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJ
bnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6Cisg
ICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRl
bXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBS
UmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJp
dHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RD
ZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3Bl
cmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAg
ICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAg
ICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBOdW1iZXJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTnVtYmVy
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+TnVt
YmVyT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IElu
dmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgLy8gU3BlY3VsYXRlIG51bWJlcitib29sZWFuK290aGVyLCBh
bmQgY29udmVydCB0byBpMzIuIFVzZWZ1bCBmb3IgYml0b3BzLgorICAgICAgICBjbGFzcyBJbnQz
MkNvbnZlcnRpbmdPcGVyYW5kIHsgCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMy
Q29udmVydGluZ09wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAg
ICAgICAgfkludDMyQ29udmVydGluZ09wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIo
KTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAg
ICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBw
cm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQp
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50
U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAg
ICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9w
ZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRS
ZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBz
dHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWdd
OworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVn
XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdw
ciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJ
bnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFu
ZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlk
R1BSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBGUFJSZWcmIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAg
ICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBn
cHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcmVnVmFsdWUoZ3ByKS5vcGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAg
ICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShn
cHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnVmFsdWUoZnByKS5vcGVy
YW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBm
cHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFT
U0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5k
KG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVJbnQzMkNvbnZlcnRpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2Vs
bENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAg
IHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
U3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAg
ICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBk
YXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9
IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAg
dm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0
RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVl
KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJl
c3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2
b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBs
YW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRT
cGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlID0gSW52YWxpZEdQUlJlZywgRlBSUmVnIHRv
SWdub3JlRlBSID0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVy
Q2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVG
cm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdu
b3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsK
IAogICAgICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4gbV9mYXJDYWxsczsKQEAgLTk5MCw3ICsx
MzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1w
VGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4g
bV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3Bp
ZWRHZXRQdXRJbmZvczsKQEAgLTEwMjcsNiArMTM4MCw4NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAg
Ly8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAg
ICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BS
UmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZh
bGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYg
b3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5n
cHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0
IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0Fs
bG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFs
dWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9
IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVy
LmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5p
c0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9
OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFs
bG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJl
Z1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwg
dHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tT
dGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9S
ZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBv
dGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnBy
b3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgp
ID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAg
IHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2Fs
bG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9n
cmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxw
dHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9w
cmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+
IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8dW5zaWduZWQs
IHRydWU+PiBtX3VzZUNvdW50czsKKyAgICAgICAgT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+IG1f
Y3VycmVudFVzZUNvdW50czsKKyAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMTY+IG1f
c3BpbGxDYW5kaWRhdGVzOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOwor
CisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7Cisg
ICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAg
ICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wg
eyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBM
aXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDg2ICs0Miw4OCBAQAogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIK
ICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJp
bnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5B
bmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0
ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3Nl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JF
cXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRy
dWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQ2LDM3ICsxNDgsMTYxIEBA
IHZvaWQgSklUOjplbWl0X29wX2piZWxvd2VxKGNvbnN0IEluc3RydWMKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0Q29tcGFyZU9w
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGdwQ29tcGFyZSwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbXBhcmUpCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxo
cyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5t
X3JoczsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCks
IHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91Ymxl
Q29tcGFyZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKHJocykpIHx8ICFwcmVkaWN0aW9uRm9yKGxocykgfHwgIXByZWRpY3Rpb25Gb3Io
cmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgY29tcGFyZURvdWJsZShkb3VibGVDb21wYXJlLCBsaHNUZW1wLmZwcigpLCByaHNU
ZW1wLmZwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICB9CisKKyAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVk
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJl
ZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbEFuZE9yZGVyZWQpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94
SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMSkpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KGlucHV0R1BSKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5w
dXRHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29u
ZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0
aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNv
bmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxv
d2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBj
b25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRv
IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQog
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxo
cy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhz
LmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AyKSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AxKSB8fCAhcHJlZGljdGlv
bkZvcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJo
cy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CkBAIC0yMjksMTcgKzM1NSw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGNvCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsK
KyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBb
Jl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdl
dFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3By
KCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMy
X3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0
YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMo
KTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0z
MihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNv
bmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJn
ZXQpOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQog
fQogCkBAIC0yNTUsNDMgKzQwNyw4OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQo
Y29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBH
UFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0gewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhp
cywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9
IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBs
YWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDI7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAg
ICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAg
Y29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAg
ICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIp
OwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAg
ICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAg
ICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0z
MihvcDFpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIo
Y29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAg
ICAgIGdldFJIUygpOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKICAgICB9Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwg
b3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJh
dGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVy
YXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGlu
c3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBv
cGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0
cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3Bl
cmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFs
bHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxs
dGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2Ug
Z2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cg
cGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50
IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50
IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0OTgsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAg
ICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAg
ICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzUyMiw2IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAg
ICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFk
ZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTEsMTIgKzU0NSwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1w
IGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs1NjIs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZh
aWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwz
LmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1
NzQsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNy
Y0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3Qg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1
cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHBy
b3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFic29s
dXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0
LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRB
c0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91Ymxl
KEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNE
c3QsIGZwcik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0Rz
dCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0
ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQz
Mi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBl
bnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAg
Ym94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShz
cmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Cisg
ICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5Mywx
MSArNjI4LDYyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAg
ICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAg
ICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
RlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlu
cHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91
YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUo
c3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgRlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVt
cEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9
IDEuMDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQ
Uik7CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5w
dXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5w
dXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRy
dXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BS
LCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNE
c3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJ
bnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIz
MihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00
MDcsNTQgKzY5MywxMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9u
Kgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
b2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSB8fCBzaG91bGRT
cGVjdWxhdGVEb3VibGUocmhzKSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisKKyAgICAgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7
CisKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVj
ayhNYXRoOjpmbW9kRG91YmxlLCByZXN1bHRGUFIsIGxoc0ZQUiwgcmhzRlBSKTsKKworICAgICAg
ICAgICAgc2V0RG91YmxlKGRzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3Qg
Zm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0
ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBl
ZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4
OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwog
ICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
b3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
NCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1w
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BS
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAg
Y2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1w
bGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOwor
ICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+
Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsK
KworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFj
ZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAg
ICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAtPmdwcigpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFt
ZSwgbGlrZSBzcGlsbEV4cGVjdGluZ1Nsb3dQYXRoCisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
ZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJo
cywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1v
dmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0Owor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAg
IH0KIAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
MzIoWmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihO
b3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkp
OwogICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0Rv
dWJsZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3Np
dGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigw
KSk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAg
IGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVh
eCB9KTsKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBK
SVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAg
IGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51
bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxo
cyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwg
U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyAr
ODA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90
SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzQsNiArODE2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hh
cmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MiwxNSArOTA1LDEzIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dP
cGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywg
cmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwpAQCAtNzI0LDEzICsxMDY1LDY2IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0
PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24p
KTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0
aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVt
aXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmls
ZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
TmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+
Citib29sIEpJVDo6dHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoIXVzZUxPTCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKworICAgIGF1dG8gYml0T3Ag
PSBbJl0gKEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAuZ3ByKCk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0
YW5kPikKKyAgICAgICAgICAgIGFuZDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0b3I+KQorICAg
ICAgICAgICAgb3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJpdHhvcj4pCisgICAgICAgICAgICB4
b3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcExzaGlmdD4pCisgICAgICAgICAgICBsc2hpZnQzMihs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PE9wLCBPcFVyc2hpZnQ+KQorICAgICAgICAgICAgdXJzaGlmdDMyKGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8T3AsIE9wUnNoaWZ0PikKKyAgICAgICAgICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsK
KyAgICB9OworCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdw
cigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AyKSkgeworICAgICAgICBJbnQzMkNv
bnZlcnRpbmdPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJDb252ZXJ0
aW5nT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJp
dE9wKGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlm
CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQxLDE3ICsxMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRC
aXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5
RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1
cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQ7CkBAIC03NjAsMzMgKzExNDUsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0
QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQz
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5k
LmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNv
bWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAg
ICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKwor
ICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5k
LmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRv
ciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3Bl
cmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3Jh
dGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQo
Z2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMp
OworCisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5n
cHIoKSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9s
aWN5OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9m
aWxlZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkK
KyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBT
cGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJ
c0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3Ig
QmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50
MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzEy
NjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFu
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDE5ICsxMzA3
LDggQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgorICAgIGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8
T3A+KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAgICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAg
LTg3MywyMSArMTMyMCw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25z
dCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hG
UFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBy
aWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVt
cEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ax
KTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3Vs
dFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBG
UFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAg
ICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3Jh
dGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihs
ZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdz
LAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRU
eXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBw
ZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAg
QVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGlu
ayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7
CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIo
KSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50
QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwg
cmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMiwxOCArMTQwNSw2NiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2Fk
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50
MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAg
ICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5m
cHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRG
UFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0g
U3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpP
dmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7
CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMu
ZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAg
ICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0
aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVk
RnVuY3Rpb24+CkBAIC05MjQsMTUgKzE0NzUsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5l
Zml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8v
IFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyBy
ZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0
aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFs
dWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0
cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAv
LyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcg
cmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxNTEyLDIyIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+
bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAg
TWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0
aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElD
R2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVk
SW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNl
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMs
NyArMTUzNywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAg
ICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQs
IHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3Zl
blR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0lu
dDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlv
bj4KQEAgLTk3NCwzOSArMTU1NSw4MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmlu
YXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVy
YW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNu
aXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQo
KSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNl
dENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9B
U1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7
CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJl
ZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRU
ZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1Q0OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIg
PSBmcFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0g
ICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmly
c3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5l
cmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAg
ICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
IHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAg
IH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0
Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQ
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNo
RlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQ
LT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJp
Z2h0RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5l
cmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0g
ICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJh
dG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAK
ICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9w
ZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENv
bnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVT
dGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTUsMTcgKzE2MzksMzQgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxp
bmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0
YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgp
KSB7CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAg
ICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAg
ICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAg
ICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNjc2LDIw
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNl
bmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVn
cy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
MSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVf
djxPcCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBU
b3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0
aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24g
cHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVj
dGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKQEAgLTEwNDgsOCArMTY5OCw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE3MzUs
NyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRj
aEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24p
Cit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlv
blN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVu
dEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
U3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwxNiArMTc0NSw2IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3Qo
KSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5
cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNSwxNSArMTc1NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVm
dE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9y
Ojppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9y
Ojppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFu
dChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVs
c2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFu
ZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdz
LmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsK
KyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xv
d1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVm
dE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmln
aHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9m
aWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE4MTcsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRp
ZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERp
dj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0
T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAg
ICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vj
b25kKCkpOwogCkBAIC0xMTg4LDYyICsxODMyLDIzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
b3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25z
dGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJl
ZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRU
ZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAg
cmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNo
R1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRl
bXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAg
ICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAg
ICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAg
ICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXND
b25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZw
UmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQ
UiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywK
LSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hG
UFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAK
ICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlz
dCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwg
cmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAg
ICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
TmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJo
c0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9
IHJlc3VsdFRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
bGhzR1BSLCBsaHNGUFIpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJo
c0dQUiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRGUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93
LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAg
ICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFu
Y2gzMihCZWxvdywgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIHJoc0dQUiwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZw
cigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUo
bGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAg
ICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVs
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11
bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAg
ICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVs
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBz
bG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAg
ICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdw
cigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhz
RlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJh
bmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsK
KyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhz
LmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBz
dWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9j
YXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxP
cFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9w
dGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29k
ZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1Qw
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxE
ZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29t
cGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpA
QCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAg
ICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgog
ICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNl
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9l
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFy
YXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSko
KTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2
ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3Bv
aW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9P
UFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBp
bnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
ICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6
OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiBy
ZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVz
LT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisK
KyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93
LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRD
aGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50
U2xvdyk7CisKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1w
IHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0
VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdU
MCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAg
IHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwog
CiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0
b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDEx
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQog
ICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxs
eSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBi
eXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1
bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHko
cmVnVDApOwogCkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAg
ICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsK
KyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNo
ZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsK
IAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQ
Uik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1
bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRv
bmVHUFIgfSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNs
b3dQYXRoKTsKKworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFu
Y2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAg
ICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsK
ICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9w
ZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93
UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAg
ICAgICAgd2lsbERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25l
LmxpbmsodGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1
NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJS
ZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMp
OwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRD
b2RlOjp0eXBlTmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBK
SVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDoKQEAgLTEwOCw3ICsxMTAsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVX
aXRoQ29kZVJlZihDCiAKIEpJVENvZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZigp
CiB7Ci0gICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQorICAgIGlm
ICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKGlzREZHT3JGVEwoaml0VHlwZSgpKSAm
JiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCiAgICAgICAgICYmIG1fcmVmLmV4ZWN1
dGFibGVNZW1vcnkoKSkKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBKSVQgY29kZSBhdCAi
LCBwb2ludGVyRHVtcChtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpLCAiXG4iKTsKIH0KQEAgLTIz
Nyw2ICsyMzksMTEgQEAgTmF0aXZlRE9NSklUQ29kZTo6TmF0aXZlRE9NSklUQ29kZShDb2RlUgog
I2lmIEVOQUJMRShKSVQpCiBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4
KQogeworICAgIC8vIEZvciBCYXNlbGluZSBKSVQsIHRoaXMgaXMgdHJpdmlhbGx5IHRydWUuCisg
ICAgLy8gRm9yIExPTCBKSVQsIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBzcGlsbGVkIHRvIHRoZSBz
dGFjayBhdCBlYWNoIG9wY29kZSwgc28gd2hlbiB3ZQorICAgIC8vIGdvIHRvIHRoZSBvcF9jYXRj
aCwgdGhlIGxpdmUgc3RhdGUgbXVzdCBhbHJlYWR5IGJlIGluIHRoZSByaWdodCBwbGFjZSBvbiB0
aGUgc3RhY2suCisgICAgLy8gQWxzbywgb3BfY2F0Y2ggaGFzIG5vIGluY29taW5nIHJlZ2lzdGVy
L3R5cGUgcHJvb2Ygc3RhdGUsIHNvIGl0J3MgdHJpdmlhbCB0byBjYXRjaAorICAgIC8vIGFuIGV4
Y2VwdGlvbiBpbiBMT0wganVzdCBieSBqdW1waW5nIHRvIG9wX2NhdGNoLgogICAgIHJldHVybiB7
IH07CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90
IHsKICAgICBIb3N0Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxp
bmVKSVQsCisgICAgTE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02Nywz
NiArNjgsMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJ
VFR5cGUpOwogCi0gICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRp
YyBKSVRUeXBlIHRvcFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZU
TEpJVDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlw
ZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6REZH
SklUOwotICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBK
SVRUeXBlOjpGVExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0
KEpJVFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAg
ICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxU
aHVuazoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAg
ICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBj
YXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEx
Niw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsK
ICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpMT0xKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJ
VFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDYgKzExNywy
NCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsU2l0
ZUJpdHNBcmVCeXRjb2RlSW5kZXgoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChqaXRUeXBlKSB7CisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoK
KyAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBK
SVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBzdGF0
aWMgYm9vbCBpc0xvd2VyVGllcihKSVRUeXBlIGV4cGVjdGVkTG93ZXIsIEpJVFR5cGUgZXhwZWN0
ZWRIaWdoZXIpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0V4ZWN1dGFibGVTY3Jp
cHQoZXhwZWN0ZWRMb3dlcikpOwpAQCAtMTQ1LDkgKzE1NiwxOSBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRI
aWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBib29sIHVzZXNSZXBsYWNlbWVudENvZGVCbG9j
ayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRU
eXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBK
SVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGlzT3B0aW1pemlu
Z0pJVChKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBK
SVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQgfHwgaml0VHlwZSA9
PSBKSVRUeXBlOjpMT0xKSVQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNERkdPckZUTChK
SVRUeXBlIGppdFR5cGUpCisgICAgewogICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBl
OjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYg
dm0sIENhbGxGcmFtZSogY2EKICAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBp
biB0aGUgbWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCiAgICAgICAgIC8vIGFu
ZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRs
ZXItPnRhcmdldAogICAgICAgICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAgICBpZiAo
IUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBl
KCkpKQorICAgICAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSkKICAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCku
cHRyKCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+
bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAg
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1h
a2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3Bp
bGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU4
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVu
Y3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9u
IHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CkBAIC0xNjcsMjUgKzE2OSw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
ciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Q2VsbChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0g
c2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xv
d0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0g
ICAgaWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5k
ZXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5l
IHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MCwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdB
WVNfSU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBp
ZiAoIW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRl
eCAhPSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2Fz
ZXMubGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRz
dCA9IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlz
dCB7IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3Qp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3Ig
KGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0
eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRl
eCkpOworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7
CisgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAg
c2xvd0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICsz
OTgsNiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAg
ICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQot
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsx
NDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHNob3Vs
ZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0
VHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6Omlz
REZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpOwogCiAgICAgICAgIGlmIChtX2dlbmVyYXRl
RmFzdFBhdGhPblJlcGF0Y2gpIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcs
OCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAg
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAg
LTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4
ZWQKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJh
YmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQ
cmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUx
LDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4g
cmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3Qg
bmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3Bl
cmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNy
Yy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwz
MiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0g
ICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRv
clJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQ
UlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2Ny
YXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAt
PmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7Cisg
ICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikK
LSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
LCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAg
ICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFs
bG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJl
ZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5U
eXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0
dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1Q
dHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNl
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rv
cjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFz
SW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VW
YWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVj
dG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0
aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBj
b25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJ
bnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJl
c3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25z
dHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVt
cC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQ
UiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0K
IAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5j
ZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAg
Ly8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScg
aS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24u
Ci0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1Qw
KTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRl
c3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1
bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZh
bHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAg
ICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0
aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBz
aW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNl
IGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0g
ICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwg
LSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNl
LgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8g
cmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8K
LSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
T3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENl
bGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisK
KyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0
aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVH
UFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdw
cigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAg
ICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAg
IHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1
ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90
b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVt
cC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5l
bXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhp
cywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7Cisg
ICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKwor
ICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAg
ICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAg
ICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gy
VGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAg
ICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBw
cm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8v
IFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlz
IGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRo
YXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVj
a2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAg
cmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAg
ICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gK
KyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNl
T2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBn
ZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5
OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBp
bnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2Zf
aXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0y
MTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNv
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1Vu
ZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVt
cCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFu
Y2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAg
ICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAg
ICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQy
OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihj
b25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVh
bikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAg
ICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OCwyNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxO
dW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIs
IG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFn
UmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI4LDU2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChy
ZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAg
IGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAg
Y29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBK
dW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdU
MSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lO
VDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93
aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0g
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDMs
NjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVl
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5
cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRl
bXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBj
b21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9y
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAg
IGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlz
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwor
ICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA4LDEyIEBAIHZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVz
dWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVy
blZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSAr
NzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmso
dGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3Zl
KHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAg
ICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmso
dGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9w
ZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1
MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
LSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRl
U3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3Ry
aW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5
bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmlu
Zy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0
cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3Bl
Y1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChz
cmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAo
c3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAg
ICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBu
YW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24s
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywg
dmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQgaGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBz
dHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBhcmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8v
IFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVy
bywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0
aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0
ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2
ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdp
bGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAg
ICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0
YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xl
YXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNl
IG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFn
YWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQg
ZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Cisg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJn
ZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBj
YXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZw
U2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRo
aXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElm
RmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
biwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6
OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwor
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29u
ZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2
YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBp
bmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24g
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRj
aDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsK
KworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0
Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQ
UiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BS
LCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVl
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTc1LDEyOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAg
IGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Cisg
ICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisK
KyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAt
IHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1
bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAg
Tm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsK
KworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
LCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAg
ICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKwor
ICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisK
KyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUu
bGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEwNiwyNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5k
ZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090
aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NTE1LDY1ICsxMTY1LDM0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0
cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9p
bnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEu
bV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRy
KHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUz
MihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBi
b29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29t
cGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNF
cSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisK
KyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhz
KSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpT
VmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxs
KHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxo
cywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7Cisg
ICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmlu
ZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJo
cywgcmhzR1BSKTsKKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhz
R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BS
KSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29t
cGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJo
c0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFy
ZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBo
ZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExp
c3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxo
c0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3Zv
aWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Cisg
ICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhw
ciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYg
KCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMp
KSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNH
UFIpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZI
ZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkg
eworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
SW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykp
IHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBs
aHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5m
cHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJo
c0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2
YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
Owordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
Owordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSBy
ZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlz
IGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFs
dWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2
b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhy
b3c+KCk7CkBAIC01ODksNzQgKzE1MTYsMTc4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlz
RXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBE
b3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAg
IGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
b3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihy
aHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBo
ZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CiAKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVs
IHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlz
IERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAg
cmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8g
ZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAg
ICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlz
IERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3Vs
ZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51
bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwg
dGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFs
bCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRo
ZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9u
bHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAg
ICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVn
VDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBh
dCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhp
bmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVk
IHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7
CisjZWxzZQorICAgICAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBj
b3ZlciBzdHJpbmdzKS4KKyAgICAgICAgICAgIG1vdmUobGhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgb3I2NChyaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVzdWx0R1BSKSk7CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgorICAgICAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAg
IGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJ
bnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhz
R1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlm
IChpc0VxKQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGFyZTY0
KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyNlbmRpZgorICAg
ICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwg
cmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVn
VDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhp
Z2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAg
IElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3Rv
IHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENl
bGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAg
IGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8g
VGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUg
bmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIK
KyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGws
IHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVh
dmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBh
ZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwg
cmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1Qz
LCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
NSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisK
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQg
bGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAg
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBz
b21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQot
ICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRo
ZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBm
aW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxl
ZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlz
IGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwg
YW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1w
IGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAg
SnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAot
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAg
ICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
YXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE3MDUsMTY0IEBAIHZvaWQgSklUOjpj
b21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIg
PSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJl
Z1QwLCBzcmMyLCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1f
bGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAorICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0
byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENv
bXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxo
cyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywg
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOwor
CisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChs
aHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BS
KTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4K
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAg
ICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0g
bGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJo
c0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENv
dWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxl
ZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwot
ICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQg
aXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290
byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBp
bnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2Vk
IGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBp
cyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBi
aXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQot
ICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRK
dW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8v
IEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFu
ZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBj
b3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQz
Miwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGlj
X2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBtb3ZlKGxoc0dQUiwgdGVtcEdQUik7
CisgICAgICAgICAgICBvcjY0KHJoc0dQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwodGVtcEdQUikpOworCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hp
Y2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJs
ZS4KKyAgICAgICAgICAgIGF1dG8gbGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAgICAgICAg
ICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHRPSyA9IGJyYW5jaElm
SW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJo
c0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgaWYg
KGlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgbGhzR1BSLCBy
aHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyNlbmRpZgor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
bGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
LSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUp
CisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQor
ICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0
IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFr
ZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBp
bnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2Vk
IGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRo
YXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxs
IG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8v
IElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25s
eSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3Ig
ZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShy
ZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RP
ZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAg
ICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSks
IHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAg
YXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1
bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3Ry
aW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhl
cmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90
aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkg
eworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVF
cXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQot
ICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRo
ZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBm
aW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxl
ZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVt
YmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVn
VDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwg
cmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0
aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMg
ZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAg
ICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlz
KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdl
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNzQ4LDg5ICsxODc1LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0
IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudElu
c3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJo
c0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhz
R1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNy
Y1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVn
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmlj
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90
Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNw
ZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikK
KyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlz
KTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgp
OworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwor
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRl
YWwgd2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBz
byB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwog
CiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIxNTQsMjMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNv
ZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3Bl
KSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3Bl
cmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkg
KzIxODUsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFi
bGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwot
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC05MjIsOSArMjIxMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
Y2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBU
YWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsy
MjM0LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAg
U3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0
R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxs
Rm9yQ2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxv
Y2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1
Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2Rl
YnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0g
ICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wg
aXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBh
cmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3Jj
KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJl
NjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3Jj
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNj
cmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBh
cmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihF
cXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQog
Ci0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAg
ICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBh
cmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVn
VDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRf
b3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxs
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIs
IHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0
IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3Rl
ciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwog
ICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91
ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2
b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQg
aW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+
bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAg
ICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZv
ciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJs
ZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAg
IH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIz
ODUsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBy
ZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdw
cigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSks
IHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
c2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEwNDUsMTMgKzI0MDksODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9U
aGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
cmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9z
cmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3Qo
KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmln
aHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5l
ZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVj
dE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7Cisg
ICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBz
aW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAg
ICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgbG9h
ZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAg
ICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBP
T1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAg
ICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjQ5NCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9u
ID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0g
cmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsy
NTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBS
ZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2Fs
bGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQu
ZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
Y2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9
IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigp
OworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0
YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJU
ZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywg
ZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI1NDYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1
Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVj
a1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMg
d29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhj
ZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC0xMTYyLDggKzI1OTEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBp
dCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUu
CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5F
YXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BT
OiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgog
ICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIo
aW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8g
c2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0
aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMg
KzI2MTksMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93
IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGlt
aXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29w
eUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDEx
ICsyNjM2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAg
IC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkp
OyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBp
biBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAg
KzI2NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQq
PigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyNjcyLDE4IEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9
IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdF
eHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1
ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChy
ZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI2OTMsNDIgQEAg
dm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNj
b3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsK
KyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAg
IE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBl
bHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyNzU3LDQ2
IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5t
X3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3Bl
LnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdw
cigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAj
ZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4
cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzI4MjcsMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQg
PSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
Mih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTM2MCwxNCArMjg0OCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQ
UlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBs
YWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmdHUFIgPT0gcmV0dXJuVmFsdWVHUFIpOworICAg
IH0KKworICAgIC8vIE9PUFM6IElubGluZSB0aGUgYWxsb2NhdGlvbiBwYXRoIGhlcmUsIGl0IG1h
dHRlcnMgZm9yIHN1bnNwaWRlci1jcnlwdG8tYWVzCisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVt
aXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgs
IHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAg
LTEzODEsMTUgKzI4ODQsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI5MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7
CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsy
OTYyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9P
UFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzI5ODksMTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0
aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZv
ckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAK
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJh
ZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMzAwNiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfZW51bWVyYWJsZV9pbmRleGVkCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVs
KCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFk
VHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwg
ZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICszMDM5LDgxIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9y
IH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworCisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BS
ID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCi0gICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAK
LSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5s
aW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxp
bmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNF
aWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndp
c2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1Qx
KTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMTIzLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAg
R1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAg
ICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIp
OwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAs
IFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRj
aEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVz
RWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJp
bmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1
NzQsMjEgKzMxNzcsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMy
KEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpl
bmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOwor
ICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+
IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1w
LmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBp
bmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVt
ZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdU
MTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwor
ICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmlj
UHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0g
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAg
IAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzMyMzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9j
YXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmls
ZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszMjkzLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2Vu
KCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSBy
ZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJv
bG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMzMTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAg
ICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9
IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNjg0LDYgKzMzMjUsMTQ0IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMs
IG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZG
dW5jdGlvbihpbnB1dEdQUik7CisgICAgICAgIGF1dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RP
YmplY3QoaW5wdXRHUFIpOworICAgICAgICAKKyAgICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAKKyAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBub3RP
YmplY3QubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgCisgICAgICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wSXNDYWxsYWJsZT4oY3VycmVudEluc3RydWN0aW9uKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX2Z1bmN0aW9uKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wVHlw
ZW9mSXNGdW5jdGlvbj4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNPYmplY3Q+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVy
YW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIp
OworICAgICAgICAKKyAgICAgICAgYXV0byBpc051bGwgPSBicmFuY2hJZkVxdWFsKEpTVmFsdWVS
ZWdzIHsgaW5wdXRHUFIgfSwganNOdWxsKCkpOworICAgICAgICBhdXRvIGlzTm9uTnVsbE5vbkNl
bGwgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgYXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZGdW5jdGlvbihpbnB1dEdQUik7CisgICAgICAg
IGF1dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpOworICAgICAgICAK
KyAgICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAKKyAgICAgICAgaXNO
dWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGlzTm9uTnVsbE5vbkNlbGwubGluayh0aGlzKTsKKyAgICAgICAgaXNGdW5jdGlv
bi5saW5rKHRoaXMpOworICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF90eXBlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4o
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX3ZhbHVlOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyAgICAgICAgSnVtcCBzbG93UGF0aDsKKyAgICAgICAg
ZW1pdFR5cGVPZigKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSwgcmVzdWx0
R1BSLAorICAgICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUsIGJvb2wgZmFsbHNUaHJvdWdo
KSB7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0tPnNtYWxsU3RyaW5n
cy50eXBlU3RyaW5nKHR5cGUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZh
bGxzVGhyb3VnaCkKKyAgICAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKEp1bXAgdGhlU2xvd1BhdGgpIHsKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHRoZVNsb3dQYXRoOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgIH0gZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RW51bWVyYWJsZUxlbmd0aD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIGJh
c2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhpbnB1dEdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcwMiwxMSArMzQ4MSwyMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9hcmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVn
czo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdU
MCwgcmVzdWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3Mo
cmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNzE0LDI5ICszNTAyLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9y
ZXN0X2xlbmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVt
UGFyYW1ldGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihu
dW1QYXJhbXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXAp
KTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhh
bk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIo
SW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
Ym94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhp
cyk7CisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdU
MCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigw
KSkpLCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzM1NTEsOTkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBs
b2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhp
cyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVn
VDApOwogI2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZC
b3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5k
ZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1v
dmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dFJlZ3MpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9m
Qm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGlu
ZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm90b3R5cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3Rv
dHlwZSh2bSgpLCB2YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQ
Uiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIs
IGRzdCk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVy
OworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdU
Mik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdz
LnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVn
VDIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQo
dmFsdWVSZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxv
YWRHUFIoKSkpOworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAg
IGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
KyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyNCw2ICsxNDI0LDgg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgLy9kYXRhTG9nTG4oImNvbXBhcmVMZXNzLCBs
aHM6ICIsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgIiByaHM6ICIsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKSk7CiAgICAgCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihnbG9iYWxP
YmplY3QsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDIpKTsKIH0KQEAgLTE0OTEsNiArMTQ5Myw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Db21wYXIKICAgICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBzcmMyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIp
OwogCisgICAgLy9kYXRhTG9nTG4oInN0cmljdGVxLCBsaHM6ICIsIHNyYzEsICIgcmhzOiAiLCBz
cmMyKTsKKwogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChnbG9iYWxPYmplY3QsIHNy
YzEsIHNyYzIpOwogfQogCkBAIC0xODc5LDcgKzE4ODMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1p
emVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VSVChvcHRp
bWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVC
bG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRD
b2RlOjppc0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgCiAg
ICAgaWYgKHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZy
YW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIENPREVC
TE9DS19MT0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIs
IGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTM0MzMsNiArMzQzNyw0MiBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQs
IChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpCit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZl
cmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3
b3VsZG4ndAorICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyhsb2xDb2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBpZiAoZ2V0ZW52KCJw
cmludEVhY2hKZXR0aXNvbiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaEpldHRpc29uIikp
KQorICAgICAgICBkYXRhTG9nTG4oImpldHRpc29uLCBmb3JjaW5nIHJlb3B0IG5vdzogIiwgKmxv
bENvZGVCbG9jayk7CisgICAgbG9sQ29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVk
aWN0aW9ucygpOworICAgIAorICAgIC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJvZmlsZXMgaGVy
ZSwgc2luY2Ugd2UncmUgamV0dGlzb25pbmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0ZSB3LyB0aGlu
Z3Mgd2UgY2FyZSBhYm91dC4KKworICAgIHNhbml0aXplU3RhY2tGb3JWTShsb2xDb2RlQmxvY2st
PnZtKCkpOworCisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbG9sQ29k
ZUJsb2NrLCAiOiBFbnRlcmVkIHJlb3B0aW1pemUgZnJvbSBMT0wiKTsKKworICAgIENvZGVCbG9j
ayogbGxpbnRDb2RlQmxvY2sgPSBsb2xDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgLy8g
V2UgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBibG9jay4KKyAgICBBU1NF
UlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUobGxpbnRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwor
CisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGxsaW50Q29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpOworICAgIGlmICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxpbnRDb2RlQmxv
Y2spIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbGxpbnRD
b2RlQmxvY2ssICI6IE5vdCByZW9wdGltaXppbmcgTE9MIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBi
ZWVuIGpldHRpc29uZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhl
cndpc2UsIHRoZSByZXBsYWNlbWVudCBtdXN0IGJlIG9wdGltaXplZCBjb2RlLiBVc2UgdGhpcyBh
cyBhbiBvcHBvcnR1bml0eQorICAgIC8vIHRvIGNoZWNrIG91ciBsb2dpYy4KKyAgICBBU1NFUlQo
bGxpbnRDb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOworICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQobG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworCisg
ICAgLy8gT09QUzogZmlndXJlIG91dCBzdHVjayBpbiBhIGxvb3AgbG9naWMKKyAgICBsb2xDb2Rl
QmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwgQ291bnRSZW9w
dGltaXphdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1Nf
RU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw2ICszMTksOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblZhbHVlCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blByb2Nlc3NUeXBlUHJvZmlsZXJMb2csIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsK
IAorSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6
YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlW
YWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjgx
LDggKzI3Nyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJ
bmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAg
ICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CkBAIC01NTgsNyArNTUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAg
Ly8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lz
dGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzksOCArNjMwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3NSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzc4LDgg
Kzc2Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4ICs4MDIsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMTAwLDggKzEwODEsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyNTcsOCArMTIzNiw2
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRl
IDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJp
bnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01Miw1
MSArNTQsMTE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VW
YWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4
aW5nVHlwZUdQUjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywg
cHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3Vs
dEdQUjsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBp
bmRleGluZ1R5cGVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOworICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVy
cy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkg
ewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsK
LSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisg
ICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBw
cm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENl
bGwubGluayh0aGlzKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9
IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBw
cm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChw
cm9wZXJ0eUdQUik7CisgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSks
IFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
YmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQor
ICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJv
cGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4Owot
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVn
VDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICAr
K21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA1LDQxICsxNzMsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0K
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBn
ZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUs
Ci0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55
U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21f
Z2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTU3LDYgKzI1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0
ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0
dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAg
ICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAg
LTMxOSw4ICs0MjEsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1
bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlO
YW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9w
ZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0NCw3IEBAIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAg
ICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9h
ZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5
dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwpAQCAtMzU1LDEzICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3Rh
dGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNl
Ci0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAg
ICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAog
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgp
OyAvLyBPT1BTOiBEbyBiZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwogCkBAIC0zOTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQYXRoSm1wLCBk
b25lLCBkb25lKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRl
TmFtZT4oKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2YXRlRmllbGRQ
dXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9wcml2YXRlX25hbWUoYwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNz
b3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
YWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vz
c29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
clNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0g
Z2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3Bl
cnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5t
X2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBh
Y2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1
dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29y
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQ
UiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nl
c3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTQ3MiwxOCArNjMzLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQ
UlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAg
ICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUg
ZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpA
QCAtNDkyLDI1ICs2ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVs
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTUyMCwxOSArNzE3LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBw
cm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJv
cGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJh
c2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
Y3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01NDEsMjIx
ICs3ODksMzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpUcnlH
ZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFz
ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
SnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRl
eGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0
YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAg
ICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0
aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZS
ZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAg
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBw
ZW5kKGdlbik7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAg
Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHRoaXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7Cisg
ICAgfQogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3ModGhpc0dQUikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBH
UFJSZWcgdGhpc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJ
ZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcg
PSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8v
IHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUg
ZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2
YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVl
R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2
YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0
ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1
dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklY
TUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5
IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3Vs
ZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIs
IGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9p
bkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5C
eUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsK
ICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVz
b2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
bWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1f
bG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3Bl
KSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkp
LCByZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCkBAIC04NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVn
VDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNv
bnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2Nv
cGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAg
ICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBP
cHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29w
ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3Bl
VmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
c2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7
ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwg
cmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTg5NCw5ICsx
MzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05
MDksMjkgKzEzNDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC05NDAsMTUgKzEzNzYsMjAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6
OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQ
UlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1
cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJl
U2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBz
Y3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihK
U1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAzLDYgQEAgdm9pZCBK
SVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcp
OwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVn
VDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUxICsxNDEzLDg0IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1Qw
OwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVn
IG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAg
IE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUp
OworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BS
ID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAg
aml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJh
bmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRH
UFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1w
IGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRy
dXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0
V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNP
dXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihv
ZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9m
ZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZz
ZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQ
Uiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCks
IHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFy
KHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTAzNiwx
MCArMTUwNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRH
UFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlz
Tm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogCkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwog
ICAgICAgICBicmVhazsKQEAgLTEwODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQs
IHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVz
c09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwot
ICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMjksMjEgKzE1NzksNDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90
KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1f
b3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7
CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAg
ICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAg
YnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIg
PSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFs
dWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQ
UiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9m
ZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZv
aWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7
CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVn
VDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJl
Z1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVy
Zmx5R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7Cisg
ICAgICAgICAgICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVl
R1BSLCBCYXNlSW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTE1NCwyOCArMTYzMiw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFs
aXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRv
IGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0
byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2Fk
UHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywg
c2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93
YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNj
b3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3Bl
cmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHlu
YW1pYzoKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkwLDEyICsxNjk3
LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhl
IGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBz
aW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2Ny
YXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hH
UFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2
YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1LDMyIEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQo
KTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20g
YWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55
IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdU
MCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUK
IAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBp
c0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBA
IC0xMjQyLDEwICsxNzY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTI2MSw2MSArMTc4NCwxNzggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAg
ICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsK
LSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0
KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRy
ZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3Vt
ZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1
ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNH
UFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2
NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAg
IGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8v
IE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJh
bmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0
IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUg
Y2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3Rh
dGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8g
LSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2ls
ZW50IGZpbGwKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBp
ZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4K
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZv
ck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0g
cmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3du
ZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVn
IG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVy
KSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5k
KG93bmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVn
VDApOworICAgIH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAg
ICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkg
eworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWND
ZWxsKSkKKyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQ
Uik7CisgICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlv
bmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFs
dWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwo
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0o
KSwgb3duZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVy
Q2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgp
KQogICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAg
aWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhp
cyk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRo
YXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBu
b3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2Fs
bG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0Cisg
ICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29k
ZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFu
Y2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAg
ICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFs
dWU7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNw
ZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1
ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgp
KSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzMjcsMTEgKzE5
NjcsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJv
dmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQo
aW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTM0MSwxMCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJu
YWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMs
IGJhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25D
ZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAg
ICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpA
QCAtMTQ0Nyw4ICsyMTE1LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAg
ICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93
bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsK
KyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDA7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZt
KCksIG93bmVyLCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGls
bFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJl
Y29yZCk7CisKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAK
QEAgLTE0NjYsNiArMjE1MSw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2so
UmVnaXMKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsK
KyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIApAQCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisK
ICAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0
ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9j
aykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHByb2ZpbGVkREZHQ29kZUJsb2NrLCAhcHJvZmlsZWRE
RkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxh
dGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7CiAgICAgCkBAIC01
NSw3ICs1NSw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2Rl
QmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBv
ZiAiLCAqY29kZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0KTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTUgKzMxLDIyIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiVk1Jbmxp
bmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpJVFdvcmtsaXN0OjpQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFdv
cmtsaXN0OjpQbGFuPiB7CiBwdWJsaWM6Ci0gICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICA6IG1fY29k
ZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVC
bG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBQbGFuKENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDogbV9sbGludENvZGVCbG9jayhjb2RlQmxv
Y2spCisgICAgICAgICwgbV9jb2RlQmxvY2tUb0NvbXBpbGUoY29tcGlsZVR5cGUgPT0gSklUOjpD
b21waWxlVHlwZTo6TE9MID8gbV9sbGludENvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSA6IG1f
bGxpbnRDb2RlQmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2NrVG9Db21waWxlLT52
bSgpLCBtX2NvZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUNvbXBpbGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBpbiBjb25jdXJyZW50
IGdjCisgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2Nr
KSB7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnByb3RlY3Qo
bV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUluVGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aW5hbGl6ZSgpCiAgICAgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2pp
dC5saW5rKCk7CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7
CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9j
aykKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnVucHJv
dGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAgICAgICAgIHN3aXRj
aCAocmVzdWx0KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJj
b21waWxhdGlvbiBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1f
bGxpbnRDb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIp
KTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBK
SVQgY29tcGlsYXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRK
SVRBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENv
bXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmRvbnRKSVRB
bnl0aW1lU29vbigpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+bV9kaWRGYWlsSklU
Q29tcGlsYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxv
Y2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrVG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2Rl
QmxvY2tUb0NvbXBpbGUpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+aml0U29vbigp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4g
bV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsg
fQorICAgIENvZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9j
azsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2stPnZtKCk7IH0KICAg
ICAKICAgICBib29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTgwLDE1ICs5Mywx
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7CiAgICAg
fQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBzdGF0aWMgdm9p
ZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBp
bGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewot
ICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsK
KyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwogICAgICAgICBw
bGFuLmZpbmFsaXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsKKyAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAgICBMb2NrIG1fbG9j
azsKICAgICBib29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07CkBAIC0yMzMsOSAr
MjQ3LDExIEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAg
ICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKworICAgIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRpb25zOjpmb3JjZUxP
TCgpID8gSklUOjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmU7
CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKLSAgICAgICAg
UGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjQ5
LDcgKzI2NSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAg
ICAgICAgCiAgICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsKICAgICAgICAgICAg
IG1fcGxhbm5lZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFu
ID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNv
ZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKICAgICAg
ICAgICAgIG1fcGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQo
cGxhbik7CiAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7CkBAIC0y
NzMsMTQgKzI4OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2Nr
CiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29uY3VycmVudCBK
SVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8vIHRocmVhZCBj
b21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBoYWQgbXVsdGlw
bGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29tZWRheS4KLSAg
ICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7
CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3co
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZdIHsKKyAgICAgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1p
emVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIyLDI0IEBAIHZvaWQg
SklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAgICAgCiAgICAgLy8g
Tm93IGl0IG1pZ2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZp
b3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKLSAg
ICAvLyBiYXNlbGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKLSAgICAK
LSAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKLSAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxv
Y2spOworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBsb2xDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIEpJ
VDo6Y29tcGlsZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwg
SklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIGxvbENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGxvbENv
ZGVCbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdl
IGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdp
dGggdGhlCisgICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29kZUJsb2NrLT5yZXNl
dEpJVERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCisg
ICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNl
bGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNv
ZGVCbG9jayk7CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFu
cyhQbGFucyYgbXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lkIEpJVFdvcmtsaXN0
OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFsaXplKCk7CiAgICAg
ICAgIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAgICAgbV9wbGFu
bmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxhbm5lZC5yZW1vdmUo
cGxhbi0+Y29kZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVM
YXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0
ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgCiAgICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdCgpOwog
ICAgIHN0YXRpYyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpOwpA
QCAtNjYsNiArNjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsKICAgICBmcmllbmQg
Y2xhc3MgVGhyZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkp
OwogICAgIHZvaWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAgIFBsYW5zIG1fcXVl
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
bWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0
b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRv
cltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAg
ICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+
IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRy
LmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgIGlm
IChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVs
QXRPZmZzZXQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENh
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQ
YXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAg
ICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBX
ZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8g
bV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigm
bV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNl
dF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOCArMzYzLDEw
IEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KIH0KIAogLy8gUmV0
dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wgaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKK2lubGlu
ZSBDb2RlQmxvY2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMgdy5yLnQgTE9M
LgorCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJz
IGRvbid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQg
YWxsLgogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBAIC0zNzMsMjkgKzM3
NSw0NSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgaWYg
KCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9s
ZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRl
cigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBK
SVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJVFdvcmtsaXN0Ojpl
bnN1cmVHbG9iYWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAgYXV0byBsb2xDb2Rl
QmxvY2sgPSBbJl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogcmVw
bGFjZW1lbnQgPSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAg
ICAgIGlmIChyZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2so
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRU
eXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBp
bGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2UgSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUOworICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZGF0
YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4i
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygiVW5leHBlY3RlZCBj
b2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgU2xv
d1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFy
ICpuYW1lLCBFbnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlP
U1IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFy
ICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksCiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRo
IGV4ZWN1dGVDb3VudGVyID0gIiwKQEAgLTQwNiwxOCArNDI0LDIxIEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxs
cHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAg
IGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykpCisgICAgQ29k
ZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZt
LCBjb2RlQmxvY2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5U
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19F
VkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xv
Z3VlIikpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2sp
OwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBMTElOVF9SRVRVUk5f
VFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsK
KyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5l
eGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNo
ZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNz
Rm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7Cisg
ICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNz
Rm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiB9
CiAjZWxzZSAvLyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9T
UihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKK3N0YXRpYyBT
bG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5kb250SklUQW55
dGltZVNvb24oKTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwpAQCAt
NDI3LDMxICs0NDgsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2Rl
QgogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVOVVNFRF9QQVJBTShw
Yyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9v
c3IiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19Q
QVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVOVVNFRF9QQVJB
TShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5
X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1Io
Y2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpz
RXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NhbGwiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9m
dW5jdGlvbl9mb3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0
dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+
anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxG
cmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1
dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBj
KTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpz
Q2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3Ny
X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4g
ZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9X
X1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrKQog
ewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlD
aGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNv
ZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
YXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29w
X29zcikKQEAgLTQ4MCwxOSArNTAxLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3Ny
KQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAg
ICAKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxv
Y2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBM
TElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19M
T0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAi
b3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKIAotICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAg
QVNTRVJUKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgfHwgY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwog
Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgp
OworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVCbG9jay0+aml0
Q29kZU1hcCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2Nh
dGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBBU1NF
UlQoY29kZUxvY2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisKKyAgICBjYWxs
RnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgTExJTlRf
UkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CiAjZWxzZSAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBAIHN0YXRpYyB2
b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgT3B0
aW9uczo6Zm9yY2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IDE7CisKICNp
ZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5k
bGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3
LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29s
LCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
Qm9vbCwgdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUs
IHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0YSBmaWVsZHMgaW5z
aWRlIGNsYXNzZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRz
LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwcml2
YXRlIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCBm
b3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5j
ZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1Vu
dmVyaWZpZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgbGxpbnRfaGFu
ZGxlX3VjYXVnaHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAg
ICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAgICAgICAgICAg
ICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
ayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkg
ewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBD
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUlu
ZGV4KGJpdHMsIHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwTExJbnQoQ29k
ZUJsb2NrKiBjb2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2Vl
ZCk7CisgICAgLy8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdhbnQgdG8gZG8gd2l0aCB0aGUg
bm8gTExJbnQgb3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6
Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBp
bGF0aW9uU3VjY2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RS
dW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBu
dW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2
ZU1hbnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0
aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBqc051bWJlcigwKTsgLy8gT09QUwor
CiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQo
KSB8fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29t
cGlsZXMgPSB0cnVlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTVRyYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZv
aWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoZm91bmRDb2RlQmxvY2st
PmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3VuZENvZGVCbG9j
ay0+aml0VHlwZSgpKSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKCptX2xv
Y2spOwogICAgICAgICBpZiAoIWxvY2tlcikKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRo
ZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQg
Vk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxlIChjYWxsRnJh
bWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2st
PmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQpJbmRleDog
VG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9jb21wYXJlLXJlc3VsdHMJKHJldmlzaW9uIDI3MTM3NikKKysrIFRvb2xzL1NjcmlwdHMvY29t
cGFyZS1yZXN1bHRzCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOCArMTgyLDggQEAgZGVmIGNvbXB1
dGVNdWx0aXBsZUh5cG90aGVzZXNTaWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFrZG93bnMoYSwg
Yik6CiAgICAgbmFtZUxlbmd0aCA9IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0aCA9IGxlbihh
W3VuaXRNYXJrZXJdKQotICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKKyAgICBhTGVu
Z3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMworICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFy
a2VyXSkgKyAzCiAgICAgcmF0aW9MZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAgIHBWYWx1ZUhl
YWRlciA9ICJwVmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZSki
CkBAIC0yMTIsNyArMjEyLDcgQEAgZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIHBMZW5n
dGggKz0gMgogCiAgICAgc3RyaW5ncyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57
bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtj
b21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9
InN1YnRlc3QiLCBhU2NvcmU9YVt1bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1hcmtlcl0sIG5h
bWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBj
b21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhl
YWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtrZXk6XntuYW1l
TGVuZ3RofX18e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9fSB8e2NvbXBh
cmU6XntyYXRpb0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0KGtleT0ic3Vi
dGVzdCIsIGFTY29yZT0iYTogIiArIGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjogIiArIGJbdW5p
dE1hcmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3Ro
PWJMZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFy
a2VyPXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5IGluIGEua2V5
cygpOgogICAgICAgICBpZiBrZXkgPT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAgIGNvbnRpbnVl
CkluZGV4OiBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTQsNyArNCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1
bm5lciA9IHsKICAgICBuZXZlcklubGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAot
ICAgIG51bWJlck9mREZHQ29tcGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVy
T2ZERkdDb21waWxlczogKGZ1bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICBy
ZXR1cm4gKGYpID0+IHsKKyAgICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8g
RW11bGF0ZSBydW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJp
bmcgYmVmb3JlIHJldHVybmluZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAg
ICAgICAgICAgbWFwID0gbmV3IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAu
Z2V0KGYpIHx8IDA7CisgICAgICAgICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNl
dChmLCBjb3VudCk7CisgICAgICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAg
ICAgICB9OworICAgIH0pKCksCiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3
Q29kZUJsb2NrCiB9OwogCkBAIC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUo
dGhlRnVuY3Rpb24sIF9hLCBfYgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNo
OwogICAKICAgdHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkp
CisgICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1
ZXMucHVzaChldmFsKF9hKSk7CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAg
fSBjYXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVu
Y3Rpb24gZGZnSW5jcmVtZW50KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQog
ICAgICAgICByZXR1cm4gYXJndW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFy
Z3VtZW50KSkKKyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6
IDA7CiAgICAgCiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417498</attachid>
            <date>2021-01-12 16:59:01 -0800</date>
            <delta_ts>2021-01-13 15:57:38 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>577325</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ2NyeXB0by1hZXMtU1AnXTsKKwog
aWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJ
dGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy9iZW5jaG1hcmstcnVubmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsOCBAQAogLy8g
RklYTUU6IFVzZSB0aGUgcmVhbCBwcm9taXNlIGlmIGF2YWlsYWJsZS4KIC8vIEZJWE1FOiBNYWtl
IHN1cmUgdGhpcyBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSByZWFsIFByb21pc2Uu
CisKK19fZGlzYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKKwogZnVuY3Rpb24gU2ltcGxlUHJvbWlz
ZSgpIHsKICAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG51bGw7CiAgICAgdGhpcy5fY2FsbGJh
Y2sgPSBudWxsOwpAQCAtMTI4LDE3ICsxMzEsMjEgQEAgQmVuY2htYXJrUnVubmVyLnByb3RvdHlw
ZS5fcnVuVGVzdCA9IGZ1bgogCiAgICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicg
KyB0ZXN0Lm5hbWUgKyAnLXN0YXJ0Jyk7CiAgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAg
IF9fZW5hYmxlU2FtcGxpbmdQcm9maWxlcigpOwogICAgIHRlc3QucnVuKHByZXBhcmVSZXR1cm5W
YWx1ZSwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KTsKKyAgICBfX2Rpc2FibGVTYW1w
bGluZ1Byb2ZpbGVyKCk7CiAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKICAgICBzZWxmLl93cml0
ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICctc3luYy1lbmQnKTsKIAogICAg
IHZhciBzeW5jVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7CiAKICAgICB2YXIgc3RhcnRUaW1l
ID0gbm93KCk7CisgICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgc2V0VGltZW91
dChmdW5jdGlvbiAoKSB7CiAgICAgICAgIC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3QgaW1tZWRpYXRl
bHkgdXBkYXRlIHRoZSBsYXlvdXQgZm9yIHBhaW50LgogICAgICAgICAvLyBGb3JjZSB0aGUgbGF5
b3V0IGhlcmUgdG8gZW5zdXJlIHdlJ3JlIG1lYXN1cmluZyB0aGUgbGF5b3V0IHRpbWUuCiAgICAg
ICAgIHZhciBoZWlnaHQgPSBzZWxmLl9mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7CisgICAgICAgIF9fZGlzYWJsZVNhbXBsaW5nUHJvZmls
ZXIoKTsKICAgICAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKICAgICAgICAgc2VsZi5fZnJhbWUu
Y29udGVudFdpbmRvdy5fdW51c2VkSGVpZ2h0VmFsdWUgPSBoZWlnaHQ7IC8vIFByZXZlbnQgZGVh
ZCBjb2RlIGVsaW1pbmF0aW9uLgogICAgICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSAr
ICcuJyArIHRlc3QubmFtZSArICctYXN5bmMtZW5kJyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4
IEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIs
IGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
aXNERkdFbmFibGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAg
ICAgICAgIGlmIChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JU
ZXN0aW5nKCkpIHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51
bWJlcihudW0pKTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdF
bmFibGVkLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBzaG91bGREdW1wRGlz
YXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgaWYgKGNvZGVCbG9jayAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlv
bnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fz
c2VtYmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAg
LTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBI
ZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnBy
aW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlv
bnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDog
WyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0
SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEo
IiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fscygp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAg
ICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAg
ICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewog
ICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkg
KyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFz
cyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxC
bG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAm
ID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Cisg
ICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYg
b3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgp
KTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdy
YXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQg
ZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBz
cGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkp
CisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9
IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlz
LCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgogICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgY2Fz
ZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1w
bChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAgcmV0dXJuOwogCisgICAgVVNF
UyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAgICBVU0VTKE9wVG9UaGlzLCBz
cmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAg
VVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBl
KFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5w
cmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0
aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBpZiAoKHRoaXMtPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIg
KFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5l
dmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTIz
NCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAg
ICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7
CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0g
ICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGlu
c3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3Jh
cGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpS
ZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAtMjk1LDYgKzI5NSw3IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgp
KQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAsIG1fYXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQogICAgICwgbV9jb25zdGFudFJl
Z2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAgICwgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQpAQCAt
MzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAK
ICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAKICAgICBBU1NFUlQoc291
cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0
ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIubnVtUGFyYW1ldGVycygpOwog
ICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAtODUwLDcg
Kzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gdG8gdGhlIENvZGVCbG9j
ay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBDb2RlQmxv
Y2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIHdoZW4gdGhlIENv
ZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAg
ICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwogI2VuZGlmCiAg
ICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7CkBAIC0xMDM3LDcgKzEwMzks
NyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zCiAgICAgLy8gSW50
ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0
dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBp
ZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFz
c3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCi0gICAgaWYgKCFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDQ1LDcgKzEwNDcsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShj
b25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShW
TSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKIH0KQEAgLTEwNTgs
NiArMTA2MCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXAKICAg
ICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xK
SVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZH
SklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKQEAgLTEwNzQsNiArMTA3OCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklU
VHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNvbmRz
LCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8gSW50ZXJwcmV0ZXJUaHVuayBzaGFy
ZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7CisgICAgY2FzZSBKSVRUeXBlOjpM
T0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgog
ICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTExNjks
NyArMTE3NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjpp
c0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAKICAgICAgICAgZGZnQ29tbW9u
LT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpAQCAtMTIxNyw3ICsxMjIz
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIC8vIElu
IHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGJhc2VsaW5l
IENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAgICAvLyB0aGF0IHdlIG1pZ2h0IGRl
Y2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpldHRpc29uZWQgZHVlIHRvIG9sZCBh
Z2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRvZXNuJ3QgcHJvdGVjdCB1cy4KLSAg
ICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
REZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAt
MTUxOSw4ICsxNTI1LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChq
aXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgp
KSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7CisgICAgICAgIC8vIE9PUFM6IFNl
cGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3duIGZ1bmN0aW9uIGZvciBKSVQgSUNz
LiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3QganVzdCBmb3IgTExJbnQuCiAgICAg
ICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyArMTUzNiw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGRmZ0Nv
bW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7CiAgICAgfQpAQCAtMTU0OCw2ICsx
NTU2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAg
ICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRl
ci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZH
SklUOgpAQCAtMTU5MCw3ICsxNTk5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFw
KGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoQ29kZU9yaWdpbihieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuYnlWYWxJbmZv
ID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIGlm
IChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBpZiAoSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgICAgICBERkc6OkNvbW1vbkRh
dGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMuY2FsbHMpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFs
dWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpAQCAtMTgxMCw3ICsxODE5LDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAg
IERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAg
ICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CkBAIC0xODIz
LDcgKzE4MzIsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE4Njcs
NyArMTg3Niw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogICAg
ICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2VtZW50KCk7
CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZXNSZXBsYWNlbWVudENv
ZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCBj
YW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAgYW5kIHRoZSBleGVjdXRh
YmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRzIGNvZGVCbG9ja3MgKHNl
ZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNzLAogICAgICAgICAgICAg
Ly8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24gdGhlIHN0YWNrLCBhbmQg
YXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTk0MCw3IEBAIEhhbmRsZXJJbmZvKiBD
b2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVC
bG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3Jp
Z2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBSRUxFQVNFX0FTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBSRUxFQVNFX0FTU0VSVChj
YW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBBU1NFUlQoISFoYW5kbGVy
Rm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBDb2RlT3JpZ2luIG9yaWdp
bmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKQEAgLTIyMzEsNTEgKzIy
NDAsNTUgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQogICAgIERl
ZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRv
IGFjY29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgotICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlm
IHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0
dXJuIHRvIGl0CisgICAgLy8gMSkgSWYgd2UncmUgREZHL0ZUTCwgbWFrZSBzdXJlIHRoYXQgaWYg
dGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1
cm4gdG8gaXQKICAgICAvLyAgICB3ZSBzaG91bGQgT1NSIGV4aXQgYXQgdGhlIHRvcCBvZiB0aGUg
bmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0dXJuLgogICAgIC8vIDIpIE1h
a2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1dGFibGUsIHRoZW4gd2Ugc2hv
dWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2suCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5jbGVhcldhdGNocG9pbnRzKCk7Ci0gICAgCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNv
bXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCi0gICAgICAgICAgICBjb21waWxhdGlv
bi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOwotICAgICAgICAKLSAgICAgICAg
Ly8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBh
Ym91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgotICAgICAgICBpZiAoIWppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewotICAgICAgICAgICAgLy8gV2UndmUg
YWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhp
cyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAh
dm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdl
KSB7CisgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gaml0
Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoY29tcGlsYXRpb24pKQorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRK
ZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcg
YWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KKyAgICAgICAgICAgIGlmICgh
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJl
YWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICBkYXRhTG9n
KCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogICAgIAogICAgIC8vIENvdW50IHRoZSByZW9wdGltaXphdGlvbiBpZiB0aGF0J3Mg
d2hhdCB0aGUgdXNlciB3YW50ZWQuCiAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlv
bikgewogICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRlcm5hdGl2
ZSgpLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNjc3CiAgICAgICAgIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGltaXphdGlv
bigpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgY291bnQgcmVvcHRpbWl6
YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICBpZiAo
dGhpcyAhPSByZXBsYWNlbWVudCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSB3
ZXJlIG5ldmVyIHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4gZm9yIE9TUiBlbnRyeSBj
b2RlCiAgICAgICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgLy8gT3IsIHdlJ3JlIGFuIExPTCBDb2Rl
QmxvY2sgYW5kIHdlcmUgYWxyZWFkeSBqZXR0aXNvbmVkLgogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKGFsdGVybmF0aXZlKCkpCiAgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcykK
KyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpICYmIHJlYXNvbiAhPSBQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1cmluZyBH
Qy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFibGUKICAg
ICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJlbWVtYmVy
ZWQgc2V0LgpAQCAtMjM5MCw3ICsyNDAzLDcgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29t
aW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CiAg
ICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpLCAiICAgIENsZWFyaW5nIFNBQkkgYmNhdXNl
IGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI0
ODMsMTIgKzI0OTYsMTQgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVz
KAogewogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAg
ICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
REZHSklUKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVy
biAobV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcjsKICAgICB9CiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IHRoaXMtPnJl
cGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXI7CisgICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6
aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyOwogfQogCiBpbnQzMl90IENvZGVCbG9jazo6Y29kZVR5cGVUaHJl
c2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKQEAgLTI3MDksNyArMjcyNCw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQg
cmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKLSAgICBpZiAodHlwZSAh
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2Vs
aW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbigq
dGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBjb2RlIGJ1dCBoYXZlICIsIHR5cGUp
OwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaml0Q29k
ZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkpOwogICAgIH0KQEAgLTI3Mjcs
NyArMjc0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAg
ICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVs
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBl
KCkpKTsKICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKQEAgLTI3NTYsNyArMjc3MSw4IEBAIHZvaWQg
Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICAKIHVpbnQzMl90IENvZGVC
bG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9s
ZCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwor
ICAgIC8vQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsgLy8gT09Q
UzogV2UgY2FsbCB0aGlzIGZyb20gdGhlIExPTCBjb21waWxlciB0aHJlYWQgYmVmb3JlIGluc3Rh
bGwuCisKICAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5IHNvIHdlIGRvbid0IHNhdHVy
YXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKICAgICAvLyBlbm91Z2ggdGhhdCB0aGlz
IGxvb3Agd29uJ3QgaHVydCB1cy4KICAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNpcmVkVGhyZXNo
b2xkOwpAQCAtMjgzNiw3ICsyODUyLDcgQEAgREZHOjpDb2RlT3JpZ2luUG9vbCYgQ29kZUJsb2Nr
Ojpjb2RlT3JpZwogCiBzaXplX3QgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0lkZW50aWZpZXJzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmll
cnMuc2l6ZSgpOwpAQCAtMjg0Nyw3ICsyODYzLDcgQEAgY29uc3QgSWRlbnRpZmllciYgQ29kZUJs
b2NrOjppZGVudGlmaWVyKAogICAgIHNpemVfdCB1bmxpbmtlZElkZW50aWZpZXJzID0gbV91bmxp
bmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmllcnMpCiAgICAgICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChq
aXRUeXBlKCkpKTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRp
ZmllcnNbaW5kZXggLSB1bmxpbmtlZElkZW50aWZpZXJzXTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKQEAgLTI5NDgsNyArMjk2NCw4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVx
dWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsKKyAgICAvLyBPT1BTCisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9
IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUwLDYgKzMwNjcsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6
OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIHJldHVy
biBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCkBAIC0zMjI2LDE0ICszMjQ0LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjphZGRCcmVha3BvaW50
KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJyZWFrcG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOwog
ICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzKTsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgp
KSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFr
cG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6
U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlm
IChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7CiB9CiAKQEAgLTM0MjEsOSArMzQzOSw5IEBA
IE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6Ynl0ZWMKIHsKICAgICBPcHRpb25h
bDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRo
aXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgaWYgKEpJVENvZGU6
OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChqaXRUeXBlKSkKICAgICAgICAgYnl0ZWNvZGVJ
bmRleCA9IGNhbGxTaXRlSW5kZXguYnl0ZWNvZGVJbmRleCgpOwotICAgIGVsc2UgaWYgKGppdFR5
cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7Cisg
ICAgZWxzZSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdp
biA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7CkBAIC0zNDY2LDcgKzM0ODQsNyBAQCBib29s
IENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwCiAgICAgLy8gVGhpcyBmdW5jdGlv
biBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAg
IC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRs
ZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQg
b2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+aGFzSW5zdGFs
bGVkVk1UcmFwc0JyZWFrcG9pbnRzKCk7CiAjZWxzZQpAQCAtMzQ4MCw3ICszNDk4LDcgQEAgYm9v
bCBDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cwogICAgIC8vIFRoaXMgZnVuY3Rp
b24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAg
ICAvLyBjYXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5k
bGVyIHNhZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50
IG9mIG1faml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgY29tbW9uRGF0YSA9ICptX2ppdENvZGUtPmRmZ0NvbW1v
bigpOwogICAgIGNvbW1vbkRhdGEuaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKHRoaXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNC
YXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRUeXBlIHR5cGUgPSBqaXRU
eXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHR5
cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAt
NTExLDYgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRl
Y29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZv
ckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3ICs1NDEsNyBAQCBwdWJs
aWM6CiAgICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJl
ZW4gc29tZSBpbmxpbmluZy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICAgICAg
cmV0dXJuIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAog
ICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lkIENvZGVC
bG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRh
Lm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKK30KIAordGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoQ2F0Y2hQcm9m
aWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7Cisg
ICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKQorICAgICAg
ICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdK
SVRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhpdGluZ0pJVFR5cGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFeGkKICAgICBj
YXNlIEV4aXRGcm9tQW55dGhpbmc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbUFueXRoaW5nIik7
CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRGcm9tTE9MOgorICAgICAgICBvdXQucHJp
bnQoIkZyb21MT0wiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdEZyb21ERkc6CiAg
ICAgICAgIG91dC5wcmludCgiRnJvbURGRyIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKICAgICBFeGl0RnJvbUFueXRoaW5nLAor
ICAgIEV4aXRGcm9tTE9MLAogICAgIEV4aXRGcm9tREZHLAogICAgIEV4aXRGcm9tRlRMCiB9OwpA
QCAtMzgsNiArMzksOCBAQCBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiBpbmxpbmUg
RXhpdGluZ0pJVFR5cGUgZXhpdGluZ0pJVFR5cGVGb3IoSklUVHlwZSB0eXBlKQogewogICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4g
RXhpdEZyb21MT0w7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiBF
eGl0RnJvbURGRzsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxS
ZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAg
c3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVtIE9wZXJhbmRz
TGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgogY2xhc3MgT3BlcmFuZHMg
ewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjpp
c19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGljOgogCiAgICAgT3BlcmFu
ZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1l
bnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVt
QXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBt
X251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBzaXplX3Qgc2l6ZSA9
IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIHNpemVfdCBzaXpl
ID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEh
dHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAgIGlmICgh
V1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAgICAgICBt
X3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQm
IGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRz
LCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cywg
Y29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1D
b25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1B
cmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMuZ3Jvdyhu
dW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFj
a0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAg
ICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9w
ZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQor
ICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29uc3RhbnRzKCkpCiAgICAg
ewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAgICAgICAgIG1fdmFsdWVz
LmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBAIHB1YmxpYzoKIAogICAg
IHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRz
OyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2Nh
bHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBz
aXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX251bUNvbnN0YW50czsg
fQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51bWJlck9mQ29u
c3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0
cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAg
ICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygpKTsKLSAgICAg
ICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOwor
ICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRl
eChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9m
QXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KLSAgICAKICAgICBzaXpl
X3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlk
eCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMo
KSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90IGlkeCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNvbnN0YW50cygpKTsKKyAg
ICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgaWR4
OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAogICAgIFJlZlR5cGUg
YXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgp
XTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBm
b28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVl
Pj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAg
IHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxm
b28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxsZWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBp
ZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5
cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3Zh
bHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0K
ICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBzaXplX3Qg
c2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAo
c2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsg
c2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVt
YmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7
CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOwogICAgICAg
ICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5n
cm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMo
KSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSAr
IHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVu
c3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBvcGVy
YW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBp
ZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWVJbmRl
eCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3Bl
cmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4KG9wZXJhbmQudG9Db25z
dGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwo
KSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlKCk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0Fy
Z3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsK
ICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAKQEAgLTMz
OCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXND
b25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFu
ZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygpOwogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2Fs
cygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29uc3QKQEAgLTM2
NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICBpZiAoaW5kZXggPCBu
dW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOwot
ICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBu
dW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkKKyAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRleCAtIG51bWJlck9mQXJn
dW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYgY29uc3RleHByICh0cmFj
a0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxlZUluZGV4KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKSk7
CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQzNywxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogcHJp
dmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFy
Z3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFy
ZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUg
YXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBtX251
bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAgU3Rv
cmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50cyB7
IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJn
dW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAg
LTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwg
dG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKICAgICB9
CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRleHQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9w
ZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewog
ICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5k
ZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC03OCw2ICs4
MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwg
IjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxl
ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxsZWUoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgY29uc3QgUmVnaXN0ZXJTZXQmIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZQogICAgICAgICBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlID0gaml0LT5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5saXZl
UmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShqaXQtPmNvZGVC
bG9jaygpLCBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCk7CiAgICAgICAgIG1fbmVlZHNUb1Jlc3Rv
cmVSZWdpc3RlcnNJZkV4Y2VwdGlvbiA9IG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2Vw
dGlvbkhhbmRsaW5nQ2FsbFNpdGUubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSA+IDA7CiAgICAgICAg
IGlmIChtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24pCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+
aml0VHlwZSgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09y
RlRMKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAgICAgICAgIG1fbGl2ZVJlZ2lz
dGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKSk7CiAgICAg
ICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwpAQCAtNzEwLDcgKzcxMCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICAgICAgLy8gV2Ugc2V0IHRoZXNlIHRvIGluZGljYXRlIHRvIHRoZSBzdHViIHRv
IHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgQ29kZUJsb2NrJ3MKICAgICAgICAgLy8gZXhjZXB0aW9u
IGhhbmRsZXIgdGFibGUgd2hlbiBpdCBpcyBkZWFsbG9jYXRlZC4KICAgICAgICAgY29kZUJsb2Nr
VGhhdE93bnNFeGNlcHRpb25IYW5kbGVycyA9IGNvZGVCbG9jazsKLSAgICAgICAgQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJz
LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJs
b2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0VHlwZSgpKSk7CiAgICAgICAgIGNhbGxT
aXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9IHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNl
cHRpb25IYW5kbGluZygpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxhdGlvbihTcGVj
dWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5KTsKIH0K
IAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBl
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRlY29kZURv
dWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGVk
VHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJbnQzMk9u
bHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0
ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhp
cyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4K
ICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7
CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGlu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsg
fQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9j
YWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAgYm9vbCBpc0hl
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFs
UmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29u
c3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2Nh
bCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpAQCAtMTE3
LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQg
b3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5k
VG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGlu
dCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQgY29uc3RhbnRJ
bmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4
OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEzNSw5IEBA
IGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQp
ICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJG
b3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJbmRleCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAgICAgLCB2YXJp
YWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNB
dFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBpbnRlcnNlY3Rp
b25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFi
c3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0
SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJhY3RWYWx1ZTo6
ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRM
KGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNv
ZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQCB2b2lkIGFkanVz
dEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJh
bWUpCiAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhp
dElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgLy8gT09QUzogTWFrZSB0aGlzIGRv
IHRoZSByaWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Igbm90LgogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdp
bik7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhpdC0+YmFz
ZWxpbmVWZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2Rl
QmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZl
bnRTdHJlYW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7
Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWduZWQgbnVt
VG1wczsKQEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpy
ZWNvbnN0cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9M
b2NhbCgpICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7IC8vIE9P
UFM6IGJ5dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVC
bG9jay0+bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUz
LDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgog
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1l
RgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QK
IHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmpp
dFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpJ
VFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKSVRDb2Rl
OjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoY29kZUJsb2NrKCktPmppdFR5cGUoKSk7CiB9
CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25z
dAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+
aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJ
VFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03OSw4ICs3MCw2IEBAIGJv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKICAgICBjYXNlIEpJVFR5cGU6
Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDEwICs0NTYsMTAgQEAgQUxXQVlTX0lO
TElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRFeAogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVy
SW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5
cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNp
dGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNlCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0
c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIGV4Y2VwdGlv
bkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOworICAg
IGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0
ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4
KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE4IEBACiAj
aW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNs
dWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEu
aCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1NSw4IEBACiAjaW5jbHVkZSA8
d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+CiAK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiBu
YW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhwciBjb25zdCBib29sIHZlcmJv
c2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY4LDg5MSBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRp
bWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjND
b21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5
cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9z
ZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2lu
Y2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
cHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZy
b21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICByZXR1
cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICB9OworCisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3Vt
ZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFs
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdFZhcmFy
Z3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0
b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwg
bWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZS5tX3ByZWRpY3Rpb24p
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fbmV4dCwgbWV0YWRhdGEubV9uZXh0UHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9kb25lLCBtZXRh
ZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb3Y6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBlRm9yKGluc3RydWN0aW9uLT5hczxPcE1vdj4o
KS5tX3NyYykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBv
cF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVfbmFt
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRf
YnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm90
b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9m
aWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0Fu
eUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgaWYgKCEhKGxlZnQgJiBTcGVjRG91
YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJpZ0ludDMyIGJldHRlcgorICAgICAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0cmluZ09yU3RyaW5nT2Jq
ZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBNYXli
ZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX3N1YjoKKyAgICBjYXNl
IG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgewor
ICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5t
X2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmls
ZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYgfHwgaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZURvdWJs
ZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOID0gaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2OworICAgICAgICAgICAgICAgIGlmIChtYXlQcm9k
dWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJp
Z2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIHByb2JhYmx5IGRvIGJl
dHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICAgICAgaWYgKCEhKGxlZnQgJiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3Qp
KSB8fCAhIShyaWdodCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVjdCkpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdCB8PSBTcGVjQmlnSW50OworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgcmVzdWx0KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211
bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAg
ICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAg
ICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZv
cihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZv
cihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNh
biBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVp
bGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50
MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+
KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAg
ICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNBbnlJbnRBc0RvdWJsZSA6IFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgICAgIGlmIChp
bnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAg
IHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0VHlw
ZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICB9OworCisg
ICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAg
ICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVj
b2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYg
aXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNC
aWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0Ogor
ICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5
dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAg
ICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlv
bi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5
dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRv
IHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVj
U3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
KiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZmZXI7CisgICAg
ICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQg
ZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3
ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAg
ICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhp
cyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAgICB9CisgICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQorICAgICAgICAg
ICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRl
ciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFN0cmNhdD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19l
eHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwg
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9y
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9z
Y29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25f
c3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVy
dHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBT
cGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJp
Y19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9p
bl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVj
dEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9h
cmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJm
bHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRz
QnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
QmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5k
ZWZpbmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5k
ZWZpbmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
dW5kZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNVbmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzQm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lzX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJl
cj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19p
bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3Rv
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlf
d2l0aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxh
dGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUp
IDw8IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJv
ZmlsZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0
YW5jZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3Rh
bmNlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Zf
Y3VzdG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZD
dXN0b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVj
U3RyaW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90
eXBlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBl
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRf
aW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1w
bGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFi
bGU6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoK
KyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0Ogor
ICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5
X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVm
aW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBv
cF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNl
IG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVm
aW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNl
IG9wX2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAg
Y2FzZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVz
c2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAg
IGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAg
ICBjYXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bf
c3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNo
X3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0
X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBv
cF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoK
KyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWll
bGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ug
d2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9u
X2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJp
dHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNl
IGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90
aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToK
KyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBj
YXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNh
c2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAg
IGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3Jl
dHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVj
dF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9wcm9ncmFtX3By
b2xvZ3VlOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRpcmVjdF9ub190
bHM6CisgICAgY2FzZSBub3JtYWxfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50
X2dldF9ob3N0X2NhbGxfcmV0dXJuX3ZhbHVlOgorICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1
Z2h0X2V4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0
cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2NhbGxfZXZhbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxs
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJh
dG9yX29wZW46CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdzoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2NvbnN0cnVjdF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFy
Z3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xv
dzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3c6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfZXZhbF9zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2l0ZXJhdG9yX29wZW5fc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3RhZzoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVja191bnRhZzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eV9jaGVja190YWc6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsOgorICAgIGNh
c2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9ub190bHM6CisgICAgY2FzZSB3YXNtX3RyYW1w
b2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigp
Cit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVC
bG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRI
ZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0
SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNO
b25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVC
bG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUo
WyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBt
X2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Cisg
ICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9n
cmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAg
IGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJv
ZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAg
ICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGlj
dGlvbjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJn
IiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmls
ZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFk
WzBdLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGJv
b2wgY29tcHV0ZVVzZUNvdW50cyA9IHRydWU7CisgICAgbV91c2VDb3VudHMucmVzaXplKG1fZ3Jh
cGgtPnNpemUoKSk7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMu
IE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1w
YWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAg
ICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJl
IGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BT
OiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2Ug
ZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29k
ZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFBy
ZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAg
ICAgICAgaWYgKGNvbXB1dGVVc2VDb3VudHMpCisgICAgICAgICAgICAgICAgbV91c2VDb3VudHNb
YmxvY2suaW5kZXgoKV0gPSBPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4obV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVC
bG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCAwKTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5p
c0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4IHsgaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpIH07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Y3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHV0ZVVz
ZUNvdW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb3VudCA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vz
ZUNvdW50c1tibG9jay5pbmRleCgpXS5vcGVyYW5kKG9wZXJhbmQpICs9IDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENoZWNrcG9p
bnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygp
OyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNr
cG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2lu
dCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nv
cl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9uc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb21wdXRlVXNlQ291bnRz
ID0gZmFsc2U7CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw3ICs5NjAsMTMgQEAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5j
dGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCi1KSVQ6OkpJVChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVl
OworICAgIHJldHVybiBtX3VzZUxPTDsKK30KKworSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2Nr
KQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKQEAgLTc1LDYg
Kzk3NCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAs
IG1fY2FuQmVPcHRpbWl6ZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFs
c2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKKyAgICAsIG1fdXNlTE9MKGNvbXBpbGVUeXBlID09IENvbXBpbGVUeXBlOjpMT0wp
CiB7CiB9CiAKQEAgLTEzNywxMSArMTAzNywxOSBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCkKICAgICAgICAgKyttX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsgXAog
ICAgIE5FWFRfT1BDT0RFKG5hbWUpCiAKLSNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAor
I2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lLCBkc3QsIHR5cGUpIFwKICAgICBjYXNlIG9wXyMj
bmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUlu
ZGV4KSB7IFwKLSAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAotICAgICAgICAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsg
XAorICAgICAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FsbENhc2VzIikgJiYgYXRvaShn
ZXRlbnYoInByaW50U2xvd0NhbGxDYXNlcyIpKSkgeyBcCisgICAgICAgICAgICAgICAgU3RyaW5n
UHJpbnRTdHJlYW0gY2JOYW1lOyBcCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAo
Y2JOYW1lKTsgXAorICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBjYk5hbWUudG9TdHJpbmco
KSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgKyAi
ICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCldOyBcCisgICAg
ICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0JikgeyBcCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dDYWxsQ2FzZVJhbihrZXkpOyBcCisgICAgICAgICAgICAgICAgfSk7IFwKKyAg
ICAgICAgICAgIH0gXAorICAgICAgICAgICAgZW1pdFNsb3dPcChzbG93X3BhdGhfIyNuYW1lLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIGRzdCwgdHlwZSk7IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5F
WFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA2NCw0
NiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJ
TkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRT
bG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93
XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09Q
Q09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChu
YW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAg
ZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBc
CisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAg
ICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNs
b3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYWxsQ2FzZVJhbihTdHJpbmcga2V5KQor
eworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90
Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgp
OworICAgIH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2
NF90IHZhbHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgo
dmFsdWUgJSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7
Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29k
ZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxNSArMTE1OSw4NCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsK
LSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3Rh
cnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJv
dmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFi
bGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdz
IGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUwor
CisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAg
bV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0
byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9j
aygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5j
b250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3Nv
cnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgZm9y
IChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRv
dGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21f
Y3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0Zv
ckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9j
dXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJl
bnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9t
UHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29y
cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3Jz
U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVj
ZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAg
KCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVk
ZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21Q
cmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBy
ZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0
ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJs
b2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4
KCldOworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3Vz
ZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3Bp
bGxDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7Cisg
ICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0
Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3Zl
biBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxl
LgorICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBl
dmVyIGhpdC4KKyAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JC
eXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMu
YXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKTsKQEAgLTI3OCw0NiArMTI3NSw0MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICNlbmRpZgogCisKKyAgICAgICAgaWYgKGZhbHNl
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBiZWZvcmUgYmMjIiwgbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7Cisg
ICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAob3Bj
b2RlSUQpIHsKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChsZXNzKQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGdyZWF0ZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJl
cSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGlzX2NvbnN0cnVjdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCi0gICAgICAgIERFRklORV9T
TE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0
KQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQotICAgICAgICBERUZJTkVfU0xP
V19PUChnZXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5
X2lkX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1
bmNfZGVjbF9pbl9ldmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9w
ZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQot
ICAgICAgICBERUZJTkVfU0xPV19PUCh1bnJlYWNoYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AodGhyb3dfc3RhdGljX2Vycm9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlf
d2l0aF9zcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0
X2VudW1lcmFibGVfbGVuZ3RoKQotICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJs
ZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZykKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfY2xvbmVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3Vt
ZW50c19idXR0ZXJmbHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0KQotICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobmV3X3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3Ip
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHBv
dykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeVZhbD4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGlzX2NvbnN0cnVjdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rv
cj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hl
YXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1
YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3Zh
bF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5F
dmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5l
X2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19l
cnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19P
UChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVy
PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0Nl
bGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1l
bnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3Bl
Y1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9h
cmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+
KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4o
KS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlz
ZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQ
cm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0
KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90
aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAg
ICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5t
X2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVf
T1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzOTIs
MTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVf
T1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3Nh
bXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQp
CiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19P
UChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikK
ICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkK
QEAgLTQ3NCwxMCArMTQ3Miw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAg
ICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAgICBERUZJ
TkVfT1Aob3BfaXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfZnVu
Y3Rpb24pCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBE
RUZJTkVfT1Aob3BfdHlwZW9mKQorCisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQorICAgICAg
ICBERUZJTkVfT1Aob3BfbGVzc2VxKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcikKKyAg
ICAgICAgREVGSU5FX09QKG9wX2dyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0
X2VudW1lcmFibGVfbGVuZ3RoKQorCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tl
ZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1
dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1
ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgYXV0
byBjb3VudCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCYgY291bnRlciA9IG1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQp
OworICAgICAgICAgICAgICAgIC0tY291bnRlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWNvdW50
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT09QUzogRG8gdGhpcyBsYXppbHkgaW4gc2xv
dyBwYXRoIGNyZWF0aW9uL3NwaWxsRm9yQ2FsbAorICAgICAgICAgICAgICAgICAgICAvL21fc3Bp
bGxDYW5kaWRhdGVzLmFwcGVuZChvcGVyYW5kKTsKKworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGdwcik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlBS
UmVnIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xvYmJlcihmcHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0t
OykgeworICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVC
bG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAg
ICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2co
IkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwog
ICAgIH0KQEAgLTQ5OCw2ICsxNTcwLDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQ
YXNzKCkKICAgICBtX2ptcFRhYmxlLmNsZWFyKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYXNl
UmFuKFN0cmluZyBrZXkpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFw
PFN0cmluZywgdWludDY0X3Q+PiBzbG93Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93
Q2FzZXMuY29uc3RydWN0KCk7CisgICAgfSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMu
Z2V0KCk7CisgICAgdWludDY0X3QgdmFsdWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+
dmFsdWU7CisgICAgaWYgKCh2YWx1ZSAlIDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihr
ZXksICI6ICIsIHZhbHVlKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIHsKICAgICBtX2dldEJ5SWRJbmRleCA9IDA7CkBAIC01MTYsMTQgKzE2MDIsMjUgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxl
cyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0g
bV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAg
ICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nh
c2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5i
eXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBC
eXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNl
Lmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8g
PSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5k
ZXgpLnB0cigpOworCisgICAgICAgIGlmIChnZXRlbnYoInByaW50U2xvd0Nhc2VzIikgJiYgYXRv
aShnZXRlbnYoInByaW50U2xvd0Nhc2VzIikpKSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBuYW1lOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobmFtZSk7CisgICAgICAg
ICAgICBTdHJpbmcga2V5ID0gbmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3RyaW5nOjpudW1i
ZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVzW2N1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07CisgICAgICAgICAgICBwcm9iZShbPV0oUHJvYmU6OkNv
bnRleHQmKSB7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VSYW4oa2V5KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVD
YXNlUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkp
CkBAIC01ODAsNyArMTY3Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTks
NiArMTY5NSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERF
RklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5j
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzEsMTkgKzE3MzAs
MzQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AocmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0b19w
cm9wZXJ0eV9rZXkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlzX2NhbGxhYmxl
KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZikKKworICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChsZXNzKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChsZXNzZXEp
CisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXIpCisgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0
ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIp
OwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nh
c2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3Qg
ZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+
dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4u
Iik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVy
LT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2Rl
Z2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9m
ZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1
dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFscmVhZHkg
ZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdT
bG93Q2FzZTsKICAgICB9CkBAIC02ODgsNiArMTgwMiw4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0
aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0g
dHJ1ZTsgLy8gT09QUzogaGVscGZ1bCBmb3IgcnVubmluZyBMT0wgdy9vdXQgREZHLgogICAgIAog
ICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKICAgICBjYXNlIEdsb2JhbENv
ZGU6CkBAIC03NzgsNiArMTg5NCw4OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5n
KEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVs
KCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIGJv
b2wgcHJpbnRFYWNoT1NSID0gZ2V0ZW52KCJwcmludEVhY2hPU1IiKSAmJiAhIWF0b2koZ2V0ZW52
KCJwcmludEVhY2hPU1IiKSk7CisKKyAgICBpZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHkoKSkgewor
ICAgICAgICBKdW1wTGlzdCBleGl0Q29tbW9uOworICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBt
X2V4aXRKdW1wcykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5maXJz
dDsKKyAgICAgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAgICAgIGp1
bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChwcmludEVhY2hPU1IpIHsKKyAgICAg
ICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwcmludFN0cmVhbTsKKyAgICAgICAgICAgICAg
ICBtX2NvZGVCbG9jay0+ZHVtcChwcmludFN0cmVhbSk7CisgICAgICAgICAgICAgICAgQ1N0cmlu
ZyBzdHIgPSBwcmludFN0cmVhbS50b0NTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBzdHIuYnVm
ZmVyKCktPnJlZigpOyAvLyBsZWFrIGl0LgorICAgICAgICAgICAgICAgIHByaW50KHN0ci5kYXRh
KCksICIgLT4gZXhpdCBhdCBiYyMiLCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgIlxuIik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVja3Bv
aW50IGV4aXRzLgorCisgICAgICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAg
ICAgICAgICBleGl0Q29tbW9uLmFwcGVuZChqdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAg
QVNTRVJUKCFleGl0Q29tbW9uLmVtcHR5KCkpOworICAgICAgICBleGl0Q29tbW9uLmxpbmsodGhp
cyk7CisKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6OnBjR1BSID09
IHJlZ1Q0KTsKKyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCkuY29udGFpbnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVsb3cgcmVsaWVz
IG9uIHRoaXMgYmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVt
YmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBM
TEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
T1NSV3JpdGVCYXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAs
IE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50
OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigpKSwg
cmVnVDIpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsKKyAgICAgICAg
c3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRD
b3VudGVyKCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMiwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hvbGRGb3JS
ZW9wdGltaXphdGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIs
IG51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5jZSB0
aGUgTExJbnQgUEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPihtX2NvZGVCbG9j
ayk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRyaWdn
ZXJMT0xSZW9wdGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChub25B
cmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJlclRhZ1JlZ2lzdGVy
LCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Ok51bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgc2tpcEpldHRp
c29uLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6ZU5vdyA9IGpp
dC5icmFuY2gzMigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVyVGhhbk9y
RXF1YWwsCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAorICAgICAgICAv
LyAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6Om5vcm1h
bE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4o
KTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9TUkV4
aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAgICAgICAgLy8g
ICAgZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNv
ZGUoKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIp
OworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAg
ICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUklu
Zm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6IAorICAgICAg
ICAvLyAxLiBTdG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAgICAgICAvLyAy
LiBqZXR0aXNvbiBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8gMy4gd3JpdGUg
YmFycmllciBMTEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5r
KHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIxNjUsNyBAQCBDb21w
aWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQ
dHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0
YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQg
OiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFjaGlu
ZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIxNzYsNyBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5r
VG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwogICAgIH0K
ICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJl
Y3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkp
OworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
KTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJ
VCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVz
dWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIsNiArMjI3MCw5
NTEgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3Rh
bEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21w
aWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sK
KyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXpl
KCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOwor
ICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmFuaz4KK1ZlY3RvcjxSZWcsIDMyPiBjb21wdXRlQWxsb3dlZFJlZ3MoKQor
eworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRl
IGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1
dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMK
KyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFZlY3Rv
cjxSZWcsIDMyPiBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJl
Z2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAg
ICAgIGlmIChhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFs
bG93ZWQuYXBwZW5kKHJlZyk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBC
YW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6
dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcp
KQorICAgICAgICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFs
bG93ZWQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRHUFJzKCkKK3sKKyAg
ICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRp
ZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJl
LCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAg
IC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0
b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Cisg
ICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOwor
ICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVn
LCAzMj4mIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0
ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0
KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0
aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1z
IGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4u
CisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisK
K0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAh
PSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUu
aXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFs
dWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9i
YmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChS
ZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24g
aGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOwor
ICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9j
ZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0K
KyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50
IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6
CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwK
KyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5k
IHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3
aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBl
c3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lz
ZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5k
IHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFs
dWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxv
Y2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAg
fQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdW
YWx1ZS5vcGVyYW5kKSkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBS
cygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2Fs
bChHUFJSZWcgdG9JZ25vcmUsIEZQUlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAvLyBPT1BTOiB0
aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsK
KyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsK
KyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVn
VmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFu
LmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBl
KHJlZ1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnLmZwcigp
ICE9IHRvSWdub3JlRlBSKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnLmdw
cigpICE9IHRvSWdub3JlKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9
CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVk
UmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50
RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
KnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JT
cGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRDb3VudCh1aW50
NjRfdCBjb3VudCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICBmb3IgKHVp
bnQ2NF90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICArK2NvdW50ZXI7CisgICAg
ICAgIGlmIChjb3VudGVyICUgMTAwMDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUnVu
dGltZSBsb2FkIGNvdW50OiAiLCBjb3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0
b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRU
b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2NF90IGxvYWRD
b3VudCA9IDA7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJl
ZyByZWcgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gc3RkOjpnZXQ8MT4odHVwbGUpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5U
eXBlID0gc3RkOjpnZXQ8Mj4odHVwbGUpOworCisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25v
cmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFu
ZFRvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQ
UigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3By
KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAg
ICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAg
IERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goKnRoaXMp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkK
KyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJh
bmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisK
KyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAg
IGlzSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShzY3JhdGNoLCByZWcuZnByKCkpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsb2FkQ291bnQ7CisgICAg
fQorCisgICAgaWYgKGZhbHNlICYmIGxvYWRDb3VudCkgeworICAgICAgICBwcm9iZShbPV0gKFBy
b2JlOjpDb250ZXh0JikgeworICAgICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRDb3VudCk7Cisg
ICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxh
bihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsK
KyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0g
U3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIp
LmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBn
cHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFu
ZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3Ig
Ynl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgor
ICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQp
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyBy
ZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tD
b3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAg
ICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAh
cmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQor
CitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9q
aXQoaml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwciho
aW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRl
R1BSKGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6
OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQ
UlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJS
ZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1f
ZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9q
aXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
Z3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6Omdwcigp
Cit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dw
cjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50
MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVy
biBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmICht
X2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
bV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVH
UFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1f
Z3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7Cisg
ICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0
dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAg
bV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6Omdw
cigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIg
PSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1f
b3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9q
aXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQu
c3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lz
dGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNr
KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpn
cHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4g
bV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVn
ID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1f
Z3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYg
aml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIo
KTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9q
aXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkK
K3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnBy
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJS
ZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVn
ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAg
ICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZh
bHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAg
ICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisK
KyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1f
b3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25O
b3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAg
IG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0K
KworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAgIG1faml0
LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKwor
SklUOjpOdW1iZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQor
eworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpOdW1i
ZXJPcGVyYW5kOjp+TnVtYmVyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsK
K30KKworRlBSUmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIg
IT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnBy
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcp
IHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zw
cik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxs
b2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuY29u
dmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAg
ICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIs
IG1fZnByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9Owor
ICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8gaXNJbnQz
MiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRl
KEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQudW5ib3hE
b3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9q
aXQuanVtcCgpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2pp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5k
KTsKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6
SW50MzJDb252ZXJ0aW5nT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5n
T3BlcmFuZDo6fkludDMyQ29udmVydGluZ09wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChtX2ppdC5zaG91bGRT
cGVjdWxhdGVJbnQzMihtX29wZXJhbmQpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBvcCB7IG1f
aml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAgICAgICAgbV9q
aXQubG9jayhtX2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIobV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9q
aXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQu
Z3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9Owor
ICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBhdXRvIGlzSW50
MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1f
aml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgICAgIG1faml0LnVuYm94
RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyNp
ZiBDUFUoQVJNNjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0Rv
dWJsZVRvSW50MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAg
ICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNz
KGZwciwgbV9ncHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1
bmNhdGVTdWNjZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQu
c2lsZW50U3BpbGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91Ymxl
VG9JbnQoKSA/IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMy
LCBtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3Bp
bGxSZWNvcmQpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3Zl
KHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAg
fSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1f
Z3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQsIHZhbHVlR1BSKTsKKwor
ICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7Cisg
ICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVPdGhlcihtX29wZXJhbmQpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOwor
CisgICAgICAgIG1faml0LnNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZw
ciA9IHRlbXBGUFIuZnByKCk7CisKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKworICAgICAgICBh
dXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gbm90RG91YmxlID0gbV9qaXQuYnJh
bmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1f
Z3ByLCBmcHIpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJN
NjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRp
Y3MoKSkgeworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFT
Y3JpcHRTZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dw
ciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxS
ZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAg
ICAgICBtX2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFz
U2Vuc2libGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9w
ZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50Rmls
bEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5q
dW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgbm90RG91YmxlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgYXV0byBub3RPdGhlciA9IG1faml0LmJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3Mg
eyB2YWx1ZUdQUiB9LCBtX2dwcik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDAp
LCBtX2dwcik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAg
bm90T3RoZXIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3RCb29sZWFuKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIp
KTsKKyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwgbV9ncHIp
OworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGlzSW50MzIu
bGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQodmFsdWVHUFIs
IG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3Bl
Y0Jvb2xlYW4pOworICAgIH0KKworICAgIHJldHVybiBtX2dwcjsKK30KKworUmVnaXN0ZXJTZXQg
SklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJl
c3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1
dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3Ry
aW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICgh
aXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9v
bGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICgh
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFu
KHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9
LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090
aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RP
YmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxD
aGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJ
bnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNC
aWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1
ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRp
ZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMy
KSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAo
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQo
dmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRv
bmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
QmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUs
IHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJ
bnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJl
bnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRl
Y29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnBy
b3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3Rh
dGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBt
X2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBt
X2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiht
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7Cisg
ICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFs
dWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBv
cGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxs
b2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAg
Zm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJl
ZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAg
ICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1Zh
bHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAg
ICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBA
QAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVy
ZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVn
aXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1Nl
Z21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQg
OiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xh
c3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xh
c3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAg
IAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2Rl
SW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAg
IHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFsUmVnaXN0ZXIs
IFNwZWN1bGF0ZWRUeXBlPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAg
ICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lz
dGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAg
IHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAg
ICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBV
c3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3
ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBs
YW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9y
IHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNv
bWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5j
ZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Niw3ICsyMTEsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRl
IEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1
YmxpYyBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJ
VDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVp
bnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7
Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXBy
ZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAg
ICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBi
ZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgotICAg
ICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVtIGNs
YXNzIENvbXBpbGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAgTE9M
CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21w
aWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVj
b2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1
cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZv
aWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAotICAg
ICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21waWxh
dGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVU
eXBlIGNvbXBpbGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29t
cGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBjb21w
aWxlVHlwZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5
cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVj
dFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29k
ZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9w
PihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2Fj
aGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7
CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGlu
ZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRo
Q2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5n
dGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNl
TE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAg
ICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVn
IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1w
bChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhv
dXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkg
KzM1MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hl
Y2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChK
dW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFk
ZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93
Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0p
OworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9
IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVu
c3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2
b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBM
aXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpA
QCAtMzMzLDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAg
ICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAg
LTM2MCw3ICszOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxl
T3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVt
cFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdy
aXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJC
YXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01
MDgsOCArNTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwg
UmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlv
bik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25k
aXRpb24pOwpAQCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJs
ZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAg
ICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiop
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiop
OwpAQCAtNTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdp
bihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxl
cl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChj
b25zdCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3Bf
bW92KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjc4LDc4ICs3MjEsMTAwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiop
OwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAg
ICAgICAgdm9pZCBlbWl0X29wX2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiopOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0Q29tcGFyZU9w
SW1wbChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzKGNvbnN0IEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAg
dm9pZCBlbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1p
dF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAg
ICB2b2lkIGVtaXRfb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
YWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxs
ZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAg
IHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVt
aXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAog
ICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVk
KTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7Cisg
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4
cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRH
UFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZv
aWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwot
ICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3Bl
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAg
ICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwg
R1BSUmVnKTsKQEAgLTc2NCw4ICs4MjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lk
IGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZv
aWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
KTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIp
OwpAQCAtNzc4LDM4ICs4NDEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlv
biosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVw
YXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQ
cm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQg
ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0
aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hG
dW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBK
dW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAg
ICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
IWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAg
ICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAg
bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
aW9uPgorICAgICAgICB2b2lkIGVtaXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1
bGF0ZWRUeXBlIGRzdFR5cGUpOwogCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55
U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAg
IHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAg
ICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC04OTEsNiAr
OTM3LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNr
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3Mu
Li4pOworICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRv
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFu
ZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQs
IEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3Bl
cmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
KyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2Fs
bDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKQEAgLTkwMiw2ICs5NjgsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIE5vUHJvZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2b2lkIGVt
aXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGluZ1BvbGljeSBzaG91bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5nUG9saWN5
OjpOb1Byb2ZpbGluZyk7CiAKQEAgLTk2MSw2ICsxMDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5k
aWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2
b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBz
dGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29t
cHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTk3MSw2ICsxMDQzLDI5MiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAg
ICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1w
KEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVt
cCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQm
KTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBS
UmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBh
cmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2Vk
LCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFu
ZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91
YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IElu
dmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTnVtYmVyT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfk51bWJlck9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIC8vIFNwZWN1bGF0ZSBu
dW1iZXIrYm9vbGVhbitvdGhlciwgYW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9yIGJpdG9w
cy4KKyAgICAgICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVz
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0K
KworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJl
ZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYg
Z3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQp
LmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVn
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYg
cmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJl
Z1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiBy
ZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxE
ZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
bV91c2VMT0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQ
UlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGdwcikub3BlcmFuZC5p
c1ZhbGlkKCkpOworCisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOwor
ICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVy
YW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vu
ZGlmCisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXJlZ1ZhbHVlKGZwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVy
YW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1
cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVy
IHwgU3BlY0Jvb2xlYW4pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090
aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9v
bCB1c2VMT0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4
aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQg
bW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxs
b2NhdGVHUFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFs
bG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJS
ZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7Cisg
ICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6
IE1ha2UgdGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0
IHRvIHNldCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2Nr
KFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2ls
ZW50U3BpbGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSA9IElu
dmFsaWRHUFJSZWcsIEZQUlJlZyB0b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOworICAgICAg
ICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAg
ICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVn
aXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJw
cmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1f
ZmFyQ2FsbHM7CkBAIC05OTAsNyArMTM0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
ZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9i
eXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7
CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzODUsODcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxv
Y2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBh
biB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUg
dGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAg
ICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsK
KyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAg
IHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwg
aXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0
aGlzID0geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9y
bWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7Cisg
ICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAg
ICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1Jl
Zy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFu
ZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0u
bWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChw
cm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHBy
b3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1
cnJlbnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKwor
ICAgICAgICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayog
bV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgVmVj
dG9yPE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAgIE9wZXJh
bmRzPHVuc2lnbmVkLCB0cnVlPiBtX2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDE2PiBtX3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBWZWN0b3I8
TG9nRW50cnk+IG1fZXhpdExvZzsKKworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0
YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9w
cmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxCeXRlY29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODggQEAKICNp
bmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAKKyNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVy
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
c0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE0NiwzNyArMTQ4LDE2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJ
bnN0cnVjCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2
b2lkIEpJVDo6ZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBncENvbXBhcmUsIERvdWJsZUNvbmRpdGlvbiBk
b3VibGVDb21wYXJlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNUZW1w
LmdwcigpLCByaHNUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBjb21wYXJlRG91YmxlKGRvdWJsZUNvbXBhcmUsIGxoc1RlbXAuZnByKCksIHJoc1RlbXAuZnBy
KCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJl
cihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB8fCAhcHJlZGljdGlvbkZvcihs
aHMpIHx8ICFwcmVkaWN0aW9uRm9yKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFy
ZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNH
UFIpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAg
ICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2xlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
bWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJl
T3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENv
bXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3Vi
bGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29t
cGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFs
LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKK30KKwogdm9pZCBKSVQ6OmVt
aXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0
ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAg
Ym94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDAp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29u
ZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5s
aW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29u
c3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHx8ICFwcmVkaWN0aW9u
Rm9yKG9wMSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNv
bmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIo
KTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlv
biA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICszNTUsNDMgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQog
eworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1w
OworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIg
PSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50
MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAg
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSBy
ZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOwor
ICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdl
dExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9w
MmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhz
R1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0
YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9w
MSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlv
biwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdl
dFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICs0MDcsODkgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAg
IEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAg
IGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNU
ZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQ
UiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJ
bnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAg
ICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihv
cDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1t
MzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsK
KyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJl
Z1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNv
bmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNv
bmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlv
bi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNp
emUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5v
blplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1i
ZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVk
aWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51
bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1
bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSk7CkBAIC0zMDAsOCArNDk4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsK
QEAgLTMyNiw4ICs1MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAt
MzUxLDEyICs1NDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBM
SFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAg
ICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1w
IGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMCk7CkBAIC0zNjksOSArNTYyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5r
KHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRo
aXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQu
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KQEAgLTM4MSwxMSArNTc0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25z
dCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRk
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVl
cyB3LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOwor
ICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAg
ICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAg
ICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92
ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0g
aW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsK
KyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAg
ICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZw
cigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAg
c2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7Cisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5w
dXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlu
cHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVO
dW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0zOTMsMTEgKzYyOCw2MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1f
c3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHRl
bXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KGlucHV0R1BSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
b25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVt
cEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1
bHRGUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRB
c0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1w
RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBS
KTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0
ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBS
LCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1
dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJp
Z0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAg
ICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2OTMsMTEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhz
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1f
cmhzOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKGxocykgfHwgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpICYmIHNob3VsZFNwZWN1
bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNU
ZW1wLmZwcigpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICAgICAg
RlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRG
UFIgPSByZXN1bHRUZW1wLmZwcigpOworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soTWF0aDo6Zm1vZERvdWJsZSwgcmVzdWx0RlBSLCBsaHNG
UFIsIHJoc0ZQUik7CisKKyAgICAgICAgICAgIHNldERvdWJsZShkc3QsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUg
cmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNT
RVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lz
dGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBl
Y3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBB
U1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChl
Y3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1Rl
bXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBj
bG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gp
OworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAu
ZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gp
OworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAg
ICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+
Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0g
ZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKwor
ICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1w
bGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBzcGlsbEZvckNh
bGwoKTsgLy8gT09QUzogbmV3IG5hbWUsIGxpa2Ugc3BpbGxFeHBlY3RpbmdTbG93UGF0aAorCisg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhz
R1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhz
LCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBt
b3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0
b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0
ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVk
SW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlz
KTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwot
ICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9z
aXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQorICAgIGJveEludDMy
KGVkeCwgSlNWYWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLSNlbHNlIC8v
IENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBD
UFUoWDg2XzY0KQpAQCAtNDY0LDcgKzgwNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
KQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3Ay
OwpAQCAtNDc0LDYgKzgxNiw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBA
IC01NjIsMTUgKzkwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3Qg
SW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5z
dHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNs
b3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyNCwxMyArMTA2NSw2NiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lD
KiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5n
ZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRl
ciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBj
YW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsK
KyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6OnRyeUVtaXRMT0xCaXRGYXN0UGF0aChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CisKKyAgICBhdXRvIGJpdE9wID0gWyZdIChHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BS
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PE9wLCBPcEJpdGFuZD4pCisgICAgICAgICAgICBhbmQzMihsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2Ft
ZV92PE9wLCBPcEJpdG9yPikKKyAgICAgICAgICAgIG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BC
aXR4b3I+KQorICAgICAgICAgICAgeG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BMc2hpZnQ+KQor
ICAgICAgICAgICAgbHNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BVcnNoaWZ0PikKKyAgICAg
ICAgICAgIHVyc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFJzaGlmdD4pCisgICAgICAgICAg
ICByc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBzZXRJbnQz
MihyZXN1bHQsIHJlc3VsdEdQUik7CisgICAgfTsKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKyAgICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzJDb252ZXJ0aW5nKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKG9w
MikpIHsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzLmdwcigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MSwxNyArMTEz
NSw4IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OwotI2VuZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRGYXN0UGF0aDxPcD4oY3VycmVudEluc3Ry
dWN0aW9uKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwpAQCAtNzYwLDMzICsxMTQ1LDEw
NiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgICAgIGxl
ZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwogICAg
IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFu
ZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQogICAgIFJFTEVB
U0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsK
KworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAg
ICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkp
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAg
ICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owog
ICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYK
IAotICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogCisgICAgU25pcHBl
dEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVu
ZEp1bXBMaXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKICAgICBpZiAocHJvZmlsaW5n
UG9saWN5ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1pdFByb2ZpbGluZykKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MuZ3By
KCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigp
KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiks
IFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjSW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0
SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkg
eworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQor
CisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3Vs
dEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAo
cmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9u
bHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50
MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwogI2Vsc2UKQEAgLTgwMyw3ICsxMjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNv
bnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRS
ZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTg0OSwxOSArMTMwNyw4IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQ
YXRoKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKKyAgICBpZiAo
dHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICBy
ZXR1cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQ7CkBAIC04NzMsMjEgKzEzMjAsNzcgQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFs
aWRGUFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIg
ZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIo
KSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAg
ICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmln
aHRTaGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAg
IGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
SW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIs
MTggKzE0MDUsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJo
c0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhz
RlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAg
IE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRG
UFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLCByaHNGUFIs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRB
ZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsK
ICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRk
SUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRk
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsK
KyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxNDc1LDM1IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBh
cyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyBy
ZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBz
cmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcg
cmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAg
ICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNl
CiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
QEAgLTk0MSwxOSArMTUxMiwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlN
YXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3Ms
IHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7
CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCBy
ZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkp
OwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1w
cyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVF
bmQgPSBsYWJlbCgpOwpAQCAtOTYzLDcgKzE1MzcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJl
cikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzE1NTUsODIgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisg
ICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAg
IEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJS
ZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0
VGVtcEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7
CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9
IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7
CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRD
b25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAg
ICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1w
RlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAg
ICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRU
ZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAg
ICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIg
PSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
KyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
cmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOworICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3Io
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElD
LT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9y
Ojppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3
ICsxNjM5LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAog
ICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRo
aXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2Rl
KSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYg
KGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQu
aXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
Mik7CisgICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAt
PmdwcigpIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwor
ICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQor
CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgp
OwpAQCAtMTAzNSwxMSArMTY3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmlu
YXJ5TWF0aElDCiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAg
ZWxzZSBpZiAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiBy
ZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE2OTgsOCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9
IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07
CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwpAQCAtMTA4NSw3ICsxNzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVu
YXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVu
Y3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBh
dGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9u
U3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE3NDUs
NiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKLSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE3NTUs
MzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNT
RVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkg
JiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkp
OwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwot
ICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0
T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNM
ZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdU
MyA6IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFs
aWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAg
ICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxz
ZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5k
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBA
IC0xMTU2LDIzICsxODE3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0
aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNl
bHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7
Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVy
YW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTgzMiwyMzcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25z
dERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJF
TEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJS
ZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0
VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVm
dFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0
RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAg
IGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAg
RlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdU
MDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBK
SVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewog
ICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExp
c3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1w
dHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAg
ICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNC
eXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJv
ZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxocy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBh
cml0aFByb2ZpbGUuZGlkT2JzZXJ2ZU5lZ1plcm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAg
IEZQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNU
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAg
ICAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKGxoc0dQUiwgbGhzRlBSKTsKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyaHNHUFIsIHJoc0ZQUik7CisgICAgICAgICAgICAgICAgbXVs
RG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtp
bmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDAp
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8sIGJy
YW5jaDMyKEJlbG93LCByaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSBy
aHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOwor
ICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVz
dWx0LmZwcigpOworICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRG
UFIpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUTXVsSUMqIG11
bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJ
QyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3Vy
cmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CisgICAgZW1p
dE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3Vi
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5n
cHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU51bWJlcihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAg
ICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklU
U3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1
YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1
YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6
ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7
CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9Q
T1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDExIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0
IE9wJiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZp
cnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3Rp
bmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCAr
MTQ5LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJl
dHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJl
Z2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9j
YWxsX2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAg
ICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAt
MzM0LDQ0ICszMzcsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2Fs
bFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBA
IC0zODYsNiArMzg5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZl
ZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVz
IHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMu
Li4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUg
cmVzdWx0IGhlcmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1
YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVp
bnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVz
dWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93Owor
ICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgIHNsb3dDYXNlLmp1bXBz
LmFwcGVuZChuZXh0Q2hlY2twb2ludFNsb3cpOworCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzLCByZWdUMCB9OworICAgICAgICBHUFJSZWcg
c2hvdWxkQmVSZWdUMCA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNob3VsZEJlUmVnVDAgPT0gcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1f
bmV4dCwgcmVnVDApOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25leHQsIHJlZ1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMp
OwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwpAQCAtNDU2LDYgKzQ3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisK
KyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVs
dGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMu
IEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nh
c2UgPSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDM3ICs0OTksNDQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIs
IGl0ZXJSZXN1bHRHUFIpOwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xv
d1BhdGg7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVn
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJl
c2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisgICAgICAgIHVzZWRSZWdpc3Rl
cnMuYWRkKHZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZl
ZFJlZ3MsCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVj
a3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5h
cHBlbmQoZG9uZUNoZWNrcG9pbnRTbG93UGF0aCk7CisKKyAgICAgICAgd2lsbERlZihieXRlY29k
ZS5tX2RvbmUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25l
R1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAg
ICAgewogICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDM7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKKyAgICAgICAgSnVtcExpc3QgdmFsdWVD
aGVja3BvaW50U2xvd1BhdGg7CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRo
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBl
bmQodmFsdWVDaGVja3BvaW50U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSk7CisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV92YWx1ZSk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHZhbHVlR1BSKTsKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAK
ICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpAQCAtNTE1LDEwICs1NDUsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGlu
ayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+
KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9y
TmV4dD4oKTsKQEAgLTUyNiw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2Rl
Lm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5r
KHRoaXMpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTc3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAog
ICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nh
c2UuanVtcHNbMl0ubGluayh0aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJl
ZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVn
VDA7CiAKQEAgLTU2MSw3ICs1OTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zCiAKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUz
LDggQEAgY29uc3QgY2hhciogSklUQ29kZTo6dHlwZU5hbWUoSklUVHlwZSBqaQogICAgICAgICBy
ZXR1cm4gIkxMSW50IjsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICBy
ZXR1cm4gIkJhc2VsaW5lIjsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0
dXJuICJMT0wiOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gIkRG
RyI7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkBAIC0xMDgsNyArMTEwLDcgQEAgSklUQ29k
ZVdpdGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQwogCiBKSVRDb2RlV2l0aENvZGVSZWY6
On5KSVRDb2RlV2l0aENvZGVSZWYoKQogewotICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgKGlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKSkKKyAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChp
c0RGR09yRlRMKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQog
ICAgICAgICAmJiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpCiAgICAgICAgIGRhdGFMb2coIkRl
c3Ryb3lpbmcgSklUIGNvZGUgYXQgIiwgcG9pbnRlckR1bXAobV9yZWYuZXhlY3V0YWJsZU1lbW9y
eSgpKSwgIlxuIik7CiB9CkBAIC0yMzcsNiArMjM5LDExIEBAIE5hdGl2ZURPTUpJVENvZGU6Ok5h
dGl2ZURPTUpJVENvZGUoQ29kZVIKICNpZiBFTkFCTEUoSklUKQogUmVnaXN0ZXJTZXQgSklUQ29k
ZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoQ29k
ZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCkKIHsKKyAgICAvLyBGb3IgQmFzZWxpbmUgSklULCB0aGlz
IGlzIHRyaXZpYWxseSB0cnVlLgorICAgIC8vIEZvciBMT0wgSklULCBldmVyeXRoaW5nIGlzIGFs
cmVhZHkgc3BpbGxlZCB0byB0aGUgc3RhY2sgYXQgZWFjaCBvcGNvZGUsIHNvIHdoZW4gd2UKKyAg
ICAvLyBnbyB0byB0aGUgb3BfY2F0Y2gsIHRoZSBsaXZlIHN0YXRlIG11c3QgYWxyZWFkeSBiZSBp
biB0aGUgcmlnaHQgcGxhY2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEFsc28sIG9wX2NhdGNoIGhh
cyBubyBpbmNvbWluZyByZWdpc3Rlci90eXBlIHByb29mIHN0YXRlLCBzbyBpdCdzIHRyaXZpYWwg
dG8gY2F0Y2gKKyAgICAvLyBhbiBleGNlcHRpb24gaW4gTE9MIGp1c3QgYnkganVtcGluZyB0byBv
cF9jYXRjaC4KICAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBj
bGFzcyBKSVRUeXBlIDogdWludDhfdCB7CiAgICAgSG9zdENhbGxUaHVuaywKICAgICBJbnRlcnBy
ZXRlclRodW5rLAogICAgIEJhc2VsaW5lSklULAorICAgIExPTEpJVCwKICAgICBERkdKSVQsCiAg
ICAgRlRMSklUCiB9OwpAQCAtNjcsMzYgKzY4LDIzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiB0eXBlTmFtZShKSVRUeXBlKTsKIAotICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRv
bVRpZXJKSVQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkJhc2VsaW5lSklUOwot
ICAgIH0KLSAgICAKICAgICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKSVRU
eXBlIG5leHRUaWVySklUKEpJVFR5cGUgaml0VHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
aml0VHlwZSkgewotICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICAg
ICAgcmV0dXJuIEpJVFR5cGU6OkRGR0pJVDsKLSAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6RlRMSklUOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBKSVRUeXBlOjpOb25lOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBi
b29sIGlzRXhlY3V0YWJsZVNjcmlwdChKSVRUeXBlIGppdFR5cGUpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgogICAgICAgICBj
YXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGRlZmF1bHQ6CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgorICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMDcsNyArOTUsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNlIEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpOb25lOgorICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAg
ICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMTYsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgc3dpdGNoIChqaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkRG
R0pJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTEyNCw2ICsxMTcsMjQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgc3RhdGljIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KEpJVFR5cGUgaml0VHlw
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5
cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjYXNlIEpJVFR5cGU6
Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBlY3Rl
ZExvd2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNFeGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKQEAgLTE0NSw5ICsxNTYs
MTkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzTG93ZXJPclNhbWVUaWVyKGV4
cGVjdGVkTG93ZXIsIGV4cGVjdGVkSGlnaGVyKTsKICAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1
c2VzUmVwbGFjZW1lbnRDb2RlQmxvY2soSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6
REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUOworICAgIH0KICAgICAKICAgICBz
dGF0aWMgYm9vbCBpc09wdGltaXppbmdKSVQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKKyAgICAg
ICAgcmV0dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlw
ZTo6RlRMSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzREZHT3JGVEwoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKICAgICAgICAgcmV0
dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRM
SklUOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhj
ZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2
b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhCiAgICAgICAgIC8vIHdpdGgg
dGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhlIG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFu
aW5nbGVzcwogICAgICAgICAvLyBhbmQgY2FuIGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBw
cm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50YXJnZXQKICAgICAgICAgLy8gaW4gdGhlIHByb3Bl
ciBmcmFtZS4KLSAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKCFKSVRDb2RlOjppc0RGR09y
RlRMKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjYXRj
aFBDRm9ySW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMo
KS5hdChoYW5kbGVyLT50YXJnZXQpLnB0cigpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGNh
dGNoUm91dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIK
ICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2xv
d1BhdGhDYWxsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDUsNiArMTQ2LDcgQEAgQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2Ug
aXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwg
dG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU5LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rp
b24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRo
ZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBA
IC0xNjcsMjUgKzE3MCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xv
d0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nh
c2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAg
aWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZv
aWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MSwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNf
SU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAo
IW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAh
PSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMu
bGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9
IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7
IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQs
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNv
bnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVT
bG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1
bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkp
OworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7Cisg
ICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xv
d0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICszOTks
NiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBz
dG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkBAIC03MTcsNiArNzA1LDE4
IEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4g
RUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0U2xvd09wKEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBT
cGVjdWxhdGVkVHlwZSBkc3RUeXBlKQoreworICAgIHNwaWxsRm9yQ2FsbCgpOworICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBmdW5jdGlv
bik7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBpZiAobV91c2VMT0wgJiYgZHN0Lmlz
VmFsaWQoKSkgeworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBkc3RUeXBlOworICAgICAgICB3
aWxsRGVmKGRzdCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAg
ICAgfTsKIAotICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRF
bWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkp
OwogCiAgICAgICAgIGlmIChtX2dlbmVyYXRlRmFzdFBhdGhPblJlcGF0Y2gpIHsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3Rv
bT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgog
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0Mgewog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzUzLDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdhbGxv
YyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2FuIG1h
a2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYgKHNy
Yy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE0LDUzIEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwog
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdU
MDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQg
c2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFs
bG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcg
PSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAg
ICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAg
ICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAg
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAg
ICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5h
bE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MCw1MCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQ
UjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVu
dCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9y
VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywg
Y29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFz
SW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBp
bnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQ
UiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VW
YWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Ug
a25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1w
bGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJ
IHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjMsOTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0g
Ynl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZh
bCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8v
IFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlz
IGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2Vs
bHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9i
eV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1
ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2Zz
LmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVt
cENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3Rv
R1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3By
KCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNw
ZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2Uo
KnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywg
cHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOwor
ICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAg
ICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVt
cC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCks
IGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQ
UiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
R1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
IGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAg
ICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBz
Y3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
KworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5j
ZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0
IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11
c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJv
bC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qy
LCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJv
dG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAg
cmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAg
IHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNb
bV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVH
UFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI0LDI5IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NCw3MiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
anVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090
aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAg
ICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRH
UFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3Vs
dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAor
ICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191
bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0K
IAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjIsMzUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02NCkKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJv
LCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0yNjgsMTEgKzQ5OCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5z
dHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJl
cj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVn
VDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2
NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4
MiwyMSArNTI4LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5w
dXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQz
Mk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMy
TWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0g
ICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5
cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdU
MCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwg
cmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0
X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTQsNDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2Rl
Lm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENl
bGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDMsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2Jq
ZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2Jq
ZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVl
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkK
KyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgo
QWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZh
bHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
dmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0zNTUsNyArNzA4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUu
bV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7Cisg
ICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI3LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1t
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVj
dChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYg
flNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmlt
aXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJl
Z1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBz
cmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcwLDIwMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJv
bChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFs
dWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
YXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5
cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Nl
dF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlv
bk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9u
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJl
Z1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywg
Ynl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlz
LCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rp
b24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rp
b25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0
aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2
YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogd2UgY291bGQg
aGFuZGxlIG1vcmUgc3R1ZmYgaW5saW5lOiBzdHJpbmdzLCBiaXRpbnQsIG9iamVjdHMgdGhhdCBh
cmVuJ3QgbWFzcXVlcmFkZXIsIGV0Yy4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGJlbG93LgorICAgICAgICAg
ICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVl
IHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBj
bGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFs
c2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2Fp
bnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZs
aXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVl
KGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBi
aXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hp
Y2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSku
CisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2ls
bCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAg
Y29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
IAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
Y29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFs
LCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMg
aW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0
Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJG
UFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
Uiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhw
ciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVj
b2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25k
aXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0
aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRy
dXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBS
VGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNo
MS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigp
OworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0
MCw0NiArOTc1LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIo
c3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2Ny
YXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNj
cmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhl
IGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxp
bmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNl
cyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisg
ICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1t
ZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQor
fQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90
aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5v
dENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVx
dWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2Ny
YXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0
Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNr
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVt
cChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7
Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
LSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBj
YXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1t
ZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1t
ZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4
OCwxMCArMTEwNiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBl
bHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTM0LDI2
IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGlu
ZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTY1LDM0MiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVy
LmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBi
cmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2Vs
bCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVk
KTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVj
dWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Cisg
ICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQp
OworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVh
bC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRl
ci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEu
bV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+
Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBBU1NFUlQodXNlTE9MKCkp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAg
IFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9w
RXE+Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFs
OworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERv
dWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVz
Q291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmlu
ZyhyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChvcGVyYXRp
b25Db21wYXJlU3RyaW5nRXEsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAg
ICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
SW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsK
KyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVE
b3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhz
VGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQg
ZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5
dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3As
IE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhdXRv
IGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJl
ID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3Zl
blR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICBzcGlsbEZvckNh
bGwoKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0Vx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhz
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihn
cENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91
YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIp
LCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgor
CisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhz
R1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
IH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93
Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxo
c0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwg
cmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2Ugewor
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
KyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9y
ZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAg
IEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRv
bmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0
b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE1MTYsMTc4IEBA
IHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICgh
dmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDog
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29t
cGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJo
c0dQUik7CisKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGlmICghaXNFcSkKKyAg
ICAgICAgICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhs
aHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICAgICAg
Y29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1w
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAg
ICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1w
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAg
ICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBk
byBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAg
ICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CiAKICNpZiBVU0UoQklHSU5U
MzIpCi0gICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUg
U3RyaWN0RXEpOgotICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0g
ICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8
IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMg
KGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNo
IGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVz
ZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0
IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBt
YWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0
IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdo
IGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1
MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0g
ICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxz
aGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwot
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRv
bmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVn
VDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3Zl
ciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8v
IEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUg
aXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBh
cmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAg
ICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAgICAgICAgICAgLy8gSnVtcCBz
bG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgICAgIG1v
dmUobGhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgb3I2NChyaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVzdWx0R1BSKSk7CisK
KyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRl
c3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAg
ICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICAgICAgSnVtcCBsZWZ0T0sgPSBi
cmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51
bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAg
ICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxp
bmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChpc0VxKQorICAgICAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyNlbmRpZgorICAgICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAg
ICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUs
IEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1Q1KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJ
R0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAo
bGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRv
bmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAg
ICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0
IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0
ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJy
YW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQg
aWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1h
a2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElm
IGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBo
aWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1
YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdU
MSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBh
ZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJl
Z1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIg
c3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3Mg
dGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYg
Ym90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsg
cmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAj
ZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBj
ZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9y
NjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
LQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYg
aXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYg
aXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmso
dGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7
CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5n
cykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVn
VDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAg
ICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3Mg
YW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBp
dCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBs
ZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihy
ZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAg
ICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1Qw
LCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEp
CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwg
cmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQs
NjggKzE3MDUsMTY0IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4K
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMg
PSBieXRlY29kZS5tX3JoczsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlz
RXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBO
b3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRP
cmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVl
c0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAg
ICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkg
eworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5n
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6
IGNhbiBkbyBhIGxvdCBiZXR0ZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMg
aGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogI2lmIFVTRShC
SUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0
byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJs
ZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAg
IGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAg
ICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8g
VGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUg
bmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIK
LSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4g
YWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGln
aCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8
PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRv
dWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAg
IG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dl
c3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRk
NjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsK
LSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVP
ckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChF
cXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAg
bW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMg
YSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwg
cmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChy
ZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAgICAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
ICAgICBtb3ZlKGxoc0dQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBvcjY0KHJoc0dQUiwgdGVt
cEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwodGVtcEdQUikpOwor
CisgICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0
ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAg
ICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAgIGF1dG8gbGVmdE9LID0g
YnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIobGhzR1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGF1dG8gcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5s
aW5rKHRoaXMpOworICAgICAgICAgICAgaWYgKGlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVt
cChicmFuY2g2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsK
LSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2Ug
ZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlz
IERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7Cisg
ICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAg
ICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xv
d1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8g
VGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUg
bmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIK
KyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGws
IHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVh
dmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBh
ZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwg
cmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1Qz
LCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVn
VDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpT
dHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAg
ICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qg
b25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFu
ZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhp
bmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVk
IHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAj
ZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBj
ZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9y
NjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
LQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYg
aXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYg
aXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmso
dGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7
Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRh
cmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIg
c3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdU
MSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKwor
ICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlm
IGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAv
LyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAg
ICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7
CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5k
aWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsxODc1LDIyOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFK
dW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5
cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhz
R1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
ICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAg
IGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdU
MCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0Jp
Z0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsK
LQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJp
Z0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmln
SW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5r
KHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBi
cmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRp
ZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAg
ICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAg
ICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAg
ICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChz
cmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJl
Z1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJp
bmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1v
dmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlw
ZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVj
dDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBk
c3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwgd2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVu
dEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55
IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkg
KzIxNTQsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2Nv
cGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdz
IGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2Nv
cGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVn
VDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIxODUsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2
bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2
bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBy
ZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MjIsOSArMjIxMCwxNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0
T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJl
Q1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyMjM0LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAm
bV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRy
VGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8g
YmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3Mo
KSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3Rh
dGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2Vy
UmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
TnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51
bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFs
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
aXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFy
ZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQo
Y29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBy
ZXN1bHRHUFIpOwogCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0g
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIp
OworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNv
bXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJl
UHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVk
aWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21w
YXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BT
OiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJh
cnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0
IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0
byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwog
ICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBz
aXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGog
PSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyAr
K2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGop
OworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZh
cmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
dmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzIzODUsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29w
ZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNDUsMTMgKzI0MDksODQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5
dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1Rv
VGhpcykpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCBy
ZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0
KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNP
YmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJp
Y3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNl
IHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJv
dmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVjdE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYg
U3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAg
ICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVz
VG9UaGlzKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBu
ZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAg
ICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsK
KyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRl
c1RvVGhpcykpOworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVz
dWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAg
ICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAg
ICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9
CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlw
ZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwg
cmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5
cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEwNTksNiArMjQ5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRo
aXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJC
YXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwog
ICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0
YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyNTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0g
cmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3By
VGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAg
ICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3By
KCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3Ry
dWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVt
cDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAg
ICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJl
ZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJl
ZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFS
ZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRy
dXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI1NDYs
MzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4
KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVy
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYg
U3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBw
YXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0xMTYyLDggKzI1OTEsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3Vy
cmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQg
YW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emlu
ZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJl
dHVybigpKSkgeworICAgICAgICAvLyBPT1BTOiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNv
IHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgogICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5n
ZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQo
cHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVs
b3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVM
b29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI2MTksMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xv
b3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9u
IGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3Rl
clRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJ
bmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsyNjM2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5Lmxp
bmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1
c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIp
OwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI2NjIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
dXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0
ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5k
bGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0K
IApAQCAtMTI0NSw4ICsyNjcyLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29u
c3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1Jl
Z2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8
UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KQEAgLTEyNTYsMjMgKzI2OTMsNDIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNv
bnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNl
KCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3By
KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhp
cywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOwor
ICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQot
ICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVj
b2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29k
ZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVs
c2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAg
fQogfQogCkBAIC0xMzAxLDI0ICsyNzU3LDQ2IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJD
b21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisK
KyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1
bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29w
ZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBz
Y29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3BlLnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
biA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9u
KTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBm
dW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQog
CkBAIC0xMzQ5LDkgKzI4MjcsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0
IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNp
emUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFy
dC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRh
ZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcg
YXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgq
dGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAg
ICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5Owor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM2MCwxNCArMjg0OCwyOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBi
eXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmdH
UFIgPT0gcmV0dXJuVmFsdWVHUFIpOworICAgIH0KKworICAgIC8vIE9PUFM6IElubGluZSB0aGUg
YWxsb2NhdGlvbiBwYXRoIGhlcmUsIGl0IG1hdHRlcnMgZm9yIHN1bnNwaWRlci1jcnlwdG8tYWVz
CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUlu
ZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNB
cnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEzODEsMTUgKzI4ODQsMzYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBl
bnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFz
ZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBl
bnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAg
IAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzI5
MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsyOTYyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKQEAgLTE0NjEsMTUgKzI5ODksMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFi
bGVfaW5kZXhlZAogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJl
Z1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUp
OwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVK
dW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5
cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRG
b3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJh
ZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyAr
MzAwNiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkCiAKICAg
ICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2Rl
SW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4
dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBp
bGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBi
YWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9w
ZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICszMDM5
LDgxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhh
dCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0
b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRl
eFZhbHVlIHsgKnRoaXMsIGluZGV4IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUg
eyAqdGhpcywgYmFzZSB9OworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdw
cigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOwogCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAv
LyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2Fj
aGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsK
LSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAKLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2Yg
bGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMy
KEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7
Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5k
MzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
YmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBv
dXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1v
dmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0Vp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAg
ICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5l
IHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJz
dE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMTIzLDUx
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJv
cGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBl
bnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsg
Ly8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVu
dW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5l
bXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRo
aXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGlu
ZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlu
ZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAK
KyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVy
dHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwog
ICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgp
KSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0
ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChy
ZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NzQsMjEgKzMxNzcsNTEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0g
ICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgp
KSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsK
KyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQz
Mk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRl
eCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOwor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5l
bXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7Cisg
ICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7
CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgIH0KIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgSnVtcCBpbkJvdW5kcyA9
IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKwor
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRH
UFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7
CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVn
VDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRp
bWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmls
ZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYg
KzMyMzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAg
VHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlv
bjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVt
cFRvRW5kOwpAQCAtMTY1OCw2ICszMjkzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90
eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xv
Z3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisK
ICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAg
IT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBp
ZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CkBAIC0xNjcyLDYgKzMzMTAsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsK
KworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAg
c3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIs
ICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7
CkBAIC0xNjg0LDYgKzMzMjUsMTkwIEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWkKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCkpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
ZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAg
YXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZGdW5jdGlvbihpbnB1dEdQUik7CisgICAgICAgIGF1
dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpOworICAgICAgICAKKyAg
ICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAKKyAgICAgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzRnVuY3Rpb24ubGluayh0
aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBP
T1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29wX2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wSXNDYWxs
YWJsZT4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9m
X2lzX2Z1bmN0aW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wVHlwZW9mSXNGdW5jdGlvbj4oY3VycmVudEluc3RydWN0
aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBpc0Nl
bGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworICAgICAgICAKKyAgICAgICAgYXV0byBpc051
bGwgPSBicmFuY2hJZkVxdWFsKEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSwganNOdWxsKCkpOwor
ICAgICAgICBhdXRvIGlzTm9uTnVsbE5vbkNlbGwgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAg
ICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZG
dW5jdGlvbihpbnB1dEdQUik7CisgICAgICAgIGF1dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RP
YmplY3QoaW5wdXRHUFIpOworICAgICAgICAKKyAgICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAKKyAgICAgICAgaXNOdWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1
dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzTm9uTnVsbE5vbkNlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgaXNGdW5jdGlvbi5saW5rKHRoaXMpOworICAgICAgICBub3RPYmpl
Y3QubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5t
X3ZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyAgICAg
ICAgSnVtcCBzbG93UGF0aDsKKyAgICAgICAgZW1pdFR5cGVPZigKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHsgaW5wdXRHUFIgfSwgcmVzdWx0R1BSLAorICAgICAgICAgICAgWyZdIChUeXBlb2ZU
eXBlIHR5cGUsIGJvb2wgZmFsbHNUaHJvdWdoKSB7CisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fdm0tPnNtYWxsU3RyaW5ncy50eXBlU3RyaW5nKHR5cGUpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWZhbGxzVGhyb3VnaCkKKyAgICAgICAgICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0g
KEp1bXAgdGhlU2xvd1BhdGgpIHsKKyAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHRoZVNsb3dQ
YXRoOworICAgICAgICAgICAgfSk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAg
ICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3Ry
aW5nOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIoQWRk
cmVzcyhpbnB1dEdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zm
c2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CisgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganND
YXN0PFN5bWJvbFRhYmxlKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGUpKTsKKyAgICBKU1ZhbHVlIGluaXRpYWxWYWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1ZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKHN5bWJvbFRhYmxlLT5zaW5nbGV0b24oKS5pc1N0aWxsVmFsaWQoKSkgewor
ICAgICAgICAgICAgZW1pdFNsb3dPcChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1l
bnQsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZHN0LCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNjb3BlVGVtcCB7
ICp0aGlzLCBzY29wZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29w
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRy
KG51bGxwdHIpOworICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8SlNM
ZXhpY2FsRW52aXJvbm1lbnQ+KAorICAgICAgICAgICAgKm1fdm0sIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUo
KSksIGJ1dHRlcmZseSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLAorICAgICAgICAgICAgc2xv
d1BhdGgsIEpTTGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkp
OworCisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgLy8gRG9uJ3QgbmVlZCBhIG1lbW9yeSBiYXJyaWVycyBzaW5jZSB3
ZSBqdXN0IGZhc3QtY3JlYXRlZCB0aGUgYWN0aXZhdGlvbiwgc28gdGhlCisgICAgICAgIC8vIGFj
dGl2YXRpb24gbXVzdCBiZSB5b3VuZy4KKyAgICAgICAgc3RvcmVQdHIoc2NvcGVHUFIsIEFkZHJl
c3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSkpOworICAgICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKHN5bWJvbFRhYmxlKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlN5bWJvbFRhYmxlKCkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAvLyBNdXN0IGluaXRpYWxpemUgYWxsIG1lbWJlcnMgdG8gdW5kZWZpbmVkIG9yIHRoZSBU
RFogZW1wdHkgdmFsdWUuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzeW1ib2xU
YWJsZS0+c2NvcGVTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGlu
aXRpYWxWYWx1ZSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZz
ZXRPZlZhcmlhYmxlKFNjb3BlT2Zmc2V0KGkpKSkpOworICAgICAgICAKKyAgICAgICAgbXV0YXRv
ckZlbmNlKCptX3ZtKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gT09QUworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE3MDIsMTEgKzM1MjcsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
YXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6Ondp
dGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJl
c3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVn
VDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1Qw
LCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTcxNCwyOSArMzU0OCw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9s
ZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFt
ZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFy
YW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Cisg
ICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVx
dWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMy
KG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveElu
dDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwor
ICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwg
cmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszNTk3LDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQ
Uik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFu
T3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZh
bHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsK
ICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRz
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7
Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFs
dWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdz
KTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5k
cyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkp
OworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNs
b3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAg
ICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdH
UFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVl
UmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BS
KCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0
TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAg
ICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3Vs
dFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjQsNiArMTQyNCw4IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXIKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKKworICAgIC8vZGF0YUxvZ0xuKCJjb21wYXJlTGVzcywgbGhzOiAi
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksICIgcmhzOiAiLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMikpOwogICAgIAogICAgIHJldHVybiBqc0xlc3M8dHJ1ZT4oZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ay
KSk7CiB9CkBAIC0xNDkxLDYgKzE0OTMsOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uQ29tcGFyCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgc3JjMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAor
ICAgIC8vZGF0YUxvZ0xuKCJzdHJpY3RlcSwgbGhzOiAiLCBzcmMxLCAiIHJoczogIiwgc3JjMik7
CisKICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFsT2JqZWN0LCBzcmMxLCBz
cmMyKTsKIH0KIApAQCAtMTg3OSw3ICsxODgzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbk9wdGltaQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBBU1NFUlQob3B0aW1pemVk
Q29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRDb2RlQmxvY2st
PmppdFR5cGUoKSkpOworICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNERkdPckZUTChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAogICAgIGlm
ICh2b2lkKiBkYXRhQnVmZmVyID0gREZHOjpwcmVwYXJlT1NSRW50cnkodm0sIGNhbGxGcmFtZSwg
b3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKG9wdGltaXplZENvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCBiYyMiLCBieXRl
Y29kZUluZGV4KSk7CkBAIC0zNDMzLDYgKzM0MzcsNDIgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkNoZWNrSQogICAgIHJldHVybiAwOwogfQogCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29k
ZUJsb2NrKiBsb2xDb2RlQmxvY2spKQoreworICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxl
IHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRu
J3QKKyAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRl
ZmVyR0MobG9sQ29kZUJsb2NrLT52bSgpLmhlYXApOworCisgICAgaWYgKGdldGVudigicHJpbnRF
YWNoSmV0dGlzb24iKSAmJiAhIWF0b2koZ2V0ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpKSkKKyAg
ICAgICAgZGF0YUxvZ0xuKCJqZXR0aXNvbiwgZm9yY2luZyByZW9wdCBub3c6ICIsICpsb2xDb2Rl
QmxvY2spOworICAgIGxvbENvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlv
bnMoKTsKKyAgICAKKyAgICAvLyBPT1BTOiBwcm9jZXNzIHZhbHVlIHByb2ZpbGVzIGhlcmUsIHNp
bmNlIHdlJ3JlIGpldHRpc29uaW5nLCBob3BlZnVsbHkgdGhleSB1cGRhdGUgdy8gdGhpbmdzIHdl
IGNhcmUgYWJvdXQuCisKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obG9sQ29kZUJsb2NrLT52bSgp
KTsKKworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxvbENvZGVCbG9j
aywgIjogRW50ZXJlZCByZW9wdGltaXplIGZyb20gTE9MIik7CisKKyAgICBDb2RlQmxvY2sqIGxs
aW50Q29kZUJsb2NrID0gbG9sQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIC8vIFdlIG11
c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJhc2VsaW5lIGNvZGUgYmxvY2suCisgICAgQVNTRVJUKEpJ
VENvZGU6OmlzQmFzZWxpbmVDb2RlKGxsaW50Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAg
IENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBsbGludENvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsK
KyAgICBpZiAoIXJlcGxhY2VtZW50IHx8IHJlcGxhY2VtZW50ID09IGxsaW50Q29kZUJsb2NrKSB7
CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxsaW50Q29kZUJs
b2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nIExPTCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgYmVlbiBq
ZXR0aXNvbmVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNl
LCB0aGUgcmVwbGFjZW1lbnQgbXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4g
b3Bwb3J0dW5pdHkKKyAgICAvLyB0byBjaGVjayBvdXIgbG9naWMuCisgICAgQVNTRVJUKGxsaW50
Q29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICBBU1NFUlQoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGxvbENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKworICAgIC8v
IE9PUFM6IGZpZ3VyZSBvdXQgc3R1Y2sgaW4gYSBsb29wIGxvZ2ljCisgICAgbG9sQ29kZUJsb2Nr
LT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09TUkV4aXQsIENvdW50UmVvcHRpbWl6
YXRpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTksNiArMzE5LDggQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25WYWx1ZQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9j
ZXNzVHlwZVByb2ZpbGVyTG9nLCB2b2lkLCAoVk0qKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB2b2lkLCAoVk0qKSk7CiAKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9u
Tm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI4MSw4ICsy
NzcsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhd
OwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
ICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAt
NTU4LDcgKzU1Miw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
IAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRo
ZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBz
d2FwcGluZyBvbiBBUk0uCkBAIC01OTgsOCArNTkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjM5LDggKzYzMCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY4Niw4ICs2NzUsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyOSw4ICs3MTYsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc3OCw4ICs3NjMs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC04MTksOCArODAyLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTEwMCw4ICsxMDgxLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjU3LDggKzEyMzYsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29w
aWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIu
aCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTIsNTEgKzU0
LDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRleGluZ1R5
cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3Bl
cnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFz
ZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRHUFI7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5kZXhp
bmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291
bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAg
ICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAg
ICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAg
ICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmls
ZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
ICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmls
ZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVy
dHlHUFIpOworICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmco
cHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVj
Q2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VH
UFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAg
ICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5
KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAg
ICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAg
ICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAg
ICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dl
dEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
NSw0MSArMTczLDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1w
bGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VM
T0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAog
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MpOworICAgICAg
ICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dD
YXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJh
c2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5
VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Nyw2
ICsyNTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2Rl
SW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBo
ZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9v
bCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHBy
b3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTks
OCArNDIxLDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAg
ICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
YXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3Rl
cnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFp
bGFibGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlO
YW1lLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVn
VDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzOSw3ICs0NDQsNyBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQ3LDcgKzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29k
ZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
QEAgLTM1NSwxMyArNDYwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAg
ICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAg
IGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CkBAIC0zODEsNiArNDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogRG8gYmV0dGVyIGlmIHdlIGNhbiEKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qx
KTsKIApAQCAtMzk0LDEzICs1MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGls
YXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBmYXN0UGF0aEptcCwgZG9uZSwg
ZG9uZSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+
KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwpAQCAtNDIwLDQ5ICs1MjUsMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lKGMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BS
ID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwor
ICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vz
c29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5n
cHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRl
ci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAg
ICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNl
dHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BS
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGlu
dDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nl
c3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNz
b3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywg
YWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9Owor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBh
Y2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00NzIsMTggKzYzMyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVn
VDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklU
RGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMg
Y2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBp
cyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBv
ZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ5
MiwyNSArNjg3LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUK
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJ
bmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC01MjAsMTkgKzcxNyw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVy
dHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUu
ZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisg
ICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQ
UiwgcHJvcGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRj
aEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1p
dCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmll
ciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTQxLDIyMSArNzg5
LDM2OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hC
b29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJ
ZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJh
c2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGly
ZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVz
dWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAg
bm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
LmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdU
eXBlR1BSID0gdXNlTE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBu
b3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZS
ZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsK
LQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChn
ZW4pOworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdGhpc1ZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAg
IEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdGhp
c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgfQorCisgICAgeworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0K
IAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5k
KGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRH
UFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVn
IHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlk
V2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRo
VGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0
ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJv
b2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0
cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAg
ICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJl
Z2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNo
IHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3Rh
bmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBy
ZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB2
YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNl
KFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVH
UFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2Rl
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
c2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKQEAgLTc2NSw3NyArMTE2MCw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBV
c2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byBy
ZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0
ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBk
c3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChi
YXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5C
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlk
SW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZElu
ZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAg
aWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVD
bG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
cHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtODQ3LDE3ICsxMjYwLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
c29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2Fs
U2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0
Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJl
Z1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVz
dWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtODY3LDIxICsxMjg4LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFu
dFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9u
YWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7
CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3Bl
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29w
ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kp
CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3Vs
dEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04OTQsOSArMTMzMCw5
IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTA5LDI5
ICsxMzQ1LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTQwLDE1ICsxMzc2LDIwIEBAIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcg
c2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xv
dCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3Qs
IHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRj
aEdQUikpOworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1
ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAgLTk2MiwxMiArMTQwMyw2IEBAIHZvaWQgSklUOjpl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTk3OCw1MSArMTQxMyw4NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwg
c3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZz
ZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsK
KyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0
R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJl
Z1QyOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1
Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGppdEFz
c2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xv
dCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsK
ICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAg
aXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3Rl
ZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdpdGhS
ZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZM
aW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAg
ICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBu
ZWczMihvZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0R1BS
LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIG9m
ZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21J
bmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdU
MCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
IC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXN1
bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29w
ZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgotICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTEwMzYsMTAgKzE1
MDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsK
KyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKIApAQCAtMTA1MiwyNyArMTUyMCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5
cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAot
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCks
IHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAg
ICAgYnJlYWs7CkBAIC0xMDgyLDQwICsxNTUwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9w
ZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdU
MSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9w
ZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBz
dG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTI5LDIxICsxNTc5LDQ5IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
dmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBs
YWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2Nv
cGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAg
ICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAg
ICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2Nv
cGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUt
PmdwcigpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAg
ICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRH
UFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4o
WyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsK
LSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAg
ICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwg
QmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExNTQs
MjggKzE2MzIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRp
b24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFRE
WiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1p
dCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAg
ICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0
cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBv
aW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExv
Y2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRT
bG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6
CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTE5MCwxMiArMTY5NywyMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5l
cnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ug
d2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hH
UFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qw
OworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
IEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUg
dG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTIwOSwyMyArMTcyNSwzMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8v
IFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9j
YXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0
Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTI0
MiwxMCArMTc2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyNjEsNjEgKzE3ODQsMTc4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFy
Z3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQog
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAg
bG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhh
cmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBi
eXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBh
cmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7Cisg
ICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50
cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBh
cmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0g
dmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0g
cmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0b3JlNjQodmFs
dWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICBpZiAo
IXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BT
OiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBh
cm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4g
ZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVm
dWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNp
bmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFr
ZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBm
aWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9k
ZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8
ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9u
YWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIGlmIChncHJGb3JPcGVy
YW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQ
UiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1Qw
OworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IG93bmVyVmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBvd25l
ckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZChvd25lcikgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVyR1BSID0gZ3ByRm9yT3BlcmFuZChvd25l
cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgIG93bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBvd25lckdQUik7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsK
KyAgICB9CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBv
d25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAg
ICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkp
CisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwob3duZXJHUFIpOwor
ICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFu
Y2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRl
QmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBi
YXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBPcHRpb25hbDxT
aWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgc2NyYXRjaFZhbHVlLnJl
c2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4KKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93
bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwo
KnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChvd25lck5vdENlbGwuaXNTZXQoKSkKICAg
ICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgIGlmICh2
YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdl
OgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJ
ZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBz
dGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8v
ICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5
IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRv
IG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgSnVtcCB2YWx1
ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
ICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2Vs
bCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIp
OworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAg
ICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0xMzI3LDExICsxOTY3LDI2
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5
cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIs
IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEzNDEsMTAgKzE5OTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2Zp
ZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBl
bWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9w
ZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAg
c3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdU
MSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTE0
NDcsOCArMjExNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0
CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwg
cmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOwor
ICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBv
d25lciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNv
cmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50
U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQp
OworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0x
NDY2LDYgKzIxNTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lz
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAg
bV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICAKQEAgLTE1NjcsNiArMjI1NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dFByaXZhdGVOYW1lV2kKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAg
QVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3Bf
cHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBP
cDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywgIXByb2ZpbGVkREZHQ29k
ZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiBkaWQgYmVjb21lIHJlYWR5LiIpOwogICAgIApAQCAtNTUsNyAr
NTUsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIXByb2ZpbGVkREZHQ29kZUJsb2Nr
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwg
KmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDE1ICszMSwyMiBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5o
IgogCisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBK
SVRXb3JrbGlzdDo6UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlz
dDo6UGxhbj4gewogcHVibGljOgotICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgOiBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCi0gICAgICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ss
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQorICAgICAgICA6IG1fbGxpbnRDb2RlQmxvY2soY29kZUJsb2NrKQor
ICAgICAgICAsIG1fY29kZUJsb2NrVG9Db21waWxlKGNvbXBpbGVUeXBlID09IEpJVDo6Q29tcGls
ZVR5cGU6OkxPTCA/IG1fbGxpbnRDb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkgOiBtX2xsaW50
Q29kZUJsb2NrKSAKKyAgICAgICAgLCBtX2ppdChtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKSwg
bV9jb2RlQmxvY2tUb0NvbXBpbGUsIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQogICAgIHsKICAgICAgICAgbV9qaXQuZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVD
b21waWxlKCk7CisgICAgICAgIC8vIE9PUFM6IHZpc2l0IHRoaXMgaW4gY29uY3VycmVudCBnYwor
ICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9jaykgewor
ICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVhcC5wcm90ZWN0KG1fY29k
ZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVJblRocmVhZCgpCkBAIC01MywxNyArNjAsMjMgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxp
emUoKQogICAgIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQubGlu
aygpOworCisgICAgICAgIGF1dG8gc2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0geworICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRDb2RlQmxvY2spCisg
ICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVhcC51bnByb3RlY3Qo
bV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9KTsKKwogICAgICAgICBzd2l0Y2ggKHJl
c3VsdCkgewogICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGls
YXRpb24gZmFpbGVkIikpOworICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2xsaW50
Q29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CiAg
ICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNv
bXBpbGF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kb250SklUQW55
dGltZVNvb24oKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxh
dGlvbiA9IHRydWU7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5kb250SklUQW55dGlt
ZVNvb24oKTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBp
bGF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDb21waWxh
dGlvblN1Y2Nlc3NmdWw6CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuIik7Ci0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5qaXRTb29uKCk7CisgICAgICAgICAgICBtX2NvZGVC
bG9ja1RvQ29tcGlsZS0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2Nr
VG9Db21waWxlKTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmppdFNvb24oKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MSw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29k
ZUJsb2NrOyB9Ci0gICAgVk0mIHZtKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPnZtKCk7IH0KKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9ja0tleSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2s7IH0K
KyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2xsaW50Q29kZUJsb2NrLT52bSgpOyB9CiAgICAgCiAg
ICAgYm9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5nKCkKICAgICB7CkBAIC04MCwxNSArOTMsMTYgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0ZpbmlzaGVkQ29tcGlsaW5nOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgc3RhdGljIHZvaWQgY29t
cGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlw
ZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIHsKLSAgICAg
ICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKICAgICAgICAgcGxhbi5jb21waWxlSW5UaHJlYWQoKTsKICAgICAgICAgcGxhbi5m
aW5hbGl6ZSgpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVC
bG9jazsKKyAgICBDb2RlQmxvY2sqIG1fbGxpbnRDb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9ja1RvQ29tcGlsZTsKICAgICBKSVQgbV9qaXQ7CiAgICAgTG9jayBtX2xvY2s7CiAg
ICAgYm9vbCBtX2lzRmluaXNoZWRDb21waWxpbmcgeyBmYWxzZSB9OwpAQCAtMjMzLDkgKzI0Nywx
MSBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgICAgIGNv
ZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisK
KyAgICBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlID0gT3B0aW9uczo6Zm9yY2VMT0woKSA/
IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA6IEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lOwogICAg
IAogICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSB7Ci0gICAgICAgIFBsYW46
OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAg
ICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI0OSw3ICsy
NjUsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgICAg
IAogICAgICAgICBpZiAobV9udW1BdmFpbGFibGVUaHJlYWRzKSB7CiAgICAgICAgICAgICBtX3Bs
YW5uZWQuYWRkKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwor
ICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxv
Y2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAg
ICBtX3BsYW5zLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fcXVldWUuYXBwZW5kKHBsYW4p
OwogICAgICAgICAgICAgbV9jb25kaXRpb24tPm5vdGlmeUFsbChsb2NrZXIpOwpAQCAtMjczLDE0
ICsyODksMjQgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAg
IC8vIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBpc3N1ZS4gSWYgdGhlIGNvbmN1cnJlbnQgSklUIHRo
cmVhZCBpcyBjb252b3llZCwgd2UgcmV2ZXJ0IHRvIG1haW4KICAgICAvLyB0aHJlYWQgY29tcGls
ZXMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGFzIGdvb2QgYXMgaWYgd2UgaGFkIG11bHRpcGxlIEpJ
VCB0aHJlYWRzLiBNYXliZSB3ZQogICAgIC8vIGNhbiBkbyB0aGF0IHNvbWVkYXkuCi0gICAgUGxh
bjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAg
IFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7CiB9CiAKKy8qCiB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
CiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJw
cmV0ZXJUaHVuaykKKworICAgIGF1dG8gaXNDb21waWxlZCA9IFsmXSB7CisgICAgICAgIGlmIChj
b2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJl
cGxhY2VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH07CisKKyAgICBpZiAoaXNDb21waWxlZCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgYm9vbCBpc1BsYW5uZWQ7CkBAIC0yOTYsMTcgKzMyMiwyNCBAQCB2b2lkIEpJVFdv
cmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogCiAgICAgfQogICAgIAogICAgIC8vIE5vdyBp
dCBtaWdodCBiZSBjb21waWxlZCEKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklU
VHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAgICBpZiAoaXNDb21waWxlZCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5
IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdpdGggdGhlCi0gICAgLy8g
YmFzZWxpbmUgSklULgotICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7Ci0gICAgCi0gICAg
Ly8gT0ssIGp1c3QgY29tcGlsZSBpdC4KLSAgICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywg
SklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0g
ICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsK
KworICAgIGlmIChPcHRpb25zOjpmb3JjZUxPTCgpKSB7CisgICAgICAgIENvZGVCbG9jayogbG9s
Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOworICAgICAgICBKSVQ6OmNv
bXBpbGUodm0sIGxvbENvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICBsb2xDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShsb2xDb2RlQmxv
Y2spOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQg
cHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRoIHRo
ZQorICAgICAgICAvLyBiYXNlbGluZSBKSVQuCisgICAgICAgIGNvZGVCbG9jay0+cmVzZXRKSVRE
YXRhKCk7CisgICAgICAgIAorICAgICAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgorICAgICAg
ICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUs
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxv
Y2spOworICAgIH0KIH0KKyovCiAKIHZvaWQgSklUV29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxh
bnMmIG15UGxhbnMpCiB7CkBAIC0zMTQsNyArMzQ3LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Zmlu
YWxpemVQbGFucyhQbGFucyYgbQogICAgICAgICBwbGFuLT5maW5hbGl6ZSgpOwogICAgICAgICAK
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgICAgIG1fcGxhbm5lZC5y
ZW1vdmUocGxhbi0+Y29kZUJsb2NrKCkpOworICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4t
PmNvZGVCbG9ja0tleSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFdvcmtsaXN0LmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwb2xsKFZNJik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlTGF0ZXIo
Q29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKSk7Ci0gICAgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAg
IAogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCYgZW5zdXJlR2xvYmFsV29ya2xpc3QoKTsKICAgICBz
dGF0aWMgSklUV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKTsKQEAgLTY2
LDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNz
IFRocmVhZDsKICAgICAKKyAgICAvL3ZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICB2b2lkIGZpbmFsaXplUGxhbnMoUGxhbnMmKTsKICAgICAKICAgICBQbGFucyBtX3F1ZXVlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtN
YWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10o
c2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShz
aXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3Rk
OjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21h
cCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0Nv
ZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2Rl
UHRyKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICBpZiAoaXNX
ZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNvZGVCbG9jay0+aml0VHlw
ZSgpKSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJl
dHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKSk7CiAgICAgZWxzZQogICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKS5sYWJlbEF0T2Zm
c2V0KDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENh
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklU
OjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVz
dCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0
LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAg
IGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0
LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0
cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDggKzM2MywxMCBAQCBp
bmxpbmUgYm9vbCBzaG91bGRKSVQoQ29kZUJsb2NrKiBjb2RlQmxvCiB9CiAKIC8vIFJldHVybnMg
dHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9TUi4KLWlubGluZSBib29sIGppdENvbXBpbGVBbmRT
ZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCitpbmxpbmUgQ29k
ZUJsb2NrKiBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApKQogeworICAgIC8vIE9PUFM6IEltcGxlbWVudCB0aGlzIHcuci50IExPTC4KKwog
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsgLy8gTXkgY2FsbGVycyBkb24n
dCBzZXQgdG9wIGNhbGxmcmFtZSwgc28gd2UgZG9uJ3Qgd2FudCB0byBHQyBoZXJlIGF0IGFsbC4K
ICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIApAQCAtMzczLDI5ICszNzUsNDUg
QEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIGlmICghY29k
ZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9D
S19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90
IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkp
OwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRo
cmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJl
R2xvYmFsV29ya2xpc3QoKS5wb2xsKHZtKTsKLSAgICAKKworICAgIGF1dG8gbG9sQ29kZUJsb2Nr
ID0gWyZdKCkgLT4gQ29kZUJsb2NrKiB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50ID0gY29kZUJsb2NrLT5vcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgICAgICBp
ZiAocmVwbGFjZW1lbnQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH07CisKKyAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKICAgICBzd2l0Y2ggKGNvZGVCbG9jay0+aml0VHlwZSgp
KSB7CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDogewogICAgICAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgQ29kZSB3YXMgYWxyZWFkeSBjb21waWxlZC4i
KTsKICAgICAgICAgY29kZUJsb2NrLT5qaXRTb29uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gY29kZUJsb2NrOwogICAgIH0KICAgICBjYXNlIEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bms6IHsKICAgICAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0
KCkuY29tcGlsZUxhdGVyKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIHJldHVybiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDsKKyAgICAgICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9jaygpKQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGRhdGFMb2co
IlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBMTEludDogIiwgKmNvZGVCbG9jaywgIlxuIik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBi
bG9jayBpbiBMTEludDogIiwgKmNvZGVCbG9jaywgIlxuIik7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFNsb3dQYXRo
UmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFt
ZSwgRW50cnlLaW5kIGtpbmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFt
ZSwgRW50cnlLaW5kIGtpbmQpCiB7CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLAogICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5hbWUsICIgd2l0aCBleGVj
dXRlQ291bnRlciA9ICIsCkBAIC00MDYsMTggKzQyNCwyMSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGVudHJ5T1NSKENvZGVCCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwg
bnVsbHB0cik7CiAgICAgfQogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKLSAgICBpZiAo
IWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spKQorICAgIENvZGVCbG9j
ayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29k
ZUJsb2NrKTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRV
Uk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAiT1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIpKTsKKyAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAiT1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIp
KTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29kZUJsb2NrKTsKICAg
ICAKICAgICBpZiAoa2luZCA9PSBQcm9sb2d1ZSkKLSAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhj
b2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CisgICAg
ICAgIExMSU5UX1JFVFVSTl9UV08oY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0
YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKGtpbmQgPT0gQXJpdHlDaGVjayk7
Ci0gICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNh
bGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgIExM
SU5UX1JFVFVSTl9UV08oY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNh
bGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOwogfQogI2Vs
c2UgLy8gRU5BQkxFKEpJVCkKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCitzdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGVudHJ5T1NSKENhbGxGcmFtZSosIENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBjaGFyKiwgRW50cnlLaW5kKQogewogICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVT
b29uKCk7CiAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKQEAgLTQyNywz
MSArNDQ4LDMxIEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcikKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwot
ICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwg
UHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMp
OwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anND
YWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxG
cmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1
dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxs
IiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rp
b25fZm9yX2NvbnN0cnVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBl
bnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhl
Y3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9m
b3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUs
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxl
KCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3QiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9m
dW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0g
ICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxl
ZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGVudHJ5
T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkp
LT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9u
X2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsKICAg
ICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2si
LCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5
Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3Ip
CkBAIC00ODAsMTkgKzUwMSwyMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAg
ICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgCi0g
ICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0g
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykKICAgICAgICAgTExJTlRf
UkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VW
RU5UKGNvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KSk7CisgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVCbG9jaywgIm9zckVu
dHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAKLSAgICBBU1NFUlQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VS
VChjb21waWxlZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8
IGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKIAotICAg
IGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKTsKKyAg
ICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGVN
YXAoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24g
PSBjb2RlTWFwLmZpbmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGNv
ZGVMb2NhdGlvbik7CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOworCisgICAgY2FsbEZyYW1l
LT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAogICAgIExMSU5UX1JFVFVS
Tl9UV08oanVtcFRhcmdldCwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOwogI2Vsc2UgLy8gRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMywxMCBAQCBzdGF0aWMgdm9pZCBk
aXNhYmxlQWxsSklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50
T3B0aW9ucygpCiB7CisgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlvbnM6
OmZvcmNlTE9MKCkgPSAxOworICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRl
ZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmco
KSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNyw3IEBA
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgdXNl
SklUQ2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2ws
IHVzZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUg
cGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBj
bGFzc2VzLiIpIFwKICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1
ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHJpdmF0ZSBz
dGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VM
T0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2Ugewog
ICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlm
aWVkCiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGxsaW50X2hhbmRsZV91
Y2F1Z2h0X2V4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAg
ICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwg
dG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJw
cmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwog
ICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChi
aXRzLCB0b3BDb2RlQmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5OCw3ICszOTgsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cExMSW50KENvZGVCbG9j
ayogY29kZUJsCiBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrKQogewogI2lmIEVOQUJMRShKSVQpCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0g
SklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwor
ICAgIC8vIE9PUFM6IEZpZ3VyZSBvdXQgd2hhdCB3ZSB3YW50IHRvIGRvIHdpdGggdGhlIG5vIExM
SW50IG9wdGlvbi4uLi4KKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBp
bGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0
aW9uTXVzdFN1Y2NlZWQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlv
blN1Y2Nlc3NmdWwpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVy
VXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBAIEpTVmFsdWUgbnVtYmVy
T2ZERkdDb21waWxlcyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29sIHByZXRlbmRUb0hhdmVNYW55
Q29tcGlsZXMgPSBmYWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIU9wdGlvbnM6
OnVzZURGR0pJVCgpKQorICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7IC8vIE9PUFMKKwogICAg
IGlmICghT3B0aW9uczo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVzZUJhc2VsaW5lSklUKCkgfHwg
IU9wdGlvbnM6OnVzZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVz
ID0gdHJ1ZTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRy
YXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRy
YXBzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFZN
VHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5qaXRU
eXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoZm91bmRDb2RlQmxvY2stPmpp
dFR5cGUoKSkpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jaygqbV9sb2NrKTsK
ICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2ln
bmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFZNVHJh
cHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7
CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
LSAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJs
b2NrLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZH
T3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0
aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwogICAgICAgICBjYWxsRnJhbWUg
PSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIH0KSW5kZXg6IFRvb2xz
L1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29t
cGFyZS1yZXN1bHRzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBUb29scy9TY3JpcHRzL2NvbXBhcmUt
cmVzdWx0cwkod29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw4IEBAIGRlZiBjb21wdXRlTXVs
dGlwbGVIeXBvdGhlc2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgog
ICAgIG5hbWVMZW5ndGggPSBsZW4oInN1YnRlc3QiKQotICAgIGFMZW5ndGggPSBsZW4oYVt1bml0
TWFya2VyXSkKLSAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pCisgICAgYUxlbmd0aCA9
IGxlbihhW3VuaXRNYXJrZXJdKSArIDMKKyAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0p
ICsgMwogICAgIHJhdGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIpCiAKICAgICBwVmFsdWVIZWFkZXIg
PSAicFZhbHVlIChzaWduaWZpY2FuY2UgdXNpbmcgRmFsc2UgRGlzY292ZXJ5IFJhdGUpIgpAQCAt
MjEyLDcgKzIxMiw3IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhhLCBiKToKICAgICBwTGVuZ3RoICs9
IDIKIAogICAgIHN0cmluZ3MgPSBbXQotICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpee25hbWVM
ZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7Y29tcGFy
ZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5PSJzdWJ0
ZXN0IiwgYVNjb3JlPWFbdW5pdE1hcmtlcl0sIGJTY29yZT1iW3VuaXRNYXJrZXJdLCBuYW1lTGVu
Z3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFy
ZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIs
IHBMZW5ndGg9cExlbmd0aCkpCisgICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0
aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57
cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3Qi
LCBhU2NvcmU9ImE6ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2NvcmU9ImI6ICIgKyBiW3VuaXRNYXJr
ZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVu
Z3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1w
VmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCiAgICAgZm9yIGtleSBpbiBhLmtleXMoKToK
ICAgICAgICAgaWYga2V5ID09IHVuaXRNYXJrZXI6CiAgICAgICAgICAgICBjb250aW51ZQpJbmRl
eDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNpb24gMjcxMzc2
KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRlc3RSdW5uZXIg
PSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlvbiwKLSAgICBu
dW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51bWJlck9mREZH
Q29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAgICAgcmV0dXJu
IChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAgICAgIC8vIEVtdWxh
dGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0aWVyaW5nIGJl
Zm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAgICAg
ICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50ID0gbWFwLmdldChm
KSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIG1hcC5zZXQoZiwg
Y291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsKKyAgICAgICAg
fTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4dE5ld0NvZGVC
bG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRoZUZ1
bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKICAg
CiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQorICAg
IHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAgdmFsdWVzLnB1
c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgIH0gY2F0
Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBAIGZ1bmN0aW9u
IGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0cykKICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVu
dCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3RhcnQgOiAwOwog
ICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417574</attachid>
            <date>2021-01-13 15:57:38 -0800</date>
            <delta_ts>2021-01-13 17:17:07 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>581729</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ2NyeXB0by1hZXMtU1AnXTsKKwog
aWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJ
dGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy9iZW5jaG1hcmstcnVubmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsOCBAQAogLy8g
RklYTUU6IFVzZSB0aGUgcmVhbCBwcm9taXNlIGlmIGF2YWlsYWJsZS4KIC8vIEZJWE1FOiBNYWtl
IHN1cmUgdGhpcyBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSByZWFsIFByb21pc2Uu
CisKK19fZGlzYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKKwogZnVuY3Rpb24gU2ltcGxlUHJvbWlz
ZSgpIHsKICAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG51bGw7CiAgICAgdGhpcy5fY2FsbGJh
Y2sgPSBudWxsOwpAQCAtMTI4LDE3ICsxMzEsMjEgQEAgQmVuY2htYXJrUnVubmVyLnByb3RvdHlw
ZS5fcnVuVGVzdCA9IGZ1bgogCiAgICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicg
KyB0ZXN0Lm5hbWUgKyAnLXN0YXJ0Jyk7CiAgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAg
IF9fZW5hYmxlU2FtcGxpbmdQcm9maWxlcigpOwogICAgIHRlc3QucnVuKHByZXBhcmVSZXR1cm5W
YWx1ZSwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KTsKKyAgICBfX2Rpc2FibGVTYW1w
bGluZ1Byb2ZpbGVyKCk7CiAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKICAgICBzZWxmLl93cml0
ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICctc3luYy1lbmQnKTsKIAogICAg
IHZhciBzeW5jVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7CiAKICAgICB2YXIgc3RhcnRUaW1l
ID0gbm93KCk7CisgICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgc2V0VGltZW91
dChmdW5jdGlvbiAoKSB7CiAgICAgICAgIC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3QgaW1tZWRpYXRl
bHkgdXBkYXRlIHRoZSBsYXlvdXQgZm9yIHBhaW50LgogICAgICAgICAvLyBGb3JjZSB0aGUgbGF5
b3V0IGhlcmUgdG8gZW5zdXJlIHdlJ3JlIG1lYXN1cmluZyB0aGUgbGF5b3V0IHRpbWUuCiAgICAg
ICAgIHZhciBoZWlnaHQgPSBzZWxmLl9mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7CisgICAgICAgIF9fZGlzYWJsZVNhbXBsaW5nUHJvZmls
ZXIoKTsKICAgICAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKICAgICAgICAgc2VsZi5fZnJhbWUu
Y29udGVudFdpbmRvdy5fdW51c2VkSGVpZ2h0VmFsdWUgPSBoZWlnaHQ7IC8vIFByZXZlbnQgZGVh
ZCBjb2RlIGVsaW1pbmF0aW9uLgogICAgICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSAr
ICcuJyArIHRlc3QubmFtZSArICctYXN5bmMtZW5kJyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4
IEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIs
IGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
aXNERkdFbmFibGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAg
ICAgICAgIGlmIChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JU
ZXN0aW5nKCkpIHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51
bWJlcihudW0pKTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdF
bmFibGVkLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBzaG91bGREdW1wRGlz
YXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgaWYgKGNvZGVCbG9jayAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlv
bnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fz
c2VtYmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAg
LTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBI
ZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnBy
aW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlv
bnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDog
WyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0
SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEo
IiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fscygp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAg
ICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAg
ICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewog
ICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkg
KyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFz
cyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxC
bG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAm
ID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Cisg
ICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYg
b3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgp
KTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdy
YXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQg
ZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBz
cGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkp
CisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9
IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlz
LCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgogICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgY2Fz
ZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1w
bChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAgcmV0dXJuOwogCisgICAgVVNF
UyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAgICBVU0VTKE9wVG9UaGlzLCBz
cmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAg
VVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBl
KFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5w
cmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0
aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBpZiAoKHRoaXMtPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIg
KFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5l
dmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTIz
NCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAg
ICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7
CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0g
ICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGlu
c3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3Jh
cGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpS
ZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAtMjk1LDYgKzI5NSw3IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgp
KQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAsIG1fYXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQogICAgICwgbV9jb25zdGFudFJl
Z2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAgICwgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQpAQCAt
MzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAK
ICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAKICAgICBBU1NFUlQoc291
cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0
ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIubnVtUGFyYW1ldGVycygpOwog
ICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAtODUwLDcg
Kzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gdG8gdGhlIENvZGVCbG9j
ay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBDb2RlQmxv
Y2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIHdoZW4gdGhlIENv
ZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAg
ICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwogI2VuZGlmCiAg
ICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7CkBAIC0xMDM3LDcgKzEwMzks
NyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zCiAgICAgLy8gSW50
ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0
dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBp
ZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFz
c3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCi0gICAgaWYgKCFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDQ1LDcgKzEwNDcsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShj
b25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShW
TSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKIH0KQEAgLTEwNTgs
NiArMTA2MCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXAKICAg
ICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xK
SVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZH
SklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKQEAgLTEwNzQsNiArMTA3OCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklU
VHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNvbmRz
LCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8gSW50ZXJwcmV0ZXJUaHVuayBzaGFy
ZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7CisgICAgY2FzZSBKSVRUeXBlOjpM
T0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgog
ICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTExNjks
NyArMTE3NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjpp
c0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAKICAgICAgICAgZGZnQ29tbW9u
LT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpAQCAtMTIxNyw3ICsxMjIz
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIC8vIElu
IHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGJhc2VsaW5l
IENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAgICAvLyB0aGF0IHdlIG1pZ2h0IGRl
Y2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpldHRpc29uZWQgZHVlIHRvIG9sZCBh
Z2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRvZXNuJ3QgcHJvdGVjdCB1cy4KLSAg
ICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
REZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAt
MTUxOSw4ICsxNTI1LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChq
aXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgp
KSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7CisgICAgICAgIC8vIE9PUFM6IFNl
cGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3duIGZ1bmN0aW9uIGZvciBKSVQgSUNz
LiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3QganVzdCBmb3IgTExJbnQuCiAgICAg
ICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyArMTUzNiw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGRmZ0Nv
bW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7CiAgICAgfQpAQCAtMTU0OCw2ICsx
NTU2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAg
ICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRl
ci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZH
SklUOgpAQCAtMTU5MCw3ICsxNTk5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFw
KGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoQ29kZU9yaWdpbihieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuYnlWYWxJbmZv
ID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIGlm
IChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBpZiAoSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgICAgICBERkc6OkNvbW1vbkRh
dGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMuY2FsbHMpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFs
dWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpAQCAtMTgxMCw3ICsxODE5LDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAg
IERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAg
ICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CkBAIC0xODIz
LDcgKzE4MzIsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE4Njcs
NyArMTg3Niw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogICAg
ICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2VtZW50KCk7
CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZXNSZXBsYWNlbWVudENv
ZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCBj
YW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAgYW5kIHRoZSBleGVjdXRh
YmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRzIGNvZGVCbG9ja3MgKHNl
ZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNzLAogICAgICAgICAgICAg
Ly8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24gdGhlIHN0YWNrLCBhbmQg
YXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTk0MCw3IEBAIEhhbmRsZXJJbmZvKiBD
b2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVC
bG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3Jp
Z2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBSRUxFQVNFX0FTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBSRUxFQVNFX0FTU0VSVChj
YW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBBU1NFUlQoISFoYW5kbGVy
Rm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBDb2RlT3JpZ2luIG9yaWdp
bmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKQEAgLTIyMzEsNTEgKzIy
NDAsNTUgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQogICAgIERl
ZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRv
IGFjY29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgotICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlm
IHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0
dXJuIHRvIGl0CisgICAgLy8gMSkgSWYgd2UncmUgREZHL0ZUTCwgbWFrZSBzdXJlIHRoYXQgaWYg
dGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1
cm4gdG8gaXQKICAgICAvLyAgICB3ZSBzaG91bGQgT1NSIGV4aXQgYXQgdGhlIHRvcCBvZiB0aGUg
bmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0dXJuLgogICAgIC8vIDIpIE1h
a2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1dGFibGUsIHRoZW4gd2Ugc2hv
dWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2suCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5jbGVhcldhdGNocG9pbnRzKCk7Ci0gICAgCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNv
bXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCi0gICAgICAgICAgICBjb21waWxhdGlv
bi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOwotICAgICAgICAKLSAgICAgICAg
Ly8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBh
Ym91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgotICAgICAgICBpZiAoIWppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewotICAgICAgICAgICAgLy8gV2UndmUg
YWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhp
cyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAh
dm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdl
KSB7CisgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gaml0
Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoY29tcGlsYXRpb24pKQorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRK
ZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcg
YWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KKyAgICAgICAgICAgIGlmICgh
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJl
YWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICBkYXRhTG9n
KCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogICAgIAogICAgIC8vIENvdW50IHRoZSByZW9wdGltaXphdGlvbiBpZiB0aGF0J3Mg
d2hhdCB0aGUgdXNlciB3YW50ZWQuCiAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlv
bikgewogICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRlcm5hdGl2
ZSgpLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNjc3CiAgICAgICAgIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGltaXphdGlv
bigpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgY291bnQgcmVvcHRpbWl6
YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICBpZiAo
dGhpcyAhPSByZXBsYWNlbWVudCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSB3
ZXJlIG5ldmVyIHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4gZm9yIE9TUiBlbnRyeSBj
b2RlCiAgICAgICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgLy8gT3IsIHdlJ3JlIGFuIExPTCBDb2Rl
QmxvY2sgYW5kIHdlcmUgYWxyZWFkeSBqZXR0aXNvbmVkLgogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKGFsdGVybmF0aXZlKCkpCiAgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcykK
KyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpICYmIHJlYXNvbiAhPSBQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1cmluZyBH
Qy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFibGUKICAg
ICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJlbWVtYmVy
ZWQgc2V0LgpAQCAtMjM5MCw3ICsyNDAzLDcgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29t
aW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CiAg
ICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpLCAiICAgIENsZWFyaW5nIFNBQkkgYmNhdXNl
IGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI0
ODMsMTIgKzI0OTYsMTQgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVz
KAogewogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAg
ICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
REZHSklUKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVy
biAobV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcjsKICAgICB9CiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IHRoaXMtPnJl
cGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXI7CisgICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6
aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyOwogfQogCiBpbnQzMl90IENvZGVCbG9jazo6Y29kZVR5cGVUaHJl
c2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKQEAgLTI3MDksNyArMjcyNCw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQg
cmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKLSAgICBpZiAodHlwZSAh
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2Vs
aW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbigq
dGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBjb2RlIGJ1dCBoYXZlICIsIHR5cGUp
OwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaml0Q29k
ZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkpOwogICAgIH0KQEAgLTI3Mjcs
NyArMjc0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAg
ICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVs
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBl
KCkpKTsKICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKQEAgLTI3NTYsNyArMjc3MSw4IEBAIHZvaWQg
Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICAKIHVpbnQzMl90IENvZGVC
bG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9s
ZCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwor
ICAgIC8vQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsgLy8gT09Q
UzogV2UgY2FsbCB0aGlzIGZyb20gdGhlIExPTCBjb21waWxlciB0aHJlYWQgYmVmb3JlIGluc3Rh
bGwuCisKICAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5IHNvIHdlIGRvbid0IHNhdHVy
YXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKICAgICAvLyBlbm91Z2ggdGhhdCB0aGlz
IGxvb3Agd29uJ3QgaHVydCB1cy4KICAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNpcmVkVGhyZXNo
b2xkOwpAQCAtMjgzNiw3ICsyODUyLDcgQEAgREZHOjpDb2RlT3JpZ2luUG9vbCYgQ29kZUJsb2Nr
Ojpjb2RlT3JpZwogCiBzaXplX3QgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0lkZW50aWZpZXJzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmll
cnMuc2l6ZSgpOwpAQCAtMjg0Nyw3ICsyODYzLDcgQEAgY29uc3QgSWRlbnRpZmllciYgQ29kZUJs
b2NrOjppZGVudGlmaWVyKAogICAgIHNpemVfdCB1bmxpbmtlZElkZW50aWZpZXJzID0gbV91bmxp
bmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmllcnMpCiAgICAgICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChq
aXRUeXBlKCkpKTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRp
ZmllcnNbaW5kZXggLSB1bmxpbmtlZElkZW50aWZpZXJzXTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKQEAgLTI5NDgsNyArMjk2NCw4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVx
dWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsKKyAgICAvLyBPT1BTCisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9
IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUwLDYgKzMwNjcsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6
OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIHJldHVy
biBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCkBAIC0zMjI2LDE0ICszMjQ0LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjphZGRCcmVha3BvaW50
KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJyZWFrcG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOwog
ICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzKTsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgp
KSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFr
cG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6
U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlm
IChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7CiB9CiAKQEAgLTM0MjEsOSArMzQzOSw5IEBA
IE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6Ynl0ZWMKIHsKICAgICBPcHRpb25h
bDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRo
aXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgaWYgKEpJVENvZGU6
OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChqaXRUeXBlKSkKICAgICAgICAgYnl0ZWNvZGVJ
bmRleCA9IGNhbGxTaXRlSW5kZXguYnl0ZWNvZGVJbmRleCgpOwotICAgIGVsc2UgaWYgKGppdFR5
cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7Cisg
ICAgZWxzZSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdp
biA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7CkBAIC0zNDY2LDcgKzM0ODQsNyBAQCBib29s
IENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwCiAgICAgLy8gVGhpcyBmdW5jdGlv
biBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAg
IC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRs
ZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQg
b2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+aGFzSW5zdGFs
bGVkVk1UcmFwc0JyZWFrcG9pbnRzKCk7CiAjZWxzZQpAQCAtMzQ4MCw3ICszNDk4LDcgQEAgYm9v
bCBDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cwogICAgIC8vIFRoaXMgZnVuY3Rp
b24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAg
ICAvLyBjYXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5k
bGVyIHNhZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50
IG9mIG1faml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgY29tbW9uRGF0YSA9ICptX2ppdENvZGUtPmRmZ0NvbW1v
bigpOwogICAgIGNvbW1vbkRhdGEuaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKHRoaXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNC
YXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRUeXBlIHR5cGUgPSBqaXRU
eXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHR5
cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAt
NTExLDYgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRl
Y29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZv
ckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3ICs1NDEsNyBAQCBwdWJs
aWM6CiAgICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJl
ZW4gc29tZSBpbmxpbmluZy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICAgICAg
cmV0dXJuIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAog
ICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lkIENvZGVC
bG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRh
Lm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKK30KIAordGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoQ2F0Y2hQcm9m
aWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7Cisg
ICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKQorICAgICAg
ICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdK
SVRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhpdGluZ0pJVFR5cGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFeGkKICAgICBj
YXNlIEV4aXRGcm9tQW55dGhpbmc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbUFueXRoaW5nIik7
CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRGcm9tTE9MOgorICAgICAgICBvdXQucHJp
bnQoIkZyb21MT0wiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdEZyb21ERkc6CiAg
ICAgICAgIG91dC5wcmludCgiRnJvbURGRyIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKICAgICBFeGl0RnJvbUFueXRoaW5nLAor
ICAgIEV4aXRGcm9tTE9MLAogICAgIEV4aXRGcm9tREZHLAogICAgIEV4aXRGcm9tRlRMCiB9OwpA
QCAtMzgsNiArMzksOCBAQCBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiBpbmxpbmUg
RXhpdGluZ0pJVFR5cGUgZXhpdGluZ0pJVFR5cGVGb3IoSklUVHlwZSB0eXBlKQogewogICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4g
RXhpdEZyb21MT0w7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiBF
eGl0RnJvbURGRzsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxS
ZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAg
c3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVtIE9wZXJhbmRz
TGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgogY2xhc3MgT3BlcmFuZHMg
ewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjpp
c19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGljOgogCiAgICAgT3BlcmFu
ZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1l
bnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVt
QXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBt
X251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBzaXplX3Qgc2l6ZSA9
IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIHNpemVfdCBzaXpl
ID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEh
dHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAgIGlmICgh
V1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAgICAgICBt
X3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQm
IGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRz
LCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cywg
Y29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1D
b25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1B
cmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMuZ3Jvdyhu
dW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFj
a0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAg
ICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9w
ZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQor
ICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29uc3RhbnRzKCkpCiAgICAg
ewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAgICAgICAgIG1fdmFsdWVz
LmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBAIHB1YmxpYzoKIAogICAg
IHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRz
OyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2Nh
bHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBz
aXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX251bUNvbnN0YW50czsg
fQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51bWJlck9mQ29u
c3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0
cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAg
ICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygpKTsKLSAgICAg
ICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOwor
ICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRl
eChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9m
QXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KLSAgICAKICAgICBzaXpl
X3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlk
eCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMo
KSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90IGlkeCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNvbnN0YW50cygpKTsKKyAg
ICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgaWR4
OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAogICAgIFJlZlR5cGUg
YXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgp
XTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBm
b28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVl
Pj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAg
IHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxm
b28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxsZWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBp
ZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5
cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3Zh
bHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0K
ICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBzaXplX3Qg
c2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAo
c2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsg
c2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVt
YmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7
CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOwogICAgICAg
ICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5n
cm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMo
KSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSAr
IHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVu
c3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBvcGVy
YW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBp
ZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWVJbmRl
eCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3Bl
cmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4KG9wZXJhbmQudG9Db25z
dGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwo
KSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlKCk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0Fy
Z3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsK
ICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAKQEAgLTMz
OCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXND
b25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFu
ZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygpOwogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2Fs
cygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29uc3QKQEAgLTM2
NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICBpZiAoaW5kZXggPCBu
dW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOwot
ICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBu
dW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkKKyAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRleCAtIG51bWJlck9mQXJn
dW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYgY29uc3RleHByICh0cmFj
a0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxlZUluZGV4KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKSk7
CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQzNywxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogcHJp
dmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFy
Z3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFy
ZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUg
YXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBtX251
bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAgU3Rv
cmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50cyB7
IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJn
dW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAg
LTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwg
dG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKICAgICB9
CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRleHQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9w
ZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewog
ICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5k
ZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC03OCw2ICs4
MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwg
IjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxl
ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxsZWUoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgY29uc3QgUmVnaXN0ZXJTZXQmIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZQogICAgICAgICBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlID0gaml0LT5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5saXZl
UmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShqaXQtPmNvZGVC
bG9jaygpLCBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCk7CiAgICAgICAgIG1fbmVlZHNUb1Jlc3Rv
cmVSZWdpc3RlcnNJZkV4Y2VwdGlvbiA9IG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2Vw
dGlvbkhhbmRsaW5nQ2FsbFNpdGUubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSA+IDA7CiAgICAgICAg
IGlmIChtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24pCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+
aml0VHlwZSgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09y
RlRMKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAgICAgICAgIG1fbGl2ZVJlZ2lz
dGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKSk7CiAgICAg
ICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwpAQCAtNzEwLDcgKzcxMCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICAgICAgLy8gV2Ugc2V0IHRoZXNlIHRvIGluZGljYXRlIHRvIHRoZSBzdHViIHRv
IHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgQ29kZUJsb2NrJ3MKICAgICAgICAgLy8gZXhjZXB0aW9u
IGhhbmRsZXIgdGFibGUgd2hlbiBpdCBpcyBkZWFsbG9jYXRlZC4KICAgICAgICAgY29kZUJsb2Nr
VGhhdE93bnNFeGNlcHRpb25IYW5kbGVycyA9IGNvZGVCbG9jazsKLSAgICAgICAgQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJz
LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJs
b2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0VHlwZSgpKSk7CiAgICAgICAgIGNhbGxT
aXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9IHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNl
cHRpb25IYW5kbGluZygpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxhdGlvbihTcGVj
dWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5KTsKIH0K
IAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBl
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRlY29kZURv
dWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGVk
VHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJbnQzMk9u
bHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0
ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhp
cyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4K
ICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7
CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGlu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsg
fQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9j
YWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAgYm9vbCBpc0hl
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFs
UmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29u
c3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2Nh
bCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpAQCAtMTE3
LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQg
b3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5k
VG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGlu
dCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQgY29uc3RhbnRJ
bmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4
OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEzNSw5IEBA
IGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQp
ICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJG
b3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJbmRleCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAgICAgLCB2YXJp
YWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNB
dFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBpbnRlcnNlY3Rp
b25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFi
c3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0
SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJhY3RWYWx1ZTo6
ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRM
KGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNv
ZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQCB2b2lkIGFkanVz
dEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJh
bWUpCiAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhp
dElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgLy8gT09QUzogTWFrZSB0aGlzIGRv
IHRoZSByaWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Igbm90LgogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdp
bik7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhpdC0+YmFz
ZWxpbmVWZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2Rl
QmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZl
bnRTdHJlYW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7
Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWduZWQgbnVt
VG1wczsKQEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpy
ZWNvbnN0cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9M
b2NhbCgpICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7IC8vIE9P
UFM6IGJ5dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVC
bG9jay0+bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUz
LDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgog
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1l
RgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QK
IHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmpp
dFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpJ
VFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKSVRDb2Rl
OjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoY29kZUJsb2NrKCktPmppdFR5cGUoKSk7CiB9
CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25z
dAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+
aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJ
VFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03OSw4ICs3MCw2IEBAIGJv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKICAgICBjYXNlIEpJVFR5cGU6
Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDEwICs0NTYsMTAgQEAgQUxXQVlTX0lO
TElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRFeAogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVy
SW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5
cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNp
dGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNlCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0
c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIGV4Y2VwdGlv
bkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOworICAg
IGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0
ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4
KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE4IEBACiAj
aW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNs
dWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEu
aCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1NSw4IEBACiAjaW5jbHVkZSA8
d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+CiAK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiBu
YW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhwciBjb25zdCBib29sIHZlcmJv
c2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY4LDg5MSBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRp
bWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjND
b21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5
cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9z
ZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2lu
Y2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
cHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZy
b21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICByZXR1
cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICB9OworCisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3Vt
ZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFs
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdFZhcmFy
Z3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0
b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwg
bWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZS5tX3ByZWRpY3Rpb24p
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fbmV4dCwgbWV0YWRhdGEubV9uZXh0UHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9kb25lLCBtZXRh
ZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb3Y6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBlRm9yKGluc3RydWN0aW9uLT5hczxPcE1vdj4o
KS5tX3NyYykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBv
cF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVfbmFt
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRf
YnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm90
b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9m
aWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0Fu
eUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgaWYgKCEhKGxlZnQgJiBTcGVjRG91
YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJpZ0ludDMyIGJldHRlcgorICAgICAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0cmluZ09yU3RyaW5nT2Jq
ZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBNYXli
ZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX3N1YjoKKyAgICBjYXNl
IG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgewor
ICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5t
X2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmls
ZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYgfHwgaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZURvdWJs
ZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOID0gaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2OworICAgICAgICAgICAgICAgIGlmIChtYXlQcm9k
dWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJp
Z2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIHByb2JhYmx5IGRvIGJl
dHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICAgICAgaWYgKCEhKGxlZnQgJiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3Qp
KSB8fCAhIShyaWdodCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVjdCkpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdCB8PSBTcGVjQmlnSW50OworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgcmVzdWx0KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211
bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAg
ICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAg
ICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZv
cihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZv
cihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNh
biBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVp
bGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50
MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+
KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAg
ICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNBbnlJbnRBc0RvdWJsZSA6IFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgICAgIGlmIChp
bnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAg
IHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0VHlw
ZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICB9OworCisg
ICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAg
ICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVj
b2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYg
aXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNC
aWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0Ogor
ICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5
dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAg
ICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlv
bi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5
dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRv
IHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVj
U3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
KiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZmZXI7CisgICAg
ICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQg
ZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3
ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAg
ICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhp
cyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAgICB9CisgICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQorICAgICAgICAg
ICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRl
ciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFN0cmNhdD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19l
eHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwg
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9y
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9z
Y29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25f
c3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVy
dHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBT
cGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJp
Y19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9p
bl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVj
dEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9h
cmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJm
bHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRz
QnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
QmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5k
ZWZpbmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5k
ZWZpbmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
dW5kZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNVbmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzQm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lzX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJl
cj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19p
bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3Rv
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlf
d2l0aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxh
dGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUp
IDw8IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJv
ZmlsZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0
YW5jZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3Rh
bmNlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Zf
Y3VzdG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZD
dXN0b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVj
U3RyaW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90
eXBlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBl
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRf
aW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1w
bGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFi
bGU6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoK
KyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0Ogor
ICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5
X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVm
aW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBv
cF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNl
IG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVm
aW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNl
IG9wX2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAg
Y2FzZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVz
c2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAg
IGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAg
ICBjYXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bf
c3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNo
X3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0
X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBv
cF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoK
KyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWll
bGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ug
d2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9u
X2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJp
dHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNl
IGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90
aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToK
KyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBj
YXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNh
c2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAg
IGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3Jl
dHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVj
dF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9wcm9ncmFtX3By
b2xvZ3VlOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRpcmVjdF9ub190
bHM6CisgICAgY2FzZSBub3JtYWxfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50
X2dldF9ob3N0X2NhbGxfcmV0dXJuX3ZhbHVlOgorICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1
Z2h0X2V4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0
cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2NhbGxfZXZhbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxs
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJh
dG9yX29wZW46CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdzoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2NvbnN0cnVjdF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFy
Z3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xv
dzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3c6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfZXZhbF9zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2l0ZXJhdG9yX29wZW5fc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3RhZzoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVja191bnRhZzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eV9jaGVja190YWc6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsOgorICAgIGNh
c2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9ub190bHM6CisgICAgY2FzZSB3YXNtX3RyYW1w
b2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigp
Cit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVC
bG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRI
ZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0
SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNO
b25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVC
bG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUo
WyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBt
X2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Cisg
ICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9n
cmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAg
IGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJv
ZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAg
ICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGlj
dGlvbjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJn
IiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmls
ZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFk
WzBdLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGJv
b2wgY29tcHV0ZVVzZUNvdW50cyA9IHRydWU7CisgICAgbV91c2VDb3VudHMucmVzaXplKG1fZ3Jh
cGgtPnNpemUoKSk7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMu
IE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1w
YWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAg
ICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJl
IGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BT
OiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2Ug
ZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29k
ZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFBy
ZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAg
ICAgICAgaWYgKGNvbXB1dGVVc2VDb3VudHMpCisgICAgICAgICAgICAgICAgbV91c2VDb3VudHNb
YmxvY2suaW5kZXgoKV0gPSBPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4obV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVC
bG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCAwKTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5p
c0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4IHsgaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpIH07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Y3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHV0ZVVz
ZUNvdW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb3VudCA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vz
ZUNvdW50c1tibG9jay5pbmRleCgpXS5vcGVyYW5kKG9wZXJhbmQpICs9IDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENoZWNrcG9p
bnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygp
OyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNr
cG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2lu
dCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nv
cl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9uc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb21wdXRlVXNlQ291bnRz
ID0gZmFsc2U7CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw3ICs5NjAsMTMgQEAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5j
dGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCi1KSVQ6OkpJVChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVl
OworICAgIHJldHVybiBtX3VzZUxPTDsKK30KKworSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2Nr
KQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKQEAgLTc1LDYg
Kzk3NCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAs
IG1fY2FuQmVPcHRpbWl6ZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFs
c2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKKyAgICAsIG1fdXNlTE9MKGNvbXBpbGVUeXBlID09IENvbXBpbGVUeXBlOjpMT0wp
CiB7CiB9CiAKQEAgLTEzNywxMSArMTAzNywxOSBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCkKICAgICAgICAgKyttX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsgXAog
ICAgIE5FWFRfT1BDT0RFKG5hbWUpCiAKLSNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAor
I2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lLCBkc3QsIHR5cGUpIFwKICAgICBjYXNlIG9wXyMj
bmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUlu
ZGV4KSB7IFwKLSAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAotICAgICAgICAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsg
XAorICAgICAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FsbENhc2VzIikgJiYgYXRvaShn
ZXRlbnYoInByaW50U2xvd0NhbGxDYXNlcyIpKSkgeyBcCisgICAgICAgICAgICAgICAgU3RyaW5n
UHJpbnRTdHJlYW0gY2JOYW1lOyBcCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAo
Y2JOYW1lKTsgXAorICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBjYk5hbWUudG9TdHJpbmco
KSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgKyAi
ICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCldOyBcCisgICAg
ICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0JikgeyBcCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dDYWxsQ2FzZVJhbihrZXkpOyBcCisgICAgICAgICAgICAgICAgfSk7IFwKKyAg
ICAgICAgICAgIH0gXAorICAgICAgICAgICAgZW1pdFNsb3dPcChzbG93X3BhdGhfIyNuYW1lLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIGRzdCwgdHlwZSk7IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5F
WFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA2NCw0
NiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJ
TkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRT
bG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93
XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09Q
Q09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChu
YW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAg
ZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBc
CisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAg
ICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNs
b3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYWxsQ2FzZVJhbihTdHJpbmcga2V5KQor
eworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90
Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgp
OworICAgIH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2
NF90IHZhbHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgo
dmFsdWUgJSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7
Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29k
ZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxNSArMTE1OSw4NCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsK
LSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3Rh
cnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJv
dmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFi
bGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdz
IGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUwor
CisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAg
bV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0
byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9j
aygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5j
b250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3Nv
cnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgZm9y
IChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRv
dGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21f
Y3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0Zv
ckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9j
dXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJl
bnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9t
UHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29y
cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3Jz
U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVj
ZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAg
KCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVk
ZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21Q
cmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBy
ZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0
ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJs
b2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4
KCldOworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3Vz
ZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3Bp
bGxDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7Cisg
ICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0
Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3Zl
biBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxl
LgorICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBl
dmVyIGhpdC4KKyAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JC
eXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMu
YXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKTsKQEAgLTI3OCw0NiArMTI3NSw0MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICNlbmRpZgogCisKKyAgICAgICAgaWYgKGZhbHNl
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBiZWZvcmUgYmMjIiwgbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7Cisg
ICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAob3Bj
b2RlSUQpIHsKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChsZXNzKQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGdyZWF0ZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJl
cSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGlzX2NvbnN0cnVjdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCi0gICAgICAgIERFRklORV9T
TE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0
KQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQotICAgICAgICBERUZJTkVfU0xP
V19PUChnZXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5
X2lkX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1
bmNfZGVjbF9pbl9ldmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9w
ZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQot
ICAgICAgICBERUZJTkVfU0xPV19PUCh1bnJlYWNoYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AodGhyb3dfc3RhdGljX2Vycm9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlf
d2l0aF9zcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0
X2VudW1lcmFibGVfbGVuZ3RoKQotICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJs
ZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZykKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfY2xvbmVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3Vt
ZW50c19idXR0ZXJmbHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0KQotICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobmV3X3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3Ip
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHBv
dykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeVZhbD4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGlzX2NvbnN0cnVjdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rv
cj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hl
YXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1
YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3Zh
bF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5F
dmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5l
X2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19l
cnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19P
UChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVy
PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0Nl
bGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1l
bnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3Bl
Y1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9h
cmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+
KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4o
KS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlz
ZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQ
cm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0
KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90
aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAg
ICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5t
X2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVf
T1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzOTIs
MTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVf
T1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3Nh
bXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQp
CiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19P
UChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikK
ICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkK
QEAgLTQ3NCwxMCArMTQ3Miw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAg
ICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAgICBERUZJ
TkVfT1Aob3BfaXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfZnVu
Y3Rpb24pCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBE
RUZJTkVfT1Aob3BfdHlwZW9mKQorCisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQorICAgICAg
ICBERUZJTkVfT1Aob3BfbGVzc2VxKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcikKKyAg
ICAgICAgREVGSU5FX09QKG9wX2dyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0
X2VudW1lcmFibGVfbGVuZ3RoKQorCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tl
ZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1
dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1
ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgYXV0
byBjb3VudCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCYgY291bnRlciA9IG1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQp
OworICAgICAgICAgICAgICAgIC0tY291bnRlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWNvdW50
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT09QUzogRG8gdGhpcyBsYXppbHkgaW4gc2xv
dyBwYXRoIGNyZWF0aW9uL3NwaWxsRm9yQ2FsbAorICAgICAgICAgICAgICAgICAgICAvL21fc3Bp
bGxDYW5kaWRhdGVzLmFwcGVuZChvcGVyYW5kKTsKKworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGdwcik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlBS
UmVnIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xvYmJlcihmcHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0t
OykgeworICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVC
bG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAg
ICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2co
IkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwog
ICAgIH0KQEAgLTQ5OCw2ICsxNTcwLDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQ
YXNzKCkKICAgICBtX2ptcFRhYmxlLmNsZWFyKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYXNl
UmFuKFN0cmluZyBrZXkpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFw
PFN0cmluZywgdWludDY0X3Q+PiBzbG93Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93
Q2FzZXMuY29uc3RydWN0KCk7CisgICAgfSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMu
Z2V0KCk7CisgICAgdWludDY0X3QgdmFsdWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+
dmFsdWU7CisgICAgaWYgKCh2YWx1ZSAlIDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihr
ZXksICI6ICIsIHZhbHVlKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIHsKICAgICBtX2dldEJ5SWRJbmRleCA9IDA7CkBAIC01MTYsMTQgKzE2MDIsMjUgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxl
cyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0g
bV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAg
ICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nh
c2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5i
eXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBC
eXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNl
Lmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8g
PSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5k
ZXgpLnB0cigpOworCisgICAgICAgIGlmIChnZXRlbnYoInByaW50U2xvd0Nhc2VzIikgJiYgYXRv
aShnZXRlbnYoInByaW50U2xvd0Nhc2VzIikpKSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBuYW1lOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobmFtZSk7CisgICAgICAg
ICAgICBTdHJpbmcga2V5ID0gbmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3RyaW5nOjpudW1i
ZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVzW2N1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07CisgICAgICAgICAgICBwcm9iZShbPV0oUHJvYmU6OkNv
bnRleHQmKSB7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VSYW4oa2V5KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVD
YXNlUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkp
CkBAIC01ODAsNyArMTY3Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTks
NiArMTY5NSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERF
RklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5j
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzEsMTkgKzE3MzAs
MzQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AocmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0b19w
cm9wZXJ0eV9rZXkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlzX2NhbGxhYmxl
KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZikKKworICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChsZXNzKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChsZXNzZXEp
CisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXIpCisgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0
ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIp
OwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nh
c2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3Qg
ZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+
dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4u
Iik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVy
LT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2Rl
Z2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9m
ZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1
dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFscmVhZHkg
ZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdT
bG93Q2FzZTsKICAgICB9CkBAIC02ODgsNiArMTgwMiw4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0
aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0g
dHJ1ZTsgLy8gT09QUzogaGVscGZ1bCBmb3IgcnVubmluZyBMT0wgdy9vdXQgREZHLgogICAgIAog
ICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKICAgICBjYXNlIEdsb2JhbENv
ZGU6CkBAIC03NzgsNiArMTg5NCw4OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5n
KEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVs
KCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIGJv
b2wgcHJpbnRFYWNoT1NSID0gZ2V0ZW52KCJwcmludEVhY2hPU1IiKSAmJiAhIWF0b2koZ2V0ZW52
KCJwcmludEVhY2hPU1IiKSk7CisKKyAgICBpZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHkoKSkgewor
ICAgICAgICBKdW1wTGlzdCBleGl0Q29tbW9uOworICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBt
X2V4aXRKdW1wcykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5maXJz
dDsKKyAgICAgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAgICAgIGp1
bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChwcmludEVhY2hPU1IpIHsKKyAgICAg
ICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwcmludFN0cmVhbTsKKyAgICAgICAgICAgICAg
ICBtX2NvZGVCbG9jay0+ZHVtcChwcmludFN0cmVhbSk7CisgICAgICAgICAgICAgICAgQ1N0cmlu
ZyBzdHIgPSBwcmludFN0cmVhbS50b0NTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBzdHIuYnVm
ZmVyKCktPnJlZigpOyAvLyBsZWFrIGl0LgorICAgICAgICAgICAgICAgIHByaW50KHN0ci5kYXRh
KCksICIgLT4gZXhpdCBhdCBiYyMiLCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgIlxuIik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVja3Bv
aW50IGV4aXRzLgorCisgICAgICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAg
ICAgICAgICBleGl0Q29tbW9uLmFwcGVuZChqdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAg
QVNTRVJUKCFleGl0Q29tbW9uLmVtcHR5KCkpOworICAgICAgICBleGl0Q29tbW9uLmxpbmsodGhp
cyk7CisKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6OnBjR1BSID09
IHJlZ1Q0KTsKKyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCkuY29udGFpbnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVsb3cgcmVsaWVz
IG9uIHRoaXMgYmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVt
YmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBM
TEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
T1NSV3JpdGVCYXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAs
IE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50
OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigpKSwg
cmVnVDIpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsKKyAgICAgICAg
c3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRD
b3VudGVyKCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMiwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hvbGRGb3JS
ZW9wdGltaXphdGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIs
IG51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5jZSB0
aGUgTExJbnQgUEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPihtX2NvZGVCbG9j
ayk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRyaWdn
ZXJMT0xSZW9wdGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChub25B
cmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJlclRhZ1JlZ2lzdGVy
LCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Ok51bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgc2tpcEpldHRp
c29uLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6ZU5vdyA9IGpp
dC5icmFuY2gzMigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVyVGhhbk9y
RXF1YWwsCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAorICAgICAgICAv
LyAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6Om5vcm1h
bE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4o
KTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9TUkV4
aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAgICAgICAgLy8g
ICAgZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNv
ZGUoKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIp
OworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAg
ICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUklu
Zm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6IAorICAgICAg
ICAvLyAxLiBTdG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAgICAgICAvLyAy
LiBqZXR0aXNvbiBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8gMy4gd3JpdGUg
YmFycmllciBMTEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5r
KHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIxNjUsNyBAQCBDb21w
aWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQ
dHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0
YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQg
OiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFjaGlu
ZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIxNzYsNyBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5r
VG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwogICAgIH0K
ICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJl
Y3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkp
OworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
KTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJ
VCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVz
dWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIsNiArMjI3MCw5
NTEgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3Rh
bEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21w
aWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sK
KyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXpl
KCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOwor
ICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmFuaz4KK1ZlY3RvcjxSZWcsIDMyPiBjb21wdXRlQWxsb3dlZFJlZ3MoKQor
eworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRl
IGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1
dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMK
KyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFZlY3Rv
cjxSZWcsIDMyPiBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJl
Z2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAg
ICAgIGlmIChhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFs
bG93ZWQuYXBwZW5kKHJlZyk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBC
YW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6
dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcp
KQorICAgICAgICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFs
bG93ZWQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRHUFJzKCkKK3sKKyAg
ICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRp
ZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJl
LCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAg
IC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0
b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Cisg
ICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOwor
ICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVn
LCAzMj4mIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0
ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0
KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0
aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1z
IGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4u
CisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisK
K0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAh
PSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUu
aXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFs
dWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9i
YmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChS
ZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24g
aGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOwor
ICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9j
ZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0K
KyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50
IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6
CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwK
KyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5k
IHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3
aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBl
c3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lz
ZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5k
IHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFs
dWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxv
Y2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAg
fQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdW
YWx1ZS5vcGVyYW5kKSkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBS
cygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2Fs
bChHUFJSZWcgdG9JZ25vcmUsIEZQUlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAvLyBPT1BTOiB0
aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsK
KyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsK
KyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVn
VmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFu
LmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBl
KHJlZ1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnLmZwcigp
ICE9IHRvSWdub3JlRlBSKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnLmdw
cigpICE9IHRvSWdub3JlKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9
CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVk
UmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50
RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
KnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JT
cGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRDb3VudCh1aW50
NjRfdCBjb3VudCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICBmb3IgKHVp
bnQ2NF90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICArK2NvdW50ZXI7CisgICAg
ICAgIGlmIChjb3VudGVyICUgMTAwMDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUnVu
dGltZSBsb2FkIGNvdW50OiAiLCBjb3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0
b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRU
b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2NF90IGxvYWRD
b3VudCA9IDA7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJl
ZyByZWcgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gc3RkOjpnZXQ8MT4odHVwbGUpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5U
eXBlID0gc3RkOjpnZXQ8Mj4odHVwbGUpOworCisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25v
cmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFu
ZFRvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQ
UigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3By
KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAg
ICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAg
IERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goKnRoaXMp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkK
KyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJh
bmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisK
KyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAg
IGlzSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShzY3JhdGNoLCByZWcuZnByKCkpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsb2FkQ291bnQ7CisgICAg
fQorCisgICAgaWYgKGZhbHNlICYmIGxvYWRDb3VudCkgeworICAgICAgICBwcm9iZShbPV0gKFBy
b2JlOjpDb250ZXh0JikgeworICAgICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRDb3VudCk7Cisg
ICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxh
bihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsK
KyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0g
U3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIp
LmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBn
cHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFu
ZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3Ig
Ynl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgor
ICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQp
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyBy
ZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tD
b3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAg
ICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAh
cmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQor
CitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9q
aXQoaml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwciho
aW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRl
R1BSKGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6
OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQ
UlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJS
ZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1f
ZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9q
aXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
Z3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6Omdwcigp
Cit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dw
cjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50
MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVy
biBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmICht
X2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
bV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVH
UFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1f
Z3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7Cisg
ICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0
dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAg
bV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6Omdw
cigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIg
PSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1f
b3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9q
aXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQu
c3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lz
dGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNr
KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpn
cHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4g
bV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVn
ID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1f
Z3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYg
aml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIo
KTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9q
aXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkK
K3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnBy
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJS
ZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVn
ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAg
ICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZh
bHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAg
ICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisK
KyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1f
b3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25O
b3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAg
IG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0K
KworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAgIG1faml0
LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKwor
SklUOjpOdW1iZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQor
eworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpOdW1i
ZXJPcGVyYW5kOjp+TnVtYmVyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsK
K30KKworRlBSUmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIg
IT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnBy
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcp
IHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zw
cik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxs
b2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuY29u
dmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAg
ICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIs
IG1fZnByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9Owor
ICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8gaXNJbnQz
MiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRl
KEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQudW5ib3hE
b3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9q
aXQuanVtcCgpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2pp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5k
KTsKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6
SW50MzJDb252ZXJ0aW5nT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5n
T3BlcmFuZDo6fkludDMyQ29udmVydGluZ09wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChtX2ppdC5zaG91bGRT
cGVjdWxhdGVJbnQzMihtX29wZXJhbmQpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBvcCB7IG1f
aml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAgICAgICAgbV9q
aXQubG9jayhtX2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIobV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9q
aXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQu
Z3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9Owor
ICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBhdXRvIGlzSW50
MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1f
aml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgICAgIG1faml0LnVuYm94
RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyNp
ZiBDUFUoQVJNNjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0Rv
dWJsZVRvSW50MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAg
ICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNz
KGZwciwgbV9ncHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1
bmNhdGVTdWNjZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQu
c2lsZW50U3BpbGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91Ymxl
VG9JbnQoKSA/IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMy
LCBtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3Bp
bGxSZWNvcmQpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3Zl
KHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAg
fSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1f
Z3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQsIHZhbHVlR1BSKTsKKwor
ICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7Cisg
ICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVPdGhlcihtX29wZXJhbmQpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOwor
CisgICAgICAgIG1faml0LnNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZw
ciA9IHRlbXBGUFIuZnByKCk7CisKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKworICAgICAgICBh
dXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gbm90RG91YmxlID0gbV9qaXQuYnJh
bmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1f
Z3ByLCBmcHIpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJN
NjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRp
Y3MoKSkgeworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFT
Y3JpcHRTZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dw
ciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxS
ZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAg
ICAgICBtX2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFz
U2Vuc2libGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9w
ZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50Rmls
bEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5q
dW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgbm90RG91YmxlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgYXV0byBub3RPdGhlciA9IG1faml0LmJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3Mg
eyB2YWx1ZUdQUiB9LCBtX2dwcik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDAp
LCBtX2dwcik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAg
bm90T3RoZXIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3RCb29sZWFuKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIp
KTsKKyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwgbV9ncHIp
OworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGlzSW50MzIu
bGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQodmFsdWVHUFIs
IG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3Bl
Y0Jvb2xlYW4pOworICAgIH0KKworICAgIHJldHVybiBtX2dwcjsKK30KKworUmVnaXN0ZXJTZXQg
SklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJl
c3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1
dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3Ry
aW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICgh
aXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9v
bGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICgh
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFu
KHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9
LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090
aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RP
YmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxD
aGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJ
bnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNC
aWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1
ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRp
ZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMy
KSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAo
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQo
dmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRv
bmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
QmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUs
IHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJ
bnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJl
bnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRl
Y29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnBy
b3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3Rh
dGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBt
X2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBt
X2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiht
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7Cisg
ICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFs
dWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBv
cGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxs
b2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAg
Zm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJl
ZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAg
ICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1Zh
bHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAg
ICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBA
QAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVy
ZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVn
aXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1Nl
Z21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQg
OiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xh
c3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xh
c3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAg
IAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2Rl
SW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAg
IHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFsUmVnaXN0ZXIs
IFNwZWN1bGF0ZWRUeXBlPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAg
ICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lz
dGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAg
IHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAg
ICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBV
c3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3
ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBs
YW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9y
IHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNv
bWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5j
ZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Niw3ICsyMTEsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRl
IEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1
YmxpYyBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJ
VDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVp
bnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7
Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXBy
ZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAg
ICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBi
ZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgotICAg
ICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVtIGNs
YXNzIENvbXBpbGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAgTE9M
CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21w
aWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVj
b2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1
cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZv
aWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAotICAg
ICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21waWxh
dGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVU
eXBlIGNvbXBpbGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29t
cGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBjb21w
aWxlVHlwZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5
cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVj
dFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29k
ZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9w
PihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2Fj
aGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7
CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGlu
ZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRo
Q2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5n
dGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNl
TE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAg
ICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVn
IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1w
bChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhv
dXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkg
KzM1MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hl
Y2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChK
dW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFk
ZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93
Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0p
OworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9
IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVu
c3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2
b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBM
aXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpA
QCAtMzMzLDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAg
ICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAg
LTM2MCw3ICszOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxl
T3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVt
cFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdy
aXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJC
YXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01
MDgsOCArNTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwg
UmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlv
bik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25k
aXRpb24pOwpAQCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJs
ZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAg
ICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiop
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiop
OwpAQCAtNTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdp
bihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxl
cl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChj
b25zdCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3Bf
bW92KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjc4LDc4ICs3MjEsMTAwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiop
OwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAg
ICAgICAgdm9pZCBlbWl0X29wX2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiopOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0Q29tcGFyZU9w
SW1wbChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzKGNvbnN0IEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAg
dm9pZCBlbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1p
dF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAg
ICB2b2lkIGVtaXRfb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
YWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxs
ZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAg
IHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVt
aXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAog
ICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVk
KTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7Cisg
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4
cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRH
UFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZv
aWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwot
ICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3Bl
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAg
ICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwg
R1BSUmVnKTsKQEAgLTc2NCw4ICs4MjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lk
IGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZv
aWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
KTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIp
OwpAQCAtNzc4LDM4ICs4NDEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlv
biosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVw
YXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQ
cm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQg
ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0
aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hG
dW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBK
dW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAg
ICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
IWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAg
ICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAg
bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
aW9uPgorICAgICAgICB2b2lkIGVtaXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1
bGF0ZWRUeXBlIGRzdFR5cGUpOwogCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55
U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAg
IHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAg
ICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC04OTEsNiAr
OTM3LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNr
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3Mu
Li4pOworICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRv
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFu
ZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQs
IEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3Bl
cmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
KyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2Fs
bDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKQEAgLTkwMiw2ICs5NjgsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIE5vUHJvZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2b2lkIGVt
aXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGluZ1BvbGljeSBzaG91bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5nUG9saWN5
OjpOb1Byb2ZpbGluZyk7CiAKQEAgLTk2MSw2ICsxMDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5k
aWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2
b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBz
dGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29t
cHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTk3MSw2ICsxMDQzLDI5MiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAg
ICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1w
KEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVt
cCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQm
KTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBS
UmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBh
cmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2Vk
LCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFu
ZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91
YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IElu
dmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTnVtYmVyT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfk51bWJlck9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIC8vIFNwZWN1bGF0ZSBu
dW1iZXIrYm9vbGVhbitvdGhlciwgYW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9yIGJpdG9w
cy4KKyAgICAgICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVz
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0K
KworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJl
ZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYg
Z3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQp
LmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVn
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYg
cmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJl
Z1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiBy
ZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxE
ZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
bV91c2VMT0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQ
UlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGdwcikub3BlcmFuZC5p
c1ZhbGlkKCkpOworCisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOwor
ICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVy
YW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vu
ZGlmCisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXJlZ1ZhbHVlKGZwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVy
YW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1
cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVy
IHwgU3BlY0Jvb2xlYW4pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090
aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9v
bCB1c2VMT0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4
aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQg
bW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxs
b2NhdGVHUFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFs
bG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJS
ZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7Cisg
ICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6
IE1ha2UgdGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0
IHRvIHNldCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2Nr
KFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2ls
ZW50U3BpbGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSA9IElu
dmFsaWRHUFJSZWcsIEZQUlJlZyB0b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOworICAgICAg
ICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAg
ICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVn
aXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJw
cmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1f
ZmFyQ2FsbHM7CkBAIC05OTAsNyArMTM0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
ZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9i
eXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7
CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzODUsODcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxv
Y2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBh
biB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUg
dGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAg
ICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsK
KyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAg
IHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwg
aXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0
aGlzID0geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9y
bWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7Cisg
ICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAg
ICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1Jl
Zy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFu
ZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0u
bWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChw
cm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHBy
b3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1
cnJlbnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKwor
ICAgICAgICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayog
bV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgVmVj
dG9yPE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAgIE9wZXJh
bmRzPHVuc2lnbmVkLCB0cnVlPiBtX2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDE2PiBtX3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBWZWN0b3I8
TG9nRW50cnk+IG1fZXhpdExvZzsKKworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0
YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9w
cmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxCeXRlY29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODggQEAKICNp
bmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAKKyNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVy
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
c0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE0NiwzNyArMTQ4LDE2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJ
bnN0cnVjCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2
b2lkIEpJVDo6ZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBncENvbXBhcmUsIERvdWJsZUNvbmRpdGlvbiBk
b3VibGVDb21wYXJlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNUZW1w
LmdwcigpLCByaHNUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBjb21wYXJlRG91YmxlKGRvdWJsZUNvbXBhcmUsIGxoc1RlbXAuZnByKCksIHJoc1RlbXAuZnBy
KCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJl
cihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB8fCAhcHJlZGljdGlvbkZvcihs
aHMpIHx8ICFwcmVkaWN0aW9uRm9yKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFy
ZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNH
UFIpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAg
ICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2xlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
bWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJl
T3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENv
bXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3Vi
bGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29t
cGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFs
LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKK30KKwogdm9pZCBKSVQ6OmVt
aXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0
ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAg
Ym94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDAp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29u
ZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5s
aW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29u
c3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHx8ICFwcmVkaWN0aW9u
Rm9yKG9wMSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNv
bmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIo
KTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlv
biA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICszNTUsNDMgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQog
eworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1w
OworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIg
PSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50
MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAg
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSBy
ZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOwor
ICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdl
dExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9w
MmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhz
R1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0
YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9w
MSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlv
biwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdl
dFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICs0MDcsODkgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAg
IEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAg
IGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNU
ZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQ
UiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJ
bnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAg
ICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihv
cDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1t
MzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsK
KyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJl
Z1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNv
bmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNv
bmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlv
bi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNp
emUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5v
blplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1i
ZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVk
aWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51
bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1
bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSk7CkBAIC0zMDAsOCArNDk4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsK
QEAgLTMyNiw4ICs1MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAt
MzUxLDEyICs1NDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBM
SFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAg
ICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1w
IGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMCk7CkBAIC0zNjksOSArNTYyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5r
KHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRo
aXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQu
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KQEAgLTM4MSwxMSArNTc0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25z
dCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRk
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVl
cyB3LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOwor
ICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAg
ICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAg
ICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92
ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0g
aW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsK
KyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAg
ICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZw
cigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAg
c2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7Cisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5w
dXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlu
cHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVO
dW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0zOTMsMTEgKzYyOCw2MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1f
c3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHRl
bXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KGlucHV0R1BSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
b25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVt
cEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1
bHRGUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRB
c0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1w
RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBS
KTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0
ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBS
LCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1
dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJp
Z0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAg
ICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2OTMsMTEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhz
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1f
cmhzOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKGxocykgfHwgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpICYmIHNob3VsZFNwZWN1
bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNU
ZW1wLmZwcigpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICAgICAg
RlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRG
UFIgPSByZXN1bHRUZW1wLmZwcigpOworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soTWF0aDo6Zm1vZERvdWJsZSwgcmVzdWx0RlBSLCBsaHNG
UFIsIHJoc0ZQUik7CisKKyAgICAgICAgICAgIHNldERvdWJsZShkc3QsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUg
cmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNT
RVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lz
dGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBl
Y3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBB
U1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChl
Y3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1Rl
bXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBj
bG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gp
OworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAu
ZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gp
OworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAg
ICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+
Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0g
ZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKwor
ICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1w
bGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBzcGlsbEZvckNh
bGwoKTsgLy8gT09QUzogbmV3IG5hbWUsIGxpa2Ugc3BpbGxFeHBlY3RpbmdTbG93UGF0aAorCisg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhz
R1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhz
LCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBt
b3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0
b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0
ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVk
SW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlz
KTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwot
ICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9z
aXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQorICAgIGJveEludDMy
KGVkeCwgSlNWYWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLSNlbHNlIC8v
IENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBD
UFUoWDg2XzY0KQpAQCAtNDY0LDcgKzgwNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
KQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3Ay
OwpAQCAtNDc0LDYgKzgxNiw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBA
IC01NjIsMTUgKzkwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3Qg
SW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5z
dHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNs
b3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyNCwxMyArMTA2NSw2NiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lD
KiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5n
ZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRl
ciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBj
YW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsK
KyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6OnRyeUVtaXRMT0xCaXRGYXN0UGF0aChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CisKKyAgICBhdXRvIGJpdE9wID0gWyZdIChHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BS
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PE9wLCBPcEJpdGFuZD4pCisgICAgICAgICAgICBhbmQzMihsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2Ft
ZV92PE9wLCBPcEJpdG9yPikKKyAgICAgICAgICAgIG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BC
aXR4b3I+KQorICAgICAgICAgICAgeG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BMc2hpZnQ+KQor
ICAgICAgICAgICAgbHNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BVcnNoaWZ0PikKKyAgICAg
ICAgICAgIHVyc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFJzaGlmdD4pCisgICAgICAgICAg
ICByc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBzZXRJbnQz
MihyZXN1bHQsIHJlc3VsdEdQUik7CisgICAgfTsKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKyAgICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzJDb252ZXJ0aW5nKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKG9w
MikpIHsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzLmdwcigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MSwxNyArMTEz
NSw4IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OwotI2VuZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRGYXN0UGF0aDxPcD4oY3VycmVudEluc3Ry
dWN0aW9uKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwpAQCAtNzYwLDMzICsxMTQ1LDEw
NiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgICAgIGxl
ZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwogICAg
IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFu
ZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQogICAgIFJFTEVB
U0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsK
KworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAg
ICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkp
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAg
ICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owog
ICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYK
IAotICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogCisgICAgU25pcHBl
dEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVu
ZEp1bXBMaXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKICAgICBpZiAocHJvZmlsaW5n
UG9saWN5ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1pdFByb2ZpbGluZykKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MuZ3By
KCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigp
KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiks
IFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjSW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0
SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkg
eworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQor
CisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3Vs
dEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAo
cmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9u
bHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50
MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwogI2Vsc2UKQEAgLTgwMyw3ICsxMjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNv
bnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRS
ZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTg0OSwxOSArMTMwNyw4IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQ
YXRoKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKKyAgICBpZiAo
dHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICBy
ZXR1cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQ7CkBAIC04NzMsMjEgKzEzMjAsNzcgQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFs
aWRGUFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIg
ZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIo
KSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAg
ICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmln
aHRTaGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAg
IGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
SW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIs
MTggKzE0MDUsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJo
c0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhz
RlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAg
IE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRG
UFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLCByaHNGUFIs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRB
ZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsK
ICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRk
SUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRk
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsK
KyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxNDc1LDM1IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBh
cyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyBy
ZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBz
cmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcg
cmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAg
ICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNl
CiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
QEAgLTk0MSwxOSArMTUxMiwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlN
YXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3Ms
IHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7
CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCBy
ZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkp
OwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1w
cyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVF
bmQgPSBsYWJlbCgpOwpAQCAtOTYzLDcgKzE1MzcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJl
cikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzE1NTUsODIgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisg
ICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAg
IEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJS
ZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0
VGVtcEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7
CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9
IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7
CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRD
b25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAg
ICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1w
RlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAg
ICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRU
ZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAg
ICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIg
PSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
KyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
cmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOworICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3Io
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElD
LT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9y
Ojppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3
ICsxNjM5LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAog
ICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRo
aXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2Rl
KSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYg
KGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQu
aXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
Mik7CisgICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAt
PmdwcigpIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwor
ICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQor
CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgp
OwpAQCAtMTAzNSwxMSArMTY3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmlu
YXJ5TWF0aElDCiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAg
ZWxzZSBpZiAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiBy
ZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE2OTgsOCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9
IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07
CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwpAQCAtMTA4NSw3ICsxNzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVu
YXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVu
Y3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBh
dGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9u
U3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE3NDUs
NiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKLSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE3NTUs
MzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNT
RVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkg
JiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkp
OwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwot
ICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0
T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNM
ZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdU
MyA6IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFs
aWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAg
ICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxz
ZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5k
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBA
IC0xMTU2LDIzICsxODE3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0
aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNl
bHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7
Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVy
YW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTgzMiwyMzcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25z
dERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJF
TEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJS
ZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0
VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVm
dFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0
RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAg
IGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAg
RlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdU
MDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBK
SVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewog
ICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExp
c3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1w
dHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAg
ICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNC
eXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJv
ZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxocy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBh
cml0aFByb2ZpbGUuZGlkT2JzZXJ2ZU5lZ1plcm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAg
IEZQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNU
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAg
ICAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKGxoc0dQUiwgbGhzRlBSKTsKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyaHNHUFIsIHJoc0ZQUik7CisgICAgICAgICAgICAgICAgbXVs
RG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtp
bmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDAp
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8sIGJy
YW5jaDMyKEJlbG93LCByaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSBy
aHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOwor
ICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVz
dWx0LmZwcigpOworICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRG
UFIpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUTXVsSUMqIG11
bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJ
QyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3Vy
cmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CisgICAgZW1p
dE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3Vi
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5n
cHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU51bWJlcihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAg
ICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklU
U3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1
YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1
YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6
ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7
CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9Q
T1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDExIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0
IE9wJiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZp
cnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3Rp
bmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCAr
MTQ5LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJl
dHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJl
Z2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9j
YWxsX2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAg
ICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAt
MzM0LDQ0ICszMzcsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2Fs
bFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBA
IC0zODYsNiArMzg5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZl
ZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVz
IHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMu
Li4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUg
cmVzdWx0IGhlcmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1
YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVp
bnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVz
dWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93Owor
ICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgIHNsb3dDYXNlLmp1bXBz
LmFwcGVuZChuZXh0Q2hlY2twb2ludFNsb3cpOworCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzLCByZWdUMCB9OworICAgICAgICBHUFJSZWcg
c2hvdWxkQmVSZWdUMCA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNob3VsZEJlUmVnVDAgPT0gcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1f
bmV4dCwgcmVnVDApOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25leHQsIHJlZ1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMp
OwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwpAQCAtNDU2LDYgKzQ3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisK
KyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVs
dGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMu
IEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nh
c2UgPSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDM3ICs0OTksNDQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIs
IGl0ZXJSZXN1bHRHUFIpOwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xv
d1BhdGg7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVn
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJl
c2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisgICAgICAgIHVzZWRSZWdpc3Rl
cnMuYWRkKHZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZl
ZFJlZ3MsCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVj
a3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5h
cHBlbmQoZG9uZUNoZWNrcG9pbnRTbG93UGF0aCk7CisKKyAgICAgICAgd2lsbERlZihieXRlY29k
ZS5tX2RvbmUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25l
R1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAg
ICAgewogICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDM7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKKyAgICAgICAgSnVtcExpc3QgdmFsdWVD
aGVja3BvaW50U2xvd1BhdGg7CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRo
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBl
bmQodmFsdWVDaGVja3BvaW50U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSk7CisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV92YWx1ZSk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHZhbHVlR1BSKTsKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAK
ICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpAQCAtNTE1LDEwICs1NDUsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGlu
ayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+
KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9y
TmV4dD4oKTsKQEAgLTUyNiw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2Rl
Lm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5r
KHRoaXMpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTc3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAog
ICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nh
c2UuanVtcHNbMl0ubGluayh0aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJl
ZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVn
VDA7CiAKQEAgLTU2MSw3ICs1OTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zCiAKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUz
LDggQEAgY29uc3QgY2hhciogSklUQ29kZTo6dHlwZU5hbWUoSklUVHlwZSBqaQogICAgICAgICBy
ZXR1cm4gIkxMSW50IjsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICBy
ZXR1cm4gIkJhc2VsaW5lIjsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0
dXJuICJMT0wiOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gIkRG
RyI7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkBAIC0xMDgsNyArMTEwLDcgQEAgSklUQ29k
ZVdpdGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQwogCiBKSVRDb2RlV2l0aENvZGVSZWY6
On5KSVRDb2RlV2l0aENvZGVSZWYoKQogewotICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgKGlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKSkKKyAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChp
c0RGR09yRlRMKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQog
ICAgICAgICAmJiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpCiAgICAgICAgIGRhdGFMb2coIkRl
c3Ryb3lpbmcgSklUIGNvZGUgYXQgIiwgcG9pbnRlckR1bXAobV9yZWYuZXhlY3V0YWJsZU1lbW9y
eSgpKSwgIlxuIik7CiB9CkBAIC0yMzcsNiArMjM5LDExIEBAIE5hdGl2ZURPTUpJVENvZGU6Ok5h
dGl2ZURPTUpJVENvZGUoQ29kZVIKICNpZiBFTkFCTEUoSklUKQogUmVnaXN0ZXJTZXQgSklUQ29k
ZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoQ29k
ZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCkKIHsKKyAgICAvLyBGb3IgQmFzZWxpbmUgSklULCB0aGlz
IGlzIHRyaXZpYWxseSB0cnVlLgorICAgIC8vIEZvciBMT0wgSklULCBldmVyeXRoaW5nIGlzIGFs
cmVhZHkgc3BpbGxlZCB0byB0aGUgc3RhY2sgYXQgZWFjaCBvcGNvZGUsIHNvIHdoZW4gd2UKKyAg
ICAvLyBnbyB0byB0aGUgb3BfY2F0Y2gsIHRoZSBsaXZlIHN0YXRlIG11c3QgYWxyZWFkeSBiZSBp
biB0aGUgcmlnaHQgcGxhY2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEFsc28sIG9wX2NhdGNoIGhh
cyBubyBpbmNvbWluZyByZWdpc3Rlci90eXBlIHByb29mIHN0YXRlLCBzbyBpdCdzIHRyaXZpYWwg
dG8gY2F0Y2gKKyAgICAvLyBhbiBleGNlcHRpb24gaW4gTE9MIGp1c3QgYnkganVtcGluZyB0byBv
cF9jYXRjaC4KICAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBj
bGFzcyBKSVRUeXBlIDogdWludDhfdCB7CiAgICAgSG9zdENhbGxUaHVuaywKICAgICBJbnRlcnBy
ZXRlclRodW5rLAogICAgIEJhc2VsaW5lSklULAorICAgIExPTEpJVCwKICAgICBERkdKSVQsCiAg
ICAgRlRMSklUCiB9OwpAQCAtNjcsMzYgKzY4LDIzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiB0eXBlTmFtZShKSVRUeXBlKTsKIAotICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRv
bVRpZXJKSVQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkJhc2VsaW5lSklUOwot
ICAgIH0KLSAgICAKICAgICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKSVRU
eXBlIG5leHRUaWVySklUKEpJVFR5cGUgaml0VHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
aml0VHlwZSkgewotICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICAg
ICAgcmV0dXJuIEpJVFR5cGU6OkRGR0pJVDsKLSAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6RlRMSklUOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBKSVRUeXBlOjpOb25lOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBi
b29sIGlzRXhlY3V0YWJsZVNjcmlwdChKSVRUeXBlIGppdFR5cGUpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgogICAgICAgICBj
YXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGRlZmF1bHQ6CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgorICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMDcsNyArOTUsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNlIEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpOb25lOgorICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAg
ICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMTYsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgc3dpdGNoIChqaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkRG
R0pJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTEyNCw2ICsxMTcsMjQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgc3RhdGljIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KEpJVFR5cGUgaml0VHlw
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5
cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjYXNlIEpJVFR5cGU6
Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBlY3Rl
ZExvd2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNFeGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKQEAgLTE0NSw5ICsxNTYs
MTkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzTG93ZXJPclNhbWVUaWVyKGV4
cGVjdGVkTG93ZXIsIGV4cGVjdGVkSGlnaGVyKTsKICAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1
c2VzUmVwbGFjZW1lbnRDb2RlQmxvY2soSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6
REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUOworICAgIH0KICAgICAKICAgICBz
dGF0aWMgYm9vbCBpc09wdGltaXppbmdKSVQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKKyAgICAg
ICAgcmV0dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlw
ZTo6RlRMSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzREZHT3JGVEwoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKICAgICAgICAgcmV0
dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRM
SklUOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhj
ZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2
b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhCiAgICAgICAgIC8vIHdpdGgg
dGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhlIG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFu
aW5nbGVzcwogICAgICAgICAvLyBhbmQgY2FuIGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBw
cm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50YXJnZXQKICAgICAgICAgLy8gaW4gdGhlIHByb3Bl
ciBmcmFtZS4KLSAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKCFKSVRDb2RlOjppc0RGR09y
RlRMKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjYXRj
aFBDRm9ySW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMo
KS5hdChoYW5kbGVyLT50YXJnZXQpLnB0cigpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGNh
dGNoUm91dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIK
ICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2xv
d1BhdGhDYWxsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDUsNiArMTQ2LDcgQEAgQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2Ug
aXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwg
dG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU5LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rp
b24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRo
ZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBA
IC0xNjcsMjUgKzE3MCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xv
d0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nh
c2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAg
aWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZv
aWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MSwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNf
SU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAo
IW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAh
PSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMu
bGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9
IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7
IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQs
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNv
bnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVT
bG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1
bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkp
OworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7Cisg
ICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xv
d0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICszOTks
NiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBz
dG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkBAIC03MTcsNiArNzA1LDE4
IEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4g
RUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0U2xvd09wKEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBT
cGVjdWxhdGVkVHlwZSBkc3RUeXBlKQoreworICAgIHNwaWxsRm9yQ2FsbCgpOworICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBmdW5jdGlv
bik7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBpZiAobV91c2VMT0wgJiYgZHN0Lmlz
VmFsaWQoKSkgeworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBkc3RUeXBlOworICAgICAgICB3
aWxsRGVmKGRzdCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAg
ICAgfTsKIAotICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRF
bWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkp
OwogCiAgICAgICAgIGlmIChtX2dlbmVyYXRlRmFzdFBhdGhPblJlcGF0Y2gpIHsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3Rv
bT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0
b3IuaCIKKyNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNp
bmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDYXN0LmgiCkBAIC00MSw2ICs0Miw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgi
CiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
clByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
NTEsNiArNTQsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgLy8gT09QUzogSWYgd2UgY2hhbmdlIHJlZ2FsbG9jIHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUg
TiByZWdpc3RlcnMgcGVyIGxvY2FsLCB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24n
dCBuZWVkIHR3byByZWdzLgorICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JP
cGVyYW5kKHNyYykgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkw
LDMyICsxMTUsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgog
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0s
IGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAK
LSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2Nh
dG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAg
R1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBz
Y3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVt
cC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
KyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9y
KQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQo
YWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRl
cmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxp
bmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0
UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3Zl
blR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZElt
bVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEyNSwyMyArMTcxLDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVj
dG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9o
YXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5j
ZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3Ry
dWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBP
cHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhh
c0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNv
bnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VU
ZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9y
R1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAg
fQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3Rh
bmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQ
UiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJv
dG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAg
ICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
JyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlv
bi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
dGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJl
c3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNl
VmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTEsNDAgKzIyNCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAot
ICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3Bl
Y3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFs
IHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1
c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAK
LSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2Vs
bCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFu
Y2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAv
LyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90
bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8
Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsK
KworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsg
KnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAu
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAg
ICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAg
ICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHBy
b3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRU
ZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1w
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0
aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAg
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQor
CisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAg
ICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRj
aDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAg
ICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWws
IHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAg
Ly8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRo
aXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sg
dGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNo
ZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAg
ICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAg
ICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRj
aAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFu
Y2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIs
IGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAt
MTk5LDExICszMjUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1
YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVv
Zl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTIxMSwyOCArMzU1LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQo
Y28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklz
VW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBK
dW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBp
ZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5w
dXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAg
ICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Y29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAg
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMp
OworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29y
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyAr
NDI5LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
Z1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0yNTUsMTIgKzQ2MywzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFu
KGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4p
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29s
ZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAg
ICAgICAgICB0ZXN0NjQoWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDk5LDI3IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVs
bE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQ
UiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MjksNTYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0
KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJl
Z1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklH
SU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0
cnVjdGlvbiopCkBAIC0zMTMsMTggKzU5NSw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxs
X3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAK
LSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlw
ZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzY0
NCw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFs
dWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0
VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVl
VGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDksMTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSBy
ZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0
dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1
ICs3MjgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGlu
ayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1v
dmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGlu
ayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3By
b3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2
LDUyICs3NzEsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmlu
ZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxh
dGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVH
UFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZT
dHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3Ry
aW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8
IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlz
U3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYg
KHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlm
IChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAg
ICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJv
LCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6
IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
Ly8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2Fp
bnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4s
IHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBi
aXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0
aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2gg
d2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisg
ICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2Fz
IHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBj
bGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFs
c2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFu
ZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsK
KyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNl
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9u
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3Jl
IGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNv
bmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
ZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2Ny
YXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0
aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJ
VDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihj
b25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2Vz
IGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3Jh
dGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9
OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2Ny
YXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gy
RlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJH
UFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFs
dWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NzYsMTI5IEBAIHZvaWQgSklU
OjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAg
ICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAg
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
KyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmpl
Y3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAg
ICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigp
OworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0g
ICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAot
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0Nl
bGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0
dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
KworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0
ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMTA3LDI2IEBAIHZvaWQgSklU
OjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAg
ICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMzUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC01MTUsNjUgKzExNjYsMzQyIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IElu
c3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
ICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQ
b2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1Q
dHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVk
SW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFy
ZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHBy
IGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BD
b21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBp
c0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsK
KworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShs
aHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
SlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNl
bGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmco
cmhzLCByaHNHUFIpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAg
ICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChs
aHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNH
UFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIElu
dDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBj
b21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICBOdW1iZXJP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIE51bWJlck9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnBy
KCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21w
YXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2Vz
IGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0
R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1w
TGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIo
bGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQ
UikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisg
ICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgor
dm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
KyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29uc3Rl
eHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMs
IHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFs
IDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRP
cmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291
bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICBp
ZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJo
cykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAg
ICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywg
bGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9s
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJo
c0dQUik7CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihncENvbXBhcmUsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMp
KSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhz
KSkgeworICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVn
IGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1w
LmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBk
byBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93
UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAg
ICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVl
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24s
IHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1Qw
OworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVn
IHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9
IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQ
Uik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IFdlIGNhbiBtYWtlIHRo
aXMgYSBzaW5nbGUgYnJhbmNoIGlmIHRoZSByZXN0b3JlIGRvZXNuJ3QgY2xvYmJlciByZXR1cm5W
YWx1ZUdQUi4KKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7
Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsK
KyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
KyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihz
bG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisK
IHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
aHJvdz4oKTsKQEAgLTU4OSw3NCArMTUxNywxNzggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmlj
dEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3Jo
czsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdU
MSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBp
c0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8g
RG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVu
VHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qocmhz
KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkg
eworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgICAgICAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KGxoc0dQUikpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJp
Z0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
SW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
cmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZnBD
b21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIo
cmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZnBD
b21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMg
aGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKIAogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2
ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAg
ICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290
byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAg
Z290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQot
ICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQg
aXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdv
dWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElm
TnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMy
LCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcg
YWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwg
dGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcg
b25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwot
ICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0
KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlm
IGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgot
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5l
ZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGZhbHNl
KTsKKyNlbHNlCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRv
IGNvdmVyIHN0cmluZ3MpLgorICAgICAgICAgICAgbW92ZShsaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBvcjY0KHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZXN1bHRHUFIpKTsKKworICAgICAgICAgICAgLy8gSnVtcCBzbG93
IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdo
aWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBkb3Vi
bGUuCisgICAgICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIobGhzR1BSKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKGxoc0dQUikpOworICAgICAgICAg
ICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJ
ZkludDMyKHJoc0dQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
aHNHUFIpKTsKKyAgICAgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKworICAgICAgICAgICAg
aWYgKGlzRXEpCisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBsaHNHUFIsIHJoc0dQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wYXJl
NjQoTm90RXF1YWwsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworI2VuZGlmCisg
ICAgICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxl
T3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEp
LCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBy
ZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEg
aGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAg
ICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgIGdv
dG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKKyAgICAgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKGxlZnQgaXMg
Q2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgKi8KKworICAgICAgICAv
LyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBi
ZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJl
cgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIs
IHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBh
bGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFs
bCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBM
ZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShy
ZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAg
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1Qy
LCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVn
VDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJl
Z1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsK
KworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBh
dCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAg
ICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRv
IHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBv
bmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0
RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJlZ1Q1KTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIp
Ci0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4K
LSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVp
dGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlz
IGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAg
bGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIg
aXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5l
LCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1
bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwog
Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAg
ICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNv
bXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICNlbmRp
ZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY2OSw3MyArMTcwMSwyNjQgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbnN0cmljdGVxKGNvbnN0IEluc3RydQogICAgIGNvbXBpbGVPcFN0cmljdEVxPE9w
TnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKTsKIH0KIAorc3RhdGljIHZvaWQgY29tcGFyZVN0cmljdEVxQ2VsbHMoSklUJiBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYgbm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgsIEdQUlJlZyBs
aHNHUFIsIEdQUlJlZyByaHNHUFIsIEdQUlJlZyBsaHNUZW1wR1BSLCBHUFJSZWcgcmhzVGVtcEdQ
UiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEdQUlJlZyBzY3JhdGNoMkdQUikKK3sKKyAgICBlcXVhbC5h
cHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBsaHNHUFIsIHJoc0dQUikp
OworCisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7
CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisK
KyAgICBhdXRvIGxoc0lzU3RyaW5nID0gaml0LmJyYW5jaElmU3RyaW5nKGxoc0dQUik7CisgICAg
bm90RXF1YWwuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgbGhzSXNTdHJpbmcubGluaygmaml0
KTsKKyAgICBub3RFcXVhbC5hcHBlbmQoaml0LmJyYW5jaElmTm90U3RyaW5nKHJoc0dQUikpOwor
CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzR1BSLCBKU1N0cmlu
Zzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgbGhzVGVtcEdQUik7CisgICAgaml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmhzR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmhz
VGVtcEdQUik7CisKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9wZVN0cmluZ0lt
cGwobGhzVGVtcEdQUikpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZSb3BlU3Ry
aW5nSW1wbChyaHNUZW1wR1BSKSk7CisKKyAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgCisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2gzMigKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksCisgICAg
ICAgIHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOworICAgIAorICAgIHNsb3dQYXRo
LmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6
ZmxhZ3NPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3Ry
aW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
VGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJp
dCgpKSkpOworICAgIAorICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxo
c1RlbXBHUFIsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIGxoc1RlbXBHUFIpOworICAgIGpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6
OmRhdGFPZmZzZXQoKSksIHJoc1RlbXBHUFIpOworICAgIAorICAgIGF1dG8gbG9vcCA9IGppdC5s
YWJlbCgpOworICAgIAorICAgIGppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBzY3JhdGNoR1BSKTsKKworICAgIHsKKyAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgobGhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBhdXRvIG1hY3JvU2NyYXRjaCA9IGppdC5z
Y3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChyaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNPbmUpLCBtYWNyb1NjcmF0Y2gpOworICAgICAgICBub3RFcXVhbC5hcHBlbmQoaml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaDJHUFIsIG1hY3JvU2NyYXRjaCkp
OworICAgIH0KKyAgICAKKyAgICBqaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAgZXF1YWwuYXBwZW5kKGpp
dC5qdW1wKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29t
cGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0
ZWNvZGUubV9yaHM7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwg
c3JjMiwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BD
b21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJl
ID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBw
cm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVT
dHJpbmcocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAg
ICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGdwQ29tcGFyZSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisK
KyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlz
dCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAg
ICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BS
VGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hU
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0
aGlzIH07CisKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywgZXF1
YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJo
c1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworCisg
ICAgICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkSnVtcChl
cXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhZGRKdW1wKG5v
dEVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQz
MihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAu
ZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5m
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBt
b3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhpcyB9
OworICAgICAgICAgICAgR1BSVGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAyIHsgKnRo
aXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBsaHNTY3JhdGNoR1BSID0gbGhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNTY3JhdGNoR1BSID0gcmhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAyLmdw
cigpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFz
c3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8
IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09
IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdo
dCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAg
ICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0
IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIv
YnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMg
YW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywg
bGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIg
YXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8g
TGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdU
MCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1
YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0
YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBh
dCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhp
bmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVk
IHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7
CisjZWxzZQorICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWco
KSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0
IG5vdEVxdWFsOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbGVmdElzQ2Vs
bCA9IGJyYW5jaElmQ2VsbChsaHNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gc2tpcCA9IGJy
YW5jaElmTm90Q2VsbChyaHNHUFIpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFwcGVuZChq
dW1wKCkpOworCisgICAgICAgICAgICAgICAgbGVmdElzQ2VsbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG5vdEVxdWFsLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmhzR1BSKSk7CisKKyAg
ICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgICAgICBjb21wYXJl
U3RyaWN0RXFDZWxscygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCBy
aHNHUFIsIGxoc1NjcmF0Y2hHUFIsIHJoc1NjcmF0Y2hHUFIsIHRlbXBHUFIsIHRlbXAyR1BSKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAg
ICBza2lwLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEg
ZG91YmxlLgorICAgICAgICAgICAgYXV0byBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBpZiAoaXNFcSkgeworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGVxdWFsLCB0
YXJnZXQpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICB9IGVsc2UgeyAKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVh
bCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcg
J3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxl
ZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlz
IENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50
IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBz
aW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVp
cmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBU
aGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8
PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0
IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3
aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91
YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisK
KyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAg
ICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3Zl
ciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRl
Z2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBk
b3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmln
aHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEs
IHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzE5NzEsMjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmlj
dGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVn
IGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1i
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVO
dW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51
bWJlcjsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9
IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1w
KCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyks
IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMp
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBp
bnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2Ug
eworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5k
aWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNp
ZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1i
ZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQz
MihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlz
TnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAg
ICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBp
c0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJ
bnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBp
ZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAg
IH0KKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChy
ZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRl
KCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBv
ciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMjUwLDIzIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0
U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5U
eXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisK
KyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAg
ICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTkwNSw5ICsyMjgxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxl
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRl
KSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0
R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzIzMDYsMTcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7
Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTkzOCw5MyArMjMzMCwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1
dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1
Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAg
ICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsK
ICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGlu
dD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxp
bmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklU
OjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1
bXAoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7
CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDog
MSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIs
IHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRj
aEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsK
KworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
Y29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsK
IAotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAg
Y29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2Fz
Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAK
K3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1t
ZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQot
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVs
bEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdl
IGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBt
YWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwg
d2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxl
IHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmpl
Y3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50
ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBj
b3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAg
ICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAg
c3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOwor
ICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9
IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsK
IApAQCAtMTAzNSw5ICsyNDgxLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25z
dCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9m
U2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Cisg
ICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
b3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsK
KworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsyNTA1LDg0IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQg
PSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0Rz
dCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2Vj
bWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAg
ICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
dXRvIGRvbmUgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBz
cmNEc3QpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBP
T1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3Vs
ZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBp
ZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3Jj
RHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7
CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAg
ICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAg
IGF1dG8gZG9uZSA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlu
cHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0
R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRh
dGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlm
IChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAg
ICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKTsK
KyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3Jj
RHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNT
dHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0g
U3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBs
b2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAg
ICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzI1
OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+
KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3Rl
cklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdU
NDsKQEAgLTEwNjgsNyArMjYwMCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAg
IFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxs
ZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAx
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAg
ICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9
IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsK
KyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1
bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1w
NC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2Fs
bGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93
Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0
aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rp
b246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIo
SlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNjQyLDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0
cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJl
Zyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJl
Zyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Zp
bmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkp
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0
IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsyNjg3LDExIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0
YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxv
YyBvciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2Nv
ZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsK
KyAgICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3
YXlzIE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRF
eGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDAp
OwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwg
VHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgp
KSk7CkBAIC0xMTg3LDEzICsyNzE1LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
Ly8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAg
ICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRz
KCkpOwpAQCAtMTIwNiwxMSArMjczMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9o
aW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwog
Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0
cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92
ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgog
fQogCkBAIC0xMjMzLDEwICsyNzU4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxl
cl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJp
dHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUs
OCArMjc2OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsK
LSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2
LDIzICsyNzg5LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVH
UFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0
ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBm
dW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5j
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMp
OwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4
ZWMpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAt
MTMwMSwyNCArMjg1Myw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgq
dGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigp
OworICAgICAgICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICgh
dXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQ
Uik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5
ICsyOTIzLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNv
ZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJl
Z1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BS
LCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFy
Z0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzI5NDQsMjkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9s
ZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdH
UFIgPSB0ZW1wLT5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJnR1BSID09IHJldHVy
blZhbHVlR1BSKTsKKyAgICB9CisKKyAgICAvLyBPT1BTOiBJbmxpbmUgdGhlIGFsbG9jYXRpb24g
cGF0aCBoZXJlLCBpdCBtYXR0ZXJzIGZvciBzdW5zcGlkZXItY3J5cHRvLWFlcworCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAg
ICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAg
fQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1p
dExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsK
ICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICsyOTgwLDM2IEBAIHZvaWQgSklUOjplbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQ
UiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVz
cyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0
R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdU
MCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICszMDI5LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBt
X3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKQEAgLTE0MzYsNiArMzA1OCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxs
Rm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9w
ZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYx
LDE1ICszMDg1LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQK
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAg
ICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRj
aGFibGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBh
bmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRU
eXBlSnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAg
ICBhZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
ICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzMxMDIsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogCiAgICAgTGFiZWwgbmV4
dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRj
aGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
YnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAs
IG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMzEzNSw4MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBh
IGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAq
dGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0
aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJh
c2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwg
cmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAg
SnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBv
dXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJl
Z1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwg
ZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3In
cyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAg
ICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQ
UiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5k
ZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNj
cmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSks
IHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVj
dHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsK
KyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisg
ICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFj
Y2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdU
MCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzIxOSw1MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qx
KTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhP
ZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtu
b3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhp
cywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJh
dG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdw
cigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJl
Z1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBp
bkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZz
ZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5k
cy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIo
aW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMjczLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQ
UlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAg
ICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVz
dWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVt
ZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVt
ZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBl
bnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVs
b3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0Vp
Z2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwg
cmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8
IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszMzI3LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlv
biogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAg
LTE2NTgsNiArMzM4OSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZt
KCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRl
VG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszNDA2LDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGls
bEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3Nl
cnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBo
YXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTY4NCw2
ICszNDIxLDE5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAg
ICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRJc0NhbGxh
YmxlSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIGF1dG8gaXNGdW5j
dGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAgICBhdXRvIG5vdE9iamVj
dCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
c2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgCisgICAgICAgIG5vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUg
PSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0Z1bmN0aW9uLmxpbmsodGhpcyk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9pc19jYWxsYWJsZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxhYmxlSW1wbDxPcElzQ2FsbGFibGU+KGN1cnJl
bnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19mdW5jdGlv
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRJc0Nh
bGxhYmxlSW1wbDxPcFR5cGVvZklzRnVuY3Rpb24+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNo
SWZDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gaXNOdWxsID0gYnJhbmNo
SWZFcXVhbChKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0sIGpzTnVsbCgpKTsKKyAgICAgICAgYXV0
byBpc05vbk51bGxOb25DZWxsID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIGF1dG8gaXNGdW5jdGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5w
dXRHUFIpOworICAgICAgICBhdXRvIG5vdE9iamVjdCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0
R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gc2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgCisgICAgICAgIGlzTnVsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgIAorICAgICAgICBpc05vbk51bGxOb25DZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhp
cyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9P
UFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUeXBlb2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV92YWx1ZTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
b3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgIEp1bXAgc2xv
d1BhdGg7CisgICAgICAgIGVtaXRUeXBlT2YoCisgICAgICAgICAgICBKU1ZhbHVlUmVncyB7IGlu
cHV0R1BSIH0sIHJlc3VsdEdQUiwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlLCBi
b29sIGZhbGxzVGhyb3VnaCkgeworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X3ZtLT5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgaWYgKCFmYWxsc1Rocm91Z2gpCisgICAgICAgICAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChKdW1wIHRoZVNs
b3dQYXRoKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGggPSB0aGVTbG93UGF0aDsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICB9
IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoaW5wdXRH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOworICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xU
YWJsZSo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7
CisgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9pbml0aWFsVmFsdWUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzeW1ib2xUYWJsZS0+c2luZ2xldG9uKCkuaXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAg
IGVtaXRTbG93T3Aoc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIGRzdCwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBzY29wZVRlbXAgeyAqdGhpcywgc2Nv
cGUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVt
cCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGVUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xv
d1BhdGg7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsK
KyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPEpTTGV4aWNhbEVudmly
b25tZW50PigKKyAgICAgICAgICAgICptX3ZtLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpLCBidXR0ZXJm
bHksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwKKyAgICAgICAgICAgIHNsb3dQYXRoLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpKTsKKworICAgICAg
ICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgCisg
ICAgICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0
LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQorICAgICAgICAvLyBhY3RpdmF0aW9uIG11
c3QgYmUgeW91bmcuCisgICAgICAgIHN0b3JlUHRyKHNjb3BlR1BSLCBBZGRyZXNzKHJlc3VsdEdQ
UiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihzeW1ib2xUYWJsZSksIEFkZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6b2Zmc2V0T2ZTeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gTXVz
dCBpbml0aWFsaXplIGFsbCBtZW1iZXJzIHRvIHVuZGVmaW5lZCBvciB0aGUgVERaIGVtcHR5IHZh
bHVlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3ltYm9sVGFibGUtPnNjb3Bl
U2l6ZSgpOyArK2kpCisgICAgICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWUs
IEFkZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZShTY29wZU9mZnNldChpKSkpKTsKKyAgICAgICAgCisgICAgICAgIG11dGF0b3JGZW5jZSgqbV92
bSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFM
VUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MDIsMTEgKzM2MjYsMjAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0g
SlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94
SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFp
bGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzY0Nyw0OCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRl
Y29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3Vi
MzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9M
ZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFy
YW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3Vs
dEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3Ro
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNo
MzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAg
ICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBi
b3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0
aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
MCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAK
LSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRp
ZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszNjk2LDk5IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsK
KyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwor
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5k
cy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVu
ZGVmaW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1
bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlz
KTsKLSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJn
dW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91
bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRS
ZWdzKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwodmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZh
bHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0s
IHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywg
cmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8
IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qy
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJU
KHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAg
ICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2
YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAg
IH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjQs
NiArMTQyNCw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXIKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIC8vZGF0YUxvZ0xuKCJjb21w
YXJlTGVzcywgbGhzOiAiLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksICIgcmhzOiAiLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogICAgIAogICAgIHJldHVybiBqc0xlc3M8dHJ1
ZT4oZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKSk7CiB9CkBAIC0xNDkxLDYgKzE0OTMsOCBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGFyCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgc3JjMiA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AyKTsKIAorICAgIC8vZGF0YUxvZ0xuKCJzdHJpY3RlcSwgbGhzOiAiLCBzcmMxLCAi
IHJoczogIiwgc3JjMik7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFs
T2JqZWN0LCBzcmMxLCBzcmMyKTsKIH0KIApAQCAtMTg3OSw3ICsxODgzLDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgIH0KICAgICAKICAgICBDb2RlQmxv
Y2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBB
U1NFUlQob3B0aW1pemVkQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRp
bWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxv
Y2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkp
OwogICAgIAogICAgIGlmICh2b2lkKiBkYXRhQnVmZmVyID0gREZHOjpwcmVwYXJlT1NSRW50cnko
dm0sIGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG9wdGltaXplZENvZGVCbG9jaywgIm9zckVudHJ5Iiwg
KCJhdCBiYyMiLCBieXRlY29kZUluZGV4KSk7CkBAIC0zNDMzLDYgKzM0MzcsNDIgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrSQogICAgIHJldHVybiAwOwogfQogCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9u
Tm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKQoreworICAgIC8vIEl0J3Mgc29y
dCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywg
ZG9pbmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KKyAgICBEZWZl
ckdDRm9yQVdoaWxlIGRlZmVyR0MobG9sQ29kZUJsb2NrLT52bSgpLmhlYXApOworCisgICAgaWYg
KGdldGVudigicHJpbnRFYWNoSmV0dGlzb24iKSAmJiAhIWF0b2koZ2V0ZW52KCJwcmludEVhY2hK
ZXR0aXNvbiIpKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJqZXR0aXNvbiwgZm9yY2luZyByZW9wdCBu
b3c6ICIsICpsb2xDb2RlQmxvY2spOworICAgIGxvbENvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQ
cm9maWxlUHJlZGljdGlvbnMoKTsKKyAgICAKKyAgICAvLyBPT1BTOiBwcm9jZXNzIHZhbHVlIHBy
b2ZpbGVzIGhlcmUsIHNpbmNlIHdlJ3JlIGpldHRpc29uaW5nLCBob3BlZnVsbHkgdGhleSB1cGRh
dGUgdy8gdGhpbmdzIHdlIGNhcmUgYWJvdXQuCisKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obG9s
Q29kZUJsb2NrLT52bSgpKTsKKworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgKmxvbENvZGVCbG9jaywgIjogRW50ZXJlZCByZW9wdGltaXplIGZyb20gTE9MIik7CisKKyAg
ICBDb2RlQmxvY2sqIGxsaW50Q29kZUJsb2NrID0gbG9sQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
OworICAgIC8vIFdlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJhc2VsaW5lIGNvZGUgYmxvY2su
CisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGxsaW50Q29kZUJsb2NrLT5qaXRU
eXBlKCkpKTsKKworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBsbGludENvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlcGxhY2VtZW50IHx8IHJlcGxhY2VtZW50ID09IGxs
aW50Q29kZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgKmxsaW50Q29kZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nIExPTCBiZWNhdXNlIHdlJ3Zl
IGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1lbnQgbXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4g
VXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKKyAgICAvLyB0byBjaGVjayBvdXIgbG9naWMuCisg
ICAgQVNTRVJUKGxsaW50Q29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAg
ICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGxvbENvZGVCbG9jay0+aml0VHlwZSgp
KSk7CisKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgc3R1Y2sgaW4gYSBsb29wIGxvZ2ljCisg
ICAgbG9sQ29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09TUkV4aXQs
IENvdW50UmVvcHRpbWl6YXRpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JF
X1dBUk5JTkdTX0VORApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNiArMzE5LDggQEAgSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25WYWx1ZQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nLCB2b2lkLCAoVk0qKSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB2b2lk
LCAoVk0qKSk7CiAKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxP
TFJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4
ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKQEAgLTI4MSw4ICsyNzcsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwpAQCAtNTU4LDcgKzU1Miw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwog
ICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJl
ZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCkBAIC01OTgsOCArNTkxLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjM5LDggKzYzMCw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTY4Niw4ICs2
NzUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTcyOSw4ICs3MTYs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTc3OCw4ICs3NjMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC04MTks
OCArODAyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTEwMCw4ICsx
MDgxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjU3
LDggKzEyMzYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+
CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
IApAQCAtNTIsNTEgKzU0LDExNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZh
bHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVH
UFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVu
SWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50
aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwg
cHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNl
TE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxs
Q2hlY2spKQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5n
VHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAg
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0
eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkK
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAg
ICAgICBlbHNlIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVj
U3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmlu
ZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworCisgICAgICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlW
YWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRl
eF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEwNSw0MSArMTczLDczIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHBy
b3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFBy
aXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3Vs
dFJlZ3MpOworICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNT
RVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE1Nyw2ICsyNTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFs
SW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1h
eWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KTsKICAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQpCkBAIC0zMTksOCArNDIxLDExIEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
UHV0QnlWYWxXaXQKICAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5h
dmFpbGFibGVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCk7CisgICAgdW5hdmFpbGFibGVSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IHByb3BlcnR5TmFtZSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lz
dGVycywgcHJvcGVydHlOYW1lLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwgcHV0S2luZCk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0
dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzOSw3ICs0
NDQsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0
dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGly
ZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGly
ZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOwpAQCAtMzQ3LDcgKzQ1Miw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAg
ICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBb
Jl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
ICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKQEAgLTM1NSwxMyArNDYwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAg
ICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAg
ICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7
CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0zODEsNiArNDg1LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGls
bEZvckNhbGwoKTsgLy8gT09QUzogRG8gYmV0dGVyIGlmIHdlIGNhbiEKKwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKIApAQCAtMzk0LDEzICs1MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBmYXN0
UGF0aEptcCwgZG9uZSwgZG9uZSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0UHJpdmF0ZU5hbWU+KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgUHJp
dmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAg
ICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwpAQCAtNDIwLDQ5ICs1MjUsMTA1IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
LSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vz
c29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9u
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JH
UFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qg
YXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07
CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdl
dHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRl
ci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1Qy
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdU
MSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNv
ZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywg
Ynl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAg
ICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9
OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9w
ZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUu
bV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
YWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmli
dXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTggKzYzMyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2Rl
bEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJp
ZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJl
Z2lzdGVycy4KQEAgLTQ5MiwyNSArNjg3LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3By
KCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC01MjAsMTkgKzcxNyw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgcHJvcGVydHkpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFs
dWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAg
IHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0
eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlH
UFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7
CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtNTQxLDIyMSArNzg5LDM2OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAg
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQ
Uik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7
CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3Ms
IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBH
UFJSZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNlTE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlw
ZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2Zp
bGUpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dp
dGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0
aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
dGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNl
KTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxhY2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICB0aGlzR1BSID0gdGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAg
fQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywgdGhpc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhp
c1ZSZWcpOworICAgIH0KIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRz
V2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisK
ICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhp
c1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBh
dGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBv
bmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVu
IGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNv
ZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0
IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAg
ICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9
IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVj
bWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBk
aXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIAogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTc2NSw3NyArMTE2MCw5NSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgog
ICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBl
ZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VW
UmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3Vs
ZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
cmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJh
c2VHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5C
eUlkc1ttX2luQnlJZEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1
bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0
dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17
Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+
YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQ
UiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ3LDE3ICsxMjYwLDI1IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBt
ZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
CiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5k
aW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29u
c3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCgpKSwgcmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtODY3LDIxICsxMjg4LDM2IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRT
Y29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1f
Y29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRT
Y29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3Vy
ZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRo
KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAg
ICAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBH
UFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
ICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBz
Y29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3Zl
KHNjb3BlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IGRlcHRoOyArK2kpCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQ
UiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBA
IC04OTQsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKIApAQCAtOTA5LDI5ICsxMzQ1LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1Qw
KTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTQwLDE1ICsxMzc2LDIw
IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkK
K3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQ
dHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRy
KHN0cnVjdHVyZVNsb3QsIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoWmVybywgc2NyYXRjaEdQUikpOworICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJv
bVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKQEAgLTk2MiwxMiArMTQwMyw2
IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lz
dGVyKSksIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTk3OCw1MSAr
MTQxMyw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsK
ICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Qq
PigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAg
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRs
ZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJh
c2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAg
ICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0g
cmVnVDI7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7Cisg
ICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAg
IG9mZnNldEdQUiA9IHJlZ1QyOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAg
ICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1
bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxv
YWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xv
dCwgb2Zmc2V0R1BSKTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zm
c2V0R1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAg
ICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAg
ICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBuZWczMihvZmZzZXRHUFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIob2Zmc2V0R1BSLCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRl
eChyZXN1bHRHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0
Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdU
MTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQ
Uik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3Rlcikp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
QEAgLTEwMzYsMTAgKzE1MDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtMTA1MiwyNyArMTUyMCwyNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8v
IExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDgyLDQwICsxNTUwLDIyIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3Rv
cmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJs
ZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRj
aHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2Fk
UHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3Jp
dGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVy
KSkpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTI5LDIxICsxNTc5
LDQ5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAg
IHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZt
ZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
dmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFs
dWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0K
KwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9m
ZnNldFZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0
R1BSOworICAgICAgICAgICAgR1BSUmVnIGJ1dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2Nv
cGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BS
ID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1
dHRlcmZseVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNj
b3BlR1BSLCBvZmZzZXRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1i
ZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBi
cmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3Bl
R1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAg
ICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFu
ZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBz
dG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGJ1dHRlcmZseUdQUik7CisgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZz
ZXRHUFIpOworICAgICAgICAgICAgbmVnUHRyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9y
ZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTExNTQsMjggKzE2MzIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAo
IWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ug
bmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3Zl
IHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAg
aWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwog
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Q
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZh
bHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BS
LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWND
ZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgot
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVl
LCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAg
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwg
QWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAg
ICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTE5
MCwxMiArMTY5NywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRv
IGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSBy
ZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29u
J3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0
Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0ds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMy
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQg
dG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAg
ICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwpAQCAtMTIwOSwyMyArMTcyNSwz
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZh
bHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0
Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBn
byBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJl
c29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwpAQCAtMTI0MiwxMCArMTc2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKQEAgLTEyNjEsNjEgKzE3ODQsMTc4IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1l
bnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50
c0dQUik7CisgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJl
Z1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBs
b2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQ
Uik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVn
VDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFy
cmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAor
ICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Nl
bGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
IHsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdl
IG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9v
dW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5l
ZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJl
Z2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0
LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3Ig
Y2FsbCArIHNpbGVudCBmaWxsCisKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFs
UmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZp
bHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAg
aWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBp
ZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAg
ICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAg
IGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IG93bmVyVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOwor
ICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKworICAgICAgICBpZiAoZ3ByRm9yT3Bl
cmFuZChvd25lcikgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG93bmVyR1BSID0gZ3By
Rm9yT3BlcmFuZChvd25lcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3duZXJWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIG93bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBvd25lckdQUik7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3duZXIsIHJlZ1QwKTsKKyAgICB9CisKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlKQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZp
bHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93bmVy
KSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwob3duZXJHUFIpOworICAgIH0KIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BSKTsK
KyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAg
c2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5vIG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4KKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxC
ZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVu
dEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIGlmIChvd25lck5vdENl
bGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2Vs
bC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgLy8gT09QUzogTWFr
ZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5k
IHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQg
aW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRv
IHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBy
dW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQg
c28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAor
CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHJl
Z1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZh
bHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwodmFsdWVHUFIpOworICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwog
Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENl
bGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0x
MzI3LDExICsxOTY3LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChj
b24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNp
Z25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRo
aXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisg
ICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDAp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTEzNDEsMTAgKzE5OTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJl
Z1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChp
bmRleCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVt
cCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9P
UFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0Nl
bGw7CisKKyAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7Cisg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAg
ICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBs
YXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKQEAgLTE0NDcsOCArMjExNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5j
aCh2bSgpLCBvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QwOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8
U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3du
ZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2ls
ZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOwogfQogCkBAIC0xNDY2LDYgKzIxNTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRp
ZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICAKQEAgLTE1NjcsNiArMjI1NCw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2kKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRL
aW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9
IGZhbHNlOworCiAgICAgQVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6
b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6
Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRE
RkdDb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywg
IXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8
fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQp
OwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXpp
bmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBkaWQgYmVjb21lIHJlYWR5LiIpOwog
ICAgIApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdD
b2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIXByb2Zp
bGVkREZHQ29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAg
IAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29t
cGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwyMiBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1
ZGUgIlZNSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4gewogcHVibGljOgotICAgIFBsYW4oQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgICAgICwgbV9qaXQoY29kZUJsb2NrLT52
bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgUGxhbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICA6IG1fbGxpbnRDb2RlQmxv
Y2soY29kZUJsb2NrKQorICAgICAgICAsIG1fY29kZUJsb2NrVG9Db21waWxlKGNvbXBpbGVUeXBl
ID09IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA/IG1fbGxpbnRDb2RlQmxvY2stPm5ld1JlcGxhY2Vt
ZW50KCkgOiBtX2xsaW50Q29kZUJsb2NrKSAKKyAgICAgICAgLCBtX2ppdChtX2NvZGVCbG9ja1Rv
Q29tcGlsZS0+dm0oKSwgbV9jb2RlQmxvY2tUb0NvbXBpbGUsIGNvbXBpbGVUeXBlLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgbV9qaXQuZG9NYWluVGhyZWFkUHJl
cGFyYXRpb25CZWZvcmVDb21waWxlKCk7CisgICAgICAgIC8vIE9PUFM6IHZpc2l0IHRoaXMgaW4g
Y29uY3VycmVudCBnYworICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGlu
dENvZGVCbG9jaykgeworICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVh
cC5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVJblRocmVhZCgpCkBAIC01MywxNyArNjAsMjMgQEAgcHVibGljOgog
ICAgIHZvaWQgZmluYWxpemUoKQogICAgIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0ID0gbV9qaXQubGluaygpOworCisgICAgICAgIGF1dG8gc2NvcGVFeGl0ID0gbWFrZVNjb3Bl
RXhpdChbJl0geworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxp
bnRDb2RlQmxvY2spCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCku
aGVhcC51bnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9KTsKKwogICAg
ICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgot
ICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29t
cGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOworICAgICAgICAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChtX2xsaW50Q29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlv
biBmYWlsZWQiKSk7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksICIgICAgSklUIGNvbXBpbGF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5kb250SklUQW55dGltZVNvb24oKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2Rp
ZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2Nr
LT5kb250SklUQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPm1f
ZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuIik7
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2Rl
KG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5qaXRTb29uKCk7CisgICAg
ICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxD
b2RlKG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2st
PmppdFNvb24oKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MSw4ICs4NCw4IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygp
IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgVk0mIHZtKCkgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPnZtKCk7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0tleSgpIHsgcmV0dXJuIG1fbGxp
bnRDb2RlQmxvY2s7IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2xsaW50Q29kZUJsb2NrLT52
bSgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5nKCkKICAgICB7CkBAIC04
MCwxNSArOTMsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0ZpbmlzaGVkQ29tcGls
aW5nOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAg
c3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxl
VHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQogICAgIHsKLSAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcGxhbi5jb21waWxlSW5UaHJlYWQoKTsK
ICAgICAgICAgcGxhbi5maW5hbGl6ZSgpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fbGxpbnRDb2RlQmxvY2s7Cisg
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9ja1RvQ29tcGlsZTsKICAgICBKSVQgbV9qaXQ7CiAgICAg
TG9jayBtX2xvY2s7CiAgICAgYm9vbCBtX2lzRmluaXNoZWRDb21waWxpbmcgeyBmYWxzZSB9OwpA
QCAtMjMzLDkgKzI0NywxMSBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJs
b2NrCiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisKKyAgICBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlID0gT3B0aW9u
czo6Zm9yY2VMT0woKSA/IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA6IEpJVDo6Q29tcGlsZVR5cGU6
OkJhc2VsaW5lOwogICAgIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSB7
Ci0gICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKKyAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBl
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKQEAgLTI0OSw3ICsyNjUsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29k
ZUJsb2NrCiAgICAgICAgIAogICAgICAgICBpZiAobV9udW1BdmFpbGFibGVUaHJlYWRzKSB7CiAg
ICAgICAgICAgICBtX3BsYW5uZWQuYWRkKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBSZWZQdHI8
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihu
ZXcgUGxhbihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KSk7CiAgICAgICAgICAgICBtX3BsYW5zLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fcXVl
dWUuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9jb25kaXRpb24tPm5vdGlmeUFsbChsb2Nr
ZXIpOwpAQCAtMjczLDE0ICsyODksMjQgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVy
KENvZGVCbG9jawogICAgIC8vIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBpc3N1ZS4gSWYgdGhlIGNv
bmN1cnJlbnQgSklUIHRocmVhZCBpcyBjb252b3llZCwgd2UgcmV2ZXJ0IHRvIG1haW4KICAgICAv
LyB0aHJlYWQgY29tcGlsZXMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGFzIGdvb2QgYXMgaWYgd2Ug
aGFkIG11bHRpcGxlIEpJVCB0aHJlYWRzLiBNYXliZSB3ZQogICAgIC8vIGNhbiBkbyB0aGF0IHNv
bWVkYXkuCi0gICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOworICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiB9CiAKKy8qCiB2b2lkIEpJVFdvcmtsaXN0Ojpj
b21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0g
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKworICAgIGF1dG8gaXNDb21waWxlZCA9IFsmXSB7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChjb2RlQmxvY2st
Pmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBpZiAoaXNDb21waWxlZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgYm9vbCBpc1BsYW5uZWQ7CkBAIC0yOTYsMTcgKzMyMiwy
NCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogCiAgICAgfQogICAg
IAogICAgIC8vIE5vdyBpdCBtaWdodCBiZSBjb21waWxlZCEKLSAgICBpZiAoY29kZUJsb2NrLT5q
aXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAgICBpZiAoaXNDb21waWxl
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdl
IGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdp
dGggdGhlCi0gICAgLy8gYmFzZWxpbmUgSklULgotICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRh
KCk7Ci0gICAgCi0gICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KLSAgICBKSVQ6OmNvbXBpbGUo
dm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7Ci0gICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENv
ZGUoY29kZUJsb2NrKTsKKworICAgIGlmIChPcHRpb25zOjpmb3JjZUxPTCgpKSB7CisgICAgICAg
IENvZGVCbG9jayogbG9sQ29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwor
ICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGxvbENvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6
QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBsb2xDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxs
Q29kZShsb2xDb2RlQmxvY2spOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlIGRvIHRoaXMg
aW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8g
Y29tcGlsZSB3aXRoIHRoZQorICAgICAgICAvLyBiYXNlbGluZSBKSVQuCisgICAgICAgIGNvZGVC
bG9jay0+cmVzZXRKSVREYXRhKCk7CisgICAgICAgIAorICAgICAgICAvLyBPSywganVzdCBjb21w
aWxlIGl0LgorICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21waWxl
VHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpOworICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0
YWxsQ29kZShjb2RlQmxvY2spOworICAgIH0KIH0KKyovCiAKIHZvaWQgSklUV29ya2xpc3Q6OmZp
bmFsaXplUGxhbnMoUGxhbnMmIG15UGxhbnMpCiB7CkBAIC0zMTQsNyArMzQ3LDcgQEAgdm9pZCBK
SVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYgbQogICAgICAgICBwbGFuLT5maW5hbGl6
ZSgpOwogICAgICAgICAKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAg
ICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrKCkpOworICAgICAgICBtX3BsYW5u
ZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9ja0tleSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwb2xsKFZNJik7CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgdm9pZCBjb21waWxlTm93KENvZGVC
bG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgIAogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCYgZW5zdXJlR2xvYmFsV29y
a2xpc3QoKTsKICAgICBzdGF0aWMgSklUV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsV29ya2xpc3RP
ck51bGwoKTsKQEAgLTY2LDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBUaHJlYWQ7CiAg
ICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKICAgICAKKyAgICAvL3ZvaWQgY29tcGlsZU5vdyhDb2Rl
QmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApKTsKICAgICB2b2lkIGZpbmFsaXplUGxhbnMoUGxhbnMmKTsKICAgICAKICAgICBQ
bGFucyBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAu
aAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
ck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9
CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAg
IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3Qg
VCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHBy
aXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJl
Z2lzdGVycygpPiBtX21hcCB7IHsgfSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9p
ZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2Fs
bFRvQ29kZVB0ci5jb2RlUHRyKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgaWYgKGlzV2ViQXNzZW1i
bHkgfHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgp
KSkKKyAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNv
ZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKSk7CiAgICAgZWxz
ZQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3Ro
ZXIoKS5sYWJlbEF0T2Zmc2V0KDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
bG93UGF0aENhbGwuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVi
bGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwoKQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAg
ICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisg
ICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNhbGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FN
UExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5z
dHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0
ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYz
LDggKzM2MywxMCBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoQ29kZUJsb2NrKiBjb2RlQmxvCiB9
CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9TUi4KLWlubGluZSBib29s
IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCkpCitpbmxpbmUgQ29kZUJsb2NrKiBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApKQogeworICAgIC8vIE9PUFM6IEltcGxlbWVudCB0aGlz
IHcuci50IExPTC4KKwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsgLy8g
TXkgY2FsbGVycyBkb24ndCBzZXQgdG9wIGNhbGxmcmFtZSwgc28gd2UgZG9uJ3Qgd2FudCB0byBH
QyBoZXJlIGF0IGFsbC4KICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIApAQCAt
MzczLDI5ICszNzUsNDUgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Mo
VgogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwg
KCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhl
Y3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBKSVRX
b3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5wb2xsKHZtKTsKLSAgICAKKworICAgIGF1
dG8gbG9sQ29kZUJsb2NrID0gWyZdKCkgLT4gQ29kZUJsb2NrKiB7CisgICAgICAgIGlmIChDb2Rl
QmxvY2sqIHJlcGxhY2VtZW50ID0gY29kZUJsb2NrLT5vcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7
CisgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xK
SVQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH07CisKKyAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9s
Q29kZUJsb2NrKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKICAgICBzd2l0Y2ggKGNvZGVC
bG9jay0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDogewogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgQ29kZSB3YXMgYWxy
ZWFkeSBjb21waWxlZC4iKTsKICAgICAgICAgY29kZUJsb2NrLT5qaXRTb29uKCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gY29kZUJsb2NrOwogICAgIH0KICAgICBjYXNl
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6IHsKICAgICAgICAgSklUV29ya2xpc3Q6OmVuc3Vy
ZUdsb2JhbFdvcmtsaXN0KCkuY29tcGlsZUxhdGVyKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVDsKKyAgICAgICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9j
aygpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICAgICAgcmV0dXJuIGNv
ZGVCbG9jazsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBMTEludDogIiwgKmNvZGVC
bG9jaywgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGRhdGFMb2coIlVu
ZXhwZWN0ZWQgY29kZSBibG9jayBpbiBMTEludDogIiwgKmNvZGVCbG9jaywgIlxuIik7CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
c3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Y29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5U
eXBlIGVudHJ5T1NSKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Y29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCiB7CiAgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZU9TUigpLAogICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5h
bWUsICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCkBAIC00MDYsMTggKzQyNCwyMSBAQCBzdGF0
aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCCiAgICAgICAgIExMSU5UX1JFVFVS
Tl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2sp
KQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyh2bSwgY29kZUJsb2NrKTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAg
ICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiT1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIpKTsK
KyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAiT1NSIGVudHJ5Iiwg
KCJpbiBwcm9sb2d1ZSIpKTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVk
Q29kZUJsb2NrKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBQcm9sb2d1ZSkKLSAgICAgICAgTExJ
TlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwg
bnVsbHB0cik7CisgICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29tcGlsZWRDb2RlQmxvY2stPmpp
dENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKGtpbmQg
PT0gQXJpdHlDaGVjayk7Ci0gICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUo
KS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51
bGxwdHIpOworICAgIExMSU5UX1JFVFVSTl9UV08oY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGUo
KS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51
bGxwdHIpOwogfQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5
cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQp
CitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENhbGxGcmFtZSosIENvZGVCbG9j
ayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQogewogICAgIGNvZGVCbG9jay0+
ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxs
cHRyKTsKQEAgLTQyNywzMSArNDQ4LDMxIEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50
cnlPU1IoQ29kZUIKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcikKIHsKICAgICBVTlVT
RURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCkKIHsKICAgICBV
TlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxs
KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJu
IGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1
bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChl
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMp
OwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anND
YWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5
X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRy
eU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgp
KS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1
bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrKQogewogICAgIFVOVVNF
RF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Fs
bEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwg
ImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7Cisg
ICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJh
bWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50
cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJp
dHlDaGVjaykKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgp
LT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3Ry
dWN0X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZy
YW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0
YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0wobG9vcF9vc3IpCkBAIC00ODAsMTkgKzUwMSwyMiBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChsb29wX29zcikKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29k
ZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSkKKyAgICBDb2RlQmxvY2sqIGNvbXBp
bGVkQ29kZUJsb2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykK
ICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBD
T0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KSk7CisgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENv
ZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7
CiAKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgIEFTU0VSVChjb21waWxlZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUIHx8IGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKTsKIAotICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2stPmpp
dENvZGVNYXAoKTsKKyAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29tcGlsZWRDb2Rl
QmxvY2stPmppdENvZGVNYXAoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFn
PiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7
CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29k
ZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOwor
CisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAog
ICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkp
OwogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMywxMCBA
QCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxsSklUT3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVj
b21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiB7CisgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSAw
OworICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOworICAgIE9wdGlvbnM6OnVzZUxMSW50KCkg
PSAxOworCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhj
ZXB0aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTI3LDYgKzUyNyw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwog
ICAgIHYoQm9vbCwgdXNlSklUQ2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KEJvb2wsIHVzZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWws
ICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEg
ZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWND
bGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVy
c3RhbmQgcHJpdmF0ZSBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAg
IHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9u
RXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6
OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdz
IGxsaW50X2hhbmRsZV91Y2F1Z2h0X2V4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWlu
c3QgdGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJh
Y2UubGxpbnRQQykpOwogICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0
Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgsOCBAQCBzdGF0aWMgdm9pZCBzZXR1
cExMSW50KENvZGVCbG9jayogY29kZUJsCiBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShKSVQpCi0gICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
TXVzdFN1Y2NlZWQpOworICAgIC8vIE9PUFM6IEZpZ3VyZSBvdXQgd2hhdCB3ZSB3YW50IHRvIGRv
IHdpdGggdGhlIG5vIExMSW50IG9wdGlvbi4uLi4KKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxp
bmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVy
VXRpbHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBA
IEpTVmFsdWUgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29sIHBy
ZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSBmYWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAg
ICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7
IC8vIE9PUFMKKwogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVzZUJh
c2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6OnVzZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5kVG9I
YXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsx
NDAsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5k
Q29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoZm91
bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xk
TG9jaygqbV9sb2NrKTsKICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAgICAgICAgICByZXR1cm47
IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3ICsxODIs
NyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjCiAKICAgICB3aGls
ZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoY29kZUJsb2NrICYm
IEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAg
Y29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwogICAg
ICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAg
IH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBUb29scy9T
Y3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkod29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw4IEBA
IGRlZiBjb21wdXRlTXVsdGlwbGVIeXBvdGhlc2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1bXBCcmVh
a2Rvd25zKGEsIGIpOgogICAgIG5hbWVMZW5ndGggPSBsZW4oInN1YnRlc3QiKQotICAgIGFMZW5n
dGggPSBsZW4oYVt1bml0TWFya2VyXSkKLSAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0p
CisgICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKSArIDMKKyAgICBiTGVuZ3RoID0gbGVu
KGFbdW5pdE1hcmtlcl0pICsgMwogICAgIHJhdGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIpCiAKICAg
ICBwVmFsdWVIZWFkZXIgPSAicFZhbHVlIChzaWduaWZpY2FuY2UgdXNpbmcgRmFsc2UgRGlzY292
ZXJ5IFJhdGUpIgpAQCAtMjEyLDcgKzIxMiw3IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhhLCBiKToK
ICAgICBwTGVuZ3RoICs9IDIKIAogICAgIHN0cmluZ3MgPSBbXQotICAgIHN0cmluZ3MuYXBwZW5k
KCJ8e2tleTpee25hbWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxl
bmd0aH19IHx7Y29tcGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5m
b3JtYXQoa2V5PSJzdWJ0ZXN0IiwgYVNjb3JlPWFbdW5pdE1hcmtlcl0sIGJTY29yZT1iW3VuaXRN
YXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1i
TGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtl
cj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCisgICAgc3RyaW5ncy5hcHBlbmQoInx7
a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3Ro
fX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1h
dChrZXk9InN1YnRlc3QiLCBhU2NvcmU9ImE6ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2NvcmU9ImI6
ICIgKyBiW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0
aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xl
bmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCiAgICAgZm9yIGtl
eSBpbiBhLmtleXMoKToKICAgICAgICAgaWYga2V5ID09IHVuaXRNYXJrZXI6CiAgICAgICAgICAg
ICBjb250aW51ZQpJbmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwko
cmV2aXNpb24gMjcxMzc2KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBz
ZWxmLnRlc3RSdW5uZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVG
dW5jdGlvbiwKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAor
ICAgIG51bWJlck9mREZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsK
KyAgICAgICAgcmV0dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAg
ICAgICAgIC8vIEVtdWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQg
c29tZSB0aWVyaW5nIGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFw
KQorICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNv
dW50ID0gbWFwLmdldChmKSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAg
ICAgIG1hcC5zZXQoZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDAp
IHwgMDsKKyAgICAgICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBm
YWlsTmV4dE5ld0NvZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRm
Z1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90
b3R5cGUucHVzaDsKICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVG
dW5jdGlvbn0pKQorICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewog
ICAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFs
KF9hKSk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2
MSw3IEBAIGZ1bmN0aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNv
bWVUZXN0cykKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdD
b21waWxlZChhcmd1bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNE
RkdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1l
bnQuc3RhcnQgOiAwOwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417585</attachid>
            <date>2021-01-13 17:17:07 -0800</date>
            <delta_ts>2021-01-14 15:49:19 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>585187</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAordGVzdExpc3QgPSBbJ2NyeXB0by1hZXMtU1AnXTsKKwog
aWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJ
dGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy9iZW5jaG1hcmstcnVubmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsOCBAQAogLy8g
RklYTUU6IFVzZSB0aGUgcmVhbCBwcm9taXNlIGlmIGF2YWlsYWJsZS4KIC8vIEZJWE1FOiBNYWtl
IHN1cmUgdGhpcyBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSByZWFsIFByb21pc2Uu
CisKK19fZGlzYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKKwogZnVuY3Rpb24gU2ltcGxlUHJvbWlz
ZSgpIHsKICAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG51bGw7CiAgICAgdGhpcy5fY2FsbGJh
Y2sgPSBudWxsOwpAQCAtMTI4LDE3ICsxMzEsMjEgQEAgQmVuY2htYXJrUnVubmVyLnByb3RvdHlw
ZS5fcnVuVGVzdCA9IGZ1bgogCiAgICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicg
KyB0ZXN0Lm5hbWUgKyAnLXN0YXJ0Jyk7CiAgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAg
IF9fZW5hYmxlU2FtcGxpbmdQcm9maWxlcigpOwogICAgIHRlc3QucnVuKHByZXBhcmVSZXR1cm5W
YWx1ZSwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KTsKKyAgICBfX2Rpc2FibGVTYW1w
bGluZ1Byb2ZpbGVyKCk7CiAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKICAgICBzZWxmLl93cml0
ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICctc3luYy1lbmQnKTsKIAogICAg
IHZhciBzeW5jVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7CiAKICAgICB2YXIgc3RhcnRUaW1l
ID0gbm93KCk7CisgICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgc2V0VGltZW91
dChmdW5jdGlvbiAoKSB7CiAgICAgICAgIC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3QgaW1tZWRpYXRl
bHkgdXBkYXRlIHRoZSBsYXlvdXQgZm9yIHBhaW50LgogICAgICAgICAvLyBGb3JjZSB0aGUgbGF5
b3V0IGhlcmUgdG8gZW5zdXJlIHdlJ3JlIG1lYXN1cmluZyB0aGUgbGF5b3V0IHRpbWUuCiAgICAg
ICAgIHZhciBoZWlnaHQgPSBzZWxmLl9mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7CisgICAgICAgIF9fZGlzYWJsZVNhbXBsaW5nUHJvZmls
ZXIoKTsKICAgICAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKICAgICAgICAgc2VsZi5fZnJhbWUu
Y29udGVudFdpbmRvdy5fdW51c2VkSGVpZ2h0VmFsdWUgPSBoZWlnaHQ7IC8vIFByZXZlbnQgZGVh
ZCBjb2RlIGVsaW1pbmF0aW9uLgogICAgICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSAr
ICcuJyArIHRlc3QubmFtZSArICctYXN5bmMtZW5kJyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4
IEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIs
IGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
aXNERkdFbmFibGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAg
ICAgICAgIGlmIChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JU
ZXN0aW5nKCkpIHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51
bWJlcihudW0pKTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdF
bmFibGVkLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBzaG91bGREdW1wRGlz
YXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgaWYgKGNvZGVCbG9jayAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlv
bnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fz
c2VtYmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAg
LTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBI
ZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnBy
aW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlv
bnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDog
WyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0
SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEo
IiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fscygp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAg
ICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAg
ICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewog
ICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkg
KyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFz
cyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxC
bG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAm
ID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Cisg
ICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYg
b3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgp
KTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdy
YXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQg
ZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBz
cGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkp
CisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9
IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlz
LCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgogICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgY2Fz
ZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1w
bChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAgcmV0dXJuOwogCisgICAgVVNF
UyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAgICBVU0VTKE9wVG9UaGlzLCBz
cmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAg
VVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBl
KFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5w
cmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0
aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBpZiAoKHRoaXMtPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIg
KFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5l
dmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTIz
NCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAg
ICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7
CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0g
ICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGlu
c3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3Jh
cGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpS
ZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAtMjk1LDYgKzI5NSw3IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgp
KQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAsIG1fYXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQogICAgICwgbV9jb25zdGFudFJl
Z2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAgICwgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQpAQCAt
MzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAK
ICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAKICAgICBBU1NFUlQoc291
cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0
ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIubnVtUGFyYW1ldGVycygpOwog
ICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAtODUwLDcg
Kzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gdG8gdGhlIENvZGVCbG9j
ay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBDb2RlQmxv
Y2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIHdoZW4gdGhlIENv
ZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAg
ICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwogI2VuZGlmCiAg
ICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7CkBAIC0xMDM3LDcgKzEwMzks
NyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShjb25zCiAgICAgLy8gSW50
ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0
dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBp
ZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFz
c3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCi0gICAgaWYgKCFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDQ1LDcgKzEwNDcsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseShj
b25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZShW
TSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtlZCh0aGlzKTsKIH0KQEAgLTEwNTgs
NiArMTA2MCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXAKICAg
ICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xK
SVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZH
SklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKQEAgLTEwNzQsNiArMTA3OCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUoSklU
VHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNvbmRz
LCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8gSW50ZXJwcmV0ZXJUaHVuayBzaGFy
ZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7CisgICAgY2FzZSBKSVRUeXBlOjpM
T0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgog
ICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTExNjks
NyArMTE3NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjpp
c0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAKICAgICAgICAgZGZnQ29tbW9u
LT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwpAQCAtMTIxNyw3ICsxMjIz
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIC8vIElu
IHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGJhc2VsaW5l
IENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAgICAvLyB0aGF0IHdlIG1pZ2h0IGRl
Y2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpldHRpc29uZWQgZHVlIHRvIG9sZCBh
Z2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRvZXNuJ3QgcHJvdGVjdCB1cy4KLSAg
ICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
REZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAt
MTUxOSw4ICsxNTI1LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChq
aXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgp
KSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7CisgICAgICAgIC8vIE9PUFM6IFNl
cGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3duIGZ1bmN0aW9uIGZvciBKSVQgSUNz
LiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3QganVzdCBmb3IgTExJbnQuCiAgICAg
ICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyArMTUzNiw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGRmZ0Nv
bW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7CiAgICAgfQpAQCAtMTU0OCw2ICsx
NTU2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAg
ICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRl
ci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZH
SklUOgpAQCAtMTU5MCw3ICsxNTk5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFw
KGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoQ29kZU9yaWdpbihieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuYnlWYWxJbmZv
ID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIGlm
IChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBpZiAoSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgICAgICBERkc6OkNvbW1vbkRh
dGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMuY2FsbHMpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFs
dWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpAQCAtMTgxMCw3ICsxODE5LDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAg
IERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAg
ICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CkBAIC0xODIz
LDcgKzE4MzIsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE4Njcs
NyArMTg3Niw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogICAg
ICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2VtZW50KCk7
CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZXNSZXBsYWNlbWVudENv
ZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCBj
YW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAgYW5kIHRoZSBleGVjdXRh
YmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRzIGNvZGVCbG9ja3MgKHNl
ZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNzLAogICAgICAgICAgICAg
Ly8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24gdGhlIHN0YWNrLCBhbmQg
YXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTk0MCw3IEBAIEhhbmRsZXJJbmZvKiBD
b2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVC
bG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3Jp
Z2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBSRUxFQVNFX0FTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBSRUxFQVNFX0FTU0VSVChj
YW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBBU1NFUlQoISFoYW5kbGVy
Rm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBDb2RlT3JpZ2luIG9yaWdp
bmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKQEAgLTIyMzEsNTEgKzIy
NDAsNTUgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQogICAgIERl
ZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRv
IGFjY29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgotICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlm
IHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0
dXJuIHRvIGl0CisgICAgLy8gMSkgSWYgd2UncmUgREZHL0ZUTCwgbWFrZSBzdXJlIHRoYXQgaWYg
dGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1
cm4gdG8gaXQKICAgICAvLyAgICB3ZSBzaG91bGQgT1NSIGV4aXQgYXQgdGhlIHRvcCBvZiB0aGUg
bmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0dXJuLgogICAgIC8vIDIpIE1h
a2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1dGFibGUsIHRoZW4gd2Ugc2hv
dWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2suCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5jbGVhcldhdGNocG9pbnRzKCk7Ci0gICAgCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNv
bXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCi0gICAgICAgICAgICBjb21waWxhdGlv
bi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOwotICAgICAgICAKLSAgICAgICAg
Ly8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBh
Ym91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgotICAgICAgICBpZiAoIWppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewotICAgICAgICAgICAgLy8gV2UndmUg
YWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhp
cyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAh
dm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdl
KSB7CisgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gaml0
Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoY29tcGlsYXRpb24pKQorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRK
ZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcg
YWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KKyAgICAgICAgICAgIGlmICgh
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJl
YWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICBkYXRhTG9n
KCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogICAgIAogICAgIC8vIENvdW50IHRoZSByZW9wdGltaXphdGlvbiBpZiB0aGF0J3Mg
d2hhdCB0aGUgdXNlciB3YW50ZWQuCiAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlv
bikgewogICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRlcm5hdGl2
ZSgpLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNjc3CiAgICAgICAgIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGltaXphdGlv
bigpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgY291bnQgcmVvcHRpbWl6
YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICBpZiAo
dGhpcyAhPSByZXBsYWNlbWVudCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSB3
ZXJlIG5ldmVyIHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4gZm9yIE9TUiBlbnRyeSBj
b2RlCiAgICAgICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgLy8gT3IsIHdlJ3JlIGFuIExPTCBDb2Rl
QmxvY2sgYW5kIHdlcmUgYWxyZWFkeSBqZXR0aXNvbmVkLgogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKGFsdGVybmF0aXZlKCkpCiAgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcykK
KyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpICYmIHJlYXNvbiAhPSBQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1cmluZyBH
Qy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFibGUKICAg
ICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJlbWVtYmVy
ZWQgc2V0LgpAQCAtMjM5MCw3ICsyNDAzLDcgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29t
aW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CiAg
ICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpLCAiICAgIENsZWFyaW5nIFNBQkkgYmNhdXNl
IGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI0
ODMsMTIgKzI0OTYsMTQgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVz
KAogewogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAg
ICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
REZHSklUKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVy
biAobV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcjsKICAgICB9CiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IHRoaXMtPnJl
cGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXI7CisgICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6
aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyOwogfQogCiBpbnQzMl90IENvZGVCbG9jazo6Y29kZVR5cGVUaHJl
c2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKQEAgLTI3MDksNyArMjcyNCw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQg
cmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKLSAgICBpZiAodHlwZSAh
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2Vs
aW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbigq
dGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGluZSBjb2RlIGJ1dCBoYXZlICIsIHR5cGUp
OwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaml0Q29k
ZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkpOwogICAgIH0KQEAgLTI3Mjcs
NyArMjc0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAg
ICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVs
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBl
KCkpKTsKICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKQEAgLTI3NTYsNyArMjc3MSw4IEBAIHZvaWQg
Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICAKIHVpbnQzMl90IENvZGVC
bG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9s
ZCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwor
ICAgIC8vQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsgLy8gT09Q
UzogV2UgY2FsbCB0aGlzIGZyb20gdGhlIExPTCBjb21waWxlciB0aHJlYWQgYmVmb3JlIGluc3Rh
bGwuCisKICAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5IHNvIHdlIGRvbid0IHNhdHVy
YXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKICAgICAvLyBlbm91Z2ggdGhhdCB0aGlz
IGxvb3Agd29uJ3QgaHVydCB1cy4KICAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNpcmVkVGhyZXNo
b2xkOwpAQCAtMjgzNiw3ICsyODUyLDcgQEAgREZHOjpDb2RlT3JpZ2luUG9vbCYgQ29kZUJsb2Nr
Ojpjb2RlT3JpZwogCiBzaXplX3QgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0lkZW50aWZpZXJzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmll
cnMuc2l6ZSgpOwpAQCAtMjg0Nyw3ICsyODYzLDcgQEAgY29uc3QgSWRlbnRpZmllciYgQ29kZUJs
b2NrOjppZGVudGlmaWVyKAogICAgIHNpemVfdCB1bmxpbmtlZElkZW50aWZpZXJzID0gbV91bmxp
bmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmllcnMpCiAgICAgICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChq
aXRUeXBlKCkpKTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRp
ZmllcnNbaW5kZXggLSB1bmxpbmtlZElkZW50aWZpZXJzXTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKQEAgLTI5NDgsNyArMjk2NCw4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVx
dWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsKKyAgICAvLyBPT1BTCisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9
IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUwLDYgKzMwNjcsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6
OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIHJldHVy
biBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCkBAIC0zMjI2LDE0ICszMjQ0LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjphZGRCcmVha3BvaW50
KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJyZWFrcG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOwog
ICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzKTsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgp
KSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFr
cG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6
U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlm
IChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7CiB9CiAKQEAgLTM0MjEsOSArMzQzOSw5IEBA
IE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6Ynl0ZWMKIHsKICAgICBPcHRpb25h
bDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRo
aXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgaWYgKEpJVENvZGU6
OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChqaXRUeXBlKSkKICAgICAgICAgYnl0ZWNvZGVJ
bmRleCA9IGNhbGxTaXRlSW5kZXguYnl0ZWNvZGVJbmRleCgpOwotICAgIGVsc2UgaWYgKGppdFR5
cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7Cisg
ICAgZWxzZSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdp
biA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7CkBAIC0zNDY2LDcgKzM0ODQsNyBAQCBib29s
IENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwCiAgICAgLy8gVGhpcyBmdW5jdGlv
biBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAg
IC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRs
ZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQg
b2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+aGFzSW5zdGFs
bGVkVk1UcmFwc0JyZWFrcG9pbnRzKCk7CiAjZWxzZQpAQCAtMzQ4MCw3ICszNDk4LDcgQEAgYm9v
bCBDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cwogICAgIC8vIFRoaXMgZnVuY3Rp
b24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAg
ICAvLyBjYXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5k
bGVyIHNhZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50
IG9mIG1faml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgY29tbW9uRGF0YSA9ICptX2ppdENvZGUtPmRmZ0NvbW1v
bigpOwogICAgIGNvbW1vbkRhdGEuaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKHRoaXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNC
YXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRUeXBlIHR5cGUgPSBqaXRU
eXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHR5
cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAt
NTExLDYgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRl
Y29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZv
ckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3ICs1NDEsNyBAQCBwdWJs
aWM6CiAgICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJl
ZW4gc29tZSBpbmxpbmluZy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICAgICAg
cmV0dXJuIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAog
ICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lkIENvZGVC
bG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRh
Lm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKK30KIAordGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoQ2F0Y2hQcm9m
aWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7Cisg
ICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKQorICAgICAg
ICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdK
SVRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhpdGluZ0pJVFR5cGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFeGkKICAgICBj
YXNlIEV4aXRGcm9tQW55dGhpbmc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbUFueXRoaW5nIik7
CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRGcm9tTE9MOgorICAgICAgICBvdXQucHJp
bnQoIkZyb21MT0wiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdEZyb21ERkc6CiAg
ICAgICAgIG91dC5wcmludCgiRnJvbURGRyIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKICAgICBFeGl0RnJvbUFueXRoaW5nLAor
ICAgIEV4aXRGcm9tTE9MLAogICAgIEV4aXRGcm9tREZHLAogICAgIEV4aXRGcm9tRlRMCiB9OwpA
QCAtMzgsNiArMzksOCBAQCBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiBpbmxpbmUg
RXhpdGluZ0pJVFR5cGUgZXhpdGluZ0pJVFR5cGVGb3IoSklUVHlwZSB0eXBlKQogewogICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4g
RXhpdEZyb21MT0w7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiBF
eGl0RnJvbURGRzsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxS
ZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAg
c3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKAogCiBlbnVtIE9wZXJhbmRz
TGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZSA9IGZhbHNlPgogY2xhc3MgT3BlcmFuZHMg
ewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2UgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjpp
c19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQsMjMgQEAgcHVibGljOgogCiAgICAgT3BlcmFu
ZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1l
bnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVt
QXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBt
X251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBzaXplX3Qgc2l6ZSA9
IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIHNpemVfdCBzaXpl
ID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEh
dHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3coc2l6ZSk7CiAgICAgICAgIGlmICgh
V1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pCiAgICAgICAgICAgICBt
X3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQm
IGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRz
LCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cywg
Y29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3Vt
ZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1D
b25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1B
cmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKKyAgICAgICAgbV92YWx1ZXMuZ3Jvdyhu
dW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFj
a0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAg
ICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9w
ZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFs
VmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhvdGhlci5udW1iZXJPZkxvY2FscygpKQor
ICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVyLm51bWJlck9mQ29uc3RhbnRzKCkpCiAgICAg
ewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CiAgICAgICAgIG1fdmFsdWVz
LmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3MiwzMyArMTc2LDUxIEBAIHB1YmxpYzoKIAogICAg
IHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRz
OyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2Nh
bHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBz
aXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX251bUNvbnN0YW50czsg
fQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSAtIG51bWJlck9mQ29u
c3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0
cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAg
ICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygpKTsKLSAgICAg
ICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOwor
ICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAgIH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRl
eChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9m
QXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KLSAgICAKICAgICBzaXpl
X3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlk
eCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMo
KSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNvbnN0YW50SW5kZXgoc2l6ZV90IGlkeCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkNvbnN0YW50cygpKTsKKyAg
ICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgaWR4
OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAogICAgIFJlZlR5cGUg
YXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgp
XTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBm
b28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVl
Pj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAg
IHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxm
b28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0UmVmVHlwZSBjYWxsZWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAKICAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBp
ZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5
cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3Zh
bHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGNvbnN0YW50KHNp
emVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0K
ICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBzaXplX3Qg
c2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAo
c2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsg
c2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVt
YmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7
CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMgPSBudW1iZXJPZkxvY2FscygpOwogICAgICAg
ICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9mVG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5n
cm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMo
KSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpICsgISF0cmFja0NhbGxlZSAr
IHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVu
c3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBvcGVy
YW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBp
ZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWVJbmRl
eCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3Bl
cmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudEluZGV4KG9wZXJhbmQudG9Db25z
dGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwo
KSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0OCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlKCk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0Fy
Z3VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsK
ICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAKQEAgLTMz
OCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXND
b25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFu
ZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJPZkNvbnN0YW50cygpOwogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2Fs
cygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJhbmQoT3BlcmFuZCBvcCkgY29uc3QKQEAgLTM2
NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVy
T2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICBpZiAoaW5kZXggPCBu
dW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOwot
ICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBu
dW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkKKyAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbmRleCAtIG51bWJlck9mQXJn
dW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgaWYgY29uc3RleHByICh0cmFj
a0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNhbGxlZUluZGV4KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKSk7
CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkBAIC0zOTMsMTAgKzQzNywxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogcHJp
dmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFy
Z3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFy
ZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUg
YXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBtX251
bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCiAgICAgU3Rv
cmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50cyB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUNvbnN0YW50cyB7
IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJn
dW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAg
LTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwg
dG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKICAgICB9
CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2FsbGVlKCksIGNvbnRleHQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9w
ZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewog
ICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5k
ZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC03OCw2ICs4
MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwg
IjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxl
ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBjYWxsZWUoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgY29uc3QgUmVnaXN0ZXJTZXQmIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZQogICAgICAgICBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlID0gaml0LT5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5saXZl
UmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShqaXQtPmNvZGVC
bG9jaygpLCBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCk7CiAgICAgICAgIG1fbmVlZHNUb1Jlc3Rv
cmVSZWdpc3RlcnNJZkV4Y2VwdGlvbiA9IG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2Vw
dGlvbkhhbmRsaW5nQ2FsbFNpdGUubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSA+IDA7CiAgICAgICAg
IGlmIChtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24pCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+
aml0VHlwZSgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09y
RlRMKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAgICAgICAgIG1fbGl2ZVJlZ2lz
dGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKSk7CiAgICAg
ICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwpAQCAtNzEwLDcgKzcxMCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICAgICAgLy8gV2Ugc2V0IHRoZXNlIHRvIGluZGljYXRlIHRvIHRoZSBzdHViIHRv
IHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgQ29kZUJsb2NrJ3MKICAgICAgICAgLy8gZXhjZXB0aW9u
IGhhbmRsZXIgdGFibGUgd2hlbiBpdCBpcyBkZWFsbG9jYXRlZC4KICAgICAgICAgY29kZUJsb2Nr
VGhhdE93bnNFeGNlcHRpb25IYW5kbGVycyA9IGNvZGVCbG9jazsKLSAgICAgICAgQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJz
LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJs
b2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0VHlwZSgpKSk7CiAgICAgICAgIGNhbGxT
aXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9IHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNl
cHRpb25IYW5kbGluZygpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBib29sIGlzSW50MzJTcGVjdWxhdGlvbihTcGVj
dWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjSW50MzJPbmx5KTsKIH0K
IAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBl
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNCeXRlY29kZURv
dWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90SW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGVk
VHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIFNwZWNJbnQzMk9u
bHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0
ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhp
cyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4K
ICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgVmlydHVhbFJlZ2lzdGVyIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7
CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGlu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsg
fQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9j
YWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXNDb25zdGFudCgpOyB9CiAgICAgYm9vbCBpc0hl
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFs
UmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29u
c3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2Nh
bCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpAQCAtMTE3
LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQg
b3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5k
VG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGlu
dCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25zdGFudFRvT3BlcmFuZChpbnQgY29uc3RhbnRJ
bmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4
OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7CiB9OwpAQCAtMTMzLDQgKzEzNSw5IEBA
IGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm8KICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQp
ICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJG
b3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkKK3sKKyAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRUb09wZXJhbmQoY29uc3RhbnRJbmRleCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0CiAgICAgLCB2YXJp
YWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNB
dFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMpCi0gICAgLCBpbnRlcnNlY3Rp
b25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFi
c3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0
SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgMCwgQWJzdHJhY3RWYWx1ZTo6
ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRM
KGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNv
ZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQCB2b2lkIGFkanVz
dEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJh
bWUpCiAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhp
dElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCisgICAgLy8gT09QUzogTWFrZSB0aGlzIGRv
IHRoZSByaWdodCB0aGluZyBiYXNlZCBvbiBMT0wgb3Igbm90LgogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdp
bik7CiAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhpdC0+YmFz
ZWxpbmVWZXJzaW9uKCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2Rl
QmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZl
bnRTdHJlYW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7
Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWduZWQgbnVt
VG1wczsKQEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpy
ZWNvbnN0cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9M
b2NhbCgpICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7IC8vIE9P
UFM6IGJ5dGVjb2RlVmVyc2lvbgogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVC
bG9jay0+bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUz
LDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgog
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1l
RgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QK
IHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmpp
dFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpJ
VFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKSVRDb2Rl
OjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoY29kZUJsb2NrKCktPmppdFR5cGUoKSk7CiB9
CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25z
dAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+
aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJ
VFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03OSw4ICs3MCw2IEBAIGJv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2kKICAgICBjYXNlIEpJVFR5cGU6
Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDEwICs0NTYsMTAgQEAgQUxXQVlTX0lO
TElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRFeAogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVy
SW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5
cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNp
dGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNlCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0
c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIGV4Y2VwdGlv
bkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOworICAg
IGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0
ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4
KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE4IEBACiAj
aW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNs
dWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEu
aCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1NSw4IEBACiAjaW5jbHVkZSA8
d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+CiAK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiBu
YW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhwciBjb25zdCBib29sIHZlcmJv
c2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY4LDg5MSBAQCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRp
bWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjND
b21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5
cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9z
ZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2lu
Y2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
cHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZy
b21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICByZXR1
cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICB9OworCisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3Vt
ZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFs
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdFZhcmFy
Z3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRvcjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0
b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwg
bWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZS5tX3ByZWRpY3Rpb24p
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fbmV4dCwgbWV0YWRhdGEubV9uZXh0UHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9kb25lLCBtZXRh
ZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb3Y6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBlRm9yKGluc3RydWN0aW9uLT5hczxPcE1vdj4o
KS5tX3NyYykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBv
cF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVfbmFt
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRf
YnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm90
b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9u
LT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9m
aWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0Fu
eUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgaWYgKCEhKGxlZnQgJiBTcGVjRG91
YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJpZ0ludDMyIGJldHRlcgorICAgICAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0cmluZ09yU3RyaW5nT2Jq
ZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBNYXli
ZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX3N1YjoKKyAgICBjYXNl
IG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgewor
ICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5t
X2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmls
ZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYgfHwgaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZURvdWJs
ZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOID0gaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2OworICAgICAgICAgICAgICAgIGlmIChtYXlQcm9k
dWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJp
Z2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIHByb2JhYmx5IGRvIGJl
dHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICAgICAgaWYgKCEhKGxlZnQgJiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3Qp
KSB8fCAhIShyaWdodCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVjdCkpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdCB8PSBTcGVjQmlnSW50OworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgcmVzdWx0KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211
bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAg
ICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAg
ICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZv
cihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZv
cihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNh
biBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVp
bGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50
MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+
KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAg
ICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAgICAgaWYgKCFpbnB1dCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHByb2ZpbGUuZGlk
T2JzZXJ2ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNBbnlJbnRBc0RvdWJsZSA6IFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgICAgIGlmIChp
bnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g
U3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAg
IHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24o
aW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0VHlw
ZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICB9OworCisg
ICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAg
ICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVj
b2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYg
aXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNC
aWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0Ogor
ICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5
dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAg
ICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlv
bi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5
dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRv
IHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVj
U3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
KiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9idWZmZXI7CisgICAg
ICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQg
ZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3
ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAg
ICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhp
cyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgorICAgICAgICB9CisgICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsgKytpKQorICAgICAgICAg
ICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRl
ciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmplY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFN0cmNhdD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
bmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19l
eHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwg
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9y
RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
Z2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fz
eW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9z
Y29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25f
c3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVy
dHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBT
cGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJp
Y19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9p
bl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVj
dEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9h
cmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJm
bHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRz
QnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQ
cm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
QmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5k
ZWZpbmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5k
ZWZpbmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
dW5kZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNVbmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzQm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lzX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJl
cj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19p
bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3Rv
cjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlf
d2l0aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxh
dGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUp
IDw8IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJv
ZmlsZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0
YW5jZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3Rh
bmNlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Zf
Y3VzdG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZD
dXN0b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBl
b2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVj
U3RyaW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90
eXBlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBl
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRf
aW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1w
bGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFi
bGU6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoK
KyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0Ogor
ICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5
X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVm
aW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBv
cF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNl
IG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVm
aW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNl
IG9wX2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNlIG9wX2puZXE6CisgICAg
Y2FzZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVz
c2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAg
IGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAg
ICBjYXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bf
c3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNo
X3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0
X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBv
cF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoK
KyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWll
bGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ug
d2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBs
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9u
X2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJp
dHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9wb2ludDoKKyAgICBjYXNl
IGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90
aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToK
KyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBj
YXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNh
c2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgorICAg
IGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgZnV6emVyX3Jl
dHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVj
dF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9wcm9ncmFtX3By
b2xvZ3VlOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRpcmVjdF9ub190
bHM6CisgICAgY2FzZSBub3JtYWxfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50
X2dldF9ob3N0X2NhbGxfcmV0dXJuX3ZhbHVlOgorICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1
Z2h0X2V4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0
cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRp
b246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2NhbGxfZXZhbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxs
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJh
dG9yX29wZW46CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdzoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2NvbnN0cnVjdF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFy
Z3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xv
dzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3c6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfZXZhbF9zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2l0ZXJhdG9yX29wZW5fc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3RhZzoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVja191bnRhZzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eV9jaGVja190YWc6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsOgorICAgIGNh
c2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9ub190bHM6CisgICAgY2FzZSB3YXNtX3RyYW1w
b2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigp
Cit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVC
bG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRI
ZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0
SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNO
b25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVC
bG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2ZpbGUo
WyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2ZpbGUu
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAgICBt
X2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Cisg
ICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9n
cmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKworICAg
IGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJv
ZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAg
ICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJlZGlj
dGlvbjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiYXJn
IiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmls
ZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFk
WzBdLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGJv
b2wgY29tcHV0ZVVzZUNvdW50cyA9IHRydWU7CisgICAgbV91c2VDb3VudHMucmVzaXplKG1fZ3Jh
cGgtPnNpemUoKSk7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBERlMu
IE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaW1w
YWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgorICAg
ICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQgYXJl
IGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBPT1BT
OiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYgd2Ug
ZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRlY29k
ZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFBy
ZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAgICAg
ICAgICAgaWYgKGNvbXB1dGVVc2VDb3VudHMpCisgICAgICAgICAgICAgICAgbV91c2VDb3VudHNb
YmxvY2suaW5kZXgoKV0gPSBPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4obV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVC
bG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCAwKTsKKworICAgICAgICAgICAgaWYgKCFibG9jay5p
c0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4IHsgaSArIGJsb2NrLmxl
YWRlck9mZnNldCgpIH07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleCkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Y3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHV0ZVVz
ZUNvdW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb3VudCA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vz
ZUNvdW50c1tibG9jay5pbmRleCgpXS5vcGVyYW5kKG9wZXJhbmQpICs9IDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENoZWNrcG9p
bnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygp
OyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNr
cG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2lu
dCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nlc3Nv
cl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcmVk
aWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9uc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb21wdXRlVXNlQ291bnRz
ID0gZmFsc2U7CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw3ICs5NjAsMTMgQEAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5j
dGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCi1KSVQ6OkpJVChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVl
OworICAgIHJldHVybiBtX3VzZUxPTDsKK30KKworSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2Nr
KQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKQEAgLTc1LDYg
Kzk3NCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAs
IG1fY2FuQmVPcHRpbWl6ZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFs
c2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKKyAgICAsIG1fdXNlTE9MKGNvbXBpbGVUeXBlID09IENvbXBpbGVUeXBlOjpMT0wp
CiB7CiB9CiAKQEAgLTEzNywxMSArMTAzNywxOSBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCkKICAgICAgICAgKyttX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsgXAog
ICAgIE5FWFRfT1BDT0RFKG5hbWUpCiAKLSNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAor
I2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lLCBkc3QsIHR5cGUpIFwKICAgICBjYXNlIG9wXyMj
bmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUlu
ZGV4KSB7IFwKLSAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAotICAgICAgICAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsg
XAorICAgICAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FsbENhc2VzIikgJiYgYXRvaShn
ZXRlbnYoInByaW50U2xvd0NhbGxDYXNlcyIpKSkgeyBcCisgICAgICAgICAgICAgICAgU3RyaW5n
UHJpbnRTdHJlYW0gY2JOYW1lOyBcCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAo
Y2JOYW1lKTsgXAorICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBjYk5hbWUudG9TdHJpbmco
KSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgKyAi
ICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCldOyBcCisgICAg
ICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0JikgeyBcCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dDYWxsQ2FzZVJhbihrZXkpOyBcCisgICAgICAgICAgICAgICAgfSk7IFwKKyAg
ICAgICAgICAgIH0gXAorICAgICAgICAgICAgZW1pdFNsb3dPcChzbG93X3BhdGhfIyNuYW1lLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIGRzdCwgdHlwZSk7IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5F
WFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA2NCw0
NiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJ
TkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRT
bG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRTbG93
XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhUX09Q
Q09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChu
YW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VDYWxs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAg
ZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBc
CisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwKICAg
ICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFNs
b3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYWxsQ2FzZVJhbihTdHJpbmcga2V5KQor
eworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90
Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgp
OworICAgIH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2
NF90IHZhbHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgo
dmFsdWUgJSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7
Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29k
ZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxNSArMTE1OSw4NCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsK
LSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3Rh
cnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJv
dmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFi
bGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdz
IGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUwor
CisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAg
bV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0
byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9j
aygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5j
b250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3Nv
cnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgZm9y
IChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7Cisg
ICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRv
dGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJy
ZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0RW5kW21f
Y3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3RhdGUpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0geyB9OworCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5kQmFzaWNCbG9ja0Zv
ckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5QmxvY2soKSAmJiAhbV9j
dXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJl
bnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2V0U3RhdGVGcm9t
UHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29y
cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsUHJlZGVjZXNzb3Jz
U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVj
ZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAg
KCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxQcmVk
ZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21Q
cmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCldOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBy
ZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29yXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRTdGF0
ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3VycmVudEJs
b2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50QmxvY2stPmluZGV4
KCldOworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50VXNlQ291bnRzID0gV1RGTW92ZShtX3Vz
ZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgIG1fc3Bp
bGxDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7Cisg
ICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0
Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3Zl
biBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxl
LgorICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBl
dmVyIGhpdC4KKyAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JC
eXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMu
YXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKTsKQEAgLTI3OCw0NiArMTI3NSw0MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICNlbmRpZgogCisKKyAgICAgICAgaWYgKGZhbHNl
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBiZWZvcmUgYmMjIiwgbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7Cisg
ICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAob3Bj
b2RlSUQpIHsKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChsZXNzKQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGdyZWF0ZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJl
cSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGlzX2NvbnN0cnVjdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCi0gICAgICAgIERFRklORV9T
TE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0
KQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQotICAgICAgICBERUZJTkVfU0xP
V19PUChnZXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5
X2lkX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1
bmNfZGVjbF9pbl9ldmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9w
ZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQot
ICAgICAgICBERUZJTkVfU0xPV19PUCh1bnJlYWNoYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AodGhyb3dfc3RhdGljX2Vycm9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlf
d2l0aF9zcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0
X2VudW1lcmFibGVfbGVuZ3RoKQotICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJs
ZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZykKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfY2xvbmVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3Vt
ZW50c19idXR0ZXJmbHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0KQotICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobmV3X3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3Ip
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHBv
dykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeVZhbD4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9X
X09QKGlzX2NvbnN0cnVjdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rv
cj4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hl
YXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1
YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3Zh
bF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5F
dmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5l
X2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19l
cnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19P
UChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVy
PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0Nl
bGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1l
bnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3Bl
Y1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9h
cmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+
KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1
bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4o
KS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlz
ZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQ
cm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0
KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90
aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAg
ICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5t
X2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVf
T1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzOTIs
MTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVf
T1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3Nh
bXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQp
CiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19P
UChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikK
ICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkK
QEAgLTQ3NCwxMCArMTQ3Miw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAg
ICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAgICBERUZJ
TkVfT1Aob3BfaXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfZnVu
Y3Rpb24pCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBE
RUZJTkVfT1Aob3BfdHlwZW9mKQorCisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQorICAgICAg
ICBERUZJTkVfT1Aob3BfbGVzc2VxKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcikKKyAg
ICAgICAgREVGSU5FX09QKG9wX2dyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0
X2VudW1lcmFibGVfbGVuZ3RoKQorCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tl
ZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1
dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1
ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgYXV0
byBjb3VudCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCYgY291bnRlciA9IG1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQp
OworICAgICAgICAgICAgICAgIC0tY291bnRlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWNvdW50
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT09QUzogRG8gdGhpcyBsYXppbHkgaW4gc2xv
dyBwYXRoIGNyZWF0aW9uL3NwaWxsRm9yQ2FsbAorICAgICAgICAgICAgICAgICAgICAvL21fc3Bp
bGxDYW5kaWRhdGVzLmFwcGVuZChvcGVyYW5kKTsKKworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGdwcik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlBS
UmVnIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xvYmJlcihmcHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0t
OykgeworICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVC
bG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAg
ICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2co
IkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwog
ICAgIH0KQEAgLTQ5OCw2ICsxNTcwLDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQ
YXNzKCkKICAgICBtX2ptcFRhYmxlLmNsZWFyKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYXNl
UmFuKFN0cmluZyBrZXkpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFw
PFN0cmluZywgdWludDY0X3Q+PiBzbG93Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93
Q2FzZXMuY29uc3RydWN0KCk7CisgICAgfSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMu
Z2V0KCk7CisgICAgdWludDY0X3QgdmFsdWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+
dmFsdWU7CisgICAgaWYgKCh2YWx1ZSAlIDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihr
ZXksICI6ICIsIHZhbHVlKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIHsKICAgICBtX2dldEJ5SWRJbmRleCA9IDA7CkBAIC01MTYsMTQgKzE2MDIsMjUgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxl
cyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0g
bV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAg
ICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nh
c2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5i
eXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBC
eXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNl
Lmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8g
PSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5k
ZXgpLnB0cigpOworCisgICAgICAgIGlmIChnZXRlbnYoInByaW50U2xvd0Nhc2VzIikgJiYgYXRv
aShnZXRlbnYoInByaW50U2xvd0Nhc2VzIikpKSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBuYW1lOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobmFtZSk7CisgICAgICAg
ICAgICBTdHJpbmcga2V5ID0gbmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3RyaW5nOjpudW1i
ZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVzW2N1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07CisgICAgICAgICAgICBwcm9iZShbPV0oUHJvYmU6OkNv
bnRleHQmKSB7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VSYW4oa2V5KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVD
YXNlUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkp
CkBAIC01ODAsNyArMTY3Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTks
NiArMTY5NSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERF
RklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5j
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzEsMTkgKzE3MzAs
MzQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AocmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0b19w
cm9wZXJ0eV9rZXkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlzX2NhbGxhYmxl
KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZikKKworICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChsZXNzKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChsZXNzZXEp
CisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXIpCisgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0
ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIp
OwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nh
c2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3Qg
ZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+
dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4u
Iik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVy
LT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2Rl
Z2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9m
ZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2Vk
IGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1
dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFscmVhZHkg
ZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdT
bG93Q2FzZTsKICAgICB9CkBAIC02ODgsNiArMTgwMiw4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0
aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0g
dHJ1ZTsgLy8gT09QUzogaGVscGZ1bCBmb3IgcnVubmluZyBMT0wgdy9vdXQgREZHLgogICAgIAog
ICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKICAgICBjYXNlIEdsb2JhbENv
ZGU6CkBAIC03NzgsNiArMTg5NCw4OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5n
KEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVs
KCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIGJv
b2wgcHJpbnRFYWNoT1NSID0gZ2V0ZW52KCJwcmludEVhY2hPU1IiKSAmJiAhIWF0b2koZ2V0ZW52
KCJwcmludEVhY2hPU1IiKSk7CisKKyAgICBpZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHkoKSkgewor
ICAgICAgICBKdW1wTGlzdCBleGl0Q29tbW9uOworICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBt
X2V4aXRKdW1wcykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5maXJz
dDsKKyAgICAgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAgICAgIGp1
bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChwcmludEVhY2hPU1IpIHsKKyAgICAg
ICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwcmludFN0cmVhbTsKKyAgICAgICAgICAgICAg
ICBtX2NvZGVCbG9jay0+ZHVtcChwcmludFN0cmVhbSk7CisgICAgICAgICAgICAgICAgQ1N0cmlu
ZyBzdHIgPSBwcmludFN0cmVhbS50b0NTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBzdHIuYnVm
ZmVyKCktPnJlZigpOyAvLyBsZWFrIGl0LgorICAgICAgICAgICAgICAgIHByaW50KHN0ci5kYXRh
KCksICIgLT4gZXhpdCBhdCBiYyMiLCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgIlxuIik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVja3Bv
aW50IGV4aXRzLgorCisgICAgICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAg
ICAgICAgICBleGl0Q29tbW9uLmFwcGVuZChqdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAg
QVNTRVJUKCFleGl0Q29tbW9uLmVtcHR5KCkpOworICAgICAgICBleGl0Q29tbW9uLmxpbmsodGhp
cyk7CisKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6OnBjR1BSID09
IHJlZ1Q0KTsKKyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCkuY29udGFpbnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVsb3cgcmVsaWVz
IG9uIHRoaXMgYmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVt
YmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBM
TEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
T1NSV3JpdGVCYXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAs
IE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50
OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigpKSwg
cmVnVDIpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsKKyAgICAgICAg
c3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRD
b3VudGVyKCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMiwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hvbGRGb3JS
ZW9wdGltaXphdGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIs
IG51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5jZSB0
aGUgTExJbnQgUEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPihtX2NvZGVCbG9j
ayk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRyaWdn
ZXJMT0xSZW9wdGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChub25B
cmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJlclRhZ1JlZ2lzdGVy
LCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Ok51bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgc2tpcEpldHRp
c29uLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6ZU5vdyA9IGpp
dC5icmFuY2gzMigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVyVGhhbk9y
RXF1YWwsCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAorICAgICAgICAv
LyAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6Om5vcm1h
bE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4o
KTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9TUkV4
aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAgICAgICAgLy8g
ICAgZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNv
ZGUoKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIp
OworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAg
ICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUklu
Zm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6IAorICAgICAg
ICAvLyAxLiBTdG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAgICAgICAvLyAy
LiBqZXR0aXNvbiBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8gMy4gd3JpdGUg
YmFycmllciBMTEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5r
KHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIxNjUsNyBAQCBDb21w
aWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQ
dHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0
YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQg
OiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFjaGlu
ZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIxNzYsNyBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5r
VG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwogICAgIH0K
ICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJl
Y3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkp
OworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
KTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJ
VCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVz
dWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIsNiArMjI3MCw5
NTEgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3Rh
bEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21w
aWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sK
KyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXpl
KCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOwor
ICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmFuaz4KK1ZlY3RvcjxSZWcsIDMyPiBjb21wdXRlQWxsb3dlZFJlZ3MoKQor
eworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRl
IGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1
dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMK
KyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFZlY3Rv
cjxSZWcsIDMyPiBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJl
Z2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAg
ICAgIGlmIChhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFs
bG93ZWQuYXBwZW5kKHJlZyk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBC
YW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6
dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcp
KQorICAgICAgICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFs
bG93ZWQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRHUFJzKCkKK3sKKyAg
ICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRp
ZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJl
LCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAg
IC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0
b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Cisg
ICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOwor
ICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVn
LCAzMj4mIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisg
ICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRv
IHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkg
Zm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0
ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0
KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0
aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1z
IGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4u
CisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5
dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisK
K0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAh
PSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUu
aXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJl
Z1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdW
YWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0Nv
dW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFs
dWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAo
UmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlz
LT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7Cisg
ICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9i
YmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChS
ZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24g
aGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOwor
ICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9j
ZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0K
KyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50
IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6
CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwK
KyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5k
IHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3
aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBl
c3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lz
ZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5k
IHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFs
dWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxv
Y2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAg
fQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
YXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcg
OiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7
Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzog
dGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0
byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdW
YWx1ZS5vcGVyYW5kKSkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBS
cygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2Fs
bChHUFJSZWcgdG9JZ25vcmUsIEZQUlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAvLyBPT1BTOiB0
aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsK
KyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsK
KyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVn
VmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFu
LmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBl
KHJlZ1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnLmZwcigp
ICE9IHRvSWdub3JlRlBSKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9
CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnLmdw
cigpICE9IHRvSWdub3JlKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9
CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVk
UmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50
RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
KnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JT
cGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
KCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRDb3VudCh1aW50
NjRfdCBjb3VudCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICBmb3IgKHVp
bnQ2NF90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICArK2NvdW50ZXI7CisgICAg
ICAgIGlmIChjb3VudGVyICUgMTAwMDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUnVu
dGltZSBsb2FkIGNvdW50OiAiLCBjb3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0
b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRU
b0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2NF90IGxvYWRD
b3VudCA9IDA7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJl
ZyByZWcgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gc3RkOjpnZXQ8MT4odHVwbGUpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5U
eXBlID0gc3RkOjpnZXQ8Mj4odHVwbGUpOworCisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25v
cmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFu
ZFRvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQ
UigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3By
KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAg
ICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAg
IERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goKnRoaXMp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkK
KyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJh
bmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisK
KyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkp
OworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAg
IGlzSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShzY3JhdGNoLCByZWcuZnByKCkpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsb2FkQ291bnQ7CisgICAg
fQorCisgICAgaWYgKGZhbHNlICYmIGxvYWRDb3VudCkgeworICAgICAgICBwcm9iZShbPV0gKFBy
b2JlOjpDb250ZXh0JikgeworICAgICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRDb3VudCk7Cisg
ICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxh
bihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQor
Cit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveElu
dDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3Rv
cmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsK
KyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0g
U3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIp
LmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBn
cHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFu
ZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3Ig
Ynl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgor
ICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQp
OworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwor
dm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAg
c3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyBy
ZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tD
b3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAg
ICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAh
cmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQor
CitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9q
aXQoaml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwciho
aW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRl
R1BSKGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6
OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQ
UlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJS
ZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1f
ZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9q
aXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
Z3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6Omdwcigp
Cit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dw
cjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBt
X2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBt
X2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3Bl
cmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50
MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVy
biBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmICht
X2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
bV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVH
UFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1f
Z3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7Cisg
ICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0K
KworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0
dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQm
IGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBt
X29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAg
bV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6Omdw
cigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcg
PSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIg
PSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1f
b3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9q
aXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQu
c3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lz
dGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNr
KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpn
cHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4g
bV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVn
ID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1f
Z3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJl
dHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYg
aml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
b3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIo
KTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9q
aXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkK
K3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnBy
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJS
ZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVn
ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAg
ICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZh
bHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAg
ICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisK
KyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1f
b3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25O
b3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAg
IG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0K
KworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAgIG1faml0
LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKwor
SklUOjpOdW1iZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQor
eworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAg
aWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpOdW1i
ZXJPcGVyYW5kOjp+TnVtYmVyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsK
K30KKworRlBSUmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIg
IT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnBy
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcp
IHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zw
cik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxs
b2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuY29u
dmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAg
ICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIs
IG1fZnByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9Owor
ICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8gaXNJbnQz
MiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFn
UmVnaXN0ZXJzKTsKKworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbiht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRl
KEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQudW5ib3hE
b3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9q
aXQuanVtcCgpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2pp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5k
KTsKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6
SW50MzJDb252ZXJ0aW5nT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5n
T3BlcmFuZDo6fkludDMyQ29udmVydGluZ09wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayht
X2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChtX2ppdC5zaG91bGRT
cGVjdWxhdGVJbnQzMihtX29wZXJhbmQpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBvcCB7IG1f
aml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAgICAgICAgbV9q
aXQubG9jayhtX2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIobV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9q
aXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQu
Z3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9Owor
ICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBhdXRvIGlzSW50
MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1f
aml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUo
QmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgICAgIG1faml0LnVuYm94
RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyNp
ZiBDUFUoQVJNNjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0Rv
dWJsZVRvSW50MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAg
ICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNz
KGZwciwgbV9ncHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1
bmNhdGVTdWNjZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQu
c2lsZW50U3BpbGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91Ymxl
VG9JbnQoKSA/IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMy
LCBtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3Bp
bGxSZWNvcmQpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3Zl
KHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAg
fSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1f
Z3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQsIHZhbHVlR1BSKTsKKwor
ICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7Cisg
ICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVPdGhlcihtX29wZXJhbmQpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07Cisg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOwor
CisgICAgICAgIG1faml0LnNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZw
ciA9IHRlbXBGUFIuZnByKCk7CisKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKworICAgICAgICBh
dXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gbm90RG91YmxlID0gbV9qaXQuYnJh
bmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1f
Z3ByLCBmcHIpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJN
NjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRp
Y3MoKSkgeworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFT
Y3JpcHRTZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dw
ciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxS
ZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAg
ICAgICBtX2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFz
U2Vuc2libGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9w
ZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50Rmls
bEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5q
dW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgbm90RG91YmxlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgYXV0byBub3RPdGhlciA9IG1faml0LmJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3Mg
eyB2YWx1ZUdQUiB9LCBtX2dwcik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDAp
LCBtX2dwcik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAg
bm90T3RoZXIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3RCb29sZWFuKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIp
KTsKKyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwgbV9ncHIp
OworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGlzSW50MzIu
bGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQodmFsdWVHUFIs
IG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3Bl
Y0Jvb2xlYW4pOworICAgIH0KKworICAgIHJldHVybiBtX2dwcjsKK30KKworUmVnaXN0ZXJTZXQg
SklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJl
c3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1
dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVl
ID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3Ry
aW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICgh
aXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9v
bGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICgh
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFu
KHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9
LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090
aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RP
YmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxD
aGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9
IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5k
KSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJ
bnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNC
aWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1
ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRp
ZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMy
KSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAo
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQo
dmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRv
bmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
QmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUs
IHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxs
KHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJ
bnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJl
bnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRl
Y29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnBy
b3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3Rh
dGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBt
X2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBt
X2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiht
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7Cisg
ICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFs
dWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBv
cGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxs
b2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAg
Zm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJl
ZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAg
ICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1Zh
bHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAg
ICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBA
QAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVy
ZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVn
aXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1Nl
Z21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQg
OiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xh
c3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xh
c3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAg
IAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2Rl
SW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAg
IHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFsUmVnaXN0ZXIs
IFNwZWN1bGF0ZWRUeXBlPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAg
ICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lz
dGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAg
IHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAg
ICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBV
c3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3
ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBs
YW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9y
IHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNv
bWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5j
ZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Niw3ICsyMTEsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRl
IEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1
YmxpYyBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJ
VDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVp
bnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7
Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXBy
ZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAg
ICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBi
ZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgotICAg
ICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVtIGNs
YXNzIENvbXBpbGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAgTE9M
CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21w
aWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVj
b2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1
cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZv
aWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAotICAg
ICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21waWxh
dGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVU
eXBlIGNvbXBpbGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29t
cGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBjb21w
aWxlVHlwZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5
cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVj
dFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29k
ZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9w
PihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2Fj
aGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7
CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGlu
ZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRo
Q2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5n
dGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNl
TE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAg
ICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVn
IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1w
bChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhv
dXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkg
KzM1MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hl
Y2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChK
dW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFk
ZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93
Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0p
OworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9
IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVu
c3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2
b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBM
aXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpA
QCAtMzMzLDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAg
ICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAg
LTM2MCw3ICszOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxl
T3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVt
cFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdy
aXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJC
YXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01
MDgsOCArNTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0g
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwg
UmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlv
bik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25k
aXRpb24pOwpAQCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlv
biwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJs
ZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29u
ZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAg
ICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiop
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiop
OwpAQCAtNTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdp
bihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxl
cl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChj
b25zdCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3Bf
bW92KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNjc4LDc4ICs3MjEsMTAwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiop
OwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIHZvaWQgZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAg
ICAgICAgdm9pZCBlbWl0X29wX2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiopOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0Q29tcGFyZU9w
SW1wbChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzKGNvbnN0IEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAg
dm9pZCBlbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1p
dF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAg
ICB2b2lkIGVtaXRfb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
YWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxs
ZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAg
IHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVt
aXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAog
ICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVk
KTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7Cisg
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4
cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRH
UFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZv
aWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwot
ICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3Bl
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAg
ICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwg
R1BSUmVnKTsKQEAgLTc2NCw4ICs4MjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lk
IGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZv
aWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
KTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIp
OwpAQCAtNzc4LDM4ICs4NDEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlv
biosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVw
YXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9u
KiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQ
cm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQg
ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0
aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hG
dW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBK
dW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAg
ICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
IWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAg
ICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAg
bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
aW9uPgorICAgICAgICB2b2lkIGVtaXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1
bGF0ZWRUeXBlIGRzdFR5cGUpOwogCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55
U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAg
IHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8v
IE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAg
ICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC04OTEsNiAr
OTM3LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNr
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3Mu
Li4pOworICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRv
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFu
ZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQs
IEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3Bl
cmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
KyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2Fs
bDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKQEAgLTkwMiw2ICs5NjgsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIE5vUHJvZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2b2lkIGVt
aXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGluZ1BvbGljeSBzaG91bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5nUG9saWN5
OjpOb1Byb2ZpbGluZyk7CiAKQEAgLTk2MSw2ICsxMDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5k
aWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2
b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBz
dGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29t
cHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTk3MSw2ICsxMDQzLDI5MiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAg
ICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1w
KEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVt
cCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQm
KTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBS
UmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNz
IEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBh
cmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2Vk
LCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5k
KEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFu
ZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBj
bGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91
YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IElu
dmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTnVtYmVyT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfk51bWJlck9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIC8vIFNwZWN1bGF0ZSBu
dW1iZXIrYm9vbGVhbitvdGhlciwgYW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9yIGJpdG9w
cy4KKyAgICAgICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVz
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0K
KworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJl
ZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYg
Z3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQp
LmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVn
Rm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYg
cmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJl
Z1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiBy
ZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxE
ZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
bV91c2VMT0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAg
ICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQ
UlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGdwcikub3BlcmFuZC5p
c1ZhbGlkKCkpOworCisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOwor
ICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVy
YW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vu
ZGlmCisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXJlZ1ZhbHVlKGZwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBmcHJG
b3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVy
YW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1
cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVy
IHwgU3BlY0Jvb2xlYW4pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJv
bChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJh
bmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090
aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9v
bCB1c2VMT0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOwor
ICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90
aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4
aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQg
bW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxs
b2NhdGVHUFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFs
bG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJS
ZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7Cisg
ICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6
IE1ha2UgdGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0
IHRvIHNldCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2Nr
KFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2ls
ZW50U3BpbGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSA9IElu
dmFsaWRHUFJSZWcsIEZQUlJlZyB0b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOworICAgICAg
ICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAg
ICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVn
aXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJw
cmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1f
ZmFyQ2FsbHM7CkBAIC05OTAsNyArMTM0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
ZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9i
eXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7
CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzODUsODcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxv
Y2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBh
biB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUg
dGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAg
ICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsK
KyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAg
IHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwg
aXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0
aGlzID0geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9y
bWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7Cisg
ICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAg
ICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1Jl
Zy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFu
ZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0u
bWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChw
cm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHBy
b3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1
cnJlbnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKwor
ICAgICAgICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayog
bV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgVmVj
dG9yPE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAgIE9wZXJh
bmRzPHVuc2lnbmVkLCB0cnVlPiBtX2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDE2PiBtX3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBWZWN0b3I8
TG9nRW50cnk+IG1fZXhpdExvZzsKKworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0
YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9w
cmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxCeXRlY29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODggQEAKICNp
bmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAKKyNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVy
VGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
c0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdy
ZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE0NiwzNyArMTQ4LDE2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJ
bnN0cnVjCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2
b2lkIEpJVDo6ZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBncENvbXBhcmUsIERvdWJsZUNvbmRpdGlvbiBk
b3VibGVDb21wYXJlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNUZW1w
LmdwcigpLCByaHNUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBjb21wYXJlRG91YmxlKGRvdWJsZUNvbXBhcmUsIGxoc1RlbXAuZnByKCksIHJoc1RlbXAuZnBy
KCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJl
cihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB8fCAhcHJlZGljdGlvbkZvcihs
aHMpIHx8ICFwcmVkaWN0aW9uRm9yKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFy
ZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNH
UFIpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAg
ICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2xlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
bWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJl
T3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENv
bXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3Vi
bGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29t
cGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFs
LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKK30KKwogdm9pZCBKSVQ6OmVt
aXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0
ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9Owor
ICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAg
Ym94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDAp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29u
ZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5s
aW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29u
c3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHx8ICFwcmVkaWN0aW9u
Rm9yKG9wMSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNv
bmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIo
KTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlv
biA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICszNTUsNDMgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQog
eworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1w
OworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIg
PSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50
MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAg
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSBy
ZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOwor
ICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdl
dExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9w
MmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhz
R1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0
YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9w
MSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlv
biwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdl
dFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICs0MDcsODkgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAg
IEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAg
IGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNU
ZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQ
UiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJ
bnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAg
ICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihv
cDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1t
MzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsK
KyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJl
Z1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNv
bmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNv
bmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlv
bi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNp
emUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5v
blplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1i
ZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVk
aWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51
bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1
bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSk7CkBAIC0zMDAsOCArNDk4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsK
QEAgLTMyNiw4ICs1MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAt
MzUxLDEyICs1NDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBM
SFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAg
ICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1w
IGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMy
KHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAg
ICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMCk7CkBAIC0zNjksOSArNTYyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5r
KHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRo
aXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQu
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KQEAgLTM4MSwxMSArNTc0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25z
dCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRk
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJm
bG93KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVl
cyB3LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOwor
ICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAg
ICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAg
ICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92
ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0g
aW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsK
KyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAg
ICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZw
cigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAg
c2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7Cisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5w
dXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlu
cHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVO
dW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0zOTMsMTEgKzYyOCw2MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1f
c3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHRl
bXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KGlucHV0R1BSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
b25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVt
cEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1
bHRGUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRB
c0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1w
RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBS
KTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0
ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBS
LCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1
dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJp
Z0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAg
ICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
KTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2OTMsMTEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhz
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1f
cmhzOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKGxocykgfHwgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpICYmIHNob3VsZFNwZWN1
bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNU
ZW1wLmZwcigpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICAgICAg
RlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRG
UFIgPSByZXN1bHRUZW1wLmZwcigpOworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soTWF0aDo6Zm1vZERvdWJsZSwgcmVzdWx0RlBSLCBsaHNG
UFIsIHJoc0ZQUik7CisKKyAgICAgICAgICAgIHNldERvdWJsZShkc3QsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUg
cmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNT
RVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lz
dGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBl
Y3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBB
U1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChl
Y3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1Rl
bXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBj
bG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gp
OworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAu
ZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gp
OworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAg
ICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+
Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0g
ZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKwor
ICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1w
bGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBzcGlsbEZvckNh
bGwoKTsgLy8gT09QUzogbmV3IG5hbWUsIGxpa2Ugc3BpbGxFeHBlY3RpbmdTbG93UGF0aAorCisg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhz
R1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhz
LCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBt
b3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0
b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0
ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVk
SW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlz
KTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwot
ICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9z
aXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQorICAgIGJveEludDMy
KGVkeCwgSlNWYWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLSNlbHNlIC8v
IENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBD
UFUoWDg2XzY0KQpAQCAtNDY0LDcgKzgwNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
KQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3Ay
OwpAQCAtNDc0LDYgKzgxNiw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBA
IC01NjIsMTUgKzkwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3Qg
SW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5z
dHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wg
aW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
RG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNs
b3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyNCwxMyArMTA2NSw2NiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lD
KiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5n
ZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRl
ciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBj
YW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsK
KyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6OnRyeUVtaXRMT0xCaXRGYXN0UGF0aChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CisKKyAgICBhdXRvIGJpdE9wID0gWyZdIChHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BS
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PE9wLCBPcEJpdGFuZD4pCisgICAgICAgICAgICBhbmQzMihsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2Ft
ZV92PE9wLCBPcEJpdG9yPikKKyAgICAgICAgICAgIG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BC
aXR4b3I+KQorICAgICAgICAgICAgeG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BMc2hpZnQ+KQor
ICAgICAgICAgICAgbHNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BVcnNoaWZ0PikKKyAgICAg
ICAgICAgIHVyc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFJzaGlmdD4pCisgICAgICAgICAg
ICByc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBzZXRJbnQz
MihyZXN1bHQsIHJlc3VsdEdQUik7CisgICAgfTsKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgSW50MzJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKyAgICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzJDb252ZXJ0aW5nKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKG9w
MikpIHsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzLmdwcigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MSwxNyArMTEz
NSw4IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OwotI2VuZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRGYXN0UGF0aDxPcD4oY3VycmVudEluc3Ry
dWN0aW9uKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwpAQCAtNzYwLDMzICsxMTQ1LDEw
NiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgICAgIGxl
ZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwogICAg
IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFu
ZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQogICAgIFJFTEVB
U0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRl
bXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsK
KworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAg
ICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkp
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAg
ICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owog
ICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYK
IAotICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogCisgICAgU25pcHBl
dEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVu
ZEp1bXBMaXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKICAgICBpZiAocHJvZmlsaW5n
UG9saWN5ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1pdFByb2ZpbGluZykKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MuZ3By
KCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigp
KTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiks
IFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjSW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0
SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkg
eworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQor
CisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3Vs
dEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAo
cmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9u
bHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50
MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwogI2Vsc2UKQEAgLTgwMyw3ICsxMjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNv
bnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRS
ZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTg0OSwxOSArMTMwNyw4IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQ
YXRoKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKKyAgICBpZiAo
dHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICBy
ZXR1cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQ7CkBAIC04NzMsMjEgKzEzMjAsNzcgQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFs
aWRGUFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9u
YWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIg
ZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIo
KSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAg
ICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmln
aHRTaGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAg
IGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNw
ZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
SW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIs
MTggKzE0MDUsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJo
c0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhz
RlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMu
Z3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAg
IE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRG
UFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLCByaHNGUFIs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRB
ZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsK
ICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRk
SUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRk
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsK
KyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxNDc1LDM1IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBh
cyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyBy
ZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBz
cmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcg
cmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAg
ICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNl
CiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
QEAgLTk0MSwxOSArMTUxMiwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlN
YXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3Ms
IHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7
CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCBy
ZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkp
OwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1w
cyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVF
bmQgPSBsYWJlbCgpOwpAQCAtOTYzLDcgKzE1MzcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJl
cikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzE1NTUsODIgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisg
ICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChv
cDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAg
IEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJS
ZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0
VGVtcEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7
CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9
IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7
CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRD
b25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRU
ZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAg
ICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNo
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1w
RlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAg
ICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRU
ZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAg
ICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIg
PSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
KyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
cmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOworICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3Io
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElD
LT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9y
Ojppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3
ICsxNjM5LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAog
ICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRo
aXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2Rl
KSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYg
KGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQu
aXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
Mik7CisgICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAt
PmdwcigpIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwor
ICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQor
CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgp
OwpAQCAtMTAzNSwxMSArMTY3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmlu
YXJ5TWF0aElDCiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAg
ZWxzZSBpZiAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiBy
ZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE2OTgsOCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9
IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07
CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwpAQCAtMTA4NSw3ICsxNzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVu
YXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVu
Y3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBh
dGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9u
U3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE3NDUs
NiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKLSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE3NTUs
MzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNT
RVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkg
JiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkp
OwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwot
ICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0
T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNM
ZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdU
MyA6IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFs
aWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAg
ICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxz
ZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5k
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBA
IC0xMTU2LDIzICsxODE3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0
aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNl
bHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7
Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVy
YW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTgzMiwyMzcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25z
dERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJF
TEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJS
ZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBP
cHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0
VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2Uo
KnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVm
dFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0
RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAg
IGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAg
RlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdU
MDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBK
SVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewog
ICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExp
c3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1w
dHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAg
ICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNC
eXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJv
ZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQz
Mk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxocy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAg
ICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBh
cml0aFByb2ZpbGUuZGlkT2JzZXJ2ZU5lZ1plcm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAg
IEZQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNU
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAg
ICAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKGxoc0dQUiwgbGhzRlBSKTsKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyaHNHUFIsIHJoc0ZQUik7CisgICAgICAgICAgICAgICAgbXVs
RG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtp
bmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDAp
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8sIGJy
YW5jaDMyKEJlbG93LCByaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSBy
aHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOwor
ICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByaHNGUFIgPSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVz
dWx0LmZwcigpOworICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRG
UFIpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUTXVsSUMqIG11
bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJ
QyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3Vy
cmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CisgICAgZW1p
dE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVNdWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3Vi
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgc3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5n
cHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU51bWJlcihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAg
ICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklU
U3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1
YklDKiBzdWJJQyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1
YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6
ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7
CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9Q
T1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDExIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0
IE9wJiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZp
cnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3Rp
bmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCAr
MTQ5LDggQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJl
dHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJl
Z2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9j
YWxsX2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAg
ICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAt
MzM0LDQ0ICszMzcsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dQogICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4o
Y3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxW
YXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2Fs
bFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBA
IC0zODYsNiArMzg5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZl
ZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVz
IHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMu
Li4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUg
cmVzdWx0IGhlcmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1
YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVp
bnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVz
dWx0IChpdGVyYXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93Owor
ICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgIHNsb3dDYXNlLmp1bXBz
LmFwcGVuZChuZXh0Q2hlY2twb2ludFNsb3cpOworCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzLCByZWdUMCB9OworICAgICAgICBHUFJSZWcg
c2hvdWxkQmVSZWdUMCA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNob3VsZEJlUmVnVDAgPT0gcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1f
bmV4dCwgcmVnVDApOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25leHQsIHJlZ1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJ
dGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMp
OwogCiAgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwpAQCAtNDU2LDYgKzQ3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisK
KyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVs
dGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMu
IEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nh
c2UgPSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDM3ICs0OTksNDQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIs
IGl0ZXJSZXN1bHRHUFIpOwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xv
d1BhdGg7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVn
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJl
c2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisgICAgICAgIHVzZWRSZWdpc3Rl
cnMuYWRkKHZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZl
ZFJlZ3MsCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVj
a3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5h
cHBlbmQoZG9uZUNoZWNrcG9pbnRTbG93UGF0aCk7CisKKyAgICAgICAgd2lsbERlZihieXRlY29k
ZS5tX2RvbmUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25l
R1BSKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAg
ICAgewogICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDM7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKKyAgICAgICAgSnVtcExpc3QgdmFsdWVD
aGVja3BvaW50U2xvd1BhdGg7CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRo
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBl
bmQodmFsdWVDaGVja3BvaW50U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSk7CisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV92YWx1ZSk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHZhbHVlR1BSKTsKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAK
ICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpAQCAtNTE1LDEwICs1NDUsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGlu
ayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+
KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9y
TmV4dD4oKTsKQEAgLTUyNiw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3JfbmV4dChjb25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2Rl
Lm1fZG9uZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5r
KHRoaXMpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTc3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAog
ICAgIHsgICAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nh
c2UuanVtcHNbMl0ubGluayh0aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJl
ZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVn
VDA7CiAKQEAgLTU2MSw3ICs1OTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zCiAKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUz
LDggQEAgY29uc3QgY2hhciogSklUQ29kZTo6dHlwZU5hbWUoSklUVHlwZSBqaQogICAgICAgICBy
ZXR1cm4gIkxMSW50IjsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICBy
ZXR1cm4gIkJhc2VsaW5lIjsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0
dXJuICJMT0wiOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gIkRG
RyI7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkBAIC0xMDgsNyArMTEwLDcgQEAgSklUQ29k
ZVdpdGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQwogCiBKSVRDb2RlV2l0aENvZGVSZWY6
On5KSVRDb2RlV2l0aENvZGVSZWYoKQogewotICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgKGlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKSkKKyAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChp
c0RGR09yRlRMKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQog
ICAgICAgICAmJiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpCiAgICAgICAgIGRhdGFMb2coIkRl
c3Ryb3lpbmcgSklUIGNvZGUgYXQgIiwgcG9pbnRlckR1bXAobV9yZWYuZXhlY3V0YWJsZU1lbW9y
eSgpKSwgIlxuIik7CiB9CkBAIC0yMzcsNiArMjM5LDExIEBAIE5hdGl2ZURPTUpJVENvZGU6Ok5h
dGl2ZURPTUpJVENvZGUoQ29kZVIKICNpZiBFTkFCTEUoSklUKQogUmVnaXN0ZXJTZXQgSklUQ29k
ZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoQ29k
ZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCkKIHsKKyAgICAvLyBGb3IgQmFzZWxpbmUgSklULCB0aGlz
IGlzIHRyaXZpYWxseSB0cnVlLgorICAgIC8vIEZvciBMT0wgSklULCBldmVyeXRoaW5nIGlzIGFs
cmVhZHkgc3BpbGxlZCB0byB0aGUgc3RhY2sgYXQgZWFjaCBvcGNvZGUsIHNvIHdoZW4gd2UKKyAg
ICAvLyBnbyB0byB0aGUgb3BfY2F0Y2gsIHRoZSBsaXZlIHN0YXRlIG11c3QgYWxyZWFkeSBiZSBp
biB0aGUgcmlnaHQgcGxhY2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEFsc28sIG9wX2NhdGNoIGhh
cyBubyBpbmNvbWluZyByZWdpc3Rlci90eXBlIHByb29mIHN0YXRlLCBzbyBpdCdzIHRyaXZpYWwg
dG8gY2F0Y2gKKyAgICAvLyBhbiBleGNlcHRpb24gaW4gTE9MIGp1c3QgYnkganVtcGluZyB0byBv
cF9jYXRjaC4KICAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBj
bGFzcyBKSVRUeXBlIDogdWludDhfdCB7CiAgICAgSG9zdENhbGxUaHVuaywKICAgICBJbnRlcnBy
ZXRlclRodW5rLAogICAgIEJhc2VsaW5lSklULAorICAgIExPTEpJVCwKICAgICBERkdKSVQsCiAg
ICAgRlRMSklUCiB9OwpAQCAtNjcsMzYgKzY4LDIzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiB0eXBlTmFtZShKSVRUeXBlKTsKIAotICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRv
bVRpZXJKSVQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkJhc2VsaW5lSklUOwot
ICAgIH0KLSAgICAKICAgICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKSVRU
eXBlIG5leHRUaWVySklUKEpJVFR5cGUgaml0VHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
aml0VHlwZSkgewotICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICAg
ICAgcmV0dXJuIEpJVFR5cGU6OkRGR0pJVDsKLSAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6RlRMSklUOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBKSVRUeXBlOjpOb25lOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBi
b29sIGlzRXhlY3V0YWJsZVNjcmlwdChKSVRUeXBlIGppdFR5cGUpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgogICAgICAgICBj
YXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGRlZmF1bHQ6CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgorICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMDcsNyArOTUsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNlIEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpOb25lOgorICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAg
ICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMTYsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgc3dpdGNoIChqaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkRG
R0pJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTEyNCw2ICsxMTcsMjQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgc3RhdGljIGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KEpJVFR5cGUgaml0VHlw
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5
cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjYXNlIEpJVFR5cGU6
Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBlY3Rl
ZExvd2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNFeGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKQEAgLTE0NSw5ICsxNTYs
MTkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzTG93ZXJPclNhbWVUaWVyKGV4
cGVjdGVkTG93ZXIsIGV4cGVjdGVkSGlnaGVyKTsKICAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1
c2VzUmVwbGFjZW1lbnRDb2RlQmxvY2soSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6
REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUOworICAgIH0KICAgICAKICAgICBz
dGF0aWMgYm9vbCBpc09wdGltaXppbmdKSVQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKKyAgICAg
ICAgcmV0dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlw
ZTo6RlRMSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzREZHT3JGVEwoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKICAgICAgICAgcmV0
dXJuIGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRM
SklUOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhj
ZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2
b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhCiAgICAgICAgIC8vIHdpdGgg
dGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhlIG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFu
aW5nbGVzcwogICAgICAgICAvLyBhbmQgY2FuIGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBw
cm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50YXJnZXQKICAgICAgICAgLy8gaW4gdGhlIHByb3Bl
ciBmcmFtZS4KLSAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKCFKSVRDb2RlOjppc0RGR09y
RlRMKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjYXRj
aFBDRm9ySW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMo
KS5hdChoYW5kbGVyLT50YXJnZXQpLnB0cigpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGNh
dGNoUm91dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIK
ICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2xv
d1BhdGhDYWxsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDUsNiArMTQ2LDcgQEAgQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2Ug
aXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwg
dG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU5LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rp
b24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRo
ZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBA
IC0xNjcsMjUgKzE3MCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xv
d0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nh
c2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAg
aWYgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZv
aWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0Iik7CkBAIC0yMDcsMjcgKzE5MSwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd1RvSG90Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNf
SU5MSU5FIFNsb3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAo
IW1fc2xvd0Nhc2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAh
PSBtX2J5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2Vz
Lmxhc3QoKS5zYXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoISFkc3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMu
bGFzdCgpLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9
IGRzdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7
IH0pOworICAgIH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQs
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNv
bnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVT
bG93Q2FzZShyZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1
bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkp
OworCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7Cisg
ICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xv
d0Nhc2UuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICszOTks
NiBAQCBBTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBz
dG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkBAIC03MTcsNiArNzA1LDE4
IEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4g
RUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0U2xvd09wKEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBT
cGVjdWxhdGVkVHlwZSBkc3RUeXBlKQoreworICAgIHNwaWxsRm9yQ2FsbCgpOworICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBmdW5jdGlv
bik7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBpZiAobV91c2VMT0wgJiYgZHN0Lmlz
VmFsaWQoKSkgeworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBkc3RUeXBlOworICAgICAgICB3
aWxsRGVmKGRzdCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAg
ICAgfTsKIAotICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRF
bWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkp
OwogCiAgICAgICAgIGlmIChtX2dlbmVyYXRlRmFzdFBhdGhPblJlcGF0Y2gpIHsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3Rv
bT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwpAQCAtNzY2LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0
b3IuaCIKKyNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNp
bmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDYXN0LmgiCkBAIC00MSw2ICs0Miw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgi
CiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
clByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
NTEsNiArNTQsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgLy8gT09QUzogSWYgd2UgY2hhbmdlIHJlZ2FsbG9jIHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUg
TiByZWdpc3RlcnMgcGVyIGxvY2FsLCB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24n
dCBuZWVkIHR3byByZWdzLgorICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JP
cGVyYW5kKHNyYykgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkw
LDMyICsxMTUsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgog
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0s
IGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAK
LSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2Nh
dG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAg
R1BSUmVnIHJlc3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBz
Y3JhdGNoUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2Ny
YXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVt
cC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
KyAgICAgICAgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9y
KQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCksIHJlc3VsdFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQo
YWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRl
cmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxp
bmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0
UmVnLCBieXRlY29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3Zl
blR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZElt
bVB0cigmdm0oKSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEyNSwyMyArMTcxLDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVj
dG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9o
YXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5j
ZVZhbHVlLCByZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3Ry
dWN0b3JHUFI7CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBP
cHRpb25hbDxDZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gaGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGNvbnN0cnVjdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhh
c0luc3RhbmNlVGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNv
bnN0cnVjdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VU
ZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9y
R1BSID0gcmVnVDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAg
fQogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3Rh
bmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQ
UiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJv
dG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAg
ICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
JyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlv
bi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
dGVzdDgoWmVybywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJl
c3VsdEdQUik7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNl
VmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTEsNDAgKzIyNCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAot
ICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3Bl
Y3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFs
IHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1
c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAK
LSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2Vs
bCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFu
Y2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAv
LyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90
bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8
Q2VsbE9wZXJhbmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gdmFsdWVUZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsK
KworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1w
IHNjcmF0Y2gxVGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsg
KnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUjsKKworICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAu
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAg
ICAgICAgICAgIHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAg
ICAgcHJvdG9UZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHBy
b3RvVGVtcENlbGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRU
ZW1wLmdwcigpLCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1w
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0
aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAg
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQor
CisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgICAgICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAg
ICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRj
aDJUZW1wLmdwcigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAg
ICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRUZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWws
IHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAg
Ly8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRo
aXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sg
dGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNo
ZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAg
ICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAg
ICAgIHJlZ1QxLCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRj
aAorICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFu
Y2VPZnMuYXBwZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDIsIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIs
IGdlbi5zdHViSW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAt
MTk5LDExICszMjUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1
YwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWws
IGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVv
Zl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTIxMSwyOCArMzU1LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQo
Y28KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklz
VW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBK
dW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBp
ZiAoISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5w
dXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAg
ICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Y29tcGFyZVB0cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAg
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMp
OworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1QwKTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29y
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyAr
NDI5LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
Z1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0yNTUsMTIgKzQ2MywzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFu
KGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4p
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29s
ZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAg
ICAgICAgICB0ZXN0NjQoWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDk5LDI3IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVs
bE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQ
UiwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MjksNTYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVl
KSAmIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFy
ZTY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0
KHJlZ1QxLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJl
Z1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihI
ZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklH
SU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0
cnVjdGlvbiopCkBAIC0zMTMsMTggKzU5NSw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxs
X3dpdGhfdHlwZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlw
ZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzY0
NCw2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFs
dWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0
VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVl
VGVtcC5ncHIoKTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAg
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisKKyAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDksMTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSBy
ZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0
dXJuVmFsdWVHUFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1
ICs3MjgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGlu
ayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1v
dmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBpc0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIAorICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGlu
ayh0aGlzKTsKIAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3By
b3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2
LDUyICs3NzEsMjAzIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmlu
ZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxh
dGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1i
b2woc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVH
UFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKHNyYywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZT
dHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3Ry
aW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8
IFNwZWNTeW1ib2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlz
U3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYg
KHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlm
IChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAg
ICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IG5hbWVHUFIgPSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJv
LCB2YWx1ZUdQUiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBPT1BTOiB3ZSBjb3VsZCBoYW5kbGUgbW9yZSBzdHVmZiBpbmxpbmU6
IHN0cmluZ3MsIGJpdGludCwgb2JqZWN0cyB0aGF0IGFyZW4ndCBtYXNxdWVyYWRlciwgZXRjLgor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
Ly8gU2VlIGNvbW1lbnQgYmVsb3cuCisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
cmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBhZ2Fp
bnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4s
IHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBi
aXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0
aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2gg
d2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworCisg
ICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2Fz
IHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAvLyBj
bGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFs
c2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZlcnQg
YWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFu
ZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsK
KyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNl
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9u
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFy
Z2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3Jl
IGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNv
bmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
ZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAq
dGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2Ny
YXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0
aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lkIEpJ
VDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihj
b25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNhc2Vz
IGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3Jh
dGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhpcyB9
OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2Ny
YXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gy
RlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJH
UFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFs
dWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5NzYsMTI5IEBAIHZvaWQgSklU
OjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAg
ICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5w
dXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgICAg
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Cisg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
KyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmpl
Y3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAg
ICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigp
OworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0g
ICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAot
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0Nl
bGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0
dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
KworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVkaWF0
ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMTA3LDI2IEBAIHZvaWQgSklU
OjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAg
ICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExMzUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC01MTUsNjUgKzExNjYsNDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IElu
c3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
ICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNpYWxQ
b2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW1Q
dHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVk
SW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3N0YXRpYyB2b2lkIGNvbXBhcmVTdHJpbmdzKEpJVCYgaml0LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoLCBHUFJSZWcgbGhzR1BSLCBHUFJS
ZWcgcmhzR1BSLCBHUFJSZWcgbGhzVGVtcEdQUiwgR1BSUmVnIHJoc1RlbXBHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSLCBHUFJSZWcgc2NyYXRjaDJHUFIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBhcmUz
MihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNHUFIs
IEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBsaHNUZW1wR1BSKTsKKyAgICBqaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaHNHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVl
KCkpLCByaHNUZW1wR1BSKTsKKworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZSb3Bl
U3RyaW5nSW1wbChsaHNUZW1wR1BSKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJ
ZlJvcGVTdHJpbmdJbXBsKHJoc1RlbXBHUFIpKTsKKworICAgIGppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobGhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAKKyAgICBub3RFcXVhbC5hcHBlbmQoaml0LmJyYW5jaDMy
KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNldCgp
KSwKKyAgICAgICAgc2NyYXRjaEdQUikpOworICAgIAorICAgIGVxdWFsLmFwcGVuZChqaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgCisgICAg
c2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNUZW1wR1BSLCBTdHJp
bmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNl
dCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpm
bGFnSXM4Qml0KCkpKSk7CisgICAgCisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobGhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgbGhzVGVtcEdQUik7
CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3Ry
aW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgcmhzVGVtcEdQUik7CisgICAgCisgICAgYXV0byBsb29w
ID0gaml0LmxhYmVsKCk7CisgICAgCisgICAgaml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworCisgICAgeworICAgICAgICBqaXQubG9hZDgoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChsaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNPbmUpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIGF1dG8gbWFjcm9TY3JhdGNo
ID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGppdC5sb2FkOChNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJoc1RlbXBHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc09uZSksIG1hY3JvU2NyYXRjaCk7CisgICAgICAgIG5vdEVxdWFsLmFwcGVuZChq
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoMkdQUiwgbWFjcm9T
Y3JhdGNoKSk7CisgICAgfQorICAgIAorICAgIGppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICBlcXVhbC5h
cHBlbmQoaml0Lmp1bXAoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorc3RhdGljIHZvaWQgY29tcGFyZVN0cmljdEVx
Q2VsbHMoSklUJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgbm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xv
d1BhdGgsIEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIsIEdQUlJlZyBsaHNUZW1wR1BSLCBH
UFJSZWcgcmhzVGVtcEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEdQUlJlZyBzY3JhdGNoMkdQUikK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
LSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGVxdWFsLmFwcGVuZChqaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIGxoc0dQUiwgcmhzR1BSKSk7CisKKyAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICBzbG93UGF0
aC5hcHBlbmQoaml0LmJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKworICAgIGF1dG8gbGhz
SXNTdHJpbmcgPSBqaXQuYnJhbmNoSWZTdHJpbmcobGhzR1BSKTsKKyAgICBub3RFcXVhbC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisKKyAgICBsaHNJc1N0cmluZy5saW5rKCZqaXQpOworICAgIG5vdEVx
dWFsLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RTdHJpbmcocmhzR1BSKSk7CisKKyAgICBjb21wYXJl
U3RyaW5ncyhqaXQsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBs
aHNUZW1wR1BSLCByaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+Ojp2
YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291bGRC
ZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMp
KSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAg
ICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0
aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEp1bXBMaXN0
IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICBKdW1w
TGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgY29tcGFyZVN0cmluZ3MoKnRoaXMsIGVxdWFs
LCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1wLmdwcigpLCByaHNU
ZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVxdWFs
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1
ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVl
VHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZT
dHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnBy
KCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21w
YXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihyaHMpKSB7CisgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9
IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIs
IHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENv
dWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xv
d0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93
UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisKKyAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxP
cCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgYXV0byBncENvbXBh
cmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEg
PyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisg
ICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJo
cykpKSB7CisgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAg
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAg
ICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisKKyAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWws
IHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwg
c2NyYXRjaFRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgIGlmIChpc0VxKSB7CisgICAgICAgICAg
ICAgICAgYWRkSnVtcChlcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRKdW1w
KG5vdEVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZT
dHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQo
cmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAg
IEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhz
RlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21w
YXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAg
ICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIE51bWJlck9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxo
c1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFy
Z2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1
bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgp
OworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
ZXFJbXBsPE9wRXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9CiAK
LSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
LSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBHUFJS
ZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUlt
cGw8T3BOZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIgPSBy
ZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhz
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAg
IGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsK
KyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVl
R1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
amVxSW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAg
ICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09Q
UzogV2UgY2FuIG1ha2UgdGhpcyBhIHNpbmdsZSBicmFuY2ggaWYgdGhlIHJlc3RvcmUgZG9lc24n
dCBjbG9iYmVyIHJldHVyblZhbHVlR1BSLgorICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2
ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdl
dCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBi
eXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcg
cmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQ
UiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNjE3LDI0MCBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9s
aHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJo
cyA9IGJ5dGVjb2RlLm1fcmhzOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wg
aXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAg
YXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBm
cENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxP
clVub3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1ZXND
b3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBD
ZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBs
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BS
KTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMs
IGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsK
KworICAgICAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFs
OworICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgICAgIEp1
bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmluZ3MoKnRoaXMs
IGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1wLmdwcigp
LCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
ICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAg
ICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgICAg
ICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsK
KworICAgICAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gy
VGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygq
dGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAu
Z3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3By
KCkpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAg
ICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAg
ICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAg
ICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7Cisg
ICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGNv
bXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7Cisg
ICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGNv
bXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3Bl
Y3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzU2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHJoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBsaHNTY3JhdGNoR1BSID0gbGhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByaHNTY3JhdGNoR1BSID0gcmhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CiAKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElmIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1BhdGg7
Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAg
IGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAg
ICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAgICov
Ci0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhh
dCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFu
Y2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJ
bnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2
aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBh
bGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2
aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigx
KSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9u
WmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xv
dyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRz
KS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBz
b21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChm
YWxzZSk7CisjZWxzZQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVkSW1t
NjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAgICAg
ICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsaHNJc0NlbGwgPSBicmFuY2hJZkNlbGwo
bGhzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGJvdGhOb3RDZWxscyA9IGJyYW5jaElmTm90
Q2VsbChyaHNHUFIpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFwcGVuZChqdW1wKCkpOwor
CisgICAgICAgICAgICAgICAgbGhzSXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAg
bm90RXF1YWwuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyaHNHUFIpKTsKKworICAgICAgICAgICAg
ICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNl
bGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhz
U2NyYXRjaEdQUiwgcmhzU2NyYXRjaEdQUiwgdGVtcEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBib3RoTm90
Q2VsbHMubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSnVtcCBz
bG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIs
IHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBk
b3VibGUuCisgICAgICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIobGhzR1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKGxoc0dQUikpOworICAgICAg
ICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFu
Y2hJZkludDMyKHJoc0dQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyaHNHUFIpKTsKKyAgICAgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKworICAgICAgICAg
ICAgaWYgKGlzRXEpCisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21w
YXJlNjQoTm90RXF1YWwsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICAgICAgSnVtcExpc3QgZG9uZTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisK
KyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgICAg
ICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworI2VuZGlmCisgICAgICAgIH0KKwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0
cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkK
KyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09IHJp
Z2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAg
ICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290byBz
bG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
Ki8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhl
IDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQz
Mi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFs
dWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVy
ZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90
IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNl
dAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4K
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCBy
ZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAg
ICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5v
blplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8v
IEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFu
ZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklY
TUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBh
IEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBz
dHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSksIHJl
Z1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8vIGlm
ICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBj
b3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8g
SnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGlu
dGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91
YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAg
ICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAg
Ly8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAg
ICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3Vi
bGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5r
KHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRP
Sy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpT
dHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
LSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Cisg
ICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTg2OCwy
MDMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5cGUg
PT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOwor
ICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVx
dWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAgaWYg
KCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVT
eW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQ
Uik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmlu
ZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7Cisg
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7Cisg
ICAgICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExp
c3Qgc2xvd1BhdGg7CisKKyAgICAgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9
OworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICAgICAgY29tcGFyZVN0
cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhz
R1BSLCBsaHNUZW1wLmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgc2Ny
YXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoaXNFcSkgeworICAgICAgICAgICAgICAgICAgICBhZGRK
dW1wKGVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEp1
bXAobm90RXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIGVxdWFsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9
IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAg
ICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAg
ICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBS
UmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFy
ZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSVGVt
cCBsaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzU2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCB0ZW1wMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgbGhzU2NyYXRjaEdQUiA9IGxoc1NjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmhzU2NyYXRjaEdQUiA9IHJoc1NjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgdGVtcDJHUFIgPSB0ZW1wMi5ncHIoKTsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQg
YSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAg
IElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290byBzbG93
UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwotICAgIGlm
IChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwot
ICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVt
ZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBi
cmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYg
d2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlz
IHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3
aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8g
SWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5
IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFs
IDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1
KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0g
ICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVn
VDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1
KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7
Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAg
ICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3Ry
aW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhN
RTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEg
QmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0
cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoZmFsc2UpOworI2Vsc2UKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7
CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIGxlZnRJc0NlbGwgPSBicmFuY2hJZkNlbGwobGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGJvdGhOb3RDZWxscyA9IGJyYW5jaElmTm90Q2VsbChyaHNHUFIpOworICAg
ICAgICAgICAgICAgIG5vdEVxdWFsLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgICAgICAgICAg
bGVmdElzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFwcGVuZChi
cmFuY2hJZk5vdENlbGwocmhzR1BSKSk7CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywgZXF1YWws
IG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1NjcmF0Y2hHUFIsIHJoc1Nj
cmF0Y2hHUFIsIHRlbXBHUFIsIHRlbXAyR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBib3RoTm90Q2VsbHMubGluayh0aGlzKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKKyAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgICAg
ICBhdXRvIGxlZnRPSyA9IGJyYW5jaElmSW50MzIobGhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKGxoc0dQUikpOworICAgICAgICAgICAgbGVmdE9LLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJoc0dQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyaHNHUFIpKTsKKyAgICAg
ICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIGlmIChpc0VxKSB7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAgICAg
ICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7IAorICAgICAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKG5vdEVxdWFsLCB0YXJnZXQpOworICAgICAg
ICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywg
cmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAg
ICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAgICAg
ICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0
RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAg
ICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAg
ICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBD
ZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3RvIG5vdFRha2VuOwor
ICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBp
cyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVh
ZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFu
Y2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlm
IGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtl
IGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBp
dCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGln
aCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFs
IDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEs
IHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdo
Qml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRk
NjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdU
NSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBKdW1wIGFyZUVx
dWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1wKGFy
ZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
Ly8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3Mg
YW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBG
SVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlz
IGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJl
IHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAg
ICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAv
LyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlz
IGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwg
YW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sg
PSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7
Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1Qx
LCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
Ym90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBp
cyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUs
IGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVt
cCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAg
IEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7Cisg
ICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc0
OCw4OSArMjA3NywyMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7Cisg
ICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBh
dXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwg
cmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
LSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAg
ICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmln
SW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNwZWNC
eXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lOVDMy
KQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBh
dXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3JhdGNo
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlzKTsK
KyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2Rl
TnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwor
CisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOworCisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywgaW5w
dXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRlYWwg
d2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBzbyB3
ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCiAg
ICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIzNTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1
cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUu
bV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3BlKSAm
PSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3BlcmFu
ZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BS
ID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkgKzIz
ODcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFibGUt
PmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOwor
ICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC05MjIsOSArMjQxMiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJs
ZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsyNDM2
LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgU3Ry
aW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BS
LCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVi
dWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxvY2so
KS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVn
SG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAg
ICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZhbHVl
OworICAgIGF1dG8gY29tcGFyZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6
IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BS
LCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAg
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICAg
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3As
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEg
PyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVP
cCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0
aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAg
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVx
TnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3RlciBz
dGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwogICAg
IC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBj
b25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lk
IHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVt
VmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAg
IGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZSA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAgIH0K
IAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzI1ODcs
MjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigp
OworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNj
b3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2Nv
cGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEwNDUsMTMgKzI2MTEsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlz
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hl
ZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNE
c3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
c3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/
CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChz
cmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQg
dG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9
IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVjdE90
aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5j
ZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAg
ICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgbG9hZDMy
KGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAgICAg
ICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlz
KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAg
ICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BT
OiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1
cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAgICBz
ZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjY5Niw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxl
ZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0g
Jm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsyNzA2
LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBSZWdp
c3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNo
UmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVl
UmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDI7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
Z3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQuZW1w
bGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY2Fs
bGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGdw
clRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigpOwor
ICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0YVJl
ZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJUZW1w
NC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywgZHN0
KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRh
YmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0
YVRhZykpKTsKQEAgLTEwODYsNjQgKzI3NDgsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1
cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRS
ZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rk
ej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkp
OwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAg
IHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMgd29y
a3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhjZXB0
IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBA
IC0xMTYyLDggKzI3OTMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBz
byB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJs
eUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNB
cmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BTOiBj
bGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgogICAg
ICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5z
dHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tp
cEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9u
czo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMgKzI4
MjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBh
dGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXpl
ZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29weUNh
bGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25P
cHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDExICsy
ODM4LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwog
ICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgIC8v
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyAv
LyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBpbiBM
T0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlv
bik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAgKzI4
NjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigm
Z19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyODc0LDE4IEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5
dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAq
PihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1ZUdQ
UiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdl
eHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
fQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI4OTUsNDIgQEAgdm9p
ZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3Bl
OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsKKyAg
ICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBy
ZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNj
b3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNl
IGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyOTU5LDQ2IEBA
IHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsK
KworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Nj
b3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3BlLnJl
c2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFjZSgq
dGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigp
OworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxz
ZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIo
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9w
Y29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBm
dW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzMwMjksMTkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBi
eXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2
YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTM2MCwxNCArMzA1MCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0
aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQUlJl
ZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNl
KCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmdHUFIgPT0gcmV0dXJuVmFsdWVHUFIpOworICAgIH0K
KworICAgIC8vIE9PUFM6IElubGluZSB0aGUgYWxsb2NhdGlvbiBwYXRoIGhlcmUsIGl0IG1hdHRl
cnMgZm9yIHN1bnNwaWRlci1jcnlwdG8tYWVzCisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNp
emVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVtaXRM
b2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJl
Z1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAgLTEz
ODEsMTUgKzMwODYsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVl
LmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdU
MCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzMxMzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7Cisg
ICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICszMTY0
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6
IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzMxOTEsMTUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBtb2Rl
ID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
KyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5k
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9u
LCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFy
cmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAKICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJl
Z1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5
cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMzIwOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9o
YXNfZW51bWVyYWJsZV9pbmRleGVkCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7
CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlv
bkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlw
ZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNv
ZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwgZG9u
ZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICszMjQxLDgxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9k
aXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07
CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworCisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0g
aW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCi0gICAgLy8g
Q2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAKLSAg
ICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5r
KHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBu
ZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBp
bnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNl
dEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVB
Y2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdo
dCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2Ug
aXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBu
ZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVz
dWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
Q2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKwor
ICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhl
IGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUg
YWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJl
Z1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAg
ICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNl
IGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAg
IG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsK
KyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQz
Ml90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTUwLDIxICszMzI1LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3Vu
ZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BS
UmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAg
IGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1l
cmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1l
cmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
aW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVu
dW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwog
CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRp
bWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWln
aHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcg
fCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVy
aWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NzQs
MjEgKzMzNzksNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYQog
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJl
bG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRH
ZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOworICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+IGlu
ZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlu
ZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1wLmVt
cGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBpbmRl
eEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJh
dG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdUMTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAg
IH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJv
cGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWdu
RXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRl
eChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAgIAog
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzM0MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRp
b24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVU
b1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNwaWxs
Rm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwg
cmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszNDk1LDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkp
OworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdU
MiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9n
dWU+KCk7CkBAIC0xNjcyLDYgKzM1MTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJl
Z1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhp
cyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNjg0LDYgKzM1MjcsMTkzIEBAIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1f
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVy
YW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBvcGVyYW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZGdW5j
dGlvbihpbnB1dEdQUik7CisgICAgICAgIGF1dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RPYmpl
Y3QoaW5wdXRHUFIpOworICAgICAgICAKKyAgICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNHZXRD
YWxsRGF0YSkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAKKyAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBub3RPYmpl
Y3QubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29wX2lz
X2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
ZW1pdElzQ2FsbGFibGVJbXBsPE9wSXNDYWxsYWJsZT4oY3VycmVudEluc3RydWN0aW9uKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX2Z1bmN0aW9uKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wVHlwZW9m
SXNGdW5jdGlvbj4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
dHlwZW9mX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNP
YmplY3Q+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVyYW5k
IH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOwor
ICAgICAgICAKKyAgICAgICAgYXV0byBpc051bGwgPSBicmFuY2hJZkVxdWFsKEpTVmFsdWVSZWdz
IHsgaW5wdXRHUFIgfSwganNOdWxsKCkpOworICAgICAgICBhdXRvIGlzTm9uTnVsbE5vbkNlbGwg
PSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
YXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZGdW5jdGlvbihpbnB1dEdQUik7CisgICAgICAgIGF1
dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpOworICAgICAgICAKKyAg
ICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAKKyAgICAgICAgaXNOdWxs
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisg
ICAgICAgIGlzTm9uTnVsbE5vbkNlbGwubGluayh0aGlzKTsKKyAgICAgICAgaXNGdW5jdGlvbi5s
aW5rKHRoaXMpOworICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF90eXBlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX3ZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgSnVtcExpc3QgZG9uZTsKKyAgICAgICAgSnVtcCBzbG93UGF0aDsKKyAgICAgICAgZW1p
dFR5cGVPZigKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSwgcmVzdWx0R1BS
LAorICAgICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUsIGJvb2wgZmFsbHNUaHJvdWdoKSB7
CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0tPnNtYWxsU3RyaW5ncy50
eXBlU3RyaW5nKHR5cGUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZhbGxz
VGhyb3VnaCkKKyAgICAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKEp1bXAgdGhlU2xvd1BhdGgpIHsKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IHRoZVNsb3dQYXRoOworICAgICAgICAgICAgfSk7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0
R1BSLCBkc3QpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgIH0gZWxzZQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2dldF9lbnVtZXJhYmxlX2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RW51bWVyYWJsZUxlbmd0aD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIGJhc2Ug
fTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhpbnB1dEdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9sZXhpY2Fs
X2Vudmlyb25tZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2Fs
RW52aXJvbm1lbnQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CisgICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4obV9jb2RlQmxvY2st
PmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpKTsKKyAgICBKU1ZhbHVlIGluaXRp
YWxWYWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxWYWx1
ZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHN5bWJvbFRhYmxlLT5zaW5n
bGV0b24oKS5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgZW1pdFNsb3dPcChzbG93X3Bh
dGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZHN0LCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIHNjb3BlVGVtcCB7ICp0aGlzLCBzY29wZSB9OworICAgICAgICBHUFJU
ZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVtcCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAg
ICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgYXV0
byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdFdpdGhLbm93blNpemU8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAorICAgICAgICAg
ICAgKm1fdm0sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSksIGJ1dHRlcmZseSwgc2NyYXRjaDFHUFIsIHNj
cmF0Y2gyR1BSLAorICAgICAgICAgICAgc2xvd1BhdGgsIEpTTGV4aWNhbEVudmlyb25tZW50Ojph
bGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkpOworCisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRoLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gRG9uJ3QgbmVl
ZCBhIG1lbW9yeSBiYXJyaWVycyBzaW5jZSB3ZSBqdXN0IGZhc3QtY3JlYXRlZCB0aGUgYWN0aXZh
dGlvbiwgc28gdGhlCisgICAgICAgIC8vIGFjdGl2YXRpb24gbXVzdCBiZSB5b3VuZy4KKyAgICAg
ICAgc3RvcmVQdHIoc2NvcGVHUFIsIEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHN5bWJvbFRhYmxlKSwg
QWRkcmVzcyhyZXN1bHRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlN5bWJvbFRh
YmxlKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBNdXN0IGluaXRpYWxpemUgYWxsIG1l
bWJlcnMgdG8gdW5kZWZpbmVkIG9yIHRoZSBURFogZW1wdHkgdmFsdWUuCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGluaXRpYWxWYWx1ZSwgQWRkcmVzcyhyZXN1bHRHUFIs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKFNjb3BlT2Zmc2V0KGkpKSkp
OworICAgICAgICAKKyAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBPT1BTCit9CisKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTcwMiwxMSArMzczMiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1
bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3
b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzZXRJ
bnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7
CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJl
Z1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xNzE0LDI5ICszNzUzLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0
aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVy
c1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJl
Z1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJhbXNU
b1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAg
ICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIobnVt
UGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAg
ICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdU
MCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE3NDQsNDkgKzM4MDIsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Fy
Z3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUo
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsg
aW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwogI2Vu
ZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBi
cmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAg
ICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgp
OwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1ZShq
c1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0g
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Cisg
ICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90
b3R5cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0
KHZhbHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgp
LCB2YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xvd0Nh
c2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7CisK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIH0g
ZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQUigp
ID09IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVSZWdz
LnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkp
OworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2Fk
UHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0
Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyNCw2ICsxNDI0LDggQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOworCisgICAgLy9kYXRhTG9nTG4oImNvbXBhcmVMZXNzLCBsaHM6ICIsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgIiByaHM6ICIsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKSk7CiAgICAgCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihnbG9iYWxPYmplY3QsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsK
IH0KQEAgLTE0OTEsNiArMTQ5Myw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25Db21wYXIKICAgICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7
CiAgICAgSlNWYWx1ZSBzcmMyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCisgICAg
Ly9kYXRhTG9nTG4oInN0cmljdGVxLCBsaHM6ICIsIHNyYzEsICIgcmhzOiAiLCBzcmMyKTsKKwog
ICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChnbG9iYWxPYmplY3QsIHNyYzEsIHNyYzIp
OwogfQogCkBAIC0xODc5LDcgKzE4ODMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VSVChvcHRpbWl6ZWRDb2Rl
QmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+aml0
VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc0RG
R09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgaWYgKHZv
aWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBvcHRp
bWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0df
RVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJjIyIsIGJ5dGVjb2Rl
SW5kZXgpKTsKQEAgLTM0MzMsNiArMzQzNyw0MiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxv
Y2sqIGxvbENvZGVCbG9jaykpCit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhh
dCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAor
ICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyhsb2xDb2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBpZiAoZ2V0ZW52KCJwcmludEVhY2hK
ZXR0aXNvbiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaEpldHRpc29uIikpKQorICAgICAg
ICBkYXRhTG9nTG4oImpldHRpc29uLCBmb3JjaW5nIHJlb3B0IG5vdzogIiwgKmxvbENvZGVCbG9j
ayk7CisgICAgbG9sQ29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygp
OworICAgIAorICAgIC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJvZmlsZXMgaGVyZSwgc2luY2Ug
d2UncmUgamV0dGlzb25pbmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0ZSB3LyB0aGluZ3Mgd2UgY2Fy
ZSBhYm91dC4KKworICAgIHNhbml0aXplU3RhY2tGb3JWTShsb2xDb2RlQmxvY2stPnZtKCkpOwor
CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbG9sQ29kZUJsb2NrLCAi
OiBFbnRlcmVkIHJlb3B0aW1pemUgZnJvbSBMT0wiKTsKKworICAgIENvZGVCbG9jayogbGxpbnRD
b2RlQmxvY2sgPSBsb2xDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgLy8gV2UgbXVzdCBi
ZSBjYWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBibG9jay4KKyAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUobGxpbnRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisgICAgQ29k
ZUJsb2NrKiByZXBsYWNlbWVudCA9IGxsaW50Q29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOworICAg
IGlmICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxpbnRDb2RlQmxvY2spIHsKKyAg
ICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbGxpbnRDb2RlQmxvY2ss
ICI6IE5vdCByZW9wdGltaXppbmcgTE9MIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRp
c29uZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHRo
ZSByZXBsYWNlbWVudCBtdXN0IGJlIG9wdGltaXplZCBjb2RlLiBVc2UgdGhpcyBhcyBhbiBvcHBv
cnR1bml0eQorICAgIC8vIHRvIGNoZWNrIG91ciBsb2dpYy4KKyAgICBBU1NFUlQobGxpbnRDb2Rl
QmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOworICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQobG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworCisgICAgLy8gT09Q
UzogZmlndXJlIG91dCBzdHVjayBpbiBhIGxvb3AgbG9naWMKKyAgICBsb2xDb2RlQmxvY2stPmpl
dHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwgQ291bnRSZW9wdGltaXphdGlv
bik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxOSw2ICszMTksOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblZhbHVlCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NU
eXBlUHJvZmlsZXJMb2csIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsKIAorSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cs
IHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjgxLDggKzI3Nyw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAg
ICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01NTgs
NyArNTUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJl
Z2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBw
aW5nIG9uIEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC02MzksOCArNjMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3NSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzc4LDggKzc2Myw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4ICs4MDIsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMTAwLDggKzEwODEsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyNTcsOCArMTIzNiw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsOCBAQAogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01Miw1MSArNTQsMTE3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3Bl
cnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQ
UjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhp
cywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkp
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BS
ID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5
cGVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgp
ID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAg
ICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsK
KyAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAg
bW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJh
c2VHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQ
Uik7CisgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihw
cm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9w
ZXJ0eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNl
TE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxs
Q2hlY2spKQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwg
aW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncyk7CisgICAg
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShw
cm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBT
cGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAg
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0K
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlW
YWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIs
IHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1LDQx
ICsxNzMsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgeworICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
ICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncyk7CisgICAgICAgIHVu
YXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJ
bmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3LDYgKzI1
Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRl
eCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHBy
b3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMxOSw4ICs0
MjEsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8v
IHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2Us
IHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJs
ZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUs
CiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwg
ZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0NCw3IEBAIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2U7CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7
CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAt
MzU1LDEzICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAg
IGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0
U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBM
YWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRC
eVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BT
OiBEbyBiZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwog
CkBAIC0zOTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlv
bkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQYXRoSm1wLCBkb25lLCBkb25l
KSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsK
ICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1
dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoYwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9u
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBh
Y2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBy
ZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3Ig
eyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigp
OworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFz
ZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dl
dHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0
ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUs
IHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
Z2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdw
cigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBp
bnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVy
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJf
dCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29y
IH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQ
UiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nl
c3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vz
c29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ3MiwxOCArNjMzLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsK
KworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qy
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNl
cXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDkyLDI1
ICs2ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4
KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
KHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUy
MCwxOSArNzE3LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJh
c2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQ
UiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBw
cm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BS
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01NDEsMjIxICs3ODksMzY4
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9
IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNG
b3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Qp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJy
YXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVH
UFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFy
cmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7
CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BS
UmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFs
dWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRo
aXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRo
aXNWUmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c0dQUikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhp
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlz
SW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBk
aXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0
dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8v
IHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0
ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhh
dCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2Ug
ZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1Qw
LCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVl
R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1w
bGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9
IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVn
KCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7
CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1
YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3Jh
dGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRp
cmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVj
ZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJh
c2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlk
c1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFz
ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNl
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsK
KyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRl
eCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
IAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgr
K107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykK
K3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAo
IW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7
ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC04NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29w
ZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2Rl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEp
KTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDAp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29u
c3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CkBAIC04NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1w
bGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BS
ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAg
ICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BS
LCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFy
OgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTg5NCw5ICsxMzMwLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29s
dmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05MDksMjkgKzEz
NDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC05NDAsMTUgKzEzNzYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29w
ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBy
ZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2Ny
YXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BS
KSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBv
cGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12
b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUxICsxNDEzLDg0IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1
Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNl
IHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2Jq
ZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhl
IHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9
IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFs
PEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAg
ICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAg
ICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgICAgICAgICAg
c2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIg
PSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVy
ZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0
KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVx
dWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBv
ZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAg
ICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1t
MzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZM
aW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0z
MihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNv
bihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUu
bGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAg
IG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9m
ZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMy
KG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9m
ZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0
R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8g
VERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAq
b3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
LCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2Nh
bENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTAzNiwxMCArMTUwNCwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogCkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQog
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVz
dWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBi
cmVhazsKQEAgLTEwODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFu
ZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
IGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFu
ZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3Jl
UHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMjksMjEgKzE1NzksNDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7
CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1
ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwg
c3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZh
bHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAg
ICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBH
UFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1Qw
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1
dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAg
ICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsK
KyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CisgICAgICAgICAg
ICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNl
SW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE1NCwyOCAr
MTYzMiw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
ICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZv
ckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAgICAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY3Jh
dGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihn
ZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFRE
WiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0
Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVl
LCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAg
aWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKCZt
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVz
ZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1
dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1
ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOwor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50
U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3Qp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkwLDEyICsxNjk3LDIxIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBz
Y3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2Ny
YXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBv
ZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBp
ZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBh
Z2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBM
b2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVt
cCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVt
cCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8v
IER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBh
bHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1LDMyIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2Ny
YXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGlu
ZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2Rl
IHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBAIC0xMjQyLDEw
ICsxNzY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdl
dFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikgewpAQCAtMTI2MSw2MSArMTc4NCwxNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1l
bnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3Vt
ZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3Vt
ZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBH
UFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsK
KyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3Vt
ZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1
ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdU
MDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQ
UiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNl
TE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1h
a2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3Vu
ZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVk
IGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0
byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2Ug
cnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0
IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwK
KwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlz
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93
bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQo
dmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0g
Z3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BS
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
Y3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAg
IH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVy
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAg
fQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVu
dFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQo
KTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2ls
ZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAg
ICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVl
Tm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6Cisg
ICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdl
IGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRl
LiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBk
b2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90
IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0
IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90
Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
ICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkK
KyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7Cisg
ICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAg
ICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzMjcsMTEgKzE5NjcsMjYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+Ojpv
ZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShi
YXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxG
aWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTM0MSwxMCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQo
Y29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFu
ZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBzdG9y
ZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJu
YWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMTQ0Nyw4
ICsyMTE1LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAog
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdU
MCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAg
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVy
LCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4g
c2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGls
bFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisK
ICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0NjYs
NiArMjE1MSw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXMKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3Vz
ZUxPTCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIApAQCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0UHJpdmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBBU1NF
UlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpv
cGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAg
ICBBU1NFUlRfVU5VU0VEKHByb2ZpbGVkREZHQ29kZUJsb2NrLCAhcHJvZmlsZWRERkdDb2RlQmxv
Y2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAi
LCAqY29kZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7CiAgICAgCkBAIC01NSw3ICs1NSw3
IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0KQogewogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxvY2spOwot
ICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTUgKzMxLDIyIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCiAK
KyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpJVFdv
cmtsaXN0OjpQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFdvcmtsaXN0OjpQ
bGFuPiB7CiBwdWJsaWM6Ci0gICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICA6IG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKLSAgICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCisgICAgICAgIDogbV9sbGludENvZGVCbG9jayhjb2RlQmxvY2spCisgICAg
ICAgICwgbV9jb2RlQmxvY2tUb0NvbXBpbGUoY29tcGlsZVR5cGUgPT0gSklUOjpDb21waWxlVHlw
ZTo6TE9MID8gbV9sbGludENvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSA6IG1fbGxpbnRDb2Rl
QmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLCBtX2Nv
ZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
CiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBp
bGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBpbiBjb25jdXJyZW50IGdjCisgICAg
ICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2NrKSB7CisgICAg
ICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnByb3RlY3QobV9jb2RlQmxv
Y2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUlu
VGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgp
CiAgICAgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5saW5rKCk7
CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9jaykKKyAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnVucHJvdGVjdChtX2Nv
ZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAgICAgICAgIHN3aXRjaCAocmVzdWx0
KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgICAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlv
biBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fbGxpbnRDb2Rl
QmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGls
YXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1l
U29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29v
bigpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRp
b24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENvbXBpbGF0aW9u
U3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxvY2spOwotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2Nr
VG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxvY2tUb0Nv
bXBpbGUpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+aml0U29vbigpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxv
Y2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsgfQorICAgIENv
ZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jazsgfQorICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2stPnZtKCk7IH0KICAgICAKICAgICBi
b29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTgwLDE1ICs5MywxNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBzdGF0aWMgdm9pZCBjb21waWxl
Tm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBQ
bGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAg
UGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwogICAgICAgICBwbGFuLmZpbmFs
aXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworICAgIENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAgICBMb2NrIG1fbG9jazsKICAgICBi
b29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07CkBAIC0yMzMsOSArMjQ3LDExIEBA
IHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAgICAgY29kZUJs
b2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRpb25zOjpmb3JjZUxPTCgpID8gSklU
OjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmU7CiAgICAgCiAg
ICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKLSAgICAgICAgUGxhbjo6Y29t
cGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBQ
bGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjQ5LDcgKzI2NSw3
IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAgICAgCiAg
ICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsKICAgICAgICAgICAgIG1fcGxhbm5l
ZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRS
ZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAg
ICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywg
Y29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIG1f
cGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQocGxhbik7CiAg
ICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7CkBAIC0yNzMsMTQgKzI4
OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgLy8g
VGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29uY3VycmVudCBKSVQgdGhyZWFk
IGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8vIHRocmVhZCBjb21waWxlcy4g
VGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRo
cmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29tZWRheS4KLSAgICBQbGFuOjpj
b21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgUGxh
bjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsK
ICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZdIHsKKyAgICAgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFj
ZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIyLDI0IEBAIHZvaWQgSklUV29ya2xp
c3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAgICAgCiAgICAgLy8gTm93IGl0IG1p
Z2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0
ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKLSAgICAvLyBiYXNl
bGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKLSAgICAKLSAgICAvLyBP
SywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworCisg
ICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBsb2xDb2Rl
QmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIEpJVDo6Y29tcGls
ZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxv
bENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGxvbENvZGVCbG9jayk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2
aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdpdGggdGhlCisg
ICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCisgICAgICAgIEpJ
VDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklU
Q29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7
CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYg
bXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6
ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFsaXplKCk7CiAgICAgICAgIAogICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAgICAgbV9wbGFubmVkLnJlbW92
ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29k
ZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVMYXRlcihDb2Rl
QmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRl
eCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAg
ICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdCgpOwogICAgIHN0YXRp
YyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpOwpAQCAtNjYsNiAr
NjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsKICAgICBmcmllbmQgY2xhc3MgVGhy
ZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5k
ZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIHZv
aWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAgIFBsYW5zIG1fcXVldWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3Jv
QXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVf
dCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFy
cmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsg
eyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0Nh
bGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0
ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIp
KTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgIGlmIChpc1dlYkFz
c2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQo
MCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNh
bGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdh
bm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNw
aWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYg
KG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOCArMzYzLDEwIEBAIGlubGlu
ZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KIH0KIAogLy8gUmV0dXJucyB0cnVl
IGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhl
dXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKK2lubGluZSBDb2RlQmxv
Y2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMgdy5yLnQgTE9MLgorCiAgICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJzIGRvbid0IHNl
dCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQgYWxsLgogICAg
IEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBAIC0zNzMsMjkgKzM3NSw0NSBAQCBp
bmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgaWYgKCFjb2RlQmxv
Y2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVh
Y2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNo
b2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9i
YWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAgYXV0byBsb2xDb2RlQmxvY2sgPSBb
Jl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogcmVwbGFjZW1lbnQg
PSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChy
ZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRUeXBlKCkpIHsK
ICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwog
ICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5j
b21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICAg
ICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOwor
ICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZGF0YUxvZygiVW5l
eHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2Nr
IGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBF
bnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBF
bnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
CiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRoIGV4ZWN1dGVD
b3VudGVyID0gIiwKQEAgLTQwNiwxOCArNDI0LDIxIEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5
cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxs
cHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgIGlmICghaml0
Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykpCisgICAgQ29kZUJsb2NrKiBj
b21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxv
Y2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9U
V08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2Rl
QmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOwor
CisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAog
ICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVC
bG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKKyAgICAgICAg
TExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxl
QWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNoZWNrKTsKLSAg
ICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChN
dXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CisgICAgTExJTlRf
UkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChN
dXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiB9CiAjZWxzZSAv
LyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKK3N0YXRpYyBTbG93UGF0aFJl
dHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24o
KTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwpAQCAtNDI3LDMxICs0
NDgsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogTExJTlRf
U0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAg
cmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9s
b2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wo
ZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0g
ICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxl
ZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1l
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJs
ZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwiLCBQ
cm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9m
b3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5
T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRh
YmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9j
b25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganND
YXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+
Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICBy
ZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkp
LT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9u
X2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gZW50cnlPU1Io
Y2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpz
RXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrKQogewogICAgIFVO
VVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0
cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFy
aXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0Zv
ckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVj
ayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKQEAg
LTQ4MCwxOSArNTAxLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgICAg
ICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICAKLSAgICBp
ZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRV
Uk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
KTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAib3NyRW50cnki
LCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKIAotICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNv
bXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29t
cGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogCi0gICAgY29u
c3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpOworICAgIGNv
bnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVCbG9jay0+aml0Q29kZU1hcCgp
OwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNv
ZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUxv
Y2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisKKyAgICBjYWxsRnJhbWUtPnNl
dENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgTExJTlRfUkVUVVJOX1RX
TyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CiAjZWxzZSAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBAIHN0YXRpYyB2b2lkIGRpc2Fi
bGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRp
b25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgT3B0aW9uczo6Zm9y
Y2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IDE7CisKICNpZiAhZGVmaW5l
ZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpID0g
dHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcgQEAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCB1c2VKSVRD
YWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNl
UHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJz
ZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNz
ZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBO
b3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwcml2YXRlIHN0YXRp
YyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAg
U2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQK
ICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgbGxpbnRfaGFuZGxlX3VjYXVn
aHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAgICAgICAgICAg
ICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9w
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAg
ICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
IHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMs
IHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzk4LDcgKzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwTExJbnQoQ29kZUJsb2NrKiBj
b2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6
OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAg
Ly8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdhbnQgdG8gZG8gd2l0aCB0aGUgbm8gTExJbnQg
b3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2
bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25N
dXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGls
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRG
R0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21w
aWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNl
REZHSklUKCkpCisgICAgICAgIHJldHVybiBqc051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYg
KCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0
aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0
cnVlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgVk1UcmFw
czo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoZm91bmRDb2RlQmxvY2stPmppdFR5cGUo
KSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3VuZENvZGVCbG9jay0+aml0VHlw
ZSgpKSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKCptX2xvY2spOwogICAg
ICAgICBpZiAoIWxvY2tlcikKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBTaWduYWxT
ZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgVk1UcmFwczo6
aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
ICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZU
TChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29u
KFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAgICAgIGNhbGxGcmFtZSA9IGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQpJbmRleDogVG9vbHMvU2Ny
aXB0cy9jb21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb21wYXJl
LXJlc3VsdHMJKHJldmlzaW9uIDI3MTM3NikKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1
bHRzCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOCArMTgyLDggQEAgZGVmIGNvbXB1dGVNdWx0aXBs
ZUh5cG90aGVzZXNTaWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFrZG93bnMoYSwgYik6CiAgICAg
bmFtZUxlbmd0aCA9IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJr
ZXJdKQotICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKKyAgICBhTGVuZ3RoID0gbGVu
KGFbdW5pdE1hcmtlcl0pICsgMworICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkgKyAz
CiAgICAgcmF0aW9MZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAgIHBWYWx1ZUhlYWRlciA9ICJw
VmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZSkiCkBAIC0yMTIs
NyArMjEyLDcgQEAgZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIHBMZW5ndGggKz0gMgog
CiAgICAgc3RyaW5ncyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0
aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57
cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3Qi
LCBhU2NvcmU9YVt1bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9
bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJi
IC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExl
bmd0aD1wTGVuZ3RoKSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtrZXk6XntuYW1lTGVuZ3RofX18
e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9fSB8e2NvbXBhcmU6XntyYXRp
b0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0KGtleT0ic3VidGVzdCIsIGFT
Y29yZT0iYTogIiArIGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjogIiArIGJbdW5pdE1hcmtlcl0s
IG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGgg
LCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1
ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5IGluIGEua2V5cygpOgogICAg
ICAgICBpZiBrZXkgPT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAgIGNvbnRpbnVlCkluZGV4OiBM
YXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQsNyArNCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1bm5lciA9IHsK
ICAgICBuZXZlcklubGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAotICAgIG51bWJl
ck9mREZHQ29tcGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVyT2ZERkdDb21w
aWxlczogKGZ1bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICByZXR1cm4gKGYp
ID0+IHsKKyAgICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8gRW11bGF0ZSBy
dW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJpbmcgYmVmb3Jl
IHJldHVybmluZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAg
bWFwID0gbmV3IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAuZ2V0KGYpIHx8
IDA7CisgICAgICAgICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNldChmLCBjb3Vu
dCk7CisgICAgICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAgICAgICB9Owor
ICAgIH0pKCksCiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3Q29kZUJsb2Nr
CiB9OwogCkBAIC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUodGhlRnVuY3Rp
b24sIF9hLCBfYgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOwogICAKICAg
dHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpCisgICAgd2hp
bGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1ZXMucHVzaChl
dmFsKF9hKSk7CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAgfSBjYXRjaCAo
ZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVuY3Rpb24gZGZn
SW5jcmVtZW50KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAgICAgICBy
ZXR1cm4gYXJndW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSkK
KyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6IDA7CiAgICAg
CiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417662</attachid>
            <date>2021-01-14 15:49:19 -0800</date>
            <delta_ts>2021-01-15 18:01:32 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>586170</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAorLy90ZXN0TGlzdCA9IFsnY3J5cHRvLWFlcy1TUCddOwor
CiBpZiAodHlwZW9mIHRlc3RJdGVyYXRpb25Db3VudCA9PT0gInVuZGVmaW5lZCIpCiAgICAgdGVz
dEl0ZXJhdGlvbkNvdW50ID0gdW5kZWZpbmVkOwogCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL2JlbmNobWFyay1ydW5uZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw4IEBACiAv
LyBGSVhNRTogVXNlIHRoZSByZWFsIHByb21pc2UgaWYgYXZhaWxhYmxlLgogLy8gRklYTUU6IE1h
a2Ugc3VyZSB0aGlzIGludGVyZmFjZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHJlYWwgUHJvbWlz
ZS4KKworX19kaXNhYmxlU2FtcGxpbmdQcm9maWxlcigpOworCiBmdW5jdGlvbiBTaW1wbGVQcm9t
aXNlKCkgewogICAgIHRoaXMuX2NoYWluZWRQcm9taXNlID0gbnVsbDsKICAgICB0aGlzLl9jYWxs
YmFjayA9IG51bGw7CkBAIC0xMjgsMTcgKzEzMSwyMSBAQCBCZW5jaG1hcmtSdW5uZXIucHJvdG90
eXBlLl9ydW5UZXN0ID0gZnVuCiAKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcu
JyArIHRlc3QubmFtZSArICctc3RhcnQnKTsKICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7Cisg
ICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgdGVzdC5ydW4ocHJlcGFyZVJldHVy
blZhbHVlLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpOworICAgIF9fZGlzYWJsZVNh
bXBsaW5nUHJvZmlsZXIoKTsKICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgIHNlbGYuX3dy
aXRlTWFyayhzdWl0ZS5uYW1lICsgJy4nICsgdGVzdC5uYW1lICsgJy1zeW5jLWVuZCcpOwogCiAg
ICAgdmFyIHN5bmNUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTsKIAogICAgIHZhciBzdGFydFRp
bWUgPSBub3coKTsKKyAgICBfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgLy8gU29tZSBicm93c2VycyBkb24ndCBpbW1lZGlh
dGVseSB1cGRhdGUgdGhlIGxheW91dCBmb3IgcGFpbnQuCiAgICAgICAgIC8vIEZvcmNlIHRoZSBs
YXlvdXQgaGVyZSB0byBlbnN1cmUgd2UncmUgbWVhc3VyaW5nIHRoZSBsYXlvdXQgdGltZS4KICAg
ICAgICAgdmFyIGhlaWdodCA9IHNlbGYuX2ZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsKKyAgICAgICAgX19kaXNhYmxlU2FtcGxpbmdQcm9m
aWxlcigpOwogICAgICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgICAgICBzZWxmLl9mcmFt
ZS5jb250ZW50V2luZG93Ll91bnVzZWRIZWlnaHRWYWx1ZSA9IGhlaWdodDsgLy8gUHJldmVudCBk
ZWFkIGNvZGUgZWxpbWluYXRpb24uCiAgICAgICAgIHNlbGYuX3dyaXRlTWFyayhzdWl0ZS5uYW1l
ICsgJy4nICsgdGVzdC5uYW1lICsgJy1hc3luYy1lbmQnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW8KIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbkFzRG91YmxlTnVtYmVyKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkKTsKIAogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MpOwogCkBAIC02NjIsNiArNjYz
LDggQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVtYmVy
IiwgZnVuY3Rpb25Bc0RvdWJsZU51bWJlciwgMSk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJpc0RGR0VuYWJsZWQiLCBmdW5jdGlvbklzREZHRW5hYmxlZCwgMCk7CisKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJkcm9wQWxsTG9ja3MiLCBmdW5jdGlvbkRyb3BBbGxMb2NrcywgMSk7CiAK
ICAgICAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZv
clRlc3RpbmcoKSkgewpAQCAtMjY1Myw2ICsyNjU2LDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkFzRG91YmwKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91Ymxl
TnVtYmVyKG51bSkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RG
R0VuYWJsZWQsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKE9wdGlvbnM6OnVzZURGR0pJVCgpKSk7Cit9CisKIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2NrcywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQogewogICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBib29sIHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoY29kZUJsb2Nr
ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0
aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2Rl
Ojppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlz
YXNzZW1ibHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21T
aWduYXR1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFu
ZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpA
QCAtMjY5LDcgKzI3MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpk
dW0KIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVt
cEhlYWRlcihibG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBA
IHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQu
cHJpbnQoImJiIyIsIGJsb2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0
aW9uc0F0SGVhZCkgeworICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFk
OiBbIik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
QXRIZWFkLT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YSgiLCAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9u
cy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKG91dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAg
ICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7
CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQo
aSArIGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNv
ZGUoY3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNs
YXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01h
cCYgPSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0
ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsK
KyAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFt
JiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFw
KCkpOwogCiAgICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFu
dHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R3JhcGguaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1
YmxpYzoKIAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9p
ZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+
IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUo
KSkKKyAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGUsIHRydWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVy
ID0gV1RGOjpkYXRhRmlsZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1w
ZXI8Q29kZUJsb2NrVHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRo
aXMsIHNwZWN1bGF0aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8vIE5vIHVzZXMuCiAgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0gICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICBj
YXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2ptcDoKICAgICBjYXNlIG9wX25ld19vYmpl
Y3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgICAgICByZXR1cm47CiAKKyAgICBV
U0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQb2ludGVyKQogICAgIFVTRVMoT3BUb1RoaXMs
IHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHosIHRhcmdldFZpcnR1YWxSZWdpc3RlcikKICAg
ICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwgc3JjRHN0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5
cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0
LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1
Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQorICAgIGlmICgodGhpcy0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQogICAgICAgICBvdXQucHJpbnQo
IiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwogICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+
bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKE5ldmVySW5saW5lKSIpOwpAQCAt
MjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0K
ICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFw
KTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRoaXMtPmluc3RydWN0aW9ucygpKTsK
LSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywg
aW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01hcCk7CisgICAgQ29kZUJsb2NrQnl0
ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBn
cmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7CiB9CiAKIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06
OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNNYXApCkBAIC0yOTUsNiArMjk1LDcg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9vd25l
ckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0
KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50
ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKQorICAgICwgbV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpCiAgICAgLCBtX2NvbnN0YW50
UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMpCiAgICAgLCBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCkBA
IC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUq
IAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKIAogICAgIEFTU0VSVChz
b3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFt
ZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRlcnMgPSBvdGhlci5udW1QYXJhbWV0ZXJzKCk7
CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC04NTAs
NyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAvLyB0byB0aGUgQ29kZUJs
b2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIENvZGVC
bG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiB0aGUg
Q29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAg
ICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7CiAjZW5kaWYK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJlbW92ZSh0aGlzKTsKQEAgLTEwMzcsNyArMTAz
OSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJ
bnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBq
ZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNv
IGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4g
YXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5
KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNl
KFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1
OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAog
ICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkxP
TEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShK
SVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29u
ZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNo
YXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2
OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAogICAgICAgICBkZmdDb21t
b24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEy
MjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8g
SW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxp
bmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQg
ZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xk
IGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgot
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBA
IC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBl
KCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzog
U2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJ
Q3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAg
ICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAgIH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTUyOCw3ICsxNTM2LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAg
ICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgZGZn
Q29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYg
KzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3Vu
dGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNN
YXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbElu
Zm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmlyc3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52
YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBAIC0xODEwLDcgKzE4MTksNyBA
QCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAg
ICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwog
ICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiAgICAgICAgIHZpc2l0T1NSRXhpdFRhcmdldHMobG9ja2VyLCB2aXNpdG9yKTsKQEAgLTE4
MjMsNyArMTgzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW4K
ICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBp
ZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29k
ZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgREZH
OjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMTg2
Nyw3ICsxODc2LDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQo
KTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKHNlbGZKSVRUeXBlKSkgeworICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50
Q29kZUJsb2NrKHNlbGZKSVRUeXBlKSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50
IGNhbiBiZSBudWxsIGlmIHdlJ3ZlIGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1
dGFibGUKICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAo
c2VlIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAg
ICAvLyB0aGUgY3VycmVudCBjb2RlQmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFu
ZCBhcyBhbiBvcHRpbWl6aW5nIEpJVApAQCAtMTkzMSw3ICsxOTQwLDcgQEAgSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckluZGV4KAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29k
ZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBv
cmlnaW5hbENhbGxTaXRlKQogewogI2lmIEVOQUJMRShERkdfSklUKQotICAgIFJFTEVBU0VfQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJU
KGNhbkdldENvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSkpOwogICAgIEFTU0VSVCghIWhhbmRs
ZXJGb3JJbmRleChvcmlnaW5hbENhbGxTaXRlLmJpdHMoKSkpOwogICAgIENvZGVPcmlnaW4gb3Jp
Z2luYWxPcmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpOwpAQCAtMjIzMSw1MSAr
MjI0MCw1NSBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwogICAgIAogICAgIC8vIFdlIHdhbnQg
dG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6Ci0gICAgLy8gMSkgTWFrZSBzdXJlIHRoYXQg
aWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSBy
ZXR1cm4gdG8gaXQKKyAgICAvLyAxKSBJZiB3ZSdyZSBERkcvRlRMLCBtYWtlIHN1cmUgdGhhdCBp
ZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJl
dHVybiB0byBpdAogICAgIC8vICAgIHdlIHNob3VsZCBPU1IgZXhpdCBhdCB0aGUgdG9wIG9mIHRo
ZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRoZSByZXR1cm4uCiAgICAgLy8gMikg
TWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIgZXhlY3V0YWJsZSwgdGhlbiB3ZSBz
aG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4KIAogI2lmIEVOQUJMRShERkdfSklUKQotICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29k
ZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIGppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKLSAgICAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVy
OjpKZXR0aXNvbkR1ZVRvT2xkQWdlKSB7Ci0gICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiog
Y29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKLSAgICAgICAgICAgIGNvbXBpbGF0
aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5n
IGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCi0gICAgICAgIGlmICghaml0
Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2
ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0
aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYm
ICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkpOwotICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRB
Z2UpIHsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBq
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShjb21waWxhdGlvbikpCisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPnNl
dEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGlu
ZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgorICAgICAgICAgICAgaWYg
KCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRo
cmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRhdGFM
b2coIiAgICBEaWQgaW52YWxpZGF0ZSAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAgICAgCiAgICAgLy8gQ291bnQgdGhlIHJlb3B0aW1pemF0aW9uIGlmIHRoYXQn
cyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KICAgICBpZiAobW9kZSA9PSBDb3VudFJlb3B0aW1pemF0
aW9uKSB7CiAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBjYWxsIGFsdGVybmF0
aXZlKCkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjM2NzcKICAgICAgICAgYmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5jb3VudFJlb3B0aW1pemF0
aW9uKCk7CisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGlmIChERkc6OnNob3VsZER1bXBE
aXNhc3NlbWJseSgpKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIERpZCBjb3VudCByZW9wdGlt
aXphdGlvbiBmb3IgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIGlm
ICh0aGlzICE9IHJlcGxhY2VtZW50KCkpIHsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdl
IHdlcmUgbmV2ZXIgdGhlIGVudHJ5cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5
IGNvZGUKICAgICAgICAgLy8gYmxvY2tzLgorICAgICAgICAvLyBPciwgd2UncmUgYW4gTE9MIENv
ZGVCbG9jayBhbmQgd2VyZSBhbHJlYWR5IGpldHRpc29uZWQuCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoYWx0ZXJuYXRpdmUoKSkKICAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0
aW1pemVBZnRlcldhcm1VcCgpOwogCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlz
b25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBz
KQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkgJiYgcmVhc29uICE9IFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlz
b25EdWVUb1ZNVHJhcHMpCiAgICAgICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgIC8vIEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5n
IEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwgY29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQog
ICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgYSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1i
ZXJlZCBzZXQuCkBAIC0yMzkwLDcgKzI0MDMsNyBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5j
b21pbmdDYWxsKENhbGxGCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAg
ICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
ICAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICIgICAgQ2xlYXJpbmcgU0FCSSBiY2F1
c2UgY2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXplZC4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MjQ4MywxMiArMjQ5NiwxNCBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGls
ZXMoCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwog
ICAgIGlmIChPcHRpb25zOjp0ZXN0VGhlRlRMKCkpIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VERkdKSVQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAobV9kaWRGYWls
RlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gMTAwMDAwMDsKICAgICAgICAgcmV0
dXJuIChtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyOwogICAgIH0KICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gdGhpcy0+
cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09w
dGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcjsKKyAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2Rl
Ojppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXI7CiB9CiAKIGludDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRo
cmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdApAQCAtMjcwOSw3ICsyNzI0LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdAogdm9pZCBDb2RlQmxvY2s6OnNldE9wdGlt
aXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQpCiB7CiAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgpOwotICAgIGlmICh0eXBl
ICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgaWYgKHR5cGUgIT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQgJiYgdHlwZSAhPSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAgZGF0YUxvZ0xu
KCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNvZGUgYnV0IGhhdmUgIiwgdHlw
ZSk7CiAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihqaXRD
b2RlKCkuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBlKSk7CiAgICAgfQpAQCAtMjcy
Nyw3ICsyNzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZAog
ICAgIAogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3Nm
dWw6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5
cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgpAQCAtMjc1Niw3ICsyNzcxLDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZAogICAgIAogdWludDMyX3QgQ29k
ZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNo
b2xkKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7
CisgICAgLy9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOyAvLyBP
T1BTOiBXZSBjYWxsIHRoaXMgZnJvbSB0aGUgTE9MIGNvbXBpbGVyIHRocmVhZCBiZWZvcmUgaW5z
dGFsbC4KKwogICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3YXkgc28gd2UgZG9uJ3Qgc2F0
dXJhdGUuIFRoaXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQogICAgIC8vIGVub3VnaCB0aGF0IHRo
aXMgbG9vcCB3b24ndCBodXJ0IHVzLgogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGRlc2lyZWRUaHJl
c2hvbGQ7CkBAIC0yODM2LDcgKzI4NTIsNyBAQCBERkc6OkNvZGVPcmlnaW5Qb29sJiBDb2RlQmxv
Y2s6OmNvZGVPcmlnCiAKIHNpemVfdCBDb2RlQmxvY2s6Om51bWJlck9mREZHSWRlbnRpZmllcnMo
KSBjb25zdAogewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkp
CisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIAogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlm
aWVycy5zaXplKCk7CkBAIC0yODQ3LDcgKzI4NjMsNyBAQCBjb25zdCBJZGVudGlmaWVyJiBDb2Rl
QmxvY2s6OmlkZW50aWZpZXIoCiAgICAgc2l6ZV90IHVubGlua2VkSWRlbnRpZmllcnMgPSBtX3Vu
bGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVudGlmaWVycykKICAgICAgICAgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkpOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVu
dGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRpZmllcnNdOwogfQogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpAQCAtMjk0OCw3ICsyOTY0LDggQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9w
dGltaXplTm93KCkKICNpZiBFTkFCTEUoREZHX0pJVCkKIHZvaWQgQ29kZUJsb2NrOjp0YWxseUZy
ZXF1ZW50RXhpdFNpdGVzKCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpOworICAgIC8vIE9PUFMKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
ID0gYWx0ZXJuYXRpdmUoKTsKQEAgLTMwNTAsNiArMzA2Nyw3IEBAIHVuc2lnbmVkIENvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAKQEAgLTMyMjYsMTQgKzMyNDQsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9p
bnQodW5zaWduZWQgbgogewogICAgIG1fbnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7
CiAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMpOwotICAgIGlmIChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb0RlYnVnZ2VyQnJl
YWtwb2ludCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2Nr
OjpTdGVwcGluZ01vZGUgbW9kZSkKIHsKICAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7Ci0gICAg
aWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdK
SVQoaml0VHlwZSgpKSkKKyAgICBpZiAobW9kZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6
OkpldHRpc29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5nKTsKIH0KIApAQCAtMzQyMSw5ICszNDM5LDkg
QEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRlYwogewogICAgIE9wdGlv
bmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAgICAgSklUVHlwZSBqaXRUeXBlID0g
dGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09IEpJVFR5cGU6OkludGVycHJldGVy
VGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICBpZiAoSklUQ29k
ZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGppdFR5cGUpKQogICAgICAgICBieXRlY29k
ZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29kZUluZGV4KCk7Ci0gICAgZWxzZSBpZiAoaml0
VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQpIHsK
KyAgICBlbHNlIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CiAgICAgICAgIENvZGVPcmlnaW4gb3Jp
Z2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKQEAgLTM0NjYsNyArMzQ4NCw3IEBAIGJv
b2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3AKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAg
ICAgLy8gY2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFu
ZGxlciBzYWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3Vu
dCBvZiBtX2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5oYXNJbnN0
YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMoKTsKICNlbHNlCkBAIC0zNDgwLDcgKzM0OTgsNyBAQCBi
b29sIENvZGVCbG9jazo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzCiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQog
ICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhh
bmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291
bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBjb21tb25EYXRhID0gKm1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CiAgICAgY29tbW9uRGF0YS5pbnN0YWxsVk1UcmFwQnJlYWtwb2ludHModGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzOCw3ICs0MzgsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhh
c0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBqaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIEpJVFR5cGUgdHlwZSA9IGpp
dFR5cGUoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwg
dHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CiAgICAgfQogICAgIAogI2lmIEVOQUJMRShKSVQpCkBA
IC01MTEsNiArNTEyLDcgQEAgcHVibGljOgogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmls
ZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5
dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JF
YWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5j
dG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpAQCAtNTM5LDcgKzU0MSw3IEBAIHB1
YmxpYzoKICAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5zIGltcGxpZXMgdGhhdCB0aGVyZSBoYXMg
YmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wgaGFzQ29kZU9yaWdpbnMoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpOworICAgICAg
ICByZXR1cm4gSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpOwogICAgIH0KICAgICAgICAg
CiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENhbGxTaXRlSW5kZXggaW5kZXgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBAIHZvaWQgQ29k
ZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRh
dGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAorfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hDYXRjaFBy
b2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYgZnVuYykKK3sK
KyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CisgICAgICAgIGZv
ciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpCisgICAg
ICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGlu
Z0pJVFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGl0aW5nSklUVHlwZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDYgKzM4LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEV4aQogICAg
IGNhc2UgRXhpdEZyb21Bbnl0aGluZzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tQW55dGhpbmci
KTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdEZyb21MT0w6CisgICAgICAgIG91dC5w
cmludCgiRnJvbUxPTCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGl0RnJvbURGRzoK
ICAgICAgICAgb3V0LnByaW50KCJGcm9tREZHIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJ
VFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogICAgIEV4aXRGcm9tQW55dGhpbmcs
CisgICAgRXhpdEZyb21MT0wsCiAgICAgRXhpdEZyb21ERkcsCiAgICAgRXhpdEZyb21GVEwKIH07
CkBAIC0zOCw2ICszOSw4IEBAIGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKIGlubGlu
ZSBFeGl0aW5nSklUVHlwZSBleGl0aW5nSklUVHlwZUZvcihKSVRUeXBlIHR5cGUpCiB7CiAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVy
biBFeGl0RnJvbUxPTDsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJu
IEV4aXRGcm9tREZHOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBA
QCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YoCiAKIGVudW0gT3BlcmFu
ZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlID0gZmFsc2U+CiBjbGFzcyBPcGVyYW5k
cyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6
OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0NCwyMyBAQCBwdWJsaWM6CiAKICAgICBPcGVy
YW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1
bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQorICAgIGV4cGxpY2l0IE9w
ZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1U
bXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhu
dW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAs
IG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXpl
ID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgc2l6ZV90IHNp
emUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsg
ISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKICAgICAgICAgaWYg
KCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKICAgICAgICAgICAg
IG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXpl
X3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3Qg
VCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVu
dHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRz
LCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJn
dW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251
bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBtX3ZhbHVlcy5ncm93KG51
bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOworICAgICAgICBtX3ZhbHVlcy5ncm93
KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRy
YWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0K
ICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMo
T3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRp
YWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFy
Z3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkp
CisgICAgICAgICwgbV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAg
ICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1
ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcyLDMzICsxNzYsNTEgQEAgcHVibGljOgogCiAg
ICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVu
dHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxv
Y2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAg
IHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRz
OyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNp
emUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZD
b25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0KIAorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9
IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+Pgor
ICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAg
ICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7
CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2Nh
bHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudElu
ZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVy
T2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNp
emVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50
cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOwor
ICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBp
ZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1
ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgUmVmVHlw
ZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlk
eCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKworICAgIHRlbXBsYXRlIDxib29s
IGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxs
ZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9Cisg
ICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90
PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29uc3RSZWZUeXBlIGNhbGxlZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAgIAogICAgIFJlZlR5cGUgbG9jYWwoc2l6ZV90
IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVm
VHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4
KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1f
dmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgY29uc3RhbnQo
c2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsg
fQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVf
dCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlm
IChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkg
KyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBu
dW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6
ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CiAgICAg
ICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVz
Lmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVl
ICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKIAogICAgICAgICBpZiAo
ZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlh
bGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG9w
ZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZUlu
ZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChv
cGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXND
b25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50SW5kZXgob3BlcmFuZC50b0Nv
bnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2Nh
bCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCArMzQ4LDE1IEBAIHB1YmxpYzoKICAgICAKICAg
ICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWUo
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRv
QXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgp
KQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkp
OwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIApAQCAt
MzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAob3BlcmFuZC5p
c0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVy
YW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9j
YWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25zdApAQCAt
MzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1i
ZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgIGlmIChpbmRleCA8
IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7
Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSAr
IG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKQorICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGluZGV4IC0gbnVtYmVyT2ZB
cmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHRy
YWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2FsbGVlSW5kZXgoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkp
KTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKQEAgLTM5MywxMCArNDM3LDExIEBA
IHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBw
cml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUg
YXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3Qg
YXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFy
ZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIHRoZSBuZXh0IG1f
bnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KICAgICBT
dG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OwogICAg
IHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtQ29uc3RhbnRz
IHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgaW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQ
cmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyKCkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVl
Pjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBh
cmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpA
QCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAi
LCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOwogICAg
IH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChjYWxsZWUoKSwgY29udGV4dCkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQg
T3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJ
bmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTc4LDYg
KzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4
LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2Fs
bGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGNhbGxlZSgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4
Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUgPSBqaXQtPmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmxp
dmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKGppdC0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4KTsKICAgICAgICAgbV9uZWVkc1RvUmVz
dG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uID0gbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhj
ZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5udW1iZXJPZlNldFJlZ2lzdGVycygpID4gMDsKICAgICAg
ICAgaWYgKG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbikKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygp
LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzREZH
T3JGVEwoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAgbV9saXZlUmVn
aXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4
Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVycygpKTsKICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CkBAIC03MTAsNyArNzEwLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhp
Y0FjY2VzcwogICAgICAgICAvLyBXZSBzZXQgdGhlc2UgdG8gaW5kaWNhdGUgdG8gdGhlIHN0dWIg
dG8gcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBDb2RlQmxvY2sncwogICAgICAgICAvLyBleGNlcHRp
b24gaGFuZGxlciB0YWJsZSB3aGVuIGl0IGlzIGRlYWxsb2NhdGVkLgogICAgICAgICBjb2RlQmxv
Y2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzID0gY29kZUJsb2NrOwotICAgICAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxl
cnMtPmppdFR5cGUoKSkpOworICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChjb2Rl
QmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzLT5qaXRUeXBlKCkpKTsKICAgICAgICAgY2Fs
bFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4
Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNw
ZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwog
fQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2Rl
RG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMy
T25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1
Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBk
YXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0
aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2Rl
LgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVibGlj
OgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50
KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
aW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
OyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNM
b2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQor
ICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJn
dW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFpc0NvbnN0YW50KCk7IH0KICAgICBib29sIGlz
SGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1
YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXND
b25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xv
Y2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBAIC0x
MTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGlu
dCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJh
bmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0YXRpYyBpbnQgYXJndW1lbnRUb09wZXJhbmQo
aW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNvbnN0YW50VG9PcGVyYW5kKGludCBjb25zdGFu
dEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50SW5k
ZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdpc3RlcjsKIH07CkBAIC0xMzMsNCArMTM1LDkg
QEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGbwogICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVu
dCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4KQoreworICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFudFRvT3BlcmFuZChjb25zdGFudEluZGV4KSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1
NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXQKICAgICAsIHZh
cmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZh
bHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVl
c0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKLSAgICAsIGludGVyc2Vj
dGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywg
QWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCAwLCBBYnN0cmFjdFZhbHVl
OjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCB2b2lkIE9TUkVudHJ5RGF0YTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FOCiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JG
VEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIEFTU0VSVCgh
Y29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDYgKzM5NCw3IEBAIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICBpZiAoZXhpdElubGluZUNhbGxG
cmFtZSkKICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihl
eGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKKyAgICAvLyBPT1BTOiBNYWtlIHRoaXMg
ZG8gdGhlIHJpZ2h0IHRoaW5nIGJhc2VkIG9uIExPTCBvciBub3QuCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3Jp
Z2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9yRXhpdCA9PSBjb2RlQmxvY2tGb3JFeGl0LT5i
YXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNv
ZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDYgQEAgdW5zaWduZWQgVmFyaWFibGVF
dmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBm
YWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGlu
ZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKICAgICB1bnNpZ25lZCBu
dW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06
OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFibGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50
b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBzID0gY29kZUJsb2NrLT5udW1UbXBzKCkgKyBp
bmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAgICB9IGVsc2UgeworICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsgLy8g
T09QUzogYnl0ZWNvZGVWZXJzaW9uCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKICAgICAgICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5udW1UbXBzKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTMsNyArMzUzLDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMu
CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCksIDAsIDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDI2ICs1MiwxNyBAQCB2b2lkIENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJh
bWVGCiBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25z
dAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgc3dpdGNoIChjb2RlQmxvY2soKS0+
aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgotICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Ug
SklUVHlwZTo6Tm9uZToKLSAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpJVENv
ZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2soKS0+aml0VHlwZSgpKTsK
IH0KIAogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygp
LT5qaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5LDggKzcwLDYgQEAg
Ym9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaQogICAgIGNhc2UgSklUVHlw
ZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsMTAgKzQ1NiwxMCBAQCBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBIYW5kbGVySW5mbyogZmluZEV4CiAKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwogICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRs
ZXJJbmRleDsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0
VHlwZSgpKSkKLSAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxs
U2l0ZUluZGV4KCkuYml0cygpOwotICAgIGVsc2UKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVC
aXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgZXhjZXB0
aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCk7Cisg
ICAgZWxzZQorICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxT
aXRlSW5kZXgoKS5iaXRzKCk7CiAKICAgICByZXR1cm4gY29kZUJsb2NrLT5oYW5kbGVyRm9ySW5k
ZXgoZXhjZXB0aW9uSGFuZGxlckluZGV4LCByZXF1aXJlZEhhbmRsZXIpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTggQEAK
ICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgorI2luY2x1ZGUgIkNv
ZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2lu
Y2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzU1LDggQEAKICNpbmNsdWRl
IDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4K
IAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsK
IG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjgsODkxIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxl
VGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExC
M0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFBy
ZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0
VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAg
ICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAv
L3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBz
aW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAg
ICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJn
dW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2
YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERz
dFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFy
YXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9y
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BC
aXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0
LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9m
aWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
aXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1l
dGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92
PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNl
IG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9u
YW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dl
dF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3By
b3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihi
eXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihi
eXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
QW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNE
b3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlm
IChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdP
YmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5n
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1h
eWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNh
c2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7
CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRl
Y29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9m
aWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91
YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVBy
b2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEo
cmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8g
YmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVO
dW1iZXI7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVj
dCkpIHx8ICEhKHJpZ2h0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkpCisgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IFNwZWNCaWdJbnQ7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCByZXN1bHQpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9zdWIpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bf
bXVsKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAg
ICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdikKKyAgICAgICAg
ICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBl
Rm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBl
Rm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgLy8gTWF5YmUgd2Ug
Y2FuIGRvIGJldHRlciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9uICUgMAorICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSB8IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51
bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgICAgICAvLyBNYXliZSBi
dWlsZCBpbiBzb21lIGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRiYWNrIGZvciBzcGVjdWxhdGluZyBp
bnQzMiByZXN1bHQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25l
ZD4oKSwgU3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfbmVnYXRlOiB7Cisg
ICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSkgeworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBlRm9yKHNyYyk7CisgICAgICAgICAgICBpZiAoIWlucHV0
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpID8gU3BlY0FueUludEFzRG91YmxlIDogU3BlY0ludDMy
T25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYg
KGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAg
ICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlv
bihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRU
eXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisK
KyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAg
ICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxl
KGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0
ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAm
JiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6
CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8g
Ynl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9s
aHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOwor
ICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0
aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShp
bnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3Io
Ynl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1
dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNw
ZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZm
ZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAg
ICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3Vs
ZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlm
IHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAg
ICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0
aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAg
ICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
JiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9m
aWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAg
ICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0
dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5j
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5j
X2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0
b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0
b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50
X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNj
b3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293
bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9w
ZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdl
dFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8
IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JHZW5lcmljUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNs
X2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGly
ZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVk
X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVT
Y29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRl
cmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVu
dHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3Ro
ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2Vx
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191
bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNV
bmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
c191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVt
YmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmln
X2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVj
dG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
b3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0
eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1
bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmls
ZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Q
cm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24p
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3Rh
bmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0lu
c3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5z
dGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2Vv
Zl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2Vv
ZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5
cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNw
ZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRo
X3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5
cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9p
ZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1
dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3Nh
bXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9w
X2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNo
YWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9y
OgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6
CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJf
YnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9k
ZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNl
IG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNh
c2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5k
ZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNh
c2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAg
ICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2ps
ZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6Cisg
ICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2pu
Z3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93Ogor
ICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBv
cF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0
Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9w
dXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNl
IG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1
dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBv
cF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFs
OgorICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95
aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2Fz
ZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJv
bG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rp
b25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9j
YWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9h
cml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNh
c2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50
X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2Fs
bF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5l
OgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAg
IGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJf
cmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3Ry
dWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0
X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgor
ICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1f
cHJvbG9ndWU6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0X25v
X3RsczoKKyAgICBjYXNlIG5vcm1hbF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfZ2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6CisgICAgY2FzZSBsbGludF9oYW5kbGVfdW5j
YXVnaHRfZXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9pdGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29u
c3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfY2FsbF9ldmFsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2Nh
bGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRl
cmF0b3Jfb3BlbjoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfY29uc3RydWN0X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFy
YXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfdmFyYXJnc19z
bG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHNfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xv
dzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9ldmFsX3Nsb3c6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHRfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfaXRlcmF0b3Jfb3Blbl9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3VudGFn
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2Fy
aXR5X2NoZWNrX3RhZzoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGw6CisgICAg
Y2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX25vX3RsczoKKyAgICBjYXNlIHdhc21fdHJh
bXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9u
KCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29k
ZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNB
dEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25z
QXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3Bl
Y05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29k
ZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmls
ZShbJl0gKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmls
ZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVy
LmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
KyAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUKG1fZ3JhcGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLT5hdCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisg
ICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBw
cm9maWxlID0gbV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAg
ICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVk
aWN0aW9uOworCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJh
cmciLCBhcmcsICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFG
aWxlKCksIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhl
YWRbMF0uY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAg
Ym9vbCBjb21wdXRlVXNlQ291bnRzID0gdHJ1ZTsKKyAgICBtX3VzZUNvdW50cy5yZXNpemUobV9n
cmFwaC0+c2l6ZSgpKTsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERG
Uy4gTWF5YmUgcmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBp
bXBhY3Qgb2YgaG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisg
ICAgICAgIC8vIElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBh
cmUgZGVwZW5kZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9P
UFM6IEhvdyBpcyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3
ZSBkbyBERlMuLi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVj
b2RlQmFzaWNCbG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50
UHJlZGljdGlvbnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAg
ICAgICAgICBpZiAoY29tcHV0ZVVzZUNvdW50cykKKyAgICAgICAgICAgICAgICBtX3VzZUNvdW50
c1tibG9jay5pbmRleCgpXSA9IE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPihtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29k
ZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIDApOworCisgICAgICAgICAgICBpZiAoIWJsb2Nr
LmlzRW50cnlCbG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAg
ICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggeyBpICsgYmxvY2su
bGVhZGVyT2Zmc2V0KCkgfTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRl
Y29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlv
bihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjb21wdXRl
VXNlQ291bnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dXNlQ291bnRzW2Jsb2NrLmluZGV4KCldLm9wZXJhbmQob3BlcmFuZCkgKz0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ2hlY2tw
b2ludCBjaGVja3BvaW50ID0gY3VycmVudEluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRz
KCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hl
Y2twb2ludCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZz
Rm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3Bv
aW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vz
c29yXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFBy
ZWRpY3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlU3BlY3VsYXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25z
W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbXB1dGVVc2VDb3Vu
dHMgPSBmYWxzZTsKKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9p
ZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTY3LDcgKzk2MCwxMyBAQCB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1
bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKK2Jvb2wgSklUOjp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRy
dWU7CisgICAgcmV0dXJuIG1fdXNlTE9MOworfQorCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxv
Y2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMo
Y29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUs
NiArOTc0LDcgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAg
ICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhm
YWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQorICAgICwgbV91c2VMT0woY29tcGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxP
TCkKIHsKIH0KIApAQCAtMTM3LDExICsxMDM3LDE5IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQogICAgICAgICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBc
CiAgICAgTkVYVF9PUENPREUobmFtZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBc
CisjZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3Bf
IyNuYW1lOiB7IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2Rl
SW5kZXgpIHsgXAotICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCi0gICAgICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVl
OyBcCisgICAgICAgICAgICBpZiAoZ2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSAmJiBhdG9p
KGdldGVudigicHJpbnRTbG93Q2FsbENhc2VzIikpKSB7IFwKKyAgICAgICAgICAgICAgICBTdHJp
bmdQcmludFN0cmVhbSBjYk5hbWU7IFwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVt
cChjYk5hbWUpOyBcCisgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGNiTmFtZS50b1N0cmlu
ZygpICsgIiBiYyMiICsgU3RyaW5nOjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSAr
ICIgIiArIG9wY29kZU5hbWVzW2N1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07IFwKKyAg
ICAgICAgICAgICAgICBwcm9iZShbPV0oUHJvYmU6OkNvbnRleHQmKSB7IFwKKyAgICAgICAgICAg
ICAgICAgICAgc2xvd0NhbGxDYXNlUmFuKGtleSk7IFwKKyAgICAgICAgICAgICAgICB9KTsgXAor
ICAgICAgICAgICAgfSBcCisgICAgICAgICAgICBlbWl0U2xvd09wKHNsb3dfcGF0aF8jI25hbWUs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgZHN0LCB0eXBlKTsgXAogICAgICAgICB9IFwKICAgICAgICAg
TkVYVF9PUENPREVfSU5fTUFJTihvcF8jI25hbWUpOyBcCiAgICAgfQpAQCAtMTU2LDI2ICsxMDY0
LDQ2IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERF
RklORV9TTE9XQ0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1p
dFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNs
b3dfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRf
T1BDT0RFKG5hbWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG5hbWUpIFwKICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNh
bGwoY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAg
ICBlbWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKKyAgICAgICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsgXAorICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAog
ICAgIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
U2xvd1BhdGhGdW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKIH0KIAorc3RhdGljIHZvaWQgc2xvd0NhbGxDYXNlUmFuKFN0cmluZyBrZXkp
Cit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgdWludDY0
X3Q+PiBzbG93Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAg
c3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93Q2FzZXMuY29uc3RydWN0
KCk7CisgICAgfSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMuZ2V0KCk7CisgICAgdWlu
dDY0X3QgdmFsdWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYg
KCh2YWx1ZSAlIDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihrZXksICI6ICIsIHZhbHVl
KTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAo
SklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOwogICAgIApAQCAtMjMxLDE1ICsxMTU5LDg0IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZp
bmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAg
ICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgp
OwotICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBz
dGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBw
cm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNo
YWJsZS4KLSAgICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0
J3MgZXZlciBoaXQuCi0gICAgICAgICAgICBicmVha3BvaW50KCk7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICAvLyBPT1BT
CisKKyAgICAgICAgbV9zdGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAg
ICBtX3ByZWRlY2Vzc29ycy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChh
dXRvJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJs
b2NrKCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGZvciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLnN1Y2Nlc3NvcnMo
KSkgeworICAgICAgICAgICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhd
LmNvbnRhaW5zKGJsb2NrLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICBtX3ByZWRlY2Vz
c29yc1tzdWNjZXNzb3JJbmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAg
fQogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICBm
b3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsK
KyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+
dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBhdCBlbmQgb2YgYmIjIiwgbV9jdXJyZW50QmxvY2stPmlu
ZGV4KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1
cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRb
bV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisK
KyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2Nr
Rm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFt
X2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3Vy
cmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZy
b21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNz
b3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3Nv
cnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVk
ZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFBy
ZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJv
bVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0
YXRlRnJvbVByaW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRDdXJyZW50
QmxvY2tTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5k
ZXgoKV07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRVc2VDb3VudHMgPSBXVEZNb3ZlKG1f
dXNlQ291bnRzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAgICAgICAgICAgICAgbV9z
cGlsbENhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsK
KyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3Rh
cnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAgICAgICAgICAgLy8gV2UndmUgcHJv
dmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFi
bGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdz
IGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZv
ckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKICAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9u
cy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICBBU1NFUlQoY3VycmVudEluc3Ry
dWN0aW9uLT5zaXplKCkpOwpAQCAtMjc4LDQ2ICsxMjc1LDQzIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogI2VuZGlmCiAKKworICAgICAgICBpZiAoZmFs
c2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsK
KyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGxlc3MpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRl
cmVxKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jYWxsYWJsZSkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAgICAgICBERUZJTkVfU0xPV19PUChzdHJj
YXQpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRf
YnlfaWRfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhf
dGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3Rpbmdf
ZnVuY19kZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9kYXRhX3By
b3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlKQotICAgICAgICBERUZJTkVfU0xP
V19PUCh0aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJh
eV93aXRoX3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChn
ZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9TTE9XX09QKGhhc19lbnVtZXJh
YmxlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVy
YXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJn
dW1lbnRzX2J1dHRlcmZseSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xP
V19PUChuZXdfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRv
cikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
cG93KQorICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVj
dG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLm1fZHN0LCBTcGVjU3RyaW5nKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUsIFZpcnR1YWxSZWdpc3Rlcigp
LCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVj
SGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlf
dmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZp
bmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3Rlcigp
LCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxS
ZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGlj
X2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9X
X09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19P
UChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZm
ZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xl
YW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVj
Q2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1
bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBT
cGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVk
X2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50
cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFy
Z3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0
PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9t
aXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3Bl
Y1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmpl
Y3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0
T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93Pigp
Lm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklO
RV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTM5
MiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklO
RV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJf
c2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82
NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9X
X09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92
KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRl
KQpAQCAtNDc0LDEwICsxNDcyLDg0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSkKICAg
ICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQogCisgICAgICAgIERF
RklORV9PUChvcF9pc19jYWxsYWJsZSkKKyAgICAgICAgREVGSU5FX09QKG9wX3R5cGVvZl9pc19m
dW5jdGlvbikKKyAgICAgICAgREVGSU5FX09QKG9wX3R5cGVvZl9pc19vYmplY3QpCisgICAgICAg
IERFRklORV9PUChvcF90eXBlb2YpCisKKyAgICAgICAgREVGSU5FX09QKG9wX2xlc3MpCisgICAg
ICAgIERFRklORV9PUChvcF9sZXNzZXEpCisgICAgICAgIERFRklORV9PUChvcF9ncmVhdGVyKQor
ICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcmVxKQorCisgICAgICAgIERFRklORV9PUChvcF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGgpCisKKyAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9sZXhp
Y2FsX2Vudmlyb25tZW50KQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNv
ZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9jaGVj
a2VkVXNlTE9MKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90
aHJvdzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2ptcDoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW5kOgorICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0Ogor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX25vcDoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZToKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2Rl
YnVnOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3Vl
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBvcGNvZGVJRCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICBh
dXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkJiBjb3VudGVyID0gbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgLS1jb3VudGVyOworICAgICAgICAgICAgICAgIGlmICghY291
bnRlcikgeworICAgICAgICAgICAgICAgICAgICAvLyBPT1BTOiBEbyB0aGlzIGxhemlseSBpbiBz
bG93IHBhdGggY3JlYXRpb24vc3BpbGxGb3JDYWxsCisgICAgICAgICAgICAgICAgICAgIC8vbV9z
cGlsbENhbmRpZGF0ZXMuYXBwZW5kKG9wZXJhbmQpOworCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZ3ByKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBG
UFJSZWcgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbG9iYmVyKGZwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2lu
dCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50
LS07KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KG1fY29k
ZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAg
ICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxv
ZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7
CiAgICAgfQpAQCAtNDk4LDYgKzE1NzAsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlu
a1Bhc3MoKQogICAgIG1fam1wVGFibGUuY2xlYXIoKTsKIH0KIAorc3RhdGljIHZvaWQgc2xvd0Nh
c2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hN
YXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNs
b3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNl
cy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xu
KGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogewogICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKQEAgLTUxNiwxNCArMTYwMiwyNSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2Zp
bGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2
aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAg
ICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93
Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNl
LmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAg
IEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nh
c2UuanVtcHNbMF0ubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RU
byA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CisKKyAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSAmJiBh
dG9pKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSkpIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50
U3RyZWFtIG5hbWU7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChuYW1lKTsKKyAgICAg
ICAgICAgIFN0cmluZyBrZXkgPSBuYW1lLnRvU3RyaW5nKCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51
bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsgIiAiICsgb3Bjb2RlTmFtZXNbY3VycmVu
dEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsKKyAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6
Q29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZVJhbihrZXkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFy
ZUNhc2VQcm9maWxlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkKQEAgLTU4MCw3ICsxNjc3LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lcSkKQEAgLTU5
OSw2ICsxNjk1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChp
bmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGRlYykKQEAgLTYzMSwxOSArMTcz
MCwzNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChjaGVja190ZHopCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHRv
X3Byb3BlcnR5X2tleSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaXNfY2FsbGFi
bGUpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikK
KyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKKyAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mKQorCisgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKGxlc3MpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGxlc3Nl
cSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ3JlYXRlcikKKyAgICAgICAgREVG
SU5FX1NMT1dDQVNFX1NMT1dfT1AoZ3JlYXRlcmVxKQorCisgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQorCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygi
QXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxu
Iik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93
Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5v
dCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEp
LT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdl
bi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0
ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNv
ZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8u
b2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5r
ZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNv
bHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFk
eSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9y
ZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlOwogICAgIH0KQEAgLTY4OCw2ICsxODAyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVX
aXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcg
PSB0cnVlOyAvLyBPT1BTOiBoZWxwZnVsIGZvciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAg
CiAgICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFs
Q29kZToKQEAgLTc3OCw2ICsxODk0LDg4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFi
ZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAg
Ym9vbCBwcmludEVhY2hPU1IgPSBnZXRlbnYoInByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRl
bnYoInByaW50RWFjaE9TUiIpKTsKKworICAgIGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7
CisgICAgICAgIEp1bXBMaXN0IGV4aXRDb21tb247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6
IG1fZXhpdEp1bXBzKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZp
cnN0OworICAgICAgICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAg
anVtcHMubGluayh0aGlzKTsKKworICAgICAgICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAg
ICAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5kdW1wKHByaW50U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3Ry
aW5nIHN0ciA9IHByaW50U3RyZWFtLnRvQ1N0cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5i
dWZmZXIoKS0+cmVmKCk7IC8vIGxlYWsgaXQuCisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRh
dGEoKSwgIiAtPiBleGl0IGF0IGJjIyIsICBieXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNr
cG9pbnQgZXhpdHMuCisKKyAgICAgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAg
ICAgICAgICAgIGV4aXRDb21tb24uYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBBU1NFUlQoIWV4aXRDb21tb24uZW1wdHkoKSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0
aGlzKTsKKworCisgICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIg
PT0gcmVnVDQpOworICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKS5jb250YWlucyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxp
ZXMgb24gdGhpcyBiZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBu
dW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhl
IExMSW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25PU1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BS
MCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpOdW1iZXJUYWcpLCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkp
LCByZWdUMik7CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAg
ICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhp
dENvdW50ZXIoKSkpOworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVs
b3csIHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZv
clJlb3B0aW1pemF0aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQ
UiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNl
IHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJs
b2NrKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJp
Z2dlckxPTFJlb3B0aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5v
bkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0
ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0
dGlzb24ubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0g
aml0LmJyYW5jaDMyKAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFu
T3JFcXVhbCwKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAg
IC8vICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9y
bWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFn
PigpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKQorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NS
RXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAv
LyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCku
Y29kZSgpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQ
Uik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7Cisg
ICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BS
SW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAg
ICAgIC8vIDEuIFN0b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8v
IDIuIGpldHRpc29uIGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0
ZSBiYXJyaWVyIExMSW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93Lmxp
bmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBp
ZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05NjcsNyArMjE2NSw3IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRy
eVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5k
YXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJ
VCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNo
aW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAg
c3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05NzgsNyArMjE3Niw3IEBA
IENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJp
bmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAg
fQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERp
cmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0
eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigi
SklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjcw
LDk1MSBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRv
dGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENv
bXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQor
eworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNp
emUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAg
ICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7
CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCYW5rPgorVmVjdG9yPFJlZywgMzI+IGNvbXB1dGVBbGxvd2VkUmVncygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUg
ZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhp
cworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgVmVj
dG9yPFJlZywgMzI+IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVz
ID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
UmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAg
ICAgICAgaWYgKGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAg
YWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5r
Ojp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJl
ZykpCisgICAgICAgICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAgIH0KKyAgICByZXR1cm4g
YWxsb3dlZDsKK30KKworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxsb3dlZEdQUnMoKQorewor
ICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEg
ZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1
cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisg
ICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZl
Y3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsK
KyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFZlY3RvcjxS
ZWcsIDMyPiYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9y
eSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMK
KyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8g
ZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tl
eSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21w
dXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6
IHRoaXMgYnJlYWtzIGN1cnJlbnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2Vl
bXMgbGlrZSBhIG5pY2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQu
Li4KKworICAgIC8vaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCku
Ynl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30K
KworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigp
ICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1
ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAg
ICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICgh
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2Nr
Q291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdW
YWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNs
b2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBs
KFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlv
biBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5p
c0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdw
ciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxs
b2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAg
fQorICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291
bnQgdmFsdWVzIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9l
czoKKyAgICAgICAgLy8gLSBWYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2Fs
bAorICAgICAgICAvLyAtIH5WYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAgICAgICAvLyBB
bmQgd2hlbiB3ZSBkZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdl
IHdpbGwgZW5kIHVwIGZ1bGx5CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIs
IGVzc2VudGlhbGx5IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3
aXNlLCB3aGVuIH5WYWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBl
bmQgdXAgaW4KKyAgICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdW
YWx1ZS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KQorICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAg
ICB9CisKK30KKwordm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVy
U2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJl
ZyA6IHNldCkgeworICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQor
ICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygp
KTsKK30KKworU2F2ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BT
OiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBh
dXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJl
Z1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRG
UFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVD
YWxsKEdQUlJlZyB0b0lnbm9yZSwgRlBSUmVnIHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6
IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0
OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChy
ZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBs
YW4uYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5
cGUocmVnVmFsdWUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWcuZnBy
KCkgIT0gdG9JZ25vcmVGUFIpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAg
IH0KKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWcu
Z3ByKCkgIT0gdG9JZ25vcmUpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAg
IH0KKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxs
ZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxl
bnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2Fs
bCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZv
clNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgcmVjb3JkLnNhdmVQbGFuKTsKK30KKworc3RhdGljIHZvaWQgYWRkTG9hZENvdW50KHVp
bnQ2NF90IGNvdW50KQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb3VudGVyOworICAgIGZvciAo
dWludDY0X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICsrY291bnRlcjsKKyAg
ICAgICAgaWYgKGNvdW50ZXIgJSAxMDAwMCA9PSAwKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
dW50aW1lIGxvYWQgY291bnQ6ICIsIGNvdW50ZXIpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJl
c3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgdWludDY0X3QgbG9h
ZENvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogc2F2ZVBsYW4pIHsKKyAgICAgICAg
UmVnIHJlZyA9IHN0ZDo6Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBzdGQ6OmdldDwxPih0dXBsZSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByb3Zl
blR5cGUgPSBzdGQ6OmdldDwyPih0dXBsZSk7CisKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0ln
bm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVy
YW5kVG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlz
R1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5n
cHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAg
ICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAg
ICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaCgqdGhp
cyk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gp
OworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUp
KQorICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIo
KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBi
cmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgc2NyYXRjaCB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsK
KworICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIo
KSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAgICAg
ICAgaXNJbnQzMi5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICArK2xvYWRDb3VudDsKKyAg
ICB9CisKKyAgICBpZiAoZmFsc2UgJiYgbG9hZENvdW50KSB7CisgICAgICAgIHByb2JlKFs9XSAo
UHJvYmU6OkNvbnRleHQmKSB7CisgICAgICAgICAgICBhZGRMb2FkQ291bnQobG9hZENvdW50KTsK
KyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQ
bGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9
CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdw
cikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAor
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94
SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBz
dG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQp
OworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
PSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZw
cikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVn
IGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVy
YW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZv
ciBieXRlY29kZXMgKC9jaGVja3BvaW50cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQu
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFu
ZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQor
Cit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdw
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAg
ICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERlZihvcGVyYW5k
KTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVn
IHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
UkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9j
a0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOwor
ICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYm
ICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9
CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBt
X2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KGhpbnQpOworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2Nh
dGVHUFIoaGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJ
VDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKwor
RlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2so
bV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1w
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBt
X2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAg
IG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9
IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9
IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9v
cGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJ
bnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0
dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9
CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0
ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwg
bV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsK
KyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9u
KG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShC
YWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICBy
ZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAg
ICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6
Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dw
ciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwg
bV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVn
aXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hl
Y2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWco
bV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAg
cmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklU
JiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwg
bV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJh
bmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZw
cigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIo
KQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9m
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQ
UlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChy
ZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAg
ICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9v
cGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0g
dmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKwor
ICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsK
KworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUo
bV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJy
YW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAg
ICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93
bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
fQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgbV9q
aXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQor
CitKSVQ6Ok51bWJlck9wZXJhbmQ6Ok51bWJlck9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
Cit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAg
ICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6Ok51
bWJlck9wZXJhbmQ6On5OdW1iZXJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIp
OworfQorCitGUFJSZWcgSklUOjpOdW1iZXJPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2Zw
ciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5h
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5m
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJl
ZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1f
ZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5h
bGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworICAgIGVsc2UgaWYgKGlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7Cisg
ICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQ
UiwgbV9mcHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07
CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byBpc0lu
dDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworCisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC51bmJv
eERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOworICAgICAgICBhdXRvIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1f
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7CisKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgfQorCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJh
bmQpOworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5k
OjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMkNvbnZlcnRp
bmdPcGVyYW5kOjp+SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKG1faml0LnNob3Vs
ZFNwZWN1bGF0ZUludDMyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIG9wIHsg
bV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBtX2dwciA9IG9wLmdwcigpOworICAgICAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU51
bWJlcihtX29wZXJhbmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBt
X2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFu
ZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0IH07
CisgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIGF1dG8gaXNJ
bnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZl
VGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
bV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJl
Z3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICAgICAgbV9qaXQudW5i
b3hEb3VibGUodmFsdWVHUFIsIG1fZ3ByLCBmcHIpOworICAgICAgICBKdW1wTGlzdCBkb25lOwor
I2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRz
RG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgeworICAg
ICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRp
Y3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwor
ICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNoSWZU
cnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBtX2pp
dC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5j
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVEb3Vi
bGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRvSW50
MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2FsbChz
cGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1v
dmUodmFsdWVHUFIsIG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAg
ICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4obV9vcGVyYW5kKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9Owor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgICAgICBtX2ppdC5zcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCwgdmFsdWVHUFIpOwor
CisgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsK
KyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlT3RoZXIobV9vcGVyYW5kLCB2YWx1ZUdQUik7CisK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9
OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAg
ICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAgICBGUFJSZWcg
ZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25lOworCisgICAgICAg
IGF1dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBub3REb3VibGUgPSBtX2ppdC5i
cmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBI
YXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwg
bV9ncHIsIGZwcik7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3VwcG9ydHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNlbWFu
dGljcygpKSB7CisgICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2
YVNjcmlwdFNlbWFudGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIG1f
Z3ByLCBCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0byBzcGls
bFJlY29yZCA9IG1faml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAgICAg
ICAgICAgIG1faml0LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayho
YXNTZW5zaWJsZURvdWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93IDog
b3BlcmF0aW9uVG9JbnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5zaWxlbnRG
aWxsQWZ0ZXJDYWxsKHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBub3REb3VibGUubGluaygmbV9qaXQpOwor
ICAgICAgICBhdXRvIG5vdE90aGVyID0gbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIG1fZ3ByKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAg
ICBub3RPdGhlci5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBl
LCBtX2ppdC5icmFuY2hJZk5vdEJvb2xlYW4oSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dw
cikpOworICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dw
cik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNJbnQz
Mi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvV29yZCh2YWx1ZUdQ
UiwgbV9ncHIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0
LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBT
cGVjQm9vbGVhbik7CisgICAgfQorCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitSZWdpc3RlclNl
dCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQg
cmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAg
YXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNT
dHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9s
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYg
KCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVC
b29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xl
YW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVl
IH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
T3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5v
dE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsK
K30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2Vs
bENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51
bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJp
Z0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChp
c0JpZ0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47
CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0
cnVlOworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2Vu
ZGlmCisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50
MzIpIHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlm
ICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJ
bnQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0lu
dCh2YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50
OworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICgh
ZG9uZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVCaWdJbnQzMihvcGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1
ZSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENl
bGwodmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJp
Z0ludCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3Vy
cmVudEJsb2NrU3RhdGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5
dGVjb2RlVG9wKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUu
cHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRT
dGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAg
IG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+
KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsK
KyAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdW
YWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIs
IG9wZXJhbmQsICIsICIsIGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdh
bGxvY1N0YXRlKCkKK3sKKyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAg
ICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUo
cmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVn
VmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBkYXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3
IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50
ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJS
ZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
U2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJ
RCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBj
bGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBj
bGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0
aW9uRXhlY3V0YWJsZTsKQEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAg
ICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNv
ZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisg
ICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjp0dXBsZTxSZWcsIFZpcnR1YWxSZWdpc3Rl
ciwgU3BlY3VsYXRlZFR5cGU+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7Cisg
ICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVn
aXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisg
ICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8v
IFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMs
IHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZl
UGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBm
b3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8g
U29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmll
bmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTk2LDcgKzIxMSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxs
ZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZh
dGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDog
cHVibGljIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNl
SklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMjA0LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0g
MDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJl
cHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgot
ICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90
IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0g
ICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgICAgIGVudW0g
Y2xhc3MgQ29tcGlsZVR5cGUgeworICAgICAgICAgICAgQmFzZWxpbmUsCisgICAgICAgICAgICBM
T0wKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayosIENv
bXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0
ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKIAogICAgICAgICBWTSYgdm0oKSB7IHJl
dHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KQEAgLTIyMCwyMiArMjM2LDIyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAg
dm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKLSAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCisKKyAgICAgICAgc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGls
ZVR5cGUgY29tcGlsZVR5cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVD
b21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNv
bXBpbGVUeXBlLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxl
VHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5
VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1v
ZGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGly
ZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBj
b2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRl
Y29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI0MywyMSArMjU5LDIx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7
CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8
T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhD
YWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2Vs
aW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdp
dGhDYWNoZWRJZChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBq
aXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAg
ICAgaml0LnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQpAQCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxl
bmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91
c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihS
ZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJ
bXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0
aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMs
OSArMzUzLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQg
YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgp
OworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNs
b3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsg
fSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0
ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYg
ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAg
IHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVt
cExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7
CkBAIC0zMzMsNyArMzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAg
ICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTM1MCw3ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApA
QCAtMzYwLDcgKzM5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBp
bGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBq
dW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwg
Q29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5k
Q29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0g
V3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRl
ckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAg
LTUwOCw4ICs1NDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
LSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENv
bmRpdGlvbik7CkBAIC01MTcsMTIgKzU0OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxh
dGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0
aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91
YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVD
b25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9u
LCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0
U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgor
ICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9u
Kik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVs
bEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9u
Kik7CkBAIC01NDYsOSArNTg3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02MTAsNyArNjUxLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2Jl
Z2luKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1w
bGVyX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0
KGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0
X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CkBAIC02NzgsNzggKzcyMSwxMDAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9u
Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxs
ZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3Jl
YXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19l
bnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBlbWl0SXNDYWxsYWJsZUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwor
ICAgICAgICB2b2lkIGVtaXRfb3BfaXNfY2FsbGFibGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZl9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZl9pc19mdW5jdGlvbihjb25zdCBJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlwZW9mKGNvbnN0IEluc3RydWN0aW9uKik7CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVtaXRDb21wYXJl
T3BJbXBsKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2xlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBlbWl0X29wX2xlc3NlcShjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAg
ICB2b2lkIGVtaXRfb3BfZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBl
bWl0X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAg
ICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudChjb25zdCBJbnN0cnVj
dGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Nh
bGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiop
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAg
ICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwog
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAg
ICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWdu
ZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsK
KyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3Vs
dEdQUiA9IEludmFsaWRHUFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAg
dm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7
Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2Nv
cGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2
b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAg
ICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5k
LCBHUFJSZWcpOwpAQCAtNzY0LDggKzgyOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZv
aWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAg
dm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cik7CkBAIC03NzgsMzggKzg0MSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0
aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBS
ZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVt
aXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rp
b24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1
Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAg
IEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRl
cjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93
Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAot
ICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9i
eXRlY29kZUluZGV4KTsKLSAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+CisgICAgICAgIHZvaWQgZW1pdFNsb3dPcChGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCwgU3Bl
Y3VsYXRlZFR5cGUgZHN0VHlwZSk7CiAKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNB
bnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAg
ICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVj
b2RlSW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAg
Ly8gT09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQor
ICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNG
b3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAg
ICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTg5MSw2
ICs5MzcsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hl
Y2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3MuLi4gYXJncykK
KyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJn
cy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgIGF1
dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAgICAgfQor
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxP
cGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgp
OworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBj
YWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1l
bnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwpAQCAtOTAyLDYgKzk2OCw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgTm9Qcm9maWxpbmcKICAgICAgICAgfTsKIAorICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgYm9vbCB0cnlFbWl0TE9MQml0RmFzdFBhdGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CiAgICAgICAgIHZvaWQg
ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUHJvZmlsaW5nUG9saWN5IHNob3VsZEVtaXRQcm9maWxpbmcgPSBQcm9maWxpbmdQb2xp
Y3k6Ok5vUHJvZmlsaW5nKTsKIApAQCAtOTYxLDYgKzEwMzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNl
bmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAg
IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAg
IHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBj
b21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTcxLDYgKzEwNDMsMjkyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAg
ICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRl
bXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJU
ZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJ
VCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRz
IGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdn
ZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYg
bV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5E
b3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOdW1iZXJPcGVyYW5kIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgTnVtYmVyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCk7CisgICAgICAgICAgICB+TnVtYmVyT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVn
IGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU3BlY3VsYXRl
IG51bWJlcitib29sZWFuK290aGVyLCBhbmQgY29udmVydCB0byBpMzIuIFVzZWZ1bCBmb3IgYml0
b3BzLgorICAgICAgICBjbGFzcyBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIHsgCisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQoSklUJiwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyQ29udmVydGluZ09wZXJhbmQoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlw
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAg
ICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAg
fQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQ
cmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVn
JiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFu
ZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisK
KyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRS
ZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVl
JiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYg
cmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUm
IHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgd2ls
bERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAg
ICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUFJSZWcmIGZwciA9IGZw
ckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlk
RlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IFZp
cnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVn
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnVmFsdWUoZ3ByKS5vcGVyYW5k
LmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7
CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9w
ZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghcmVnVmFsdWUoZnByKS5vcGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGZw
ckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9w
ZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1f
Y3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51
bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3Ro
ZXIgfCBTcGVjQm9vbGVhbik7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlv
bkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlv
bihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
T3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBi
b29sIHVzZUxPTCgpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
T3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZv
aWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUp
OworICAgICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUo
RXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2Fu
dCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBh
bGxvY2F0ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcg
YWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsK
KyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09Q
UzogTWFrZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3Jn
ZXQgdG8gc2V0IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxv
Y2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBT
aWxlbnRTcGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlID0g
SW52YWxpZEdQUlJlZywgRlBSUmVnIHRvSWdub3JlRlBSID0gSW52YWxpZEZQUlJlZyk7CisgICAg
ICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOwor
ICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBS
ZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRl
cnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4g
bV9mYXJDYWxsczsKQEAgLTk5MCw3ICsxMzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBt
X2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNl
czsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAg
ICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVu
c2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTEwMjcsNiArMTM4NSw4
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFs
bG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVk
IGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2Ft
ZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQg
bWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAg
ICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9
OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAg
IHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAg
ICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8
fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAg
KnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFG
b3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsK
KyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAg
IHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRv
UmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVy
YW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tp
XS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJU
KHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMo
cHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAg
IEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJz
W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1f
Y3VycmVudFN0YXRlOworCisgICAgICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOwor
CisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBW
ZWN0b3I8T3BlcmFuZHM8dW5zaWduZWQsIHRydWU+PiBtX3VzZUNvdW50czsKKyAgICAgICAgT3Bl
cmFuZHM8dW5zaWduZWQsIHRydWU+IG1fY3VycmVudFVzZUNvdW50czsKKyAgICAgICAgVmVjdG9y
PFZpcnR1YWxSZWdpc3RlciwgMTY+IG1fc3BpbGxDYW5kaWRhdGVzOworCisgICAgICAgIFZlY3Rv
cjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2Nr
U3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBt
X3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAg
ICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpw
YWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDg2ICs0Miw4OCBAQAog
I2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAorI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0
ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xv
d0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNz
VGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdy
ZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVz
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTQ2LDM3ICsxNDgsMTYxIEBAIHZvaWQgSklUOjplbWl0X29wX2piZWxvd2VxKGNvbnN0
IEluc3RydWMKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
K3ZvaWQgSklUOjplbWl0Q29tcGFyZU9wSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGdwQ29tcGFyZSwgRG91YmxlQ29uZGl0aW9u
IGRvdWJsZUNvbXBhcmUpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc1Rl
bXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFyZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5m
cHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHx8ICFwcmVkaWN0aW9uRm9y
KGxocykgfHwgIXByZWRpY3Rpb25Gb3IocmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgY29tcGFyZURvdWJsZShkb3VibGVDb21w
YXJlLCBsaHNUZW1wLmZwcigpLCByaHNUZW1wLmZwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICB9CisKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwg
RG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBh
cmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0
Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRD
b21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1
YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1
c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIHJlc3VsdCk7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAg
ICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdU
MCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBE
b3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBp
bmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAg
IC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBj
b25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1l
ZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxh
dGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgfHwgIXByZWRpY3Rp
b25Gb3Iob3AxKSB8fCAhcHJlZGljdGlvbkZvcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91Ymxl
Q29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdw
cigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0
aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yMjksMTcgKzM1NSw0MyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvCiAKIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1Rl
bXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQ
UiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJ
bnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAg
ICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAg
ICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikg
Jj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9
IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7
CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAg
Z2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIo
b3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBs
aHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRl
KGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSks
IHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
b3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0
aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAg
Z2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBAIC0yNTUsNDMgKzQwNyw4OSBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7Cisg
ICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7Cisg
ICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxo
c1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9u
bHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhz
R1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1Qx
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwor
ICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMy
KG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJ
bW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDAp
OworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwg
cmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVn
VDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBjb21wYXJlMzIo
Y29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKICAgICB9Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0
aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+
c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNv
bmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJo
c0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8g
Tm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xs
b3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51
bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQg
bnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFy
Z3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxKTsKQEAgLTMwMCw4ICs0OTgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwpAQCAtMzI2LDggKzUyMiw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBA
IC0zNTEsMTIgKzU0NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAg
ICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1
bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50
MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAg
ICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBm
cFJlZ1QwKTsKQEAgLTM2OSw5ICs1NjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxp
bmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0Lmxpbmso
dGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IElu
dC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQpAQCAtMzgxLDExICs1NzQsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNv
bnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3Ny
Y0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3Zl
cmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdy
ZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRl
bXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnBy
KCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7
CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAg
ICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIo
T3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBz
ZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4w
OworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQu
ZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAg
ICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAg
ICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBp
bnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsg
aW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29k
ZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNjI4LDYyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
Yyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQz
MihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcg
dGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRy
KCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0
ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUlu
dEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRH
UFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRl
bXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUg
PSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBG
UFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7
CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1
c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRG
UFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlu
cHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUg
QmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAg
ICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwg
cmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzY5MywxMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBs
aHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUu
bV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxh
dGVEb3VibGUobGhzKSB8fCBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3Vs
dEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhNYXRoOjpmbW9kRG91YmxlLCByZXN1bHRGUFIsIGxo
c0ZQUiwgcmhzRlBSKTsKKworICAgICAgICAgICAgc2V0RG91YmxlKGRzdCwgcmVzdWx0RlBSKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIE1ha2Ugc3Vy
ZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBB
U1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVn
aXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRv
IGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAg
IEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhz
VGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVj
eCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVt
cC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVj
eCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOwor
ICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1w
LT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9
PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOwor
CisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5l
bXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFtZSwgbGlrZSBzcGlsbEV4cGVjdGluZ1Nsb3dQYXRoCisK
KyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBsaHNH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
bGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92ZShs
aHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhs
aHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
bGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgICAg
IG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5vbWlu
YXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0
NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRydXN0
ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5rKHRo
aXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVjeCk7
Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVh
bCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQ
b3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19CisgICAgYm94SW50
MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vsc2Ug
Ly8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlmIC8v
IENQVShYODZfNjQpCkBAIC00NjQsNyArODA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRp
b24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJP
cDI7CkBAIC00NzQsNiArODE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsK
QEAgLTU2MiwxNSArOTA1LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25z
dCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9u
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICpp
bnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9v
bCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9u
LCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICsxMDY1LDY2IEBAIHZv
aWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFz
dDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVn
SUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0
dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5k
IGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUp
OworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgT3A+Citib29sIEpJVDo6dHJ5RW1pdExPTEJpdEZhc3RQYXRo
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKKworICAgIGF1dG8gYml0T3AgPSBbJl0gKEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNH
UFIpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8T3AsIE9wQml0YW5kPikKKyAgICAgICAgICAgIGFuZDMyKGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8T3AsIE9wQml0b3I+KQorICAgICAgICAgICAgb3IzMihsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBP
cEJpdHhvcj4pCisgICAgICAgICAgICB4b3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcExzaGlmdD4p
CisgICAgICAgICAgICBsc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFVyc2hpZnQ+KQorICAg
ICAgICAgICAgdXJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wUnNoaWZ0PikKKyAgICAgICAg
ICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHNldElu
dDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICB9OworCisgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQ
Uik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMkNvbnZlcnRpbmcob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmco
b3AyKSkgeworICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQxLDE3ICsx
MTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5z
dHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3Bl
cmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBAIC03NjAsMzMgKzExNDUs
MTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAg
bGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVM
RUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0
VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1w
OworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOwor
ICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7
CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRp
ZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwg
cmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlw
cGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4u
ZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxp
bmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5n
cHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3By
KCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Ay
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVz
dWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90Pigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1
bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
KSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9
CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVz
dWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlm
IChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMy
T25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJ
bnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtODAzLDcgKzEyNjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3Qo
Y29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9w
Y29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVm
dFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtODQ5LDE5ICsxMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFz
dFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgorICAgIGlm
ICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAgICAg
IHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRP
cGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTg3MywyMSArMTMyMCw3NyBAQCB2b2lkIEpJVDo6ZW1p
dFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52
YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkz
MiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdw
cigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIo
KSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIo
KSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAg
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRS
aWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAg
ICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkw
MiwxOCArMTQwNSw2NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAg
RlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBS
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwg
cmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCBy
aHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91Ymxl
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJo
cy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAg
ICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3Vs
dEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIsIHJoc0ZQ
UiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVz
dWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJ
VEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRB
ZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihh
ZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1p
emUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUp
OworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUgKzE0NzUsMzUgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVy
IGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5n
IHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0g
ICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFz
IHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2lu
ZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgor
ICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vs
c2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQpAQCAtOTQxLDE5ICsxNTEyLDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFy
eU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVn
cywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1
ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxp
bmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxp
bmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9m
aWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2Ugewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCks
IHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIo
KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGlu
ZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTUzNywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlw
ZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3NCwzOSArMTU1NSw4MiBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkK
KyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAh
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0g
ICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQ
UlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAg
IE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmln
aHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdU
MDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBS
ID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRP
cGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ax
KTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxp
ZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdo
dFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25z
dGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQot
ICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRl
bXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAt
PmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAg
ICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdo
dFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQ
UiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0Vf
QVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
OworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVm
dE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRv
cihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRo
SUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6
aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTUs
MTcgKzE2MzksMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwog
CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgq
dGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNv
ZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
IHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywg
b3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9
CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAg
IGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVs
KCk7CkBAIC0xMDM1LDExICsxNjc2LDIwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRC
aW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAg
ICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9u
IHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUm
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCArMTY5OCw4IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpT
VmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkg
fTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7CkBAIC0xMDg1LDcgKzE3MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hG
dW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmlu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJl
cGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2Vu
ZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwxNiArMTc0
NSw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNSwxNSArMTc1
NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBB
U1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQp
KSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmln
aHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAg
ICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJl
Z1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRW
YWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAor
ICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBl
bHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJh
bmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwog
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2Zp
bGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkK
QEAgLTExNTYsMjMgKzE4MTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwot
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdU
MjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYyICsxODMyLDIzNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAg
UkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQ
UlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAg
IE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmln
aHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAt
PmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5n
cHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5n
cHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAg
ICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBs
ZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0
Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmln
aHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJl
Z1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAg
IEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRG
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7
CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1w
TGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5l
bXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsK
ICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiks
IFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
cmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11
bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKwor
ICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8
IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJo
c1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7Cisg
ICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAg
ICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisgICAgICAgICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUobGhzR1BSLCBsaHNGUFIpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQUiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAgICBt
dWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0
RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0
S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihCZWxvdywgbGhzR1BSLCBUcnVzdGVkSW1tMzIo
MCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywg
YnJhbmNoMzIoQmVsb3csIHJoc0dQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9
IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7
CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAg
ICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSBy
ZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11
bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBl
bWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
dWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3Qp
ID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhz
LmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29k
ZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAg
ICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVy
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBK
SVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
U3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0
aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4o
c3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXpl
KTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9Q
X1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29u
c3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSku
dmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVz
dGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1
YWxSZWdpc3RlcigpOworICAgIHdpbGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEw
ICsxNDksOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4o
KTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZv
KENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxM
aW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMg
UmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1l
UmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwog
ICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9w
X2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8o
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
ICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBA
IC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5z
dHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxs
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2Fs
bFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZh
cmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikK
QEAgLTM4Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQg
ZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29k
ZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0
Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRo
ZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RF
cXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCBy
ZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7
CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2xvd0Nhc2UuanVt
cHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJl
ZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2hvdWxkQmVSZWdUMCA9PSByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUu
bV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhp
cyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RP
YmplY3Q7CkBAIC00NTYsNiArNDc0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsK
KworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBt
dWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50
cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmlj
Q2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQ
UiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRT
bG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRS
ZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lz
dGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2Vy
dmVkUmVncywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwo
KSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNo
ZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBz
LmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAgICB3aWxsRGVmKGJ5dGVj
b2RlLm1fZG9uZSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRv
bmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwg
ZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0K
ICAgICB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgICAgICBHUFJSZWcg
c2NyYXRjaDIgPSByZWdUMzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9
IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1
ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1Bh
dGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFw
cGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX3ZhbHVlKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwogICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsK
IAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5s
aW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0
b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNv
ZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxp
bmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmpl
Y3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1
NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQog
CiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93
Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVW
UmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSBy
ZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiAr
NTMsOCBAQCBjb25zdCBjaGFyKiBKSVRDb2RlOjp0eXBlTmFtZShKSVRUeXBlIGppCiAgICAgICAg
IHJldHVybiAiTExJbnQiOwogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
IHJldHVybiAiQmFzZWxpbmUiOworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBy
ZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAi
REZHIjsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwOCw3ICsxMTAsNyBAQCBKSVRD
b2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29kZVJlZihDCiAKIEpJVENvZGVXaXRoQ29kZVJl
Zjo6fkpJVENvZGVXaXRoQ29kZVJlZigpCiB7Ci0gICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSB8fCAoaXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERG
R0Rpc2Fzc2VtYmx5KCkpKQorICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwg
KGlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkp
CiAgICAgICAgICYmIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSkKICAgICAgICAgZGF0YUxvZygi
RGVzdHJveWluZyBKSVQgY29kZSBhdCAiLCBwb2ludGVyRHVtcChtX3JlZi5leGVjdXRhYmxlTWVt
b3J5KCkpLCAiXG4iKTsKIH0KQEAgLTIzNyw2ICsyMzksMTEgQEAgTmF0aXZlRE9NSklUQ29kZTo6
TmF0aXZlRE9NSklUQ29kZShDb2RlUgogI2lmIEVOQUJMRShKSVQpCiBSZWdpc3RlclNldCBKSVRD
b2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShD
b2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KQogeworICAgIC8vIEZvciBCYXNlbGluZSBKSVQsIHRo
aXMgaXMgdHJpdmlhbGx5IHRydWUuCisgICAgLy8gRm9yIExPTCBKSVQsIGV2ZXJ5dGhpbmcgaXMg
YWxyZWFkeSBzcGlsbGVkIHRvIHRoZSBzdGFjayBhdCBlYWNoIG9wY29kZSwgc28gd2hlbiB3ZQor
ICAgIC8vIGdvIHRvIHRoZSBvcF9jYXRjaCwgdGhlIGxpdmUgc3RhdGUgbXVzdCBhbHJlYWR5IGJl
IGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUgc3RhY2suCisgICAgLy8gQWxzbywgb3BfY2F0Y2gg
aGFzIG5vIGluY29taW5nIHJlZ2lzdGVyL3R5cGUgcHJvb2Ygc3RhdGUsIHNvIGl0J3MgdHJpdmlh
bCB0byBjYXRjaAorICAgIC8vIGFuIGV4Y2VwdGlvbiBpbiBMT0wganVzdCBieSBqdW1waW5nIHRv
IG9wX2NhdGNoLgogICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVt
IGNsYXNzIEpJVFR5cGUgOiB1aW50OF90IHsKICAgICBIb3N0Q2FsbFRodW5rLAogICAgIEludGVy
cHJldGVyVGh1bmssCiAgICAgQmFzZWxpbmVKSVQsCisgICAgTE9MSklULAogICAgIERGR0pJVCwK
ICAgICBGVExKSVQKIH07CkBAIC02NywzNiArNjgsMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJVFR5cGUpOwogCi0gICAgc3RhdGljIEpJVFR5cGUgYm90
dG9tVGllckpJVCgpCi0gICAgewotICAgICAgICByZXR1cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7
Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBKSVRUeXBlIHRvcFRpZXJKSVQoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEpJ
VFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAg
ICAgICByZXR1cm4gSklUVHlwZTo6REZHSklUOwotICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJ
VDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpGVExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
cmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgc3RhdGlj
IGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0KEpJVFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAg
IHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CiAgICAgICAg
IGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgZGVmYXVsdDoKKworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1
bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklU
VHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuazoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIEpJ
VFR5cGU6Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgor
ICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTExNiw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6
REZHSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTI0LDYgKzExNywyNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBzdGF0aWMgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoSklUVHlwZSBqaXRU
eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgICAgIGNhc2UgSklU
VHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgSklUVHlw
ZTo6Tm9uZToKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBzdGF0aWMgYm9vbCBpc0xvd2VyVGllcihKSVRUeXBlIGV4cGVj
dGVkTG93ZXIsIEpJVFR5cGUgZXhwZWN0ZWRIaWdoZXIpCiAgICAgewogICAgICAgICBSRUxFQVNF
X0FTU0VSVChpc0V4ZWN1dGFibGVTY3JpcHQoZXhwZWN0ZWRMb3dlcikpOwpAQCAtMTQ1LDkgKzE1
NiwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIo
ZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRIaWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBib29s
IHVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBl
OjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAogICAg
IHN0YXRpYyBib29sIGlzT3B0aW1pemluZ0pJVChKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAg
ICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRU
eXBlOjpGVExKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgaXNERkdPckZUTChKSVRUeXBlIGppdFR5cGUpCisgICAgewogICAgICAgICBy
ZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpG
VExKSVQ7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBA
IHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSogY2EKICAgICAgICAgLy8gd2l0
aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5IG1l
YW5pbmdsZXNzCiAgICAgICAgIC8vIGFuZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0
IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdldAogICAgICAgICAvLyBpbiB0aGUgcHJv
cGVyIGZyYW1lLgotICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoIUpJVENvZGU6OmlzREZH
T3JGVEwoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkKICAgICAgICAgICAgIGNh
dGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9u
cygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
Y2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJT
bG93UGF0aENhbGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE0NSw2ICsxNDYsNyBAQCBB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFr
ZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGls
bCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1Nyw2ICsxNTks
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5j
dGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24g
dGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
QEAgLTE2NywyNSArMTcwLDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dD
YXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBz
bG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93
Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAg
ICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUg
dm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQiKTsKQEAgLTIwNywyNyArMTkxLDM2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZ
U19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlm
ICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4
ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbV9zbG93Q2Fz
ZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBtX3Nsb3dDYXNl
cy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0
ID0gZHN0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0
IHsgfSk7CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3Vs
dCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAo
Y29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5
SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4
KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsK
KyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBz
bG93Q2FzZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC00MDYsMTEgKzM5
OSw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAg
IHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0K
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKQEAgLTcxNyw2ICs3MDUs
MTggQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVy
biBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFNwZWN1bGF0ZWRUeXBlIGRzdFR5cGUpCit7CisgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGZ1bmN0
aW9uKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgIGlmIChtX3VzZUxPTCAmJiBkc3Qu
aXNWYWxpZCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IGRzdFR5cGU7CisgICAgICAg
IHdpbGxEZWYoZHN0KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElD
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
ICAgICB9OwogCi0gICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpOworICAgICAgICBib29sIHNob3Vs
ZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUo
KSk7CiAKICAgICAgICAgaWYgKG1fZ2VuZXJhdGVGYXN0UGF0aE9uUmVwYXRjaCkgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsx
ODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3Vz
dG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShj
b25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVy
YXRvci5oIgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRl
ICJKU0Nhc3QuaCIKQEAgLTQxLDYgKzQyLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cu
aCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC01MSw2ICs1NCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAvLyBPT1BTOiBJZiB3ZSBjaGFuZ2UgcmVnYWxsb2Mgc3VjaCB0aGF0IHRoZXJlIGNhbiBi
ZSBOIHJlZ2lzdGVycyBwZXIgbG9jYWwsIHdlIGNhbiBtYWtlIHRoaXMgc3VjaCB0aGF0IHdlIGRv
bid0IG5lZWQgdHdvIHJlZ3MuCisgICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZv
ck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlm
IChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAt
OTAsMzIgKzExNSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNp
emUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92
bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
IAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxv
Y2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAg
ICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVn
IHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRU
ZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7
CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1Qx
OworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0
b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFu
dChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0
dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1
bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJv
dmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
Uiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJp
ZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTI1LDIzICsxNzEsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3Ry
dWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5t
X2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25z
dHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAg
IE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAg
aGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAg
ICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0g
Y29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5j
ZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0
b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAg
ICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5z
dGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNo
UHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBK
dW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNl
R1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Q
cm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAog
ICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0
aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwg
cmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFu
Y2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE1MSw0MCArMjI0LDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwog
Ci0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVz
cGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VW
YWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVu
IHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAg
IAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBj
ZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0
YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAs
IC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHBy
b3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25h
bDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1w
OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAg
eyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVt
cC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgewor
ICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAg
dmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0g
cHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRl
bXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2Uo
KnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigp
OworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAg
ICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9
CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAg
ICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3Jh
dGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Cisg
ICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZh
bCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVj
ayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMg
Y2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
ICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAg
ICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3Jh
dGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQ
UiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBA
IC0xOTksMTEgKzMyNSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0
cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlw
ZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMjExLDI4ICszNTUsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0Nl
bGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAg
IEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIo
RXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUp
KSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAg
IGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAg
ICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVV
bmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0g
YnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBp
bnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisg
ICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0Nl
bGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEz
ICs0MjksMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51
bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTI1NSwxMiArNDYzLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xl
YW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVy
bywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVh
bikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Jv
b2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSLCByZXN1bHRHUFIpOworI2Vsc2UKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAg
ICAgICAgICAgIHRlc3Q2NChaZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0OTksMjcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3Rlciwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNG
dWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0
R1BSLCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJl
clRhZ1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUyOSw1NiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiB+U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAg
ICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRh
ZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5k
NjQocmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAg
ICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRy
ZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwot
ICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQo
cmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShC
SUdJTlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IElu
c3RydWN0aW9uKikKQEAgLTMxMywxOCArNTk1LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Nl
bGxfd2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFy
ZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc05vdENl
bGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0
eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCAr
NjQ0LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2
YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmpl
Y3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5v
dENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFs
dWVUZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJv
dmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAg
ICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVn
VDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzcwOSwxMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhl
IHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjks
MTUgKzcyOCw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5s
aW5rKHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
bW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgewor
ICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5s
aW5rKHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0z
ODYsNTIgKzc3MSwyMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3Ry
aW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChzcmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJ
ZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNT
dHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8g
aXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8
IFNwZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBp
ZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBk
b25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAg
aWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07Cisg
ICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJS
ZWcgbmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
YW1lLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29s
ZWFuKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFpl
cm8sIHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUodmFsdWUpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgRlBSVGVtcCB0
ZW1wRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyB2YWx1ZUZQUiA9IHZhbHVlVGVt
cC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gdGVtcEZQUi5mcHIoKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYXV0byBub25aZXJvID0gYnJhbmNoRG91YmxlTm9uWmVybyh2
YWx1ZUZQUiwgc2NyYXRjaEZQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbm9uWmVyby5saW5rKHRo
aXMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcih2YWx1ZSkpIHsK
KyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVn
IHZhbHVlRlBSID0gdmFsdWVUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2hG
UFIgPSB0ZW1wRlBSLmZwcigpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vblplcm8gPSBi
cmFuY2hEb3VibGVOb25aZXJvKHZhbHVlRlBSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBub25aZXJvLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2hHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCB2YWx1ZUZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGludmVydCA9IHRydWU7CisgICAgICAg
ICAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCptX3ZtLCBKU1ZhbHVlUmVncyB7IHZhbHVl
VGVtcC5ncHIoKSB9LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIuZ3ByKCksIHZhbHVlRlBSLmZwcigp
LCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW52ZXJ0KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAg
Ly8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2Vk
IGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIg
dGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUg
aW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVl
KHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cg
Yml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5k
LCByZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlm
IHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJl
CisgICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUg
MCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAv
LyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0
YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSkpOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2Rl
Lm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRp
b24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVk
SW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09Q
UzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAg
ZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAg
ICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNj
cmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUg
PSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRp
dGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVj
dWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25k
aXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0
aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIo
MCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFu
ZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAq
dGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3Jh
dGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBG
UFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gx
R1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
Y29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk5NCwx
MjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigp
OworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAg
ICAgYXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0
Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNj
cmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiks
IHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUg
Y2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAK
KworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1w
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAg
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNH
bG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQotICAgIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlu
cHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
c2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2Ny
YXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBj
YXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVt
cChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzExMjUs
MjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikp
IHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFu
Y2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUwMCwxMCArMTE1MywyNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE4NCw0NDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9t
VmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBhdXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQ
UiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAg
c3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgZXF1YWwubGluayh0aGlz
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5j
aFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkp
KTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVk
KTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmso
dGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQorc3RhdGljIHZvaWQgY29tcGFyZVN0cmluZ3MoSklUJiBq
aXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYgbm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgsIEdQUlJl
ZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIsIEdQUlJlZyBsaHNUZW1wR1BSLCBHUFJSZWcgcmhzVGVt
cEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEdQUlJlZyBzY3JhdGNoMkdQUikKIHsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7
Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGxoc0dQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIGxoc1RlbXBHUFIpOwor
ICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc0dQUiwgSlNTdHJpbmc6
Om9mZnNldE9mVmFsdWUoKSksIHJoc1RlbXBHUFIpOworCisgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hJZlJvcGVTdHJpbmdJbXBsKGxoc1RlbXBHUFIpKTsKKyAgICBzbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwocmhzVGVtcEdQUikpOworCisgICAgaml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5n
dGhNZW1vcnlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIAorICAgIG5vdEVxdWFsLmFwcGVu
ZChqaXQuYnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3Ro
TWVtb3J5T2Zmc2V0KCkpLAorICAgICAgICBzY3JhdGNoR1BSKSk7CisgICAgCisgICAgZXF1YWwu
YXBwZW5kKGppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIp
KTsKKyAgICAKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxo
c1RlbXBHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKyAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0lt
cGw6OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKyAgICAKKyAgICBqaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkp
LCBsaHNUZW1wR1BSKTsKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
aHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCByaHNUZW1wR1BSKTsKKyAgICAK
KyAgICBhdXRvIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAKKyAgICBqaXQuc3ViMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CisKKyAgICB7CisgICAgICAg
IGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGxoc1RlbXBHUFIsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgYXV0
byBtYWNyb1NjcmF0Y2ggPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgIERpc2FsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
aml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmhzVGVtcEdQUiwgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgbWFjcm9TY3JhdGNoKTsKKyAgICAgICAgbm90
RXF1YWwuYXBwZW5kKGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0
Y2gyR1BSLCBtYWNyb1NjcmF0Y2gpKTsKKyAgICB9CisgICAgCisgICAgaml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZqaXQp
OworICAgIGVxdWFsLmFwcGVuZChqaXQuanVtcCgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCitzdGF0aWMgdm9pZCBj
b21wYXJlU3RyaWN0RXFDZWxscyhKSVQmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBl
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBub3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBzbG93UGF0aCwgR1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQUiwgR1BSUmVn
IGxoc1RlbXBHUFIsIEdQUlJlZyByaHNUZW1wR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgR1BSUmVn
IHNjcmF0Y2gyR1BSKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFk
ZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgZXF1YWwu
YXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgbGhzR1BSLCByaHNHUFIp
KTsKKworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikp
OworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOwor
CisgICAgYXV0byBsaHNJc1N0cmluZyA9IGppdC5icmFuY2hJZlN0cmluZyhsaHNHUFIpOworICAg
IG5vdEVxdWFsLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgIGxoc0lzU3RyaW5nLmxpbmsoJmpp
dCk7CisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2hJZk5vdFN0cmluZyhyaHNHUFIpKTsK
KworICAgIGNvbXBhcmVTdHJpbmdzKGppdCwgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhz
R1BSLCByaHNHUFIsIGxoc1RlbXBHUFIsIHJoc1RlbXBHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIEFTU0VSVCh1
c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1
YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2Ft
ZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDog
Tm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRl
cmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYg
KCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpT
VmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxs
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1i
b2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21w
YXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNH
UFIpOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAg
ICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgR1BSVGVt
cCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKworICAgICAg
ICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAg
ICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICBjb21wYXJlU3RyaW5n
cygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1Rl
bXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgbm90
RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8g
SlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91
YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7
CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJl
MzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6amVxSW1wbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEFTU0VSVCh1c2VM
T0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0g
c3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAg
ICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBD
b21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyks
IHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KHJocykpIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVn
KCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhz
R1BSKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAgIEdQUlRl
bXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEp1bXBM
aXN0IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgY29tcGFyZVN0cmluZ3MoKnRoaXMsIGVx
dWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1wLmdwcigpLCBy
aHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGlzRXEp
IHsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAg
ICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGFkZEp1bXAobm90RXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdw
Q29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJo
cykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAg
ICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcg
bGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihy
aHMpKSB7CisgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1Rl
bXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxk
IGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4o
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEs
IHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFu
Y2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
PigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVn
VDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdw
cigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7Cisg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BS
UmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIo
MHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
IHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BK
bmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMs
IHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQ
UiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAg
ICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUg
cmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9u
ZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1Qw
OworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBh
dXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE2MzUs
MjQwIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEg
PSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1f
cmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOwor
ICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhz
KSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVG
YWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChy
aHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmco
cmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICAgICAg
SnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAg
ICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgICAgICAgICBjb21wYXJl
U3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIs
IGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRz
dCk7CisKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOwor
ICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBM
aXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVT
dHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJo
c0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNj
cmF0Y2gyVGVtcC5ncHIoKSk7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aCk7CisKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9
IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291
bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSVGVtcCBsaHNTY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzU2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIGxoc1NjcmF0Y2hHUFIgPSBsaHNTY3JhdGNoLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJoc1NjcmF0Y2hHUFIgPSByaHNTY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICAgICAgICAg
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKIAogI2lmIFVTRShCSUdJTlQzMikKLSAg
ICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RF
cSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAg
Z290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJl
c3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQg
aXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBp
cyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVh
ZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFu
Y2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBK
U1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQg
b3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90
IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNl
dAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2
NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJy
YW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0g
ICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmlu
Z3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6
IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJp
Z0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJp
bmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KGZhbHNlKTsKKyNlbHNlCiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhv
cjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFs
dWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1
KTsKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgbm90
RXF1YWw7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxoc0lzQ2VsbCA9
IGJyYW5jaElmQ2VsbChsaHNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gYm90aE5vdENlbGxz
ID0gYnJhbmNoSWZOb3RDZWxsKHJoc0dQUik7CisgICAgICAgICAgICAgICAgbm90RXF1YWwuYXBw
ZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBsaHNJc0NlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJoc0dQUikpOwor
CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICAgICAgY29t
cGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQ
UiwgcmhzR1BSLCBsaHNTY3JhdGNoR1BSLCByaHNTY3JhdGNoR1BSLCB0ZW1wR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAg
ICAgICAgIGJvdGhOb3RDZWxscy5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0
J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAgICAg
Ly8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJ
bnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhz
R1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIEp1bXAg
cmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMp
OworCisgICAgICAgICAgICBpZiAoaXNFcSkKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICBKdW1wTGlzdCBkb25lOworICAgICAgICAgICAgZG9uZS5hcHBl
bmQoanVtcCgpKTsKKworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7
CisKKyAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisjZW5kaWYK
KyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVT
RShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAn
dHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0
ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290
byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAg
ICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAo
bGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2gg
aW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNl
ZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0
aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2ls
bCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAv
LyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9u
bHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9y
IGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUo
cmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0
T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAg
ICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEp
LCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBi
cmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNv
dmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwor
ICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5s
ZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRo
IGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJl
Z1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVn
cyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUp
OwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBh
cmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAg
ICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qy
KSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8v
IGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5s
aW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRo
aXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0
cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEs
IHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAg
ICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBp
dCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8g
aWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAg
ICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwor
ICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmlj
dEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Njc0LDY4ICsxODg2LDIwMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0
IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
bGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIFZp
cnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9v
bCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFs
IDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFs
QW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2
YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7Cisg
ICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJo
cykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3lt
Ym9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQ
UiwgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBKdW1w
TGlzdCBlcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAg
ICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgICAgIEdQUlRlbXAgbGhz
VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAg
ICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0
aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hU
ZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGlmIChpc0VxKSB7CisgICAgICAgICAg
ICAgICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIG5v
dEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBG
UFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJl
cihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2Vz
IGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVt
cCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNTY3JhdGNoR1BSID0gbGhz
U2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNTY3JhdGNoR1BSID0gcmhzU2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAyLmdwcigpOwogI2lmIFVTRShCSUdJTlQz
MikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAg
ICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8g
dGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdv
dG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBm
cmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3
aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVs
eSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAv
LyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5n
IDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRz
IGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdp
bGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMg
YWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUo
cmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhp
Z2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVn
VDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBv
cjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFs
LCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIp
OwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxl
c3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGgg
aWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikp
OworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAgICAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBK
dW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGF1dG8gbGVmdElzQ2VsbCA9IGJyYW5jaElmQ2VsbChsaHNH
UFIpOworICAgICAgICAgICAgICAgIGF1dG8gYm90aE5vdENlbGxzID0gYnJhbmNoSWZOb3RDZWxs
KHJoc0dQUik7CisgICAgICAgICAgICAgICAgbm90RXF1YWwuYXBwZW5kKGp1bXAoKSk7CisKKyAg
ICAgICAgICAgICAgICBsZWZ0SXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbm90
RXF1YWwuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyaHNHUFIpKTsKKworICAgICAgICAgICAgICAg
IEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxz
KCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzU2Ny
YXRjaEdQUiwgcmhzU2NyYXRjaEdQUiwgdGVtcEdQUiwgdGVtcDJHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGJvdGhOb3RDZWxs
cy5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hp
Y2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJs
ZS4KKyAgICAgICAgICAgIGF1dG8gbGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAgICAgICAg
ICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHRPSyA9IGJyYW5jaElm
SW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJo
c0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgaWYg
KGlzRXEpIHsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBsaHNHUFIs
IHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChlcXVhbCwgdGFyZ2V0
KTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfSBl
bHNlIHsgCisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGFkZEp1bXAobm90RXF1YWwsIHRh
cmdldCk7CisgICAgICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJ
R0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09
IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxs
IHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdv
dG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBs
ZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xl
IGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBp
ZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRy
aWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0
byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisg
ICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBi
ZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMg
YWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAg
ICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIp
OworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAg
ICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAg
ICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVn
VDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8g
Y292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7
CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1
bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBh
dGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5T
dHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
ICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJ
R0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3Ry
aW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xv
dyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3
aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBy
aWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8v
IEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNs
b3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwg
d2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0su
bGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpT
dHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdU
MCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNzQ4LDg5ICsyMDk1LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAg
ICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAg
R1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRv
IGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3Qp
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwot
Ci0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAg
ICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVj
QmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgewor
ICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAg
bW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlC
aWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRH
UFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNp
ZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisK
KyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNF
KEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJl
ci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJ
bnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50Lmxp
bmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3Ry
aW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNT
dHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDAp
OwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNy
Y1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVn
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNy
YykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2Jq
ZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RP
YmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDAp
KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
Ly8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAv
LyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlw
ZSBzdGF0ZS4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjM3NCwyMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShj
dXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAg
ICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBH
UFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVz
dWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC05MDUsOSArMjQwNSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0
IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwog
ICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFi
bGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwg
dGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRy
VGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdp
dGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4
KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsyNDMwLDE3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJl
Y29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9Owor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBp
bnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC05MzgsOTMgKzI0NTQsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7
Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7
CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9h
ZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAg
SnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5
dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRo
aXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFO
dWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9w
RXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RF
cXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNv
bXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFy
ZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVzdWx0R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDAp
OwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBj
b21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdElt
bWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBh
cmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNO
b3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
IAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdh
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lk
IEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJl
Z1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwot
Ci0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3
YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBs
PE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZl
IG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBD
IGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGlu
aXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2lu
dGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxp
ZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1f
Y29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7
ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChq
KSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBh
dXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3Jl
VHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVj
T3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAg
LTEwMzUsOSArMjYwNSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5z
dHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRT
Y29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3Bl
Q2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQ
UlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9
IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNj
b3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2Nv
cGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RP
dGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTA0NSwxMyArMjYyOSw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190
aGlzKGNvbnN0IEluc3RydWN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1l
dGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBi
eXRlY29kZS5tX3NyY0RzdDsKKyAgICBhdXRvIGlzU3RyaWN0ID0gYnl0ZWNvZGUubV9lY21hTW9k
ZS5pc1N0cmljdCgpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBs
b2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYXV0byBk
b25lID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0
KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzog
aXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVj
dWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRp
dHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkg
JiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAg
ICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbG9h
ZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGRvbmUgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwg
c3JjRHN0KTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHBy
b3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNT
dHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYXV0
byBkb25lID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAg
ICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7
CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICAgICAgbm90
Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0
KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNP
YmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMy
KGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KSk7CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBs
b2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyNzE0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2Fj
aGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBj
YWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBA
IC0xMDY4LDcgKzI3MjQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdp
c3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y2FsbGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3Bl
cmFuZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2Fs
bGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdw
clRlbXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsK
KworICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxs
b2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJU
ZW1wMi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAg
ICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlv
blJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdw
cigpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwg
Y2FsbGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihj
YWxsZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2NCArMjc2NiwzMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1
cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwog
ICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwog
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9i
amVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4o
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hC
b29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BS
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisg
ICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBh
bnl0aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTExNjIsOCArMjgxMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgp
OyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3Ig
dHlwZSBzdGF0ZS4KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxv
Y2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAg
ICAgIC8vIE9PUFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBP
U1IgZW50ZXIuCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0
aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAg
ICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0
ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpA
QCAtMTE4NywxMyArMjgzOSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVt
aXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYg
KGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
QEAgLTEyMDYsMTEgKzI4NTYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKKyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNv
IGl0IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3Vy
cmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApA
QCAtMTIzMywxMCArMjg4Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5k
KGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNl
X2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI4
OTIsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
anNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMs
IHJldHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyAr
MjkxMyw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2Rl
Lm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRl
Y2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4
ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAg
ICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFT
U0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsK
KyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEs
MjQgKzI5NzcsNDYgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMs
IGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAg
ICAgICAgc2NvcGUucmVzZXQoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJl
c3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxP
TCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNj
b3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwog
I2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNf
ZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMzA0
NywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1f
YXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICszMDY4LDI5IEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3Ro
OworCisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRl
bXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0g
dGVtcC0+Z3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ0dQUiA9PSByZXR1cm5WYWx1
ZUdQUik7CisgICAgfQorCisgICAgLy8gT09QUzogSW5saW5lIHRoZSBhbGxvY2F0aW9uIHBhdGgg
aGVyZSwgaXQgbWF0dGVycyBmb3Igc3Vuc3BpZGVyLWNyeXB0by1hZXMKKwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCBhcmdHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
YXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNl
bHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2Fk
KHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5k
aWYKIH0KIApAQCAtMTM4MSwxNSArMzEwNCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3Ry
dWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBl
bnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVl
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQ
UiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7
CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMzE1Myw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VM
T0wgPSBmYWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CkBA
IC0xNDM2LDYgKzMxODIsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGlsbEZvckNh
bGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSAr
MzIwOSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkCiAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklU
QXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFy
Z3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9
IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1
bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAg
CiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4LDEzICszMjI2LDE0IEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKIAogICAgIExhYmVsIG5leHRIb3RQ
YXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFs
SW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2Rl
LCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcgKzMyNTksODEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxs
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMs
IGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIGluZGV4VmFsdWUgeyAqdGhpcywg
aW5kZXggfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07
CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJS
ZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9m
ZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJ
ZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3Jh
Z2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1Qw
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKIAotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZM
aW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
cmVnVDEpOwotICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8
aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDApOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7
CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2Fj
aGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBK
dW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNo
R1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1
bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5s
aW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShpbmRleEdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0
cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91
dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0
KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmly
c3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgICAgIC8vIElmIGluZGV4IGlz
IGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBp
dCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSks
IHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3Mu
bGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJl
Z1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwor
ICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMzNDMsNTEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0g
ICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0
KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1w
OworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bklu
dDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGlu
ZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7
CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1w
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsK
KyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsK
KyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdU
MjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAgIEp1bXAgaW5Cb3Vu
ZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCBy
ZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGlu
ayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRj
aEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTU3NCwyMSArMzM5Nyw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRz
ID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcg
aW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPElu
dDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51
bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRv
ckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRv
ckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRl
eEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVy
YXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBp
bmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5h
bWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAs
IHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCks
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBs
b2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3Vs
dEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzQ1MSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBlTG9jYXRpb24qIGNh
Y2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVy
OwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4
LDYgKzM1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB2
b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNo
YWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENh
bGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25B
cmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4i
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRv
d0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzUzMCw5IEBAIHZvaWQgSklUOjplbWl0
X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JD
YWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5v
bkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBw
cm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAgLTE2ODQsNiArMzU0
NSwxOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0SXNDYWxsYWJsZUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICBhdXRvIGlzRnVuY3Rpb24g
PSBicmFuY2hJZkZ1bmN0aW9uKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBub3RPYmplY3QgPSBi
cmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUik7CisgICAgICAgIAorICAgICAgICBhdXRvIHNsb3dQ
YXRoID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8
IE92ZXJyaWRlc0dldENhbGxEYXRhKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIAorICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBkb25lID0ganVt
cCgpOworICAgICAgICAKKyAgICAgICAgaXNGdW5jdGlvbi5saW5rKHRoaXMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworCisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfaXNfY2FsbGFibGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBlbWl0SXNDYWxsYWJsZUltcGw8T3BJc0NhbGxhYmxlPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0SXNDYWxsYWJs
ZUltcGw8T3BUeXBlb2ZJc0Z1bmN0aW9uPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUeXBlb2ZJc09iamVjdD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2Vs
bChpbnB1dEdQUik7CisgICAgICAgIAorICAgICAgICBhdXRvIGlzTnVsbCA9IGJyYW5jaElmRXF1
YWwoSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9LCBqc051bGwoKSk7CisgICAgICAgIGF1dG8gaXNO
b25OdWxsTm9uQ2VsbCA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRo
aXMpOworICAgICAgICBhdXRvIGlzRnVuY3Rpb24gPSBicmFuY2hJZkZ1bmN0aW9uKGlucHV0R1BS
KTsKKyAgICAgICAgYXV0byBub3RPYmplY3QgPSBicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUik7
CisgICAgICAgIAorICAgICAgICBhdXRvIHNsb3dQYXRoID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IE92ZXJyaWRlc0dldENhbGxEYXRhKSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIAor
ICAgICAgICBpc051bGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBkb25lID0ganVtcCgp
OworICAgICAgICAKKyAgICAgICAgaXNOb25OdWxsTm9uQ2VsbC5saW5rKHRoaXMpOworICAgICAg
ICBpc0Z1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9
CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fdmFsdWU7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJh
bmQgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25lOworICAgICAgICBKdW1wIHNsb3dQYXRo
OworICAgICAgICBlbWl0VHlwZU9mKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQ
UiB9LCByZXN1bHRHUFIsCisgICAgICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBm
YWxsc1Rocm91Z2gpIHsKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bS0+
c21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIGlmICghZmFsbHNUaHJvdWdoKQorICAgICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChq
dW1wKCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAoSnVtcCB0aGVTbG93UGF0
aCkgeworICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gdGhlU2xvd1BhdGg7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgfSBlbHNl
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGlucHV0R1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKKyAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUq
PihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSkpOworICAg
IEpTVmFsdWUgaW5pdGlhbFZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2Rl
Lm1faW5pdGlhbFZhbHVlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc3lt
Ym9sVGFibGUtPnNpbmdsZXRvbigpLmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBlbWl0
U2xvd09wKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCwgY3VycmVudEluc3Ry
dWN0aW9uLCBkc3QsIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgc2NvcGVUZW1wIHsgKnRoaXMsIHNjb3BlIH07
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAq
dGhpcyB9OworCisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlVGVtcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRo
OworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxKU0xleGljYWxFbnZpcm9ubWVu
dD4oCisgICAgICAgICAgICAqbV92bSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKSwgYnV0dGVyZmx5LCBz
Y3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsCisgICAgICAgICAgICBzbG93UGF0aCwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKHN5bWJvbFRhYmxlKSk7CisKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAvLyBEb24ndCBuZWVkIGEgbWVtb3J5IGJhcnJpZXJzIHNpbmNlIHdlIGp1c3QgZmFzdC1jcmVh
dGVkIHRoZSBhY3RpdmF0aW9uLCBzbyB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbiBtdXN0IGJl
IHlvdW5nLgorICAgICAgICBzdG9yZVB0cihzY29wZUdQUiwgQWRkcmVzcyhyZXN1bHRHUFIsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
c3ltYm9sVGFibGUpLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mU3ltYm9sVGFibGUoKSkpOworICAgICAgICAgICAgCisgICAgICAgIC8vIE11c3QgaW5p
dGlhbGl6ZSBhbGwgbWVtYmVycyB0byB1bmRlZmluZWQgb3IgdGhlIFREWiBlbXB0eSB2YWx1ZS4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN5bWJvbFRhYmxlLT5zY29wZVNpemUo
KTsgKytpKQorICAgICAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoaW5pdGlhbFZhbHVlLCBBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUoU2Nv
cGVPZmZzZXQoaSkpKSk7CisgICAgICAgIAorICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwor
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQp
CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzAyLDExICszNzUwLDIwIEBAIHZvaWQgSklU
OjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFs
dWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwotICAgIGJveEludDMy
KHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxl
UmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzM3NzEsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUu
bV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NU
aGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1YjMyKElt
bTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3Ro
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMyKG51bVBhcmFtc1Rv
U2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZXN1bHRHUFIp
OworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVyb0xlbmd0aC5saW5r
KHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBz
dWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgYm94SW50
MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHplcm9MZW5ndGgubGlu
ayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSks
IHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzgyMCw5OSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAg
ICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGlu
ayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1lbnRP
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0z
MihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0g
ICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50
T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7
CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZh
bHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQ
UikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2Fk
UHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3Jh
dGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3Vs
dEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVj
T3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMs
IHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1
ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qz
LCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFT
U0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVS
ZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwog
Ci0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI0LDYgKzE0
MjQsOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGFyCiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICAvL2RhdGFMb2dMbigiY29tcGFyZUxl
c3MsIGxoczogIiwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCAiIHJoczogIiwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKICAgICAKICAgICByZXR1cm4ganNMZXNzPHRydWU+KGds
b2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMikpOwogfQpAQCAtMTQ5MSw2ICsxNDkzLDggQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIEpTVmFsdWUgc3JjMSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIHNyYzIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMik7CiAKKyAgICAvL2RhdGFMb2dMbigic3RyaWN0ZXEsIGxoczogIiwgc3JjMSwgIiByaHM6
ICIsIHNyYzIpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGdsb2JhbE9iamVj
dCwgc3JjMSwgc3JjMik7CiB9CiAKQEAgLTE4NzksNyArMTg4Myw3IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBv
cHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgQVNTRVJU
KG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQob3B0aW1pemVk
Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQob3B0aW1pemVkQ29kZUJsb2NrICYm
IEpJVENvZGU6OmlzREZHT3JGVEwob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAg
ICAKICAgICBpZiAodm9pZCogZGF0YUJ1ZmZlciA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KHZtLCBj
YWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAg
Q09ERUJMT0NLX0xPR19FVkVOVChvcHRpbWl6ZWRDb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQg
YmMjIiwgYnl0ZWNvZGVJbmRleCkpOwpAQCAtMzQzMyw2ICszNDM3LDQyIEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja0kKICAgICByZXR1cm4gMDsKIH0KIAorSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdywg
dm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSkKK3sKKyAgICAvLyBJdCdzIHNvcnQgb2Yg
cHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5n
IHNvIHdvdWxkbid0CisgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCisgICAgRGVmZXJHQ0Zv
ckFXaGlsZSBkZWZlckdDKGxvbENvZGVCbG9jay0+dm0oKS5oZWFwKTsKKworICAgIGlmIChnZXRl
bnYoInByaW50RWFjaEpldHRpc29uIikgJiYgISFhdG9pKGdldGVudigicHJpbnRFYWNoSmV0dGlz
b24iKSkpCisgICAgICAgIGRhdGFMb2dMbigiamV0dGlzb24sIGZvcmNpbmcgcmVvcHQgbm93OiAi
LCAqbG9sQ29kZUJsb2NrKTsKKyAgICBsb2xDb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmls
ZVByZWRpY3Rpb25zKCk7CisgICAgCisgICAgLy8gT09QUzogcHJvY2VzcyB2YWx1ZSBwcm9maWxl
cyBoZXJlLCBzaW5jZSB3ZSdyZSBqZXR0aXNvbmluZywgaG9wZWZ1bGx5IHRoZXkgdXBkYXRlIHcv
IHRoaW5ncyB3ZSBjYXJlIGFib3V0LgorCisgICAgc2FuaXRpemVTdGFja0ZvclZNKGxvbENvZGVC
bG9jay0+dm0oKSk7CisKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICps
b2xDb2RlQmxvY2ssICI6IEVudGVyZWQgcmVvcHRpbWl6ZSBmcm9tIExPTCIpOworCisgICAgQ29k
ZUJsb2NrKiBsbGludENvZGVCbG9jayA9IGxvbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAg
ICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrLgorICAg
IEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShsbGludENvZGVCbG9jay0+aml0VHlwZSgp
KSk7CisKKyAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gbGxpbnRDb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCk7CisgICAgaWYgKCFyZXBsYWNlbWVudCB8fCByZXBsYWNlbWVudCA9PSBsbGludENv
ZGVCbG9jaykgeworICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICps
bGludENvZGVCbG9jaywgIjogTm90IHJlb3B0aW1pemluZyBMT0wgYmVjYXVzZSB3ZSd2ZSBhbHJl
YWR5IGJlZW4gamV0dGlzb25lZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IE90aGVyd2lzZSwgdGhlIHJlcGxhY2VtZW50IG11c3QgYmUgb3B0aW1pemVkIGNvZGUuIFVzZSB0
aGlzIGFzIGFuIG9wcG9ydHVuaXR5CisgICAgLy8gdG8gY2hlY2sgb3VyIGxvZ2ljLgorICAgIEFT
U0VSVChsbGludENvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSk7CisgICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChsb2xDb2RlQmxvY2stPmppdFR5cGUoKSkpOwor
CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IHN0dWNrIGluIGEgbG9vcCBsb2dpYworICAgIGxv
bENvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PU1JFeGl0LCBDb3Vu
dFJlb3B0aW1pemF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJO
SU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMxOSw4IEBAIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uVmFsdWUKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywgdm9pZCwgKFZN
KikpOwogCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9w
dGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSk7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBA
IC0yODEsOCArMjc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAK
ICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2Ug
cmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTk4LDggKzU5MSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
cnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYzOSw4ICs2MzAsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02ODYsOCArNjc1LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03MjksOCArNzE2LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03
NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtODE5LDggKzgw
Miw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTExMDAsOCArMTA4MSw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTI1Nyw4ICsx
MjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYg
KHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKQEAg
LTUyLDUxICs1NCwxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
YmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
aW5kZXhpbmdUeXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9
IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0g
cmVzdWx0R1BSOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAg
ICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAg
ICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50
aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVy
cygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0g
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2Zp
bGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVzZUxPTCgp
IHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNr
KSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVH
UFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJv
bChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShi
YXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNl
IGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmlu
ZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0
cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5k
ZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwor
ICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMDUsNDEgKzE3Myw3MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9u
YW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0
eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0g
cmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdz
KTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIEFTU0VSVCho
YXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAg
IEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAogICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAg
ICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xNTcsNiArMjU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8o
bV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBk
byBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25z
dGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50
KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5
VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAKKyAgICBhdXRvIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwor
ICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBwcm9w
ZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnMs
IHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1dEtpbmQpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3
aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0zMzksNyArNDQ0LDcg
QEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBn
ZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Nyw3ICs0NTIsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
OwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0
byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1
dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9h
ZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBn
ZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAg
IGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkp
OworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkp
OwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzgxLDYgKzQ4NSw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9j
b2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JD
YWxsKCk7IC8vIE9PUFM6IERvIGJldHRlciBpZiB3ZSBjYW4hCisKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7CiAKQEAgLTM5NCwxMyArNTAwLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgZmFzdFBhdGhK
bXAsIGRvbmUsIGRvbmUpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFBy
aXZhdGVOYW1lPigpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIFByaXZhdGVG
aWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKIAotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKQEAgLTQyMCw0OSArNTI1LDEwNSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBh
Y2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0g
YWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAg
ICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9OworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBnZXR0ZXJH
UFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0ZXIuZ3By
KCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwor
ICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJl
Z1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jh
c2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1f
cHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVj
b2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0
dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNj
ZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vz
c29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMs
IGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1
dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2MzMsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJh
c2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2g7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFz
ZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRl
Q2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAog
ICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBp
ZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0
IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3Rl
cnMuCkBAIC00OTIsMjUgKzY4NywyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNb
bV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0LmdwcigpOwor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOwor
CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9w
ZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5R1BSID0g
cmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQ
UiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ug
c2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdy
aXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU0
MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVs
QnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVH
UFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6
OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlk
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVz
dWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6
R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKLSAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICAKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BS
ID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgR1BSUmVn
IGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0R1BSIDogcmVnVDE7CisgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIs
ICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsK
ICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0
aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0
aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwog
Ci0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
LSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRoaXNW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFz
ZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7Cisg
ICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0g
cmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVn
KTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwor
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dpdGhU
aGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAgICAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9n
ZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
VlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBi
b3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBv
aW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2Fk
ZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0g
ICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUg
c2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
YXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAg
dmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwg
dmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJh
c2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9k
ZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0
ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03NjUsNzcgKzExNjAsOTUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAv
LyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0
aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywg
U2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1
ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3Vs
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7Cisg
ICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BS
KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlk
c1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNb
bV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BS
KQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJl
c3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRz
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0NywxNyArMTI2MCwyNSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRh
dGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFs
dWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50
U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKQEAgLTg2NywyMSArMTI4OCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVC
bG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUp
LCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0
LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7Cisg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAg
ICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29w
ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBk
ZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBM
b2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODk0
LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAK
QEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Cisg
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk0MCwxNSArMTM3NiwyMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lk
IEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0
cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1
Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFpl
cm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1
cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2lu
dGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBAIC05NjIsMTIgKzE0MDMsNiBAQCB2
b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcs
IHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rlcikp
LCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05NzgsNTEgKzE0MTMs
ODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAg
dWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1l
dGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0g
cmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBH
UFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1Qy
OworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAg
ICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcg
c2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAg
ICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAg
ICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZz
ZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVz
IGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZl
X3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAg
ICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIo
b3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9m
ZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAg
ICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZz
ZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAg
IEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQ
UiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAg
YWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAg
ICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gp
OwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRj
aCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVz
dWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRT
bG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1
cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywg
c2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZz
ZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHlu
YW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0x
MDM2LDEwICsxNTA0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
c3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1
bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTEwNTIsMjcgKzE1MjAsMjcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2Fk
IFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Miw0MCArMTU1MCwyMiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
LCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwor
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRy
KHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2lu
dFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihh
ZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTEyOSwyMSArMTU3OSw0OSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50
cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRh
dGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFs
dWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRW
YWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOworICAg
ICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsK
KyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
ICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY29w
ZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9m
ZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0ZXJm
bHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7CisgICAg
ICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQ
Uiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1
bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90
LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQ
dHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBi
dXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BS
KTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOworICAgICAgICAgICAgc3RvcmVQdHIo
dmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwor
CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICAgICAgaWYgKCFpc0lu
aXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBu
ZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgogICAgICAgICAgICAgICAgIGlmIChp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwg
Jm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAg
IGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkp
CisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdU
MDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQ
Uik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJl
c3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsg
KCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2Fz
ZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAgLTExOTAsMTIg
KzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7Cisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9j
ayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0
ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVz
ZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2Ny
YXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikp
OworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1
dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KIAogICAgICAg
ICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAgLTEyMDksMjMgKzE3MjUsMzIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KICAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVl
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3Jh
dGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5y
ZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUg
ZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93
biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAg
ICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjYxLDYxICsxNzg0LDE3OCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBi
eXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owor
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1Zh
bHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIp
OworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVn
VDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgbG9hZDY0
KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSAr
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIo
YXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1
ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsK
KyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICB2
YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3Vt
ZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKyAgICAKKyAgICBz
dG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7
CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkK
KyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Cisg
ICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdo
dCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBp
dCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0
byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxv
YyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAg
ICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwg
KyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lz
dGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJC
YXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgICAgIGlmICgh
KHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
KSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICAg
ICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgaWYgKCF1
c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsKKyAgICAgICAg
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Z3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBH
UFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAgICAgaWYgKGdwckZvck9wZXJhbmQo
b3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBvd25lckdQUiA9IGdwckZvck9w
ZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG93bmVyVmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgb3duZXJHUFIpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVy
LCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkK
LSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShvd25lcikgJiB+
U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKG93
bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBi
YXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQUik7CisgICAg
T3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNjcmF0
Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3Jl
Q2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgs
ICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxs
QWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxsLmlz
U2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAK
KyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGlu
ayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIC8vIE9PUFM6IE1ha2UgaXQg
c28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlz
IG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8g
cmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkg
aXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGlt
ZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdl
IGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAg
IEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQot
ICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFs
dWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkg
JiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAotICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlz
U2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMTMyNywx
MSArMTk2NywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBi
YXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAg
ICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxG
aWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zm
c2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsxOTk2LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgp
KSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAq
dGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBL
bm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOwor
CisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6
b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZSB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9u
Kik7CkBAIC0xNDQ3LDggKzIxMTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQog
ewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW47Cisg
ICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNj
cmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFu
Y2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlvbmFsPFNpbGVu
dFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNw
aWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
IH0KIApAQCAtMTQ2Niw2ICsyMTUxLDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJD
aGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNTY3LDYgKzIyNTQsOCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxz
ZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9wY29k
ZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3RE
aXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29k
ZUJsb2NrKQogewogICAgIEFTU0VSVF9VTlVTRUQocHJvZmlsZWRERkdDb2RlQmxvY2ssICFwcm9m
aWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAg
ICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5nIGNv
bXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgZGlkIGJlY29tZSByZWFkeS4iKTsKICAgICAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
awogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJs
b2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgQVNTRVJUKCFwcm9maWxlZERG
R0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICAKICAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0
aW9uIG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxNSArMzEsMjIgQEAKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJW
TUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorCiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSklUV29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
SklUV29ya2xpc3Q6OlBsYW4+IHsKIHB1YmxpYzoKLSAgICBQbGFuKENvZGVCbG9jayogY29kZUJs
b2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIDog
bV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwg
Y29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIFBsYW4oQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXgg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgOiBtX2xsaW50Q29kZUJsb2NrKGNv
ZGVCbG9jaykKKyAgICAgICAgLCBtX2NvZGVCbG9ja1RvQ29tcGlsZShjb21waWxlVHlwZSA9PSBK
SVQ6OkNvbXBpbGVUeXBlOjpMT0wgPyBtX2xsaW50Q29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgp
IDogbV9sbGludENvZGVCbG9jaykgCisgICAgICAgICwgbV9qaXQobV9jb2RlQmxvY2tUb0NvbXBp
bGUtPnZtKCksIG1fY29kZUJsb2NrVG9Db21waWxlLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBhcmF0
aW9uQmVmb3JlQ29tcGlsZSgpOworICAgICAgICAvLyBPT1BTOiB2aXNpdCB0aGlzIGluIGNvbmN1
cnJlbnQgZ2MKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRDb2Rl
QmxvY2spIHsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAucHJv
dGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlSW5UaHJlYWQoKQpAQCAtNTMsMTcgKzYwLDIzIEBAIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKCkKICAgICB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9
IG1faml0LmxpbmsoKTsKKworICAgICAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4aXQo
WyZdIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29k
ZUJsb2NrKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAu
dW5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfSk7CisKICAgICAgICAg
c3dpdGNoIChyZXN1bHQpIHsKICAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUi
LCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKKyAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZF
TlQobV9sbGludENvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFp
bGVkIikpOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAi
ICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
ZG9udEpJVEFueXRpbWVTb29uKCk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRGYWls
SklUQ29tcGlsYXRpb24gPSB0cnVlOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+ZG9u
dEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5tX2RpZEZh
aWxKSVRDb21waWxhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNh
c2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIpOwotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+aml0U29vbigpOworICAgICAgICAg
ICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSht
X2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5qaXRT
b29uKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzEsOCArODQsOCBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJl
dHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52
bSgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tLZXkoKSB7IHJldHVybiBtX2xsaW50Q29k
ZUJsb2NrOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jay0+dm0oKTsg
fQogICAgIAogICAgIGJvb2wgaXNGaW5pc2hlZENvbXBpbGluZygpCiAgICAgewpAQCAtODAsMTUg
KzkzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNGaW5pc2hlZENvbXBpbGluZzsK
ICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIHN0YXRp
YyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUg
Y29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAg
ICB7Ci0gICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7CiAgICAg
ICAgIHBsYW4uZmluYWxpemUoKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2xsaW50Q29kZUJsb2NrOworICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2tUb0NvbXBpbGU7CiAgICAgSklUIG1faml0OwogICAgIExvY2sg
bV9sb2NrOwogICAgIGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nIHsgZmFsc2UgfTsKQEAgLTIz
Myw5ICsyNDcsMTEgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawog
ICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQorCisgICAgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSA9IE9wdGlvbnM6OmZv
cmNlTE9MKCkgPyBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgOiBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNl
bGluZTsKICAgICAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgewotICAg
ICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBA
IC0yNDksNyArMjY1LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9j
awogICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewogICAgICAg
ICAgICAgbV9wbGFubmVkLmFkZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBsYW4+
IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBs
YW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwog
ICAgICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX3F1ZXVlLmFw
cGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsK
QEAgLTI3MywxNCArMjg5LDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2Rl
QmxvY2sKICAgICAvLyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUuIElmIHRoZSBjb25jdXJy
ZW50IEpJVCB0aHJlYWQgaXMgY29udm95ZWQsIHdlIHJldmVydCB0byBtYWluCiAgICAgLy8gdGhy
ZWFkIGNvbXBpbGVzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhcyBnb29kIGFzIGlmIHdlIGhhZCBt
dWx0aXBsZSBKSVQgdGhyZWFkcy4gTWF5YmUgd2UKICAgICAvLyBjYW4gZG8gdGhhdCBzb21lZGF5
LgotICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KTsKKyAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogfQogCisvKgogdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGls
ZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bmspCisKKyAgICBhdXRvIGlzQ29tcGlsZWQgPSBbJl0geworICAg
ICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
aykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIGJvb2wgaXNQbGFubmVkOwpAQCAtMjk2LDE3ICszMjIsMjQgQEAg
dm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIAogICAgIH0KICAgICAKICAg
ICAvLyBOb3cgaXQgbWlnaHQgYmUgY29tcGlsZWQhCi0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisgICAgaWYgKGlzQ29tcGlsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQg
cHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRoIHRo
ZQotICAgIC8vIGJhc2VsaW5lIEpJVC4KLSAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0YSgpOwot
ICAgIAotICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCi0gICAgSklUOjpjb21waWxlKHZtLCBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOwotICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNv
ZGVCbG9jayk7CisKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VMT0woKSkgeworICAgICAgICBDb2Rl
QmxvY2sqIGxvbENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAgICAg
ICAgSklUOjpjb21waWxlKHZtLCBsb2xDb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2Vs
aW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKKyAgICAgICAgbG9sQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
bG9sQ29kZUJsb2NrKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBkbyB0aGlzIGluIGNh
c2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBp
bGUgd2l0aCB0aGUKKyAgICAgICAgLy8gYmFzZWxpbmUgSklULgorICAgICAgICBjb2RlQmxvY2st
PnJlc2V0SklURGF0YSgpOworICAgICAgICAKKyAgICAgICAgLy8gT0ssIGp1c3QgY29tcGlsZSBp
dC4KKyAgICAgICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6
OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKKyAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENv
ZGUoY29kZUJsb2NrKTsKKyAgICB9CiB9CisqLwogCiB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6
ZVBsYW5zKFBsYW5zJiBteVBsYW5zKQogewpAQCAtMzE0LDcgKzM0Nyw3IEBAIHZvaWQgSklUV29y
a2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG0KICAgICAgICAgcGxhbi0+ZmluYWxpemUoKTsK
ICAgICAgICAgCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAgICBt
X3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9jaygpKTsKKyAgICAgICAgbV9wbGFubmVkLnJl
bW92ZShwbGFuLT5jb2RlQmxvY2tLZXkoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcg
KzU1LDYgQEAgcHVibGljOgogICAgIHZvaWQgcG9sbChWTSYpOwogICAgIAogICAgIHZvaWQgY29t
cGlsZUxhdGVyKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sq
LCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApKTsKICAgICAKICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0
KCk7CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxs
KCk7CkBAIC02Niw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgVGhyZWFkOwogICAgIGZy
aWVuZCBjbGFzcyBUaHJlYWQ7CiAgICAgCisgICAgLy92b2lkIGNvbXBpbGVOb3coQ29kZUJsb2Nr
KiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKSk7CiAgICAgdm9pZCBmaW5hbGl6ZVBsYW5zKFBsYW5zJik7CiAgICAgCiAgICAgUGxhbnMg
bV9xdWV1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBv
cGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9w
ZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRl
OgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3Rl
cnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0Nv
ZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8
IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCisg
ICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2RlQmxv
Y2stPmppdFR5cGUoKSkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCku
bGFiZWxBdE9mZnNldCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQ
YXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1Bh
dGhDYWxsLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoK
IAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAg
IC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAg
ICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5H
KQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0
aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2Rl
T2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4ICsz
NjMsMTAgQEAgaW5saW5lIGJvb2wgc2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsbwogfQogCiAv
LyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCi1pbmxpbmUgYm9vbCBqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKQor
aW5saW5lIENvZGVCbG9jayogaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKKyAgICAvLyBPT1BTOiBJbXBsZW1lbnQgdGhpcyB3LnIu
dCBMT0wuCisKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15IGNh
bGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0MgaGVy
ZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAKQEAgLTM3Mywy
OSArMzc1LDQ1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAg
ICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhy
ZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVD
b3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAi
ICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgSklUV29ya2xp
c3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucG9sbCh2bSk7Ci0gICAgCisKKyAgICBhdXRvIGxv
bENvZGVCbG9jayA9IFsmXSgpIC0+IENvZGVCbG9jayogeworICAgICAgICBpZiAoQ29kZUJsb2Nr
KiByZXBsYWNlbWVudCA9IGNvZGVCbG9jay0+b3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAg
ICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisgICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVC
bG9jaygpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCiAgICAgc3dpdGNoIChjb2RlQmxvY2st
PmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkg
Y29tcGlsZWQuIik7CiAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKICAgICB9CiAgICAgY2FzZSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rOiB7CiAgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9i
YWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRlcihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQ7CisgICAgICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2soKSkK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgICAgIHJldHVybiBjb2RlQmxv
Y2s7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAg
ICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ss
ICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBkYXRhTG9nKCJVbmV4cGVj
dGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBl
bnRyeU9TUihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQogewogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwKICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCAiLCBuYW1lLCAi
IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLApAQCAtNDA2LDE4ICs0MjQsMjEgQEAgc3RhdGljIFNs
b3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogICAgICAgICBMTElOVF9SRVRVUk5fVFdP
KG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7
Ci0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKSkKKyAg
ICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJpc3Rp
Y3Modm0sIGNvZGVCbG9jayk7CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykKICAgICAgICAg
TExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKGNvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7CisgICAg
Q09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgiaW4g
cHJvbG9ndWUiKSk7CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVC
bG9jayk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gUHJvbG9ndWUpCi0gICAgICAgIExMSU5UX1JF
VFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxw
dHIpOworICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2Rl
KCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChraW5kID09IEFy
aXR5Q2hlY2spOwotICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmFk
ZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRy
KTsKKyAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmFk
ZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRy
KTsKIH0KICNlbHNlIC8vIEVOQUJMRShKSVQpCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVu
dHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQorc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKIHsKICAgICBjb2RlQmxvY2stPmRvbnRK
SVRBbnl0aW1lU29vbigpOwogICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7
CkBAIC00MjcsMzEgKzQ0OCwzMSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NS
KENvZGVCCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVu
dHJ5X29zciIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9T
TE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAi
ZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRy
eU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgp
KS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlv
bl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAg
ICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVl
KCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1Io
Y2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpz
RXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlv
bl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChl
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURfUEFS
QU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJl
dHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5q
c0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hl
Y2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29k
ZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9h
cml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwg
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUo
KS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KGxvb3Bfb3NyKQpAQCAtNDgwLDE5ICs1MDEsMjIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9v
cF9vc3IpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAg
fQogICAgIAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9j
aywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpCisgICAgQ29kZUJsb2NrKiBjb21waWxlZENv
ZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAg
ICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJM
T0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxv
Y2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogCi0g
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICBBU1NFUlQoY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCB8fCBjb21waWxlZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCk7CiAKLSAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrLT5qaXRDb2Rl
TWFwKCk7CisgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvbXBpbGVkQ29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29k
ZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAg
IEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKKworICAg
IGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAgICBM
TElOVF9SRVRVUk5fVFdPKGp1bXBUYXJnZXQsIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKICNl
bHNlIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsMTAgQEAgc3Rh
dGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0
ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIE9wdGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAg
ICBPcHRpb25zOjpmb3JjZUxPTCgpID0gMTsKKyAgICBPcHRpb25zOjp1c2VMTEludCgpID0gMTsK
KwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlv
bkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNyw2
ICs1MjcsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2
KEJvb2wsIHVzZUpJVENhZ2UsIGNhblVzZUpJVENhZ2UoKSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihCb29sLCB1c2VQdWJsaWNTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHVibGljIHN0YXRpYyBkYXRhIGZpZWxk
cyBpbnNpZGUgY2xhc3Nlcy4iKSBcCiAgICAgdihCb29sLCB1c2VQcml2YXRlU3RhdGljQ2xhc3NG
aWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5k
IHByaXZhdGUgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAgICB2KEJv
b2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKQogCiBlbnVtIE9wdGlvbkVxdWl2
YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9j
ZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBsbGlu
dF9oYW5kbGVfdWNhdWdodF9leGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0IHRo
aXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwotICAgICAgICAg
ICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9M
SklUKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHMgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW5wcm9jZXNzZWRTdGFja1RyYWNlLmxs
aW50UEMpKTsKICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5dGVj
b2RlSW5kZXgoYml0cywgdG9wQ29kZUJsb2NrKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyArMzk4LDggQEAgc3RhdGljIHZvaWQgc2V0dXBMTElu
dChDb2RlQmxvY2sqIGNvZGVCbAogc3RhdGljIHZvaWQgc2V0dXBKSVQoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQotICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkKTsKKyAgICAvLyBPT1BTOiBGaWd1cmUgb3V0IHdoYXQgd2Ugd2FudCB0byBkbyB3aXRo
IHRoZSBubyBMTEludCBvcHRpb24uLi4uCisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0g
SklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPT0g
Q29tcGlsYXRpb25TdWNjZXNzZnVsKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxz
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVzdFJ1bm5lclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOSBAQCBKU1Zh
bHVlIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZSB0aGVGCiB7CiAgICAgYm9vbCBwcmV0ZW5k
VG9IYXZlTWFueUNvbXBpbGVzID0gZmFsc2U7CiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYg
KCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOyAvLyBP
T1BTCisKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VCYXNlbGlu
ZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAgICAgcHJldGVuZFRvSGF2ZU1h
bnlDb21waWxlcyA9IHRydWU7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcg
QEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChmb3VuZENvZGVC
bG9jay0+aml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGZvdW5kQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2so
Km1fbG9jayk7CiAgICAgICAgIGlmICghbG9ja2VyKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBM
ZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCkBAIC0xODIsNyArMTgyLDcgQEAg
dm9pZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhYwogCiAgICAgd2hpbGUgKGNh
bGxGcmFtZSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRD
b2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgICAgIGNvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKTsKICAgICAgICAg
Y2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICB9Cklu
ZGV4OiBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkocmV2aXNpb24gMjcxMzc2KQorKysgVG9vbHMvU2NyaXB0
cy9jb21wYXJlLXJlc3VsdHMJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw4ICsxODIsOCBAQCBkZWYg
Y29tcHV0ZU11bHRpcGxlSHlwb3RoZXNlc1NpZ25pZmljYW5jCiAKIGRlZiBkdW1wQnJlYWtkb3du
cyhhLCBiKToKICAgICBuYW1lTGVuZ3RoID0gbGVuKCJzdWJ0ZXN0IikKLSAgICBhTGVuZ3RoID0g
bGVuKGFbdW5pdE1hcmtlcl0pCi0gICAgYkxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKQorICAg
IGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkgKyAzCisgICAgYkxlbmd0aCA9IGxlbihhW3Vu
aXRNYXJrZXJdKSArIDMKICAgICByYXRpb0xlbmd0aCA9IGxlbigiYiAvIGEiKQogCiAgICAgcFZh
bHVlSGVhZGVyID0gInBWYWx1ZSAoc2lnbmlmaWNhbmNlIHVzaW5nIEZhbHNlIERpc2NvdmVyeSBS
YXRlKSIKQEAgLTIxMiw3ICsyMTIsNyBAQCBkZWYgZHVtcEJyZWFrZG93bnMoYSwgYik6CiAgICAg
cExlbmd0aCArPSAyCiAKICAgICBzdHJpbmdzID0gW10KLSAgICBzdHJpbmdzLmFwcGVuZCgifHtr
ZXk6XntuYW1lTGVuZ3RofX18e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9
fSB8e2NvbXBhcmU6XntyYXRpb0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0
KGtleT0ic3VidGVzdCIsIGFTY29yZT1hW3VuaXRNYXJrZXJdLCBiU2NvcmU9Ylt1bml0TWFya2Vy
XSwgbmFtZUxlbmd0aD1uYW1lTGVuZ3RoLCBhTGVuZ3RoPWFMZW5ndGgsIGJMZW5ndGg9Ykxlbmd0
aCAsIGNvbXBhcmU9ImIgLyBhIiwgcmF0aW9MZW5ndGg9cmF0aW9MZW5ndGgsIHBNYXJrZXI9cFZh
bHVlSGVhZGVyLCBwTGVuZ3RoPXBMZW5ndGgpKQorICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpe
e25hbWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7
Y29tcGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5
PSJzdWJ0ZXN0IiwgYVNjb3JlPSJhOiAiICsgYVt1bml0TWFya2VyXSwgYlNjb3JlPSJiOiAiICsg
Ylt1bml0TWFya2VyXSwgbmFtZUxlbmd0aD1uYW1lTGVuZ3RoLCBhTGVuZ3RoPWFMZW5ndGgsIGJM
ZW5ndGg9Ykxlbmd0aCAsIGNvbXBhcmU9ImIgLyBhIiwgcmF0aW9MZW5ndGg9cmF0aW9MZW5ndGgs
IHBNYXJrZXI9cFZhbHVlSGVhZGVyLCBwTGVuZ3RoPXBMZW5ndGgpKQogICAgIGZvciBrZXkgaW4g
YS5rZXlzKCk6CiAgICAgICAgIGlmIGtleSA9PSB1bml0TWFya2VyOgogICAgICAgICAgICAgY29u
dGludWUKSW5kZXg6IExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDIxIEBAIHZhciBzZWxmID0gdGhpczsKIAogc2VsZi50
ZXN0UnVubmVyID0gewogICAgIG5ldmVySW5saW5lRnVuY3Rpb246IG5ldmVySW5saW5lRnVuY3Rp
b24sCi0gICAgbnVtYmVyT2ZERkdDb21waWxlczogbnVtYmVyT2ZERkdDb21waWxlcywKKyAgICBu
dW1iZXJPZkRGR0NvbXBpbGVzOiAoZnVuY3Rpb24oKSB7CisgICAgICAgIGxldCBtYXA7CisgICAg
ICAgIHJldHVybiAoZikgPT4geworICAgICAgICAgICAgaWYgKGlzREZHRW5hYmxlZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkRGR0NvbXBpbGVzKGYpOworCisgICAgICAgICAg
ICAvLyBFbXVsYXRlIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiBmb3IgYSBiaXQgdG8gZ2V0IHNvbWUg
dGllcmluZyBiZWZvcmUgcmV0dXJuaW5nIHRydWUuCisgICAgICAgICAgICBpZiAoIW1hcCkKKyAg
ICAgICAgICAgICAgICBtYXAgPSBuZXcgV2Vha01hcDsKKyAgICAgICAgICAgIGxldCBjb3VudCA9
IG1hcC5nZXQoZikgfHwgMDsKKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgICAgICBt
YXAuc2V0KGYsIGNvdW50KTsKKyAgICAgICAgICAgIHJldHVybiAoY291bnQgLyA0MDAwKSB8IDA7
CisgICAgICAgIH07CisgICAgfSkoKSwKICAgICBmYWlsTmV4dE5ld0NvZGVCbG9jazogZmFpbE5l
eHROZXdDb2RlQmxvY2sKIH07CiAKQEAgLTE0OSw4ICsxNjMsOSBAQCBmdW5jdGlvbiBkZmdTaG91
bGRCZSh0aGVGdW5jdGlvbiwgX2EsIF9iCiAgIHZhbHVlcy5wdXNoID0gQXJyYXkucHJvdG90eXBl
LnB1c2g7CiAgIAogICB0cnkgewotICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rp
b259KSkKKyAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpIHsKICAgICAg
IHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKKyAgICB9CiAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkp
OwogICB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0gZTsKQEAgLTM0Niw3ICszNjEsNyBA
QCBmdW5jdGlvbiBkZmdJbmNyZW1lbnQoYXJndW1lbnQpCiAgICAgaWYgKGRpZEZhaWxTb21lVGVz
dHMpCiAgICAgICAgIHJldHVybiBhcmd1bWVudC5pOwogICAgIAotICAgIGlmICghZGZnQ29tcGls
ZWQoYXJndW1lbnQpKQorICAgIGlmICghZGZnQ29tcGlsZWQoYXJndW1lbnQpICYmIGlzREZHRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm4gInN0YXJ0IiBpbiBhcmd1bWVudCA/IGFyZ3VtZW50LnN0
YXJ0IDogMDsKICAgICAKICAgICByZXR1cm4gYXJndW1lbnQuaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417753</attachid>
            <date>2021-01-15 18:01:32 -0800</date>
            <delta_ts>2021-01-19 16:26:56 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>605200</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAorLy90ZXN0TGlzdCA9IFsnY3J5cHRvLWFlcy1TUCddOwor
CiBpZiAodHlwZW9mIHRlc3RJdGVyYXRpb25Db3VudCA9PT0gInVuZGVmaW5lZCIpCiAgICAgdGVz
dEl0ZXJhdGlvbkNvdW50ID0gdW5kZWZpbmVkOwogCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL2JlbmNobWFyay1ydW5uZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw4IEBACiAv
LyBGSVhNRTogVXNlIHRoZSByZWFsIHByb21pc2UgaWYgYXZhaWxhYmxlLgogLy8gRklYTUU6IE1h
a2Ugc3VyZSB0aGlzIGludGVyZmFjZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHJlYWwgUHJvbWlz
ZS4KKworX19kaXNhYmxlU2FtcGxpbmdQcm9maWxlcigpOworCiBmdW5jdGlvbiBTaW1wbGVQcm9t
aXNlKCkgewogICAgIHRoaXMuX2NoYWluZWRQcm9taXNlID0gbnVsbDsKICAgICB0aGlzLl9jYWxs
YmFjayA9IG51bGw7CkBAIC0xMjgsMTcgKzEzMSwyMSBAQCBCZW5jaG1hcmtSdW5uZXIucHJvdG90
eXBlLl9ydW5UZXN0ID0gZnVuCiAKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcu
JyArIHRlc3QubmFtZSArICctc3RhcnQnKTsKICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7Cisg
ICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgdGVzdC5ydW4ocHJlcGFyZVJldHVy
blZhbHVlLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpOworICAgIF9fZGlzYWJsZVNh
bXBsaW5nUHJvZmlsZXIoKTsKICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgIHNlbGYuX3dy
aXRlTWFyayhzdWl0ZS5uYW1lICsgJy4nICsgdGVzdC5uYW1lICsgJy1zeW5jLWVuZCcpOwogCiAg
ICAgdmFyIHN5bmNUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTsKIAogICAgIHZhciBzdGFydFRp
bWUgPSBub3coKTsKKyAgICBfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgLy8gU29tZSBicm93c2VycyBkb24ndCBpbW1lZGlh
dGVseSB1cGRhdGUgdGhlIGxheW91dCBmb3IgcGFpbnQuCiAgICAgICAgIC8vIEZvcmNlIHRoZSBs
YXlvdXQgaGVyZSB0byBlbnN1cmUgd2UncmUgbWVhc3VyaW5nIHRoZSBsYXlvdXQgdGltZS4KICAg
ICAgICAgdmFyIGhlaWdodCA9IHNlbGYuX2ZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsKKyAgICAgICAgX19kaXNhYmxlU2FtcGxpbmdQcm9m
aWxlcigpOwogICAgICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgICAgICBzZWxmLl9mcmFt
ZS5jb250ZW50V2luZG93Ll91bnVzZWRIZWlnaHRWYWx1ZSA9IGhlaWdodDsgLy8gUHJldmVudCBk
ZWFkIGNvZGUgZWxpbWluYXRpb24uCiAgICAgICAgIHNlbGYuX3dyaXRlTWFyayhzdWl0ZS5uYW1l
ICsgJy4nICsgdGVzdC5uYW1lICsgJy1hc3luYy1lbmQnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW8KIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbkFzRG91YmxlTnVtYmVyKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkKTsKIAogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MpOwogCkBAIC02NjIsNiArNjYz
LDggQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVtYmVy
IiwgZnVuY3Rpb25Bc0RvdWJsZU51bWJlciwgMSk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJpc0RGR0VuYWJsZWQiLCBmdW5jdGlvbklzREZHRW5hYmxlZCwgMCk7CisKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJkcm9wQWxsTG9ja3MiLCBmdW5jdGlvbkRyb3BBbGxMb2NrcywgMSk7CiAK
ICAgICAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZv
clRlc3RpbmcoKSkgewpAQCAtMjY1Myw2ICsyNjU2LDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkFzRG91YmwKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91Ymxl
TnVtYmVyKG51bSkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RG
R0VuYWJsZWQsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKE9wdGlvbnM6OnVzZURGR0pJVCgpKSk7Cit9CisKIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2NrcywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQogewogICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBib29sIHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoY29kZUJsb2Nr
ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0
aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2Rl
Ojppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlz
YXNzZW1ibHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21T
aWduYXR1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFu
ZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpA
QCAtMjY5LDcgKzI3MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpk
dW0KIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVt
cEhlYWRlcihibG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBA
IHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQu
cHJpbnQoImJiIyIsIGJsb2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0
aW9uc0F0SGVhZCkgeworICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFk
OiBbIik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
QXRIZWFkLT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YSgiLCAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9u
cy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKG91dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAg
ICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7
CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQo
aSArIGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNv
ZGUoY3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNs
YXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01h
cCYgPSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0
ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsK
KyAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFt
JiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFw
KCkpOwogCiAgICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFu
dHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R3JhcGguaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1
YmxpYzoKIAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9p
ZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+
IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUo
KSkKKyAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGUsIHRydWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVy
ID0gV1RGOjpkYXRhRmlsZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1w
ZXI8Q29kZUJsb2NrVHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRo
aXMsIHNwZWN1bGF0aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8vIE5vIHVzZXMuCiAgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0gICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICBj
YXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2ptcDoKICAgICBjYXNlIG9wX25ld19vYmpl
Y3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgICAgICByZXR1cm47CiAKKyAgICBV
U0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQb2ludGVyKQogICAgIFVTRVMoT3BUb1RoaXMs
IHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHosIHRhcmdldFZpcnR1YWxSZWdpc3RlcikKICAg
ICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwgc3JjRHN0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5
cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0
LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1
Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQorICAgIGlmICgodGhpcy0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQogICAgICAgICBvdXQucHJpbnQo
IiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwogICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+
bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKE5ldmVySW5saW5lKSIpOwpAQCAt
MjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0K
ICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFw
KTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRoaXMtPmluc3RydWN0aW9ucygpKTsK
LSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywg
aW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01hcCk7CisgICAgQ29kZUJsb2NrQnl0
ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBn
cmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7CiB9CiAKIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06
OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNNYXApCkBAIC0yOTUsNiArMjk1LDcg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9vd25l
ckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0
KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50
ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKQorICAgICwgbV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpCiAgICAgLCBtX2NvbnN0YW50
UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMpCiAgICAgLCBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCkBA
IC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUq
IAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKIAogICAgIEFTU0VSVChz
b3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFt
ZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRlcnMgPSBvdGhlci5udW1QYXJhbWV0ZXJzKCk7
CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC04NTAs
NyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAvLyB0byB0aGUgQ29kZUJs
b2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIENvZGVC
bG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiB0aGUg
Q29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAg
ICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7CiAjZW5kaWYK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJlbW92ZSh0aGlzKTsKQEAgLTEwMzcsNyArMTAz
OSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJ
bnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBq
ZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNv
IGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4g
YXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5
KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNl
KFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1
OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAog
ICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkxP
TEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShK
SVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29u
ZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNo
YXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2
OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAogICAgICAgICBkZmdDb21t
b24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEy
MjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8g
SW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxp
bmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQg
ZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xk
IGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgot
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBA
IC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBl
KCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzog
U2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJ
Q3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAg
ICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAgIH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTUyOCw3ICsxNTM2LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAg
ICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgZGZn
Q29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYg
KzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3Vu
dGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNN
YXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbElu
Zm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmlyc3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52
YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBAIC0xODEwLDcgKzE4MTksNyBA
QCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAg
ICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwog
ICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiAgICAgICAgIHZpc2l0T1NSRXhpdFRhcmdldHMobG9ja2VyLCB2aXNpdG9yKTsKQEAgLTE4
MjMsNyArMTgzMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW4K
ICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBp
ZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29k
ZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgREZH
OjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMTg1
OSw2ICsxODY4LDI1IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXYK
ICNlbmRpZgogfQogCitDb2RlQmxvY2sqIENvZGVCbG9jazo6bG9sT3JCYXNlbGluZUFsdGVybmF0
aXZlKCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIENvZGVCbG9jayogcmVzdWx0ID0gdGhpczsK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBhdXRvIGppdFR5cGUgPSByZXN1bHQtPmppdFR5
cGUoKTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6TE9MSklUIHx8IEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0ID0gcmVzdWx0LT5hbHRlcm5hdGl2ZSgpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7CisjZWxzZQorICAgIHJldHVybiB0aGlzOworI2VuZGlmCit9
CisKIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogewogI2lmIEVOQUJM
RShKSVQpCkBAIC0xODY3LDcgKzE4OTUsNyBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxp
bmVWZXJzaW9uKCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgQ29kZUJsb2NrKiByZXN1bHQg
PSByZXBsYWNlbWVudCgpOwogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlmIChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoc2VsZkpJVFR5cGUpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjp1
c2VzUmVwbGFjZW1lbnRDb2RlQmxvY2soc2VsZkpJVFR5cGUpKSB7CiAgICAgICAgICAgICAvLyBU
aGUgcmVwbGFjZW1lbnQgY2FuIGJlIG51bGwgaWYgd2UndmUgaGFkIGEgbWVtb3J5IGNsZWFuIHVw
IGFuZCB0aGUgZXhlY3V0YWJsZQogICAgICAgICAgICAgLy8gaGFzIGJlZW4gcHVyZ2VkIG9mIGl0
cyBjb2RlQmxvY2tzIChzZWUgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpKS4gUmVnYXJkbGVz
cywKICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGNvZGVCbG9jayBpcyBzdGlsbCBsaXZlIG9u
IHRoZSBzdGFjaywgYW5kIGFzIGFuIG9wdGltaXppbmcgSklUCkBAIC0xOTMxLDcgKzE5NTksNyBA
QCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgoCiBEaXNwb3NhYmxlQ2Fs
bFNpdGVJbmRleCBDb2RlQmxvY2s6Om5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChD
YWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKSk7CiAgICAg
QVNTRVJUKCEhaGFuZGxlckZvckluZGV4KG9yaWdpbmFsQ2FsbFNpdGUuYml0cygpKSk7CiAgICAg
Q29kZU9yaWdpbiBvcmlnaW5hbE9yaWdpbiA9IGNvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSk7
CkBAIC0yMjMxLDUxICsyMjU5LDU1IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxl
cjo6SmV0dGkKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CiAgICAgCiAg
ICAgLy8gV2Ugd2FudCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAvLyAxKSBN
YWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93
LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAorICAgIC8vIDEpIElmIHdlJ3JlIERGRy9GVEwsIG1h
a2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3cs
IHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0CiAgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBleGl0IGF0
IHRoZSB0b3Agb2YgdGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIHJldHVy
bi4KICAgICAvLyAyKSBNYWtlIHN1cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBleGVjdXRh
YmxlLCB0aGVuIHdlIHNob3VsZG4ndCBjYWxsIHRoaXMgQ29kZUJsb2NrLgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgaml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlmIChyZWFz
b24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJvZmlsZXI6
OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBp
bGF0aW9uLmdldCgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQotICAgICAg
ICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93
biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KLSAg
ICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKLSAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRU
aHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7Ci0g
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0
dGlzb25EdWVUb09sZEFnZSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBj
b21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAgICAgICBj
b21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBv
d24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCisg
ICAgICAgICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewor
ICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhl
YXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0
YWJsZSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkK
ICAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6
YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2RlID09IENv
dW50UmVvcHRpbWl6YXRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxk
IGNhbGwgYWx0ZXJuYXRpdmUoKS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNv
dW50UmVvcHRpbWl6YXRpb24oKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKERG
Rzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlk
IGNvdW50IHJlb3B0aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYKICAgICB9
CiAgICAgCiAgICAgaWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgd2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVu
IGZvciBPU1IgZW50cnkgY29kZQogICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8vIE9yLCB3
ZSdyZSBhbiBMT0wgQ29kZUJsb2NrIGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAgICBhbHRl
cm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29uICE9IFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlz
b25EdWVUb1ZNVHJhcHMpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSAm
JiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcykKICAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRT
aXRlcygpOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgLy8gSmV0dGlzb24gY2Fu
IGhhcHBlbiBkdXJpbmcgR0MuIFdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVh
ZCBleGVjdXRhYmxlCiAgICAgLy8gYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0
IHRvIHRoZSByZW1lbWJlcmVkIHNldC4KQEAgLTIzNjUsNyArMjM5Nyw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICBpZiAoIWhhc0Jhc2VsaW5l
T3JMT0xQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFERkc6Om1pZ2h0
SW5saW5lRnVuY3Rpb24odGhpcykpCkBAIC0yMzkwLDcgKzI0MjIsNyBAQCB2b2lkIENvZGVCbG9j
azo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxGCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5
cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmpp
dFR5cGUoKSkpIHsKICAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKICAg
ICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICIgICAgQ2xlYXJp
bmcgU0FCSSBiY2F1c2UgY2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXplZC4iKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMjQ4MywxMiArMjUxNSwxNCBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6Om51bWJl
ck9mREZHQ29tcGlsZXMoCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGpp
dFR5cGUoKSkpOwogICAgIGlmIChPcHRpb25zOjp0ZXN0VGhlRlRMKCkpIHsKKyAgICAgICAgaWYg
KCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBp
ZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gMTAwMDAwMDsK
ICAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwgPyAxIDogMCkgKyBtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogICAgIH0KICAgICBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBK
SVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDAp
ICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKyAgICByZXR1cm4gKChyZXBsYWNlbWVu
dCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAw
KSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiB9CiAKIGludDMyX3QgQ29kZUJsb2Nr
Ojpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdApAQCAtMjcwOSw3ICsyNzQzLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdAogdm9pZCBDb2RlQmxv
Y2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgpOwot
ICAgIGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgaWYgKHR5cGUgIT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgdHlwZSAhPSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAg
ICAgZGF0YUxvZ0xuKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNvZGUgYnV0
IGhhdmUgIiwgdHlwZSk7CiAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihqaXRDb2RlKCkuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBlKSk7CiAg
ICAgfQpAQCAtMjcyNyw3ICsyNzYxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlv
blRocmVzaG9sZAogICAgIAogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxh
dGlvblN1Y2Nlc3NmdWw6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZHT3JGVEwocmVwbGFj
ZW1lbnQtPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgpAQCAtMjc1Niw3ICsy
NzkwLDggQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZAogICAgIAog
dWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBk
ZXNpcmVkVGhyZXNob2xkKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSk7CisgICAgLy9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpOyAvLyBPT1BTOiBXZSBjYWxsIHRoaXMgZnJvbSB0aGUgTE9MIGNvbXBpbGVyIHRocmVh
ZCBiZWZvcmUgaW5zdGFsbC4KKwogICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3YXkgc28g
d2UgZG9uJ3Qgc2F0dXJhdGUuIFRoaXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQogICAgIC8vIGVu
b3VnaCB0aGF0IHRoaXMgbG9vcCB3b24ndCBodXJ0IHVzLgogICAgIHVuc2lnbmVkIHJlc3VsdCA9
IGRlc2lyZWRUaHJlc2hvbGQ7CkBAIC0yODM2LDcgKzI4NzEsNyBAQCBERkc6OkNvZGVPcmlnaW5Q
b29sJiBDb2RlQmxvY2s6OmNvZGVPcmlnCiAKIHNpemVfdCBDb2RlQmxvY2s6Om51bWJlck9mREZH
SWRlbnRpZmllcnMoKSBjb25zdAogewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigp
LT5kZmdJZGVudGlmaWVycy5zaXplKCk7CkBAIC0yODQ3LDcgKzI4ODIsNyBAQCBjb25zdCBJZGVu
dGlmaWVyJiBDb2RlQmxvY2s6OmlkZW50aWZpZXIoCiAgICAgc2l6ZV90IHVubGlua2VkSWRlbnRp
ZmllcnMgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOwogICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVudGlmaWVycykKICAgICAg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsKLSAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2Rl
Ojppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1v
bigpLT5kZmdJZGVudGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRpZmllcnNdOwogfQogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpAQCAtMjkxMiwxOCArMjk0NywxOSBAQCB2b2lkIENvZGVC
bG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMoKQogICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlv
bnMoKTsKIH0KIAotYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKK2Jvb2wgQ29k
ZUJsb2NrOjpzaG91bGRPcHRpbWl6ZVRvREZHTm93KCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICJDb25zaWRlcmluZyBvcHRpbWl6aW5nICIsICp0aGlzLCAiLi4u
Iik7CiAKICAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4
aW11bU9wdGltaXphdGlvbkRlbGF5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAg
IHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIGJhc2VsaW5lQ29kZUJsb2NrLT51
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOwogICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXM7Ci0gICAgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3Vu
dExpdmVuZXNzKG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZT
YW1wbGVzSW5Qcm9maWxlcyk7CisgICAgYmFzZWxpbmVDb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVl
UHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVu
dFZhbHVlUHJvZmlsZXMsIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCiAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nRigKQEAgLTI5NDgsNyArMjk4
NCw4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERG
R19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7Ci0gICAg
QVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAvLyBPT1BT
CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAg
IAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUw
LDYgKzMwODcsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAK
ICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2Fz
ZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcih0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0zMjI2LDE0ICszMjY0LDE0
IEBAIHZvaWQgQ29kZUJsb2NrOjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG4KIHsKICAgICBtX251
bUJyZWFrcG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOwogICAgIEFTU0VSVChtX251bUJyZWFrcG9p
bnRzKTsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAg
aWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJv
ZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCiB2b2lkIENvZGVC
bG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAg
ICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVu
YWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKG1v
ZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUo
KSkpCiAgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVw
cGluZyk7CiB9CiAKQEAgLTMyOTYsNyArMzMzNCw3IEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2Rl
QmxvY2s6OnVuYXJ5QXJpdGgKIAogYm9vbCBDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0
aEZhc3RDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBpZiAoIWhhc0Jh
c2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5n
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2Zp
bGUgPSBiaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwog
ICAgIGlmICghcHJvZmlsZSkKQEAgLTM0MjEsOSArMzQ1OSw5IEBAIE9wdGlvbmFsPEJ5dGVjb2Rl
SW5kZXg+IENvZGVCbG9jazo6Ynl0ZWMKIHsKICAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBi
eXRlY29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAg
ICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5
dGNvZGVJbmRleChqaXRUeXBlKSkKICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGNhbGxTaXRlSW5k
ZXguYnl0ZWNvZGVJbmRleCgpOwotICAgIGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZH
SklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7CisgICAgZWxzZSB7CiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2Fs
bFNpdGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2Fs
bFNpdGVJbmRleCk7CkBAIC0zNDY2LDcgKzM1MDQsNyBAQCBib29sIENvZGVCbG9jazo6aGFzSW5z
dGFsbGVkVk1UcmFwQnJlYWtwCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZy
b20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90
IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAg
IC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAg
IGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+aGFzSW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9p
bnRzKCk7CiAjZWxzZQpAQCAtMzQ4MCw3ICszNTE4LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cwogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBm
cm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAgICAvLyBjYXJlZnVsIHRvIG5v
dCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5kbGVyIHNhZmUsIGUuZy4KICAg
ICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50IG9mIG1faml0Q29kZS4KLSAg
ICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
YXV0byYgY29tbW9uRGF0YSA9ICptX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgIGNvbW1vbkRh
dGEuaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTYsNiArMTk2LDcgQEAgcHVibGljOgogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpl
dHRpc29uKCk7ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVB
bHRlcm5hdGl2ZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogbG9sT3JCYXNl
bGluZUFsdGVybmF0aXZlKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkBA
IC0zNDcsNyArMzQ4LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2Fz
ZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jh
c2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2Zp
bGluZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQ
cm9maWxlQ291bnRGb3JCeXRlY29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC0z
NTYsNyArMzU3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2VsaW5l
SklUUHJvZmlsaW5nKCkpCisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxl
Q291bnRGb3JCeXRlY29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC00MzYsOSAr
NDM3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBi
b29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QKKyAgICBib29sIGhhc0Jhc2VsaW5l
T3JMT0xQcm9maWxpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKKyAgICAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgp
OworICAgICAgICByZXR1cm4gdHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0eXBlID09
IEpJVFR5cGU6OkxPTEpJVDsKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUxMSw2
ICs1MTMsNyBAQCBwdWJsaWM6CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJ
bmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1
ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25z
dCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
QXJyYXlQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CkBAIC01MzksNyArNTQyLDcgQEAgcHVibGljOgog
ICAgIC8vIEhhdmluZyBjb2RlIG9yaWdpbnMgaW1wbGllcyB0aGF0IHRoZXJlIGhhcyBiZWVuIHNv
bWUgaW5saW5pbmcuCiAgICAgYm9vbCBoYXNDb2RlT3JpZ2lucygpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSk7CisgICAgICAgIHJldHVy
biBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSk7CiAgICAgfQogICAgICAgICAKICAgICBi
b29sIGNhbkdldENvZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKQEAgLTgwMyw3ICs4MDYs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpIHsgcmV0dXJu
IDA7IH0KICNlbmRpZgogCi0gICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworICAgIGJvb2wg
c2hvdWxkT3B0aW1pemVUb0RGR05vdygpOwogICAgIHZvaWQgdXBkYXRlQWxsVmFsdWVQcm9maWxl
UHJlZGljdGlvbnMoKTsKICAgICB2b2lkIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKICAg
ICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFs
dWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUs
IGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFy
ZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1
Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9m
aWxlQnVja2V0KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0aW5nSklUVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhpdEZyb21Bbnl0
aGluZzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tQW55dGhpbmciKTsKICAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRXhpdEZyb21MT0w6CisgICAgICAgIG91dC5wcmludCgiRnJvbUxPTCIpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAgb3V0LnByaW50
KCJGcm9tREZHIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBFeGl0aW5nSklU
VHlwZSA6IHVpbnQ4X3QgewogICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21MT0ws
CiAgICAgRXhpdEZyb21ERkcsCiAgICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2ICszOSw4IEBA
IGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5nSklUVHlwZSBl
eGl0aW5nSklUVHlwZUZvcihKSVRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbUxPTDsKICAg
ICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9tREZHOwogICAg
IGNhc2UgSklUVHlwZTo6RlRMSklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzgsNyArMjM4LDYgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAogICAgIE1B
S0VfUFJJTlRfTUVUSE9EKElubGluZUNhbGxGcmFtZSwgZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1h
dGlvbiwgYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKTsKLQogfTsKIAogaW5saW5lIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
ICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUg
PHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9w
ZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2Ug
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJh
Y2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKICAgICB1c2luZyBT
dG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0
Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+PjsKQEAgLTE0Mywy
MSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAg
ZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywg
c2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50
cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMg
PSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBt
X251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3Rh
bnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2Nh
bHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxv
Y2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlOwogICAgICAgICBt
X3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+Ojpu
ZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkpOwogICAg
IH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBu
dW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhw
bGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6
ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkK
ICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1M
b2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykK
ICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsg
bnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxz
ICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWUpOwogICAgICAgICBtX3Zh
bHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApAQCAtMTY1LDYgKzE2OCw3IEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9w
ZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6
IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICwgbV9u
dW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bUNvbnN0YW50
cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CkBA
IC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQogICAgIHNpemVfdCBudW1iZXJP
ZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9Ci0gICAgc2l6ZV90IG51bWJl
ck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1l
bnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZU
bXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMo
KSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50cygpIC0gISF0cmFja0NhbGxl
ZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6ZV90IGNhbGxlZUluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSAxOworICAgIH0K
ICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJldHVybiBpZHggKyBudW1iZXJP
ZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMo
KTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAg
cmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlk
eCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsK
ICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorICAgIHNp
emVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAgICB9CiAKICAgICBSZWZUeXBl
IHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAg
IENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1w
SW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUg
YXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRl
eChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgUmVmVHlwZSBjYWxsZWUo
KSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0
cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAg
ICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9
CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKworICAgIFJlZlR5cGUg
Y29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgp
XTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3Bl
cmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4
LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJl
ck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgbnVtYmVyT2ZD
b25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVt
TG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBu
dW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3
ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVt
YmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBtX3ZhbHVl
cy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFX
VEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewpAQCAtMzA1LDggKzMy
NywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNv
bnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hl
YWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAg
cmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKQEAgLTMx
OSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAgIFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNI
ZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29u
c3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbChv
cGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzc0LDggQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpIDwg
bnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4o
b3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAgICAgYm9vbCBo
YXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArNDAyLDE1IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4
KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJl
ck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6
OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwor
ICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMo
KSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2Nh
bHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAg
IGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAgIH0KIAogICAgIHZvaWQgZmls
bChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0
IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVt
TG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAgICAvLyBUaGUgZmly
c3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9u
dW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9udW1Db25zdGFudHMgYXJlIGNvbnN0YW50
cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5z
aWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAw
IH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgs
OCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3RyZWFtJiBvCiAgICAgICAgIG91
dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12
b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxl
ZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRl
ciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFy
Z3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBAIC01NywxMCArNTcsMTIgQEAgdm9pZCBP
cGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cgogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGluQ29udGV4
dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJh
Y2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgaW5Db250
ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lk
IE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEo
IiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMo
KTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiArODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CiAg
ICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcg
KzEwNCw3IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAgICAg
ICAgbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSA9
IGppdC0+Y29kZUJsb2NrKCktPmppdENvZGUoKS0+bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4
Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoaml0LT5jb2RlQmxvY2soKSwgc3R1YkluZm8tPmNhbGxT
aXRlSW5kZXgpOwogICAgICAgICBtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24g
PSBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLm51
bWJlck9mU2V0UmVnaXN0ZXJzKCkgPiAwOwogICAgICAgICBpZiAobV9uZWVkc1RvUmVzdG9yZVJl
Z2lzdGVyc0lmRXhjZXB0aW9uKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXQtPmNvZGVCbG9jaygpLT5q
aXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJT
ZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwg
YWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JD
YWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTcxMCw3ICs3MTAsNyBAQCBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgICAgIC8vIFdlIHNl
dCB0aGVzZSB0byBpbmRpY2F0ZSB0byB0aGUgc3R1YiB0byByZW1vdmUgaXRzZWxmIGZyb20gdGhl
IENvZGVCbG9jaydzCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIHRhYmxlIHdoZW4gaXQg
aXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxl
cnMgPSBjb2RlQmxvY2s7Ci0gICAgICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0VHlwZSgpKSk7CisgICAgICAg
IEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFu
ZGxlcnMtPmppdFR5cGUoKSkpOwogICAgICAgICBjYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFu
ZGxpbmcgPSBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcoKTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBp
bmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0dXJuIHZhbHVl
ICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29sIGlzQnl0ZWNv
ZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBpbmxpbmUgYm9v
bCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0
dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCBy
ZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAg
Ly8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsr
aSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFs
UmVnaXN0ZXIuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBA
IGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGludCwgaW50KTsK
KyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGlu
dCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0g
MHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpAQCAtNjksNyArNzAsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVn
aXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzTG9jYWwoKSBj
b25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rlcklz
QXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcikg
JiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBt
X3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4g
bV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBp
bnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9M
b2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsxMTgsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0g
b3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQp
IHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CiAg
ICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIGFy
Z3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQorICAgIHN0YXRpYyBp
bnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgpIHsgcmV0dXJuIGZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQogCiAgICAgaW50IG1fdmlydHVh
bFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxpbmUgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9mZnNldCk7CiB9CiAKK2lubGlu
ZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50IGNvbnN0YW50
SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmNv
bnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQmFzaWNCbG9jazo6QmFzaWNC
bG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50
cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkp
CisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1
dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MDUsNyArOTA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBw
cmVkaWN0aW9uOwogICAgICAgICB9OwogCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5dGVjb2Rl
T2Zmc2V0KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgQ29kZU9yaWdpbihieXRl
Y29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUoKSkpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRC
eXRlY29kZU9mZnNldChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5l
QWx0ZXJuYXRpdmUoKSwgQ29kZU9yaWdpbihieXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUo
KSkpOwogICAgICAgICBpZiAocHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKICAgICAgICAgICAgIHJl
dHVybiBwcmVkaWN0aW9uOwogCkBAIC05MzksNyArOTM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHdoaWxlIChzdGFjay0+bV9pbmxpbmVDYWxsRnJhbWUgIT0gY29kZU9yaWdpbi0+aW5saW5l
Q2FsbEZyYW1lKCkpCiAgICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay0+bV9jYWxsZXI7CiAK
LSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNvZGVC
bG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5tX3Byb2ZpbGVkQmxvY2ssICpjb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNv
ZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5tX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5l
QWx0ZXJuYXRpdmUoKSwgKmNvZGVPcmlnaW4pOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVs
dDoKQEAgLTk4Miw4ICs5ODIsOSBAQCBwcml2YXRlOgogCiAgICAgQXJyYXlNb2RlIGdldEFycmF5
TW9kZShBcnJheVByb2ZpbGUmIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uKQogICAgIHsK
LSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrKTsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrKTsKICAgICAgICAgYm9vbCBtYWtlU2FmZSA9IHBy
b2ZpbGUub3V0T2ZCb3VuZHMobG9ja2VyKTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJv
bU9ic2VydmVkKGxvY2tlciwgJnByb2ZpbGUsIGFjdGlvbiwgbWFrZVNhZmUpOwogICAgIH0KQEAg
LTE2NjgsNyArMTY2OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSog
Y2EKICAgICBjb25zdCBJbnN0cnVjdGlvbiogc2F2ZWRDdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2N1
cnJlbnRJbnN0cnVjdGlvbjsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0
aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwog
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCkt
PmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmxvbE9yQmFzZWxpbmVD
b2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpbnNlcnRDaGVja3MoY29kZUJs
b2NrKTsKIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMhCkBAIC02ODczLDcg
KzY4NzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBIYXNoU2V0PHVuc2lnbmVkLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gc2VlbkFyZ3VtZW50czsKIAog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPm1fbG9jayk7CiAKICAgICAgICAgICAgICAg
ICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHBy
b2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJv
ZmlsZS5tX29wZXJhbmQpOwpAQCAtODM0NSwyMyArODM0NiwyOCBAQCBCeXRlQ29kZVBhcnNlcjo6
SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgewogICAgICAgICBtX2V4aXRQcm9maWxlLmlu
aXRpYWxpemUobV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKIAotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgbV9sYXp5T3BlcmFuZHMuaW5pdGlhbGl6ZShsb2NrZXIsIG1fcHJvZmlsZWRCbG9jay0+
bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKGxvY2tlcikpOworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvKiBjb2RlQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOwor
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
CisgICAgICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFsaXplKGxvY2tlciwgY29kZUJsb2Nr
LT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2VyKSk7CisgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIC8vIFdlIGRvIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgbG9jayBiZWNhdXNlIHdl
IHdhbnQgdG8gZW5jb3VyYWdlIFN0cnVjdHVyZVN0dWJJbmZvJ3MKICAgICAgICAgLy8gdG8gYmUg
cG90ZW50aWFsbHkgYWRkZWQgdG8gb3BlcmF0aW9ucyBhbmQgYmVjYXVzZSB0aGUgcHJvZmlsZWQg
YmxvY2sgY291bGQgYmUgaW4gdGhlCiAgICAgICAgIC8vIG1pZGRsZSBvZiBMTEludC0+SklUIHRp
ZXItdXAgaW4gd2hpY2ggY2FzZSB3ZSB3b3VsZCBiZSBhZGRpbmcgdGhlIGluZm8ncyByaWdodCBu
b3cuCi0gICAgICAgIGlmIChtX3Byb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lSklUUHJvZmlsaW5n
KCkpCi0gICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2stPmdldElDU3RhdHVzTWFwKGxvY2tlciwg
bV9iYXNlbGluZU1hcCk7CisgICAgICAgIGlmIChtX3Byb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5l
T3JMT0xQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jay0+Z2V0SUNTdGF0
dXNNYXAobV9iYXNlbGluZU1hcCk7CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogb3B0aW1p
emVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgbV9vcHRpbWl6
ZWRDb250ZXh0Lm9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZEJsb2NrOwotICAgIGlmIChP
cHRpb25zOjp1c2VQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24oKSAmJiBvcHRpbWl6ZWRCbG9j
aykgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG9wdGltaXplZEJsb2NrLT5t
X2xvY2spOwotICAgICAgICBvcHRpbWl6ZWRCbG9jay0+Z2V0SUNTdGF0dXNNYXAobG9ja2VyLCBt
X29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICB7CisgICAgICAgIENvZGVCbG9jayogb3B0aW1p
emVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxhY2VtZW50KCk7CisgICAgICAgIG1fb3B0
aW1pemVkQ29udGV4dC5vcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRCbG9jazsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnVzZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbigpICYmIG9wdGlt
aXplZEJsb2NrICYmIEpJVENvZGU6OmlzSGlnaGVyVGllcihvcHRpbWl6ZWRCbG9jay0+aml0VHlw
ZSgpLCBtX3Byb2ZpbGVkQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIob3B0aW1pemVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBv
cHRpbWl6ZWRCbG9jay0+Z2V0SUNTdGF0dXNNYXAobG9ja2VyLCBtX29wdGltaXplZENvbnRleHQu
bWFwKTsKKyAgICAgICAgfQorICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9pY0NvbnRleHRTdGFj
ay5hcHBlbmQoJm1fb3B0aW1pemVkQ29udGV4dCk7CiAgICAgfQotICAgIGJ5dGVDb2RlUGFyc2Vy
LT5tX2ljQ29udGV4dFN0YWNrLmFwcGVuZCgmbV9vcHRpbWl6ZWRDb250ZXh0KTsKICAgICAKICAg
ICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNXaXRoRml4dXAgPSBzdGQ6Om1heDxpbnQ+
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY3OCw3ICsxNjc4LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZSBHcmFwaDo6bWV0aAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2gg
U2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6
CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NTg0MQogICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudE5vZGUgJiYgbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gYXJndW1lbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkg
ewotICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGlu
ZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBwcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC0xNjg2LDEyICsxNjg2LDEyIEBAIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKIAogICAgICAgICAvLyBjdXJyZW50Tm9kZSBpcyBudWxs
IHdoZW4gd2UncmUgZG9pbmcgc3BlY3VsYXRpb24gY2hlY2tzIGZvciBjaGVja0FyZ3VtZW50VHlw
ZXMoKS4KICAgICAgICAgaWYgKCFjdXJyZW50Tm9kZSB8fCBub2RlLT5vcmlnaW4uc2VtYW50aWMg
IT0gY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyB8fCAhY3VycmVudE5vZGUtPmhhc1Jlc3Vs
dCgpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrID0gcHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3Bl
cmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
LCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzAwLDcgKzE3MDAs
NyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRoCiAgICAgICAgICAg
ICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
JnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CiAKLSAgICAgICAgICAgIGlmIChwcm9maWxlZEJs
b2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZWRCbG9jay0+aGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKEJpbmFyeUFyaXRoUHJvZmlsZSogcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
ICAgICBpZiAoVW5hcnlBcml0aFByb2ZpbGUqIHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPnVuYXJ5
QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNv
ZGVJbmRleCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCB2b2lkIE9TUkVudHJ5
RGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FOCiB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENv
ZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwog
ICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDYgKzM5NCw3
IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICBpZiAoZXhp
dElubGluZUNhbGxGcmFtZSkKICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKKyAgICAvLyBPT1BT
OiBNYWtlIHRoaXMgZG8gdGhlIHJpZ2h0IHRoaW5nIGJhc2VkIG9uIExPTCBvciBub3QuCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4
aXQubV9jb2RlT3JpZ2luKTsKICAgICBBU1NFUlQoY29kZUJsb2NrRm9yRXhpdCA9PSBjb2RlQmxv
Y2tGb3JFeGl0LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFz
ZWxpbmVDb2RlKGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEdldEFyZ3VtZW50U3RhcgogTWFjcm9Bc3NlbWJsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRPU1JFeGl0RnV6ekNoZWNrKCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkV4aXRG
dXp6KCkKLSAgICAgICAgfHwgIWNhblVzZU9TUkV4aXRGdXp6aW5nKG1faml0LmdyYXBoKCkuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IobV9vcmlnaW4uc2VtYW50aWMpKQorICAgICAgICB8fCAhY2FuVXNl
T1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0ZvcihtX29yaWdp
bi5zZW1hbnRpYykpCiAgICAgICAgIHx8ICFkb09TUkV4aXRGdXp6aW5nKCkpCiAgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpOwogICAgIApAQCAtNDQyOCw5ICs0NDI4LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGJvb2wgbmVlZHNT
Y3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3Jh
cGgoKS5wcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29k
ZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFs
dWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlv
blZhbHVlQWRkOwpAQCAtNDUyMCw5ICs0NTIwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNl
bmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCku
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8g
cmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAgICBhdXRv
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwpAQCAtNTExMyw5ICs1
MTEzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluY09yRGVjKE5vZAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5vZGUpCiB7CiAgICAgLy8g
RklYTUU6IGFkZCBhIGZhc3QgcGF0aCwgYXQgbGVhc3QgZm9yIEJpZ0ludDMyLCBidXQgcHJvYmFi
bHkgYWxzbyBmb3IgSGVhcEJpZ0ludCBoZXJlLgotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkucHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9j
ay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhhcml0aFBy
b2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdh
dGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFy
aXRoTmVnYXRlOwpAQCAtNTM2OSw5ICs1MzY5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTXVsKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNl
bmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCku
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE11bElDKiBtdWxJQyA9
IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8g
cmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRv
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDYgQEAgdW5z
aWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAgIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsK
ICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVuc2lnbmVkIFZhcmlh
YmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFibGVzID0gY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBzID0gY29kZUJsb2Nr
LT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAgICB9IGVsc2Ugewor
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGlu
ZVZlcnNpb24oKTsKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51
bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICszNTMs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHko
Rmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjYg
KzUyLDE3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENhbGxGcmFtZUYKIGJvb2wg
Q2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkp
IHsKLSAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgY2FzZSBKSVRUeXBl
OjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBKSVRUeXBlOjpO
b25lOgotICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gSklUQ29kZTo6Y2FsbFNp
dGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpOwogfQogCiBib29s
IENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUo
KSkgeworICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJVFR5
cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBlOjpG
VExKSVQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzksOCArNzAsNiBAQCBib29sIENhbGxG
cmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2Fs
bFRodW5rOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwxMCArNDU2LDEwIEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIEhhbmRsZXJJbmZvKiBmaW5kRXgKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdmlz
aXRvci0+Y2FsbEZyYW1lKCk7CiAgICAgdW5zaWduZWQgZXhjZXB0aW9uSGFuZGxlckluZGV4Owot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQot
ICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgo
KS5iaXRzKCk7Ci0gICAgZWxzZQorICAgIGlmIChKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVCeXRj
b2RlSW5kZXgoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBleGNlcHRpb25IYW5kbGVy
SW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKKyAgICBlbHNlCisg
ICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgp
LmJpdHMoKTsKIAogICAgIHJldHVybiBjb2RlQmxvY2stPmhhbmRsZXJGb3JJbmRleChleGNlcHRp
b25IYW5kbGVySW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxOCBAQAogI2luY2x1ZGUg
IkpJVC5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZH
Q2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlLmgiCisjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5j
bHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQ
Q1RvQ29kZU9yaWdpbk1hcC5oIgpAQCAtNDksNiArNTUsOCBAQAogI2luY2x1ZGUgPHd0Zi9HcmFw
aE5vZGVXb3JrbGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgogCisjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogbmFtZXNwYWNl
IEpJVEludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CkBAIC02MCw2ICs2OCw4OTEgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwogU2Vj
b25kcyB0b3RhbEZUTERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGlsZVRp
bWU7CiAKK3ZvaWQgSklUOjpzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIHNldFR5cGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMu
b3BlcmFuZChyZWcpID0gdHlwZTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlID0gWyZd
IChhdXRvIGJ5dGVjb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIHNldFR5cGUo
Ynl0ZWNvZGUubV9kc3QsIHR5cGUpOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgIC8vc2V0RHN0VHlw
ZShieXRlY29kZSwgcHJvZmlsZXMuZ2V0KCZieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9wcm9maWxlKSk7CisgICAgICAgIC8vIFdlIHJhY2lseSByZWFkIHRoaXMsIHNpbmNlIGl0IHNo
b3VsZCBvbmx5IGdyb3cgaW4gdGhlIHR5cGVzIGl0IHJlcHJlc2VudHMuCisgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUu
bV9wcmVkaWN0aW9uKTsKKyAgICB9OworCisgICAgYXV0byB0eXBlRm9yID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgLT4gU3BlY3VsYXRlZFR5cGUgeworICAgICAgICBpZiAob3BlcmFu
ZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUo
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgfTsKKworICAgIHN3aXRjaCAo
aW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJn
dW1lbnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGw6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGw+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxX
aXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JpdGFuZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
ZGlyZWN0X3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9ieV9pZF9kaXJlY3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NvbnN0cnVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfZnJvbV9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IG9wX3RvX3RoaXM6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cFRvVGhpcz4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRh
Lm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9p
dGVyYXRvciwgbWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAg
ICAgc2V0VHlwZShieXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9wcmVk
aWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9u
ZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRv
ck5leHQ+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEubV9k
b25lUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFs
dWUsIG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE1vdj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMp
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50czoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9j
YWxsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByaXZh
dGVOYW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29m
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRQcm90b3R5cGVPZj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9i
eV9pZF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdG9fb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
dG9fbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BUb051bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zy
b21fYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF90b19udW1lcmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfYWRkOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+
KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1f
bGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1f
cmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0Rv
dWJsZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBT
cGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgIHJl
c3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRklYTUU6IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1
bGF0aW9uKGxlZnQpIHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY2Fu
IGRvIGJldHRlciBoZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcg
fCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9tdWw6
IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAg
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhz
KTsKKworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJ
bnRBc0RvdWJsZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAg
ICAgICAgICAgICAgYm9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZy
b21Ob25OYU4gfHwgISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNw
ZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3Vi
bGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8g
YmlnaW50MzIKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
QmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAg
ICAgICAgICAgIGlmICghIShsZWZ0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkgfHwgISEo
cmlnaHQgJiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3QpKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQgfD0gU3BlY0JpZ0ludDsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3Vs
dCk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX3N1YikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOwor
ICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAg
ICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBp
ZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxl
KGluc3RydWN0aW9uLT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcE1vZD4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMy
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0
dGVyIGlmIHdlIHByb2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNv
bWUga2luZCBvZiBleGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3Vs
dAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVj
SW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX3Vyc2hpZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJz
aGlmdD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9p
bmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0
byBoYW5kbGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMs
IFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBpbnB1dCA9IHR5cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlu
cHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJ
bnQzMk92ZXJmbG93KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBTcGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBT
cGVjRG91YmxlUHVyZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3Vi
bGVQdXJlTmFOOworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0
ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBl
KGRzdCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkg
eworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBT
cGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBp
ZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxl
KGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUu
bV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2Rz
dCwgYnl0ZWNvZGUubV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBvcF9wb3c6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEFkZD4oKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29k
ZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29k
ZS5tX3Jocyk7CisgICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
Qnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNl
IG9wX3JzaGlmdDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkg
eworICAgICAgICAgICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAg
ICAgICAgICBhdXRvIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAg
ICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIGlmIChpc0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1
bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShieXRlY29kZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9sc2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
THNoaWZ0PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9u
LT5hczxPcFJzaGlmdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3Bf
dG9fcHJpbWl0aXZlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5t
X3NyYyk7CisKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgaWYgKHR5cGUgJiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCBTcGVjUHJpbWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0g
dHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkp
KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9j
YXRjaDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+
KCk7CisgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVy
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBpZiAo
IWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhp
bmcgd2hlcmUgd2UgZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2
ZXIgZXhlY3V0ZWQgc28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAgICBi
cmVhazsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBj
YW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUp
IHsKKyAgICAgICAgICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9wcmVk
aWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfZW50ZXI6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNldFR5
cGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19v
YmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0Pigp
LCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVf
c2NvcGU6CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQg
b24gcmVzb2x2ZWQgdHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVUaGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2luX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5VmFsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX3Byb21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlUHJvbWlzZT4oKSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3N0cmNhdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJj
YXQ+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5j
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCks
IFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRv
cl9mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5l
cmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19hc3luY19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FzeW5jRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXN5bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5j
X2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVy
YXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfcHVzaF93aXRoX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFB1c2hXaXRoU2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNw
ZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1l
cmFibGVMZW5ndGg+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlF
bnVtZXJhdG9yPigpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51
bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQ
bmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdG9faW5kZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFRvSW5kZXhTdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9yZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRSZXN0TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BHZXRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVu
dHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRz
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3Vt
ZW50cz4oKSwgU3BlY1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZs
eT4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3By
b21pc2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4o
KSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9hc3luY19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlQXN5bmNHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TGVzcz4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3Nl
cToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQmVsb3c+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9iZWxvd2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4o
KSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZp
bmVkT3JOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
aXNfYm9vbGVhbjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xl
YW4+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1i
ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BUb1N0cmluZz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3Bfbm90OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJv
ZmlsZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRp
dHlXaXRoUHJvZmlsZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBz
dGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8
IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOwor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lk
ZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfaXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSXNDYWxsYWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0
aF90aGlzOgorICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFs
X2ZpZWxkOgorICAgIGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdp
bjoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRv
d19jaGlja2VuX3Byb2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6
CisgICAgY2FzZSBvcF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAg
IGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2Fz
ZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNl
IG9wX3NldF9mdW5jdGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6Cisg
ICAgY2FzZSBvcF9kZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nl
c3Nvcl9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgor
ICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFf
bnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3Jf
bnVsbDoKKyAgICBjYXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6
CisgICAgY2FzZSBvcF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bf
am5zdHJpY3RlcToKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAg
ICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9w
X2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgor
ICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBv
cF9qYmVsb3dlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9p
bW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6
CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29w
ZToKKyAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmls
ZV90eXBlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoK
KyAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5
X2lkOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfc2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgY2Fz
ZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3Jl
YXRlX2dlbmVyYXRvcl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAg
ICBjYXNlIG9wX3dpZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVu
Y3Rpb25fcHJvbG9ndWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAg
ICBjYXNlIGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29u
c3RydWN0X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlf
Y2hlY2s6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNr
OgorICAgIGNhc2UgbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90
aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVy
aW5nX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xp
bmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGlu
dF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNo
ZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFy
bHlfZnJvbV9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJn
c19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX3B1dF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3
YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToK
KyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgorICAg
IGNhc2Ugbm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRfaG9z
dF9jYWxsX3JldHVybl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNl
cHRpb246CisgICAgY2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX29wX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9pdGVyYXRvcl9uZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVu
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX3RhaWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25z
dHJ1Y3Rfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Nsb3c6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93Ogor
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfaXRlcmF0b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVy
YXRvcl9vcGVuX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tf
dGFnOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdhc21f
dHJhbXBvbGluZV93YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dh
c21fY2FsbF9pbmRpcmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAg
IG1fZ3JhcGggPSBXVEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNp
emUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGlj
dGlvbnNBdEhlYWQuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0g
PSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKS0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVh
Y2hWYWx1ZVByb2ZpbGUoWyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAg
ICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAg
IH0pOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsm
XSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAg
ICAgICAgIGJ1ZmZlci5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
JiBwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhw
ciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nTG4oKTsKKworICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNp
emVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVu
dChhcmcpOworICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBw
cm9maWxlLm1fcHJlZGljdGlvbjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAg
ICAgZGF0YUxvZygiYXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRp
b24oV1RGOjpkYXRhRmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykp
OworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3By
ZWRpY3Rpb25zQXRIZWFkWzBdLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9vbCBj
aGFuZ2VkOworICAgIGJvb2wgY29tcHV0ZVVzZUNvdW50cyA9IHRydWU7CisgICAgbV91c2VDb3Vu
dHMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBB
dCBsZWFzdCBkbyBERlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09Q
UzogQ29uc2lkZXIgaW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0n
cyByZXN1bHRzLgorICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0
ZWNvZGVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPwor
ICAgICAgICAvLyBPT1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyBy
ZWFjaGFibGUgaWYgd2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAg
ICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRl
eCgpXTsKKworICAgICAgICAgICAgaWYgKGNvbXB1dGVVc2VDb3VudHMpCisgICAgICAgICAgICAg
ICAgbV91c2VDb3VudHNbYmxvY2suaW5kZXgoKV0gPSBPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4o
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCAwKTsKKworICAgICAgICAg
ICAgaWYgKCFibG9jay5pc0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0
aCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
IHsgaSArIGJsb2NrLmxlYWRlck9mZnNldCgpIH07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoY29tcHV0ZVVzZUNvdW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBj
b3VudCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3VzZUNvdW50c1tibG9jay5pbmRleCgpXS5vcGVyYW5kKG9wZXJhbmQpICs9
IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVy
T2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVj
dGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25z
QXRIZWFkW3N1Y2Nlc3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2N1cnJlbnRQcmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJl
bnRQcmVkaWN0aW9uc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBj
b21wdXRlVXNlQ291bnRzID0gZmFsc2U7CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBp
ZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9j
b2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVh
ZCk7Cit9CisKIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw3ICs5
NjAsMTMgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAg
ICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCi1K
SVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNr
ZWRVc2VMT0wgPSB0cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30KKworSklUOjpKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklU
KCZ2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAg
ICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
IDogMCkKQEAgLTc1LDYgKzk3NCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEIKICAgICAsIG1fY2FuQmVPcHRpbWl6ZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEVt
aXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAsIG1fdXNlTE9MKGNvbXBpbGVUeXBlID09IENv
bXBpbGVUeXBlOjpMT0wpCiB7CiB9CiAKQEAgLTEzNywxMSArMTAzNywxOSBAQCB2b2lkIEpJVDo6
YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICAgICAgKyttX2J5dGVjb2RlQ291bnRIYXZp
bmdTbG93Q2FzZTsgXAogICAgIE5FWFRfT1BDT0RFKG5hbWUpCiAKLSNkZWZpbmUgREVGSU5FX1NM
T1dfT1AobmFtZSkgXAorI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lLCBkc3QsIHR5cGUpIFwK
ICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0g
c3RhcnRCeXRlY29kZUluZGV4KSB7IFwKLSAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAot
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgbV9jaGVja2Vk
VXNlTE9MID0gdHJ1ZTsgXAorICAgICAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FsbENh
c2VzIikgJiYgYXRvaShnZXRlbnYoInByaW50U2xvd0NhbGxDYXNlcyIpKSkgeyBcCisgICAgICAg
ICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gY2JOYW1lOyBcCisgICAgICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmR1bXAoY2JOYW1lKTsgXAorICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBj
Yk5hbWUudG9TdHJpbmcoKSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkgKyAiICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCldOyBcCisgICAgICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0JikgeyBc
CisgICAgICAgICAgICAgICAgICAgIHNsb3dDYWxsQ2FzZVJhbihrZXkpOyBcCisgICAgICAgICAg
ICAgICAgfSk7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgZW1pdFNsb3dPcChzbG93
X3BhdGhfIyNuYW1lLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGRzdCwgdHlwZSk7IFwKICAgICAgICAg
fSBcCiAgICAgICAgIE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAg
LTE1NiwyNiArMTA2NCw0NiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkK
IAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBc
Ci0gICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisg
ICAgICAgIGVtaXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAog
ICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBl
bWl0U2xvd0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFt
ZSk7IFwKKyAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF8jI25hbWUpOyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQp
IHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkp
OyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsg
XAorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9w
XyMjbmFtZSk7IFwKICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nh
c2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVu
Y3Rpb24gc3R1YikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwog
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYWxsQ2FzZVJh
bihTdHJpbmcga2V5KQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxT
dHJpbmcsIHVpbnQ2NF90Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nh
c2VzLmNvbnN0cnVjdCgpOworICAgIH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdl
dCgpOworICAgIHVpbnQ2NF90IHZhbHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZh
bHVlOworICAgIGlmICgodmFsdWUgJSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5
LCAiOiAiLCB2YWx1ZSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkK
IHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigp
OworCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21w
aWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxNiArMTE1OSw4NSBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRl
Y29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25D
b3VudDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xv
d0Nhc2VzLnNpemUoKTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVj
b2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAg
ICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVy
ZSBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBj
cmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAg
ICAgICAgLy8gT09QUworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6
ZSgpKTsKKyAgICAgICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7Cisg
ICAgICAgIGZvciAoYXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJs
b2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9j
ay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1
Y2Nlc3NvckluZGV4XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3Nl
bWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0
aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgIGZvciAobV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5z
dHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAg
aWYgKCFtX2N1cnJlbnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3Vy
cmVudEJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgp
KSkgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
UmVnIGFsbG9jIGF0IGVuZCBvZiBiYiMiLCBtX2N1cnJlbnRCbG9jay0+aW5kZXgoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5p
bmRleCgpXSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9j
ay0+aW5kZXgoKV0gPSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9m
ZnNldChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2Nr
LT5pc0V4aXRCbG9jaygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byYgcHJlZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tz
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJl
ZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0
RW5kW3ByZWRlY2Vzc29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQ
cmVkZWNlc3NvcnNTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3Mg
PSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAq
bV9zdGF0ZUF0RW5kW3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9
IHByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50U3RhdGUubWVyZ2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JC
bG9ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlv
bnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKworICAg
ICAgICAgICAgICAgIG1fY3VycmVudFVzZUNvdW50cyA9IFdURk1vdmUobV91c2VDb3VudHNbbV9j
dXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICBtX3NwaWxsQ2FuZGlkYXRl
cy5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
cHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAgICBpZiAo
bV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVj
b2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAgICAgICAg
ICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCisg
ICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kaXNh
c3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWlu
UGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwogICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNv
ZGVJbmRleCkucHRyKCk7CiAgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7CiAKQEAgLTI3OCw0NiArMTI3NSw0MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgICAgIH0KICNlbmRpZgogCisKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBiZWZvcmUgYmMjIiwgbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsKQotICAgICAgICBERUZJTkVfU0xPV19P
UChsZXNzKQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGdyZWF0ZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoaXNfY2FsbGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlz
X2NvbnN0cnVjdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCi0gICAgICAgIERF
RklORV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5
cGVvZl9pc19mdW5jdGlvbikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0KQotICAgICAg
ICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRf
YnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhf
dGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9p
bl9ldmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQotICAgICAgICBE
RUZJTkVfU0xPV19PUCh1bnJlYWNoYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3df
c3RhdGljX2Vycm9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJl
YWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCi0gICAgICAgIERF
RklORV9TTE9XX09QKHNwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoKQotICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0
eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZykKLSAgICAgICAgREVGSU5FX1NMT1df
T1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0
ZV9zY29wZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVk
X2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0
ZXJmbHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0KQotICAgICAgICBERUZJ
TkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X3By
b21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9T
TE9XX09QKG5ld19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHBvdykKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AoaW5fYnlfdmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eVZhbD4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2Nv
bnN0cnVjdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2Rz
dCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisg
ICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3Rl
cigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3Ro
aXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
cmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLm1f
ZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJv
cGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvciwgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJy
YXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJl
YWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5
X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLm1fZHN0
LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0NlbGwpCisgICAg
ICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1lbnRzKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY1Njb3BlZEFy
Z3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCkubV9kc3Qs
IFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50
c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0
ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKS5tX2RzdCwg
U3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2Jq
ZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklO
RV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5tX2RzdCwgU3Bl
Y0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVfT1Aob3BfYWRk
KQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzOTIsMTEgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3Vw
ZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJfZW5k
KQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQpCiAgICAgICAg
IERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19PUChtb2QsIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJlciB8
IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikKICAgICAgICAg
REVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkKQEAgLTQ3NCwx
MCArMTQ3Miw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAgICAgIERFRklO
RV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAgICBERUZJTkVfT1Aob3Bf
aXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfZnVuY3Rpb24pCisg
ICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBERUZJTkVfT1Ao
b3BfdHlwZW9mKQorCisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQorICAgICAgICBERUZJTkVf
T1Aob3BfbGVzc2VxKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcikKKyAgICAgICAgREVG
SU5FX09QKG9wX2dyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoKQorCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9u
bWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0g
c3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhyb3c6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pbnN0YW5j
ZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6
CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9o
YXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAgICAgICAgICAg
IGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgYXV0byBjb3VudCA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCYgY291bnRlciA9IG1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICAgICAgICAgIC0tY291bnRlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWNvdW50ZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gT09QUzogRG8gdGhpcyBsYXppbHkgaW4gc2xvdyBwYXRoIGNy
ZWF0aW9uL3NwaWxsRm9yQ2FsbAorICAgICAgICAgICAgICAgICAgICAvL21fc3BpbGxDYW5kaWRh
dGVzLmFwcGVuZChvcGVyYW5kKTsKKworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbG9iYmVyKGdwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9
IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnBy
ICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihm
cHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAg
ICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3Vy
cmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgY29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5
dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAg
LTQ5OCw2ICsxNTcwLDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkKICAg
ICBtX2ptcFRhYmxlLmNsZWFyKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYXNlUmFuKFN0cmlu
ZyBrZXkpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywg
dWludDY0X3Q+PiBzbG93Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93Q2FzZXMuY29u
c3RydWN0KCk7CisgICAgfSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMuZ2V0KCk7Cisg
ICAgdWludDY0X3QgdmFsdWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7Cisg
ICAgaWYgKCh2YWx1ZSAlIDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihrZXksICI6ICIs
IHZhbHVlKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIHsKICAg
ICBtX2dldEJ5SWRJbmRleCA9IDA7CkBAIC01MTYsMTQgKzE2MDIsMjUgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNv
dW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNl
KTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwot
ICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2Fz
ZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRl
Y29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Ns
b3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUlu
ZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFi
ZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUlu
ZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBd
LmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVj
b2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigp
OworCisgICAgICAgIGlmIChnZXRlbnYoInByaW50U2xvd0Nhc2VzIikgJiYgYXRvaShnZXRlbnYo
InByaW50U2xvd0Nhc2VzIikpKSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBuYW1l
OworICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobmFtZSk7CisgICAgICAgICAgICBTdHJp
bmcga2V5ID0gbmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3RyaW5nOjpudW1iZXIobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVzW2N1cnJlbnRJbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKV07CisgICAgICAgICAgICBwcm9iZShbPV0oUHJvYmU6OkNvbnRleHQmKSB7
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VSYW4oa2V5KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmls
ZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCkBAIC01ODAs
NyArMTY3Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tf
dHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZWdh
dGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTksNiArMTY5NSw5
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19P
UCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzEsMTkgKzE3MzAsMzQgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AocmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
Y2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0b19wcm9wZXJ0eV9r
ZXkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlzX2NhbGxhYmxlKQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCisgICAgICAgIERF
RklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCisgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKHR5cGVvZikKKworICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19P
UChsZXNzKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChsZXNzZXEpCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXIpCisgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKGdyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChj
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZpcnN0
VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgp
IHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0
KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAg
ICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIg
PT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZz
ZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwor
ICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09
IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cg
Y2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNz
KCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFscmVhZHkgZG8gdGhpcywg
c28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsK
ICAgICB9CkBAIC02ODgsNiArMTgwMiw4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQorCisgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsgLy8g
T09QUzogaGVscGZ1bCBmb3IgcnVubmluZyBMT0wgdy9vdXQgREZHLgogICAgIAogICAgIHN3aXRj
aCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKICAgICBjYXNlIEdsb2JhbENvZGU6CkBAIC03
NzgsNiArMTg5NCw4OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBp
CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAg
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIGJvb2wgcHJpbnRF
YWNoT1NSID0gZ2V0ZW52KCJwcmludEVhY2hPU1IiKSAmJiAhIWF0b2koZ2V0ZW52KCJwcmludEVh
Y2hPU1IiKSk7CisKKyAgICBpZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHkoKSkgeworICAgICAgICBK
dW1wTGlzdCBleGl0Q29tbW9uOworICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1w
cykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5maXJzdDsKKyAgICAg
ICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAgICAgIGp1bXBzLmxpbmso
dGhpcyk7CisKKyAgICAgICAgICAgIGlmIChwcmludEVhY2hPU1IpIHsKKyAgICAgICAgICAgICAg
ICBTdHJpbmdQcmludFN0cmVhbSBwcmludFN0cmVhbTsKKyAgICAgICAgICAgICAgICBtX2NvZGVC
bG9jay0+ZHVtcChwcmludFN0cmVhbSk7CisgICAgICAgICAgICAgICAgQ1N0cmluZyBzdHIgPSBw
cmludFN0cmVhbS50b0NTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBzdHIuYnVmZmVyKCktPnJl
ZigpOyAvLyBsZWFrIGl0LgorICAgICAgICAgICAgICAgIHByaW50KHN0ci5kYXRhKCksICIgLT4g
ZXhpdCBhdCBiYyMiLCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgIlxuIik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAg
ICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVja3BvaW50IGV4aXRz
LgorCisgICAgICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgICAgICBl
eGl0Q29tbW9uLmFwcGVuZChqdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKCFl
eGl0Q29tbW9uLmVtcHR5KCkpOworICAgICAgICBleGl0Q29tbW9uLmxpbmsodGhpcyk7CisKKwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6OnBjR1BSID09IHJlZ1Q0KTsK
KyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFp
bnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVsb3cgcmVsaWVzIG9uIHRoaXMg
YmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFnUmVn
aXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQQyBy
ZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsK
KyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3JpdGVC
YXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJhdGlv
blB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdpc3Rl
cnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFn
KSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
cmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigpKSwgcmVnVDIpOwor
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsKKyAgICAgICAgc3RvcmUzMihy
ZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkp
KTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMiwg
VHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXph
dGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIsIG51bWJlclRh
Z1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5jZSB0aGUgTExJbnQg
UEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPihtX2NvZGVCbG9jayk7CisgICAg
ICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRyaWdnZXJMT0xSZW9w
dGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChub25BcmdHUFIwLCBP
cGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJlclRhZ1JlZ2lzdGVyLCBMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51
bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgc2tpcEpldHRpc29uLmxpbmso
dGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6ZU5vdyA9IGppdC5icmFuY2gz
MigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVyVGhhbk9yRXF1YWwsCisg
ICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAorICAgICAgICAvLyAgICBBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6Om5vcm1hbE9TUkV4aXRU
cmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKTsKKyAgICAg
ICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAg
ICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9TUkV4aXRUcmFtcG9s
aW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAgICAgICAgLy8gICAgZGVzdGlu
YXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAg
ICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPm1ldGFk
YXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOworICAgICAg
ICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAgICAgICBtb3Zl
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUkluZm86OnJlZ1Qy
LCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6IAorICAgICAgICAvLyAxLiBT
dG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAgICAgICAvLyAyLiBqZXR0aXNv
biBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8gMy4gd3JpdGUgYmFycmllciBM
TEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwog
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIxNjUsNyBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0
ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0g
ICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBl
OjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRl
c1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0
PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIxNzYsNyBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9j
a2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwogICAgIH0KICAgICBtX2Nv
ZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2Rl
KHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOworICAgICAg
ICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgdXNl
TE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpKTsKIAogICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0
ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1
dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIsNiArMjI3MCw5NTEgQEAgU2Vj
b25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5l
Q29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsK
IH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBP
T1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9l
eGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0
SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhp
dEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmFuaz4KK1ZlY3RvcjxSZWcsIDMyPiBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8v
IE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVy
ZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBP
T1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFZlY3RvcjxSZWcsIDMy
PiBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVy
U2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0
IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkg
eworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmIChh
bGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYXBw
ZW5kKHJlZyk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1i
ZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3Rl
cihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAg
ICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9
CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BT
OiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBj
b2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9i
YWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6
IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAz
Mj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJl
c3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOwor
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFs
bG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hl
biB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29t
cGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmln
YW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4u
LgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlO
ZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRS
ZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisK
K3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJyZWFr
cyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2UgYSBu
aWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAgICAv
L2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5k
ZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBK
SVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVn
IDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYg
cmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlz
QWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7Cisg
ICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBK
SVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBP
T1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6
IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1
ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAg
ICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZw
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMo
KSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
ICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChy
ZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQor
eworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0
IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBp
ZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAg
ICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlk
R1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JP
cGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBi
ZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAg
IC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAg
Ly8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2Ug
ZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1
cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxs
eSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+
VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisg
ICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFu
ZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkK
KyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9CisK
K3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Ns
b2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsK
KyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAg
ICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJl
cihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1Nh
dmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3Vs
ZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJ
Zk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMt
PnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdW
YWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpt
YWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdWYWx1ZS5vcGVy
YW5kKSkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAg
ICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJz
KCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbChHUFJSZWcg
dG9JZ25vcmUsIEZQUlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxk
IGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsKKyAgICBTYXZl
UGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7
CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAg
aWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUub3Bl
cmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVuZChz
dGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1ZhbHVl
Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNw
aWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChS
ZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnLmZwcigpICE9IHRvSWdu
b3JlRlBSKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9CisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnLmdwcigpICE9IHRv
SWdub3JlKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9CisKKyAgICBy
ZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNl
cnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJz
LCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50RmlsbEFmdGVy
Q2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKnRoaXMsIHJl
Y29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JTcGlsbCwgMCk7
CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCksIHJlY29y
ZC5zYXZlUGxhbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRDb3VudCh1aW50NjRfdCBjb3Vu
dCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICBmb3IgKHVpbnQ2NF90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChj
b3VudGVyICUgMTAwMDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUnVudGltZSBsb2Fk
IGNvdW50OiAiLCBjb3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNh
dmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwg
Y29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2NF90IGxvYWRDb3VudCA9IDA7
CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBz
dGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gc3Rk
OjpnZXQ8MT4odHVwbGUpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5UeXBlID0gc3Rk
OjpnZXQ8Mj4odHVwbGUpOworCisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25vcmUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFuZFRvSWdub3Jl
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7CisgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNTRVJU
KCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIERpc2FsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goKnRoaXMpOworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAgICAg
ICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJbnQz
MihKU1ZhbHVlUmVncyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAg
ICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAg
ICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIGlzSW50MzIu
bGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNo
LCByZWcuZnByKCkpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsb2FkQ291bnQ7CisgICAgfQorCisgICAg
aWYgKGZhbHNlICYmIGxvYWRDb3VudCkgeworICAgICAgICBwcm9iZShbPV0gKFByb2JlOjpDb250
ZXh0JikgeworICAgICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRDb3VudCk7CisgICAgICAgIH0p
OworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25z
dCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihzbG93Q2Fz
ZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJ
VDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAg
Ly8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwg
SlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIs
IGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3Np
Z25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMy
T25seTsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
RlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2Nh
dGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1w
LmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisg
ICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3IgYnl0ZWNvZGVz
ICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgorICAgIGFzc2ln
blJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOworCisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6
OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChn
cHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNz
aWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7Cisg
ICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNT
RVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30K
Kwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1Zh
bHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUu
b3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQ
UlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQor
eworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30K
KworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5h
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQp
OworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6
OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6
OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAg
ICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
IG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKwor
ICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2Nr
KG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9
CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxv
Y2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAg
aWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAg
IG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxv
Y2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFu
ZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7Cisg
ICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxh
dGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsK
K30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
Cit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAg
ICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNl
bGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9
CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAg
ICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1f
aml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1f
aml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9q
aXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2pp
dC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3By
OworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQo
b3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJh
bmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisK
K0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3Bl
cmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7
CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRl
KEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOwor
CisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICBy
ZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQorewor
ICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisK
KyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykg
eworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1f
aml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
bV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29w
ZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dw
cjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChv
cGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKwor
SklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBp
ZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAg
bV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0g
bV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFs
aWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQu
bG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9Owor
ICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFu
ZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9
IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAo
IWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkp
KSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMy
KEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQu
c3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihK
U1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZp
bHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1f
aml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAgIG1faml0LmFzc2lnblJl
ZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpOdW1i
ZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQ
UlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpOdW1iZXJPcGVyYW5k
Ojp+TnVtYmVyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBS
UmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAg
ICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAg
ICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJh
bmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIo
KTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
bV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuY29udmVydEludDMy
VG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlmIChpc0J5dGVjb2RlRG91Ymxl
U3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBHUFJU
ZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0
LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJz
KTsKKworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUs
IG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVl
R1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFs
dWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgp
OworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAgICAgIGRvbmUubGluaygmbV9q
aXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKyAgICBy
ZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6SW50MzJDb252
ZXJ0aW5nT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBt
X2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0g
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6
fkludDMyQ29udmVydGluZ09wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9
CisKK0dQUlJlZyBKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVJ
bnQzMihtX29wZXJhbmQpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBvcCB7IG1faml0LCBtX29w
ZXJhbmQgfTsKKyAgICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9jayht
X2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVOdW1iZXIobV9vcGVy
YW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3Bl
cmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisK
KyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAgICBG
UFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBhdXRvIGlzSW50MzIgPSBtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHZh
bHVlR1BSLCBtX2dwciwgZnByKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyNpZiBDUFUoQVJN
NjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0RvdWJsZVRvSW50
MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAgICAgICAgIG1f
aml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKGZwciwgbV9n
cHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBl
bHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJh
bmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1bmNhdGVTdWNj
ZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQuc2lsZW50U3Bp
bGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91YmxlVG9JbnQoKSA/
IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMyLCBtX2dwciwg
ZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3BpbGxSZWNvcmQp
OworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BS
LCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgfSBlbHNlIGlm
IChtX2ppdC5zaG91bGRTcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9q
aXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQsIHZhbHVlR1BSKTsKKworICAgICAgICBt
X2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgfSBlbHNl
IGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVPdGhlcihtX29wZXJhbmQpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1f
aml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAg
IG1faml0LnNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0g
bV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAg
ICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBG
UFIuZnByKCk7CisKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKworICAgICAgICBhdXRvIGlzSW50
MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gbm90RG91YmxlID0gbV9qaXQuYnJhbmNoSWZOb3RE
b3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lz
dGVycyk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1fZ3ByLCBmcHIp
OworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBv
cnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgewor
ICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1h
bnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNo
SWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBt
X2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2pp
dC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVE
b3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRv
SW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2Fs
bChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgbm90RG91YmxlLmxpbmsoJm1faml0KTsKKyAgICAgICAgYXV0
byBub3RPdGhlciA9IG1faml0LmJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBtX2dwcik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7
CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90T3RoZXIu
bGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJh
bmNoSWZOb3RCb29sZWFuKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIpKTsKKyAgICAg
ICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwgbV9ncHIpOworICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9q
aXQpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQodmFsdWVHUFIsIG1fZ3ByKTsK
KworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5maWx0ZXJUeXBl
KG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3BlY0Jvb2xlYW4p
OworICAgIH0KKworICAgIHJldHVybiBtX2dwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZO
ZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAg
ICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcg
OiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBi
cmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFu
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBz
Y3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xl
YW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNo
R1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFs
dWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQg
SklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUp
Cit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBT
cGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2Vs
bCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30K
Kwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5j
aElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQz
Mk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
Qnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNF
KEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNl
CisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAg
ICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsK
KyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIo
b3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJp
Z0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hH
UFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUp
KTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0
YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiht
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVz
Lm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVu
VHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRT
dGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRT
dGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1f
Y29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJy
ZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBvcGVyYW5kLCAi
LCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0ZSgp
Cit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAgZm9yIChhdXRv
IHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxv
Y2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9n
TG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9y
IChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZyku
aXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBk
YXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1
ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5o
IgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAu
aCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25l
ZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNv
ZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExp
bmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFi
bGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAg
ICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkK
LSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNh
dmVQbGFuID0gVmVjdG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFsUmVnaXN0ZXIsIFNwZWN1bGF0
ZWRUeXBlPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZl
UGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAg
ICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVjdCBT
bG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
KyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAg
ICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1
c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2
ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBs
YW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0
d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNh
dmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07
CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Niw3ICsyMTEsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
OwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJm
YWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0lu
dGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAg
IC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxl
IGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgotICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVtIGNsYXNzIENvbXBp
bGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAgTE9MCisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21waWxlVHlwZSwg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgo
MCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50
ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZvaWQgZG9NYWlu
VGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZz
ZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBp
bGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZv
cnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBjb21waWxlVHlwZSwg
Ynl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2Vs
aW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBD
b21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9
IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGls
ZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRy
ZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAg
ICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAg
ICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAg
ICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4Owog
ICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQo
YnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29k
ZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAg
ICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lk
IHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2Ji
ZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOwor
CiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhj
ZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkgKzM1MywxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAot
ICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNl
KGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
dm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1w
LCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dD
YXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1
bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50
KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzMzLDcg
KzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwor
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpv
cGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVj
dF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
Ym9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTM2MCw3ICsz
OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29t
cGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUg
eyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7
CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVx
VHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91
YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmll
ck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91
bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01MDgsOCArNTQw
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25h
bENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2ln
bmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpA
QCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRp
dGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJl
bGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5h
bWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlv
biwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBT
bG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBp
bnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZl
cnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRl
ck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9p
ZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0
IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTQ2
LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRp
dHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0
cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpA
QCAtNjc4LDc4ICs3MjEsMTAwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZv
aWQgZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9p
ZCBlbWl0X29wX2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQg
ZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBlbWl0X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0Q29tcGFyZU9wSW1wbChjb25z
dCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0
X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lkIGVt
aXRfb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Fy
Z3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
dHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBl
bWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2Fz
ZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2
b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVt
aXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAg
ICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZv
aWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwg
Ym9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZh
bGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJl
c29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2
b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsK
QEAgLTc2NCw4ICs4MjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdElu
aXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRv
Q2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAg
ICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzc4
LDM4ICs4NDEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zh
c3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0
aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJ
Q1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPios
IGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdldFNs
b3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAg
ICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAg
IH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZy
b20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNs
b3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAg
ICAgICB2b2lkIGVtaXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1bGF0ZWRUeXBl
IGRzdFR5cGUpOwogCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2Vz
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlu
a0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC04OTEsNiArOTM3LDI2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAg
ICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRvIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0
aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEFyZ3MuLi4g
YXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAg
ICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAg
ICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJn
cy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRp
b25UeXBlPihhcmdzLi4uKTsKQEAgLTkwMiw2ICs5NjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIE5vUHJvZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CisgICAgICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2b2lkIGVtaXRCaXRCaW5h
cnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2Zp
bGluZ1BvbGljeSBzaG91bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5nUG9saWN5OjpOb1Byb2Zp
bGluZyk7CiAKQEAgLTk2MSw2ICsxMDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAg
ICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9v
bCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBp
bGVUaW1lcygpOwogICAgICAgICAKQEAgLTk3MSw2ICsxMDQzLDI5MiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNz
IEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYsIEdQ
UlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAg
ICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJU
ZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAg
ICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnBy
IHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGlu
dDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBu
b3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAg
ICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklU
JiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAg
ICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3Vi
bGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFu
ZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgTnVtYmVyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAg
ICAgICAgICAgfk51bWJlck9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJS
ZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIC8vIFNwZWN1bGF0ZSBudW1iZXIrYm9v
bGVhbitvdGhlciwgYW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9yIGJpdG9wcy4KKyAgICAg
ICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVj
dWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMu
b3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAg
ICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9w
ZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0
cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9
CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUo
UmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJl
Z2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQ
UlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5y
ZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShG
UFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUu
cmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VMT0wp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAg
IGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1
ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
Z3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykgewor
ICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2ln
blJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGdwcikub3BlcmFuZC5pc1ZhbGlkKCkp
OworCisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAgICAg
ICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1Zh
bHVlKGZwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBmcHJGb3JPcGVyYW5k
KG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3Bl
cmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VD
b3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2Rl
RG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3BlY0Jv
b2xlYW4pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNw
ZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7
CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9s
U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbkZv
cihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VMT0wo
KTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5n
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2
b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
QXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZv
IGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIo
R1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBS
KCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAg
ICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZv
aWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2UgdGhp
cyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNldCBp
dC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7Cisg
ICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50U3BpbGxS
ZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSA9IEludmFsaWRHUFJS
ZWcsIEZQUlJlZyB0b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOworICAgICAgICB2b2lkIHNp
bGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9p
ZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1f
aW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1fZmFyQ2FsbHM7
CkBAIC05OTAsNyArMTM0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVt
cFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUlu
ZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAg
IFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxT
d2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5z
aWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzODUsODcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAg
ICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9s
b29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsK
KyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVk
IHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAg
ICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJS
ZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0
IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChn
cHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVn
OworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAg
ICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAg
ICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdl
KGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tD
b3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0
ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1h
dDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAg
ICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAgICBS
ZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8U3Bl
Y3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdl
KGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkp
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3Ro
ZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBl
cy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVz
W2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVn
aXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0
ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKworICAgICAgICB2
b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVj
b2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50
QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlw
ZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgVmVjdG9yPE9wZXJh
bmRzPHVuc2lnbmVkLCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAgIE9wZXJhbmRzPHVuc2ln
bmVkLCB0cnVlPiBtX2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXIsIDE2PiBtX3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+
IG1fZXhpdExvZzsKKworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9z
dGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3Nv
cnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9j
aGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29k
ZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODggQEAKICNpbmNsdWRlICJS
ZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklUOjplbWl0
X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
TGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3Jk
ZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJs
ZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVy
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhh
bk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
QW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
T3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5v
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpu
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5P
ckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5vcmRl
cmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRP
cmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFs
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxz
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxz
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pn
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0
ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5s
ZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwg
c2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVx
LCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0Niwz
NyArMTQ4LDE2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjCiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
ZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBncENvbXBhcmUsIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb21w
YXJlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNUZW1wLmdwcigpLCBy
aHNUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBjb21wYXJl
RG91YmxlKGRvdWJsZUNvbXBhcmUsIGxoc1RlbXAuZnByKCksIHJoc1RlbXAuZnByKCksIHJlc3Vs
dEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB8fCAhcHJlZGljdGlvbkZvcihsaHMpIHx8ICFw
cmVkaWN0aW9uRm9yKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFyZSwgbGhzVGVt
cC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAg
ICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAgICAgICBj
b21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFy
ZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NU
aGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9w
TGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFu
T3JFcXVhbEFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVPcElt
cGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVy
VGhhbkFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9wSW1w
bDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfdW5z
aWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigw
KSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7
CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50
MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
TGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIo
aW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZElt
bTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworICAgIH0K
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24s
IGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRp
dGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUg
Zm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBp
bW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50
IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGlu
dCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVD
b25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHx8ICFwcmVkaWN0aW9uRm9yKG9wMSkg
fHwgIXByZWRpY3Rpb25Gb3Iob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwg
bGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQ
Uik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BS
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNl
OworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICszNTUsNDMgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQ
UlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1
dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBs
aHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1w
LT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5Owor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9
IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQz
Mk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9
CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwog
ICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0
YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0z
MihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKKyAg
ICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24p
LCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAs
IG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJn
ZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICs0MDcsODkgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJ
bXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBs
aHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxo
c1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0
TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
YXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
IHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1Rl
bXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAg
fTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0
TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
Mik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1t
KSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKKyAgICAgICAg
Z2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0z
MihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiks
IHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAg
ICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGdl
dExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNv
bmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNv
bmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgp
LCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29u
ZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNs
b3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAg
ICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBa
ZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2Vz
IGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29u
c3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBm
bG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBm
bG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEp
IHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50
R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEp
OwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0z
MDAsOCArNDk4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
OwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNiw4
ICs1MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
fQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkp
IHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAg
ICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUxLDEyICs1
NDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90
IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1w
IGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0g
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJ
bnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2
NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdp
c3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBA
IC0zNjksOSArNTYyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwog
ICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAg
IH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
QEAgLTM4MSwxMSArNTc0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVj
dGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZs
b3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsg
Ly8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVlcyB3LyB0aGUg
cHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOworICAgICAg
ICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOworICAgICAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGFk
ZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICAgICAgc2V0
RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkg
PSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3Jj
RHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnBy
KCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAg
ICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBz
ZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigpOworICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBhZGRE
b3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0RG91Ymxl
KHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRv
IHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsK
KyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0p
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0zOTMsMTEgKzYyOCw2MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Owog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92
ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygp
KSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIHJl
c3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0
ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BS
LCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MS4wOworICAgICAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVt
cEZQUik7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVtcEZQUiwgcmVz
dWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1bHRGUFIpOwor
ICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5k
OjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRH
UFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsK
KyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcg
aW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVt
cC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAg
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAg
ICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOworICAgICAgICAg
ICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIo
Jm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBS
LCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMyLi4u
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMy
KE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICBib3hJ
bnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICAg
ICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwpAQCAtNDA3LDU0ICs2OTMsMTEwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxo
cykgfHwgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJl
cihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1i
ZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0g
bGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigp
OworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICAgICAgRlBSVGVtcCBy
ZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1
bHRUZW1wLmZwcigpOworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5v
RXhjZXB0aW9uQ2hlY2soTWF0aDo6Zm1vZERvdWJsZSwgcmVzdWx0RlBSLCBsaHNGUFIsIHJoc0ZQ
Uik7CisKKyAgICAgICAgICAgIHNldERvdWJsZShkc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJz
IGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJlZ1Qw
ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6ZWF4
OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBYODZS
ZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQocmVn
VDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVt
cDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAg
R1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjbG9iYmVyKGVh
eCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOworICAgICAg
ICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFjZSgq
dGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisgICAg
ICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4
VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0g
ZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAgICBs
aHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhp
cywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQUlJl
ZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogbmV3IG5hbWUsIGxpa2Ugc3BpbGxFeHBlY3RpbmdTbG93UGF0aAorCisgICAgICAgIGVu
c3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgp
OworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNH
UFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIs
IHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQ
UiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcx
ID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkp
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIx
NDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4
ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAg
bnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBU
cnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGlu
ayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQorICAgIGJveEludDMyKGVkeCwgSlNW
YWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLSNlbHNlIC8vIENQVShYODZf
NjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBl
YXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhz
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUoWDg2XzY0
KQpAQCAtNDY0LDcgKzgwNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAg
IEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDc0
LDYgKzgxNiw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAK
KwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIo
b3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjIsMTUg
KzkwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24s
IERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29u
ZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2Fk
KG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyNCwxMyArMTA2NSw2NiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+
KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmls
ZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
Z2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9
IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVu
dEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxs
IHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBC
aWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0
TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6OnRyeUVtaXRMT0xCaXRGYXN0UGF0aChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisKKyAg
ICBhdXRvIGJpdE9wID0gWyZdIChHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSKSB7CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2Ft
ZV92PE9wLCBPcEJpdGFuZD4pCisgICAgICAgICAgICBhbmQzMihsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBP
cEJpdG9yPikKKyAgICAgICAgICAgIG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXR4b3I+KQor
ICAgICAgICAgICAgeG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVs
c2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BMc2hpZnQ+KQorICAgICAgICAg
ICAgbHNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
Y29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BVcnNoaWZ0PikKKyAgICAgICAgICAgIHVy
c2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFJzaGlmdD4pCisgICAgICAgICAgICByc2hpZnQz
MihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBzZXRJbnQzMihyZXN1bHQs
IHJlc3VsdEdQUik7CisgICAgfTsKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJocy5ncHIoKTsKKyAgICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzJDb252
ZXJ0aW5nKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKG9wMikpIHsKKyAg
ICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
IEludDMyQ29udmVydGluZ09wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigp
OworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MSwxNyArMTEzNSw4IEBAIHZv
aWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlm
CisgICAgaWYgKHRyeUVtaXRMT0xCaXRGYXN0UGF0aDxPcD4oY3VycmVudEluc3RydWN0aW9uKSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAg
U25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwpAQCAtNzYwLDMzICsxMTQ1LDEwNiBAQCB2b2lk
IEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgICAgIGxlZnRPcGVyYW5k
LnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwogICAgIGVsc2UgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25z
dEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQogICAgIFJFTEVBU0VfQVNTRVJU
KCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAgIC8v
IE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmln
aHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAo
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgIGlmICgh
bGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAotICAgIFNu
aXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogCisgICAgU25pcHBldEdlbmVyYXRv
ciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
CiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0
KCkubGluayh0aGlzKTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCks
IHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKICAgICBpZiAocHJvZmlsaW5nUG9saWN5ID09
IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1pdFByb2ZpbGluZykKLSAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MuZ3ByKCkpOwogCi0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAg
ICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2Rl
TnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRl
Y29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJP
bmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
SW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9i
aXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0SXNJbnQzMiA9
IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAg
ICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihv
cDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGFk
ZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorCisgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3VsdEdQUik7Cisg
ICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAocmVzdWx0SXNJ
bnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7IAorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5IHwg
U3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UK
QEAgLTgwMyw3ICsxMjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3Ry
dWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNv
ZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdzKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTg0OSwxOSArMTMwNyw4IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0
IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0gICAg
RlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExP
TEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAK
ICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQ7CkBAIC04NzMsMjEgKzEzMjAsNzcgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0
RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQ
UlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFsaWRGUFJSZWc7
CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVt
cD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRo
cyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOwor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9
IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAgICAgaWYgKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9
CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKyAg
ICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmlnaHRTaGlmdEdl
bmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwg
c25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0
Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRK
dW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJl
c3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29k
ZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5
IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5U
eXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcnNoaWZ0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIsMTggKzE0MDUs
NjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxl
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsK
KyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhz
RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIo
KSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigp
LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5t
X2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVj
b2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCksIHJl
c3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBh
ZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1
bHQuZnByKCk7CisgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRk
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElD
ID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRp
b25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0
TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFt
ZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxNDc1LDM1IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJp
dGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5k
IGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9p
ZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVS
ZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qy
OworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3Jj
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1Rl
bXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNy
Y1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhO
ZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRz
dC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZv
aWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3Jj
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNW
YWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQs
IHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MSwx
OSArMTUxMiwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAK
ICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3Ms
IHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNS
ZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRl
ID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBi
b29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAg
ICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAg
fQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJl
bCgpOwpAQCAtOTYzLDcgKzE1MzcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVu
YXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
ciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblBy
b2ZpbGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzE1NTUsODIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAg
ICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJz
dCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5k
VHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisg
ICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJp
Z2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBz
Y3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQ
UjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxl
ZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxG
UFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOwog
I2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBS
UmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7
CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRl
Y29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFu
ZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ay
KTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIo
KSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAg
ICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ax
KSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmln
aHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBS
ID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEp
OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAgIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsK
KyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1Qw
OworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVm
dE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAg
aWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAg
ICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVy
YW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJh
bmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdU
MCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElDLT5tX2dlbmVy
YXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRj
aEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29u
c3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRP
cGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3ICsxNjM5LDM0
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wg
Z2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAg
ICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQu
aXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1w
LT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAg
ICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAg
ICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJp
Z2h0UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2Fz
ZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAz
NSwxMSArMTY3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElD
CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1
bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAo
c3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0
KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJl
c3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlv
biBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChj
dXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE2OTgsOCBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBz
cmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQog
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAt
MTA4NSw3ICsxNzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5
cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVw
YXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE3NDUsNiBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNlbmRp
ZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE3NTUsMzYgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJUKCEoR2Vu
ZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJh
dG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogCi0gICAg
aWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGVsc2Ug
aWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsg
c2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAgIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUMyA6IHJlZ1Qy
IH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
ICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBpZiAoR2Vu
ZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxzZSBpZiAoR2Vu
ZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBAIC0xMTU2LDIz
ICsxODE3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
CiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMu
Zmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTgzMiwyMzcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShn
ZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJFTEVBU0VfQVNT
RVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwog
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQ
UjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxl
ZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxG
UFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
MSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRl
bXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQ
UiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+
ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBS
ZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBS
ZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBG
UFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0
KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAg
aWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVREaXZHZW5l
cmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdz
LCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0
Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAgICAgICBn
ZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5lbXB0
eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAgICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51
bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2Rl
TnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
TXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgICAg
IGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSB8fCBhcml0aFByb2Zp
bGUuZGlkT2JzZXJ2ZU5lZ1plcm9Eb3VibGUoKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAg
bGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNUZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJl
ZyByZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKGxoc0dQUiwgbGhzRlBSKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShyaHNHUFIsIHJoc0ZQUik7CisgICAgICAgICAgICAgICAgbXVsRG91YmxlKGxo
c0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRL
aW5kOjpPdmVyZmxvdywgYnJhbmNoTXVsMzIoT3ZlcmZsb3csIGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0
aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8sIGJyYW5jaDMyKEJl
bG93LCByaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAg
ICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGxo
c0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHMuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOworICAgICAgICAg
ICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgc2V0
RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxo
cyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRoaXMs
IG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAg
ICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigp
OworICAgICAgICAgICAgbXVsRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUTXVsSUMqIG11bElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVE11bElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdp
c2VfY2FzdDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3Ry
dWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Ns
b3c8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWxPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKKyAgICBCaW5hcnlBcml0aFByb2Zp
bGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZs
b3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
VGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
c3ViRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOwor
ICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJ
bnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaFN1YjMyKE92ZXJmbG93LCBsaHMuZ3ByKCksIHJocy5ncHIoKSwgcmVz
dWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
c3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgc3ViRG91YmxlKGxocy5mcHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUU3ViSUMqIHN1
YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1
Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFN1YklDKiBzdWJJ
QyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3Vy
cmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7CisgICAgZW1p
dE1hdGhJQ1Nsb3c8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVTdWJPcHRpbWl6ZSwgc2xvd0Nhc2UpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9QT1cgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDExIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRl
Y29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRp
b25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdp
c3RlcigpLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICB3aWxsRGVmKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTE0NSwxMCArMTQ5LDggQEAg
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNh
bGwsIHJlZ1QwKTsKQEAgLTIxNiw2ICsyMTgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBD
b2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFm
dGVyIHJldHVybi4KICAgICAqLworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
CiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CkBAIC0yNjQsMTMgKzI2OSwxMSBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgQVNTRVJU
KG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIApAQCAtMzM0LDQ0ICsz
MzcsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydQogICAgIGNv
bXBpbGVPcENhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0
aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsKIH0KICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsRm9yd2FyZEFyZ3Vt
ZW50cz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVj
dD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0zODYsNiAr
Mzg5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAg
ICAgfQogICAgIH0pKCk7CiAKKyAgICAvLyBPT1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ug
d2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xvdyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVs
dGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFzIGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7
CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IGhvdyB0byByZWdhbGxvYyB0aGUgcmVzdWx0IGhl
cmU/CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgaW5zdHJ1Y3Rpb24sIHRyeUZhc3RGdW5jdGlvbik7CiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJ
dGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwpAQCAtMzk1LDMwICs0MDUsMzggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIC8vIGNhbGwgcmVzdWx0IChpdGVy
YXRvcikgaXMgaW4gcmVnVDAKIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCku
cHJvcGVydHlOYW1lcy0+bmV4dDsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDApOworCisgICAgSnVtcExpc3QgbmV4dENoZWNrcG9pbnRTbG93OworICAgIG5leHRD
aGVja3BvaW50U2xvdy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChu
ZXh0Q2hlY2twb2ludFNsb3cpOworCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0VGVtcCB7ICp0aGlzLCByZWdUMCB9OworICAgICAgICBHUFJSZWcgc2hvdWxkQmVS
ZWdUMCA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNob3VsZEJl
UmVnVDAgPT0gcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fbmV4dCwgcmVn
VDApOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fbmV4dCkgPSBTcGVjSGVhcFRvcDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIHJlZ1QwKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9w
ZW4+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKKyAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwogCiAgICAg
R1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwpAQCAt
NDU2LDYgKzQ3NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
CiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAvLyBP
T1BTOiBMb2dpY2FsbHksIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIGhhdmUgbXVsdGlwbGUgc2xv
dyBjYXNlcyBwZXIgYnl0ZWNvZGVzIHdpdGggbXVsdGlwbGUgY2hlY2twb2ludHMuIEVhY2ggaGFz
IGl0cyBvd24gcmVzdWx0LCBldGMuLi4KKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogICAgIEp1bXAgZ2VuZXJpY0Nhc2UgPSBicmFu
Y2hJZk5vdEVtcHR5KHJlZ1QwKTsKIApAQCAtNDc2LDM3ICs0OTksNDQgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1
bHRHUFIpOwogCiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRl
clJlc3VsdEdQUik7CisgICAgICAgIEp1bXBMaXN0IGRvbmVDaGVja3BvaW50U2xvd1BhdGg7Cisg
ICAgICAgIGRvbmVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVy
UmVzdWx0R1BSKSk7CiAKLSAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVn
cy5hZGQodmFsdWVHUFIpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdW5h
dmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKHZh
bHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVzZWRS
ZWdpc3RlcnMsCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVl
UmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIGRvbmVDaGVja3BvaW50U2xv
d1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNW
YWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQoZG9u
ZUNoZWNrcG9pbnRTbG93UGF0aCk7CisKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX2RvbmUp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBkb25lR1BSKTsKICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwog
ICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewogICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDM7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gZmFsc2U7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKKyAgICAgICAgSnVtcExpc3QgdmFsdWVDaGVja3BvaW50
U2xvd1BhdGg7CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAg
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgIHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQodmFsdWVD
aGVja3BvaW50U2xvd1BhdGgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFs
dWVHUFIgfSk7CisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV92YWx1ZSk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHZhbHVlR1BSKTsKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKICAgICAgICAg
aXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpAQCAtNTE1LDEwICs1NDUsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsK
QEAgLTUyNiw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsK
ICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1sxXS5saW5rKHRoaXMpOwog
ICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CkBAIC01NDgsNyArNTc3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIH0KIAogICAgIHsgICAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNb
Ml0ubGluayh0aGlzKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKQEAg
LTU2MSw3ICs1OTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
CiAKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
ICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgY29u
c3QgY2hhciogSklUQ29kZTo6dHlwZU5hbWUoSklUVHlwZSBqaQogICAgICAgICByZXR1cm4gIkxM
SW50IjsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICByZXR1cm4gIkJh
c2VsaW5lIjsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuICJMT0wi
OwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gIkRGRyI7CiAgICAg
Y2FzZSBKSVRUeXBlOjpGVExKSVQ6CkBAIC0xMDgsNyArMTEwLDcgQEAgSklUQ29kZVdpdGhDb2Rl
UmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQwogCiBKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2Rl
V2l0aENvZGVSZWYoKQogewotICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwg
KGlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJs
eSgpKSkKKyAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChpc0RGR09yRlRM
KGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQogICAgICAgICAm
JiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpCiAgICAgICAgIGRhdGFMb2coIkRlc3Ryb3lpbmcg
SklUIGNvZGUgYXQgIiwgcG9pbnRlckR1bXAobV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpKSwgIlxu
Iik7CiB9CkBAIC0yMzcsNiArMjM5LDExIEBAIE5hdGl2ZURPTUpJVENvZGU6Ok5hdGl2ZURPTUpJ
VENvZGUoQ29kZVIKICNpZiBFTkFCTEUoSklUKQogUmVnaXN0ZXJTZXQgSklUQ29kZTo6bGl2ZVJl
Z2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoQ29kZUJsb2NrKiwg
Q2FsbFNpdGVJbmRleCkKIHsKKyAgICAvLyBGb3IgQmFzZWxpbmUgSklULCB0aGlzIGlzIHRyaXZp
YWxseSB0cnVlLgorICAgIC8vIEZvciBMT0wgSklULCBldmVyeXRoaW5nIGlzIGFscmVhZHkgc3Bp
bGxlZCB0byB0aGUgc3RhY2sgYXQgZWFjaCBvcGNvZGUsIHNvIHdoZW4gd2UKKyAgICAvLyBnbyB0
byB0aGUgb3BfY2F0Y2gsIHRoZSBsaXZlIHN0YXRlIG11c3QgYWxyZWFkeSBiZSBpbiB0aGUgcmln
aHQgcGxhY2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEFsc28sIG9wX2NhdGNoIGhhcyBubyBpbmNv
bWluZyByZWdpc3Rlci90eXBlIHByb29mIHN0YXRlLCBzbyBpdCdzIHRyaXZpYWwgdG8gY2F0Y2gK
KyAgICAvLyBhbiBleGNlcHRpb24gaW4gTE9MIGp1c3QgYnkganVtcGluZyB0byBvcF9jYXRjaC4K
ICAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBjbGFzcyBKSVRU
eXBlIDogdWludDhfdCB7CiAgICAgSG9zdENhbGxUaHVuaywKICAgICBJbnRlcnByZXRlclRodW5r
LAogICAgIEJhc2VsaW5lSklULAorICAgIExPTEpJVCwKICAgICBERkdKSVQsCiAgICAgRlRMSklU
CiB9OwpAQCAtNjcsMzYgKzY4LDIzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBjaGFy
KiB0eXBlTmFtZShKSVRUeXBlKTsKIAotICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRvbVRpZXJKSVQo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkJhc2VsaW5lSklUOwotICAgIH0KLSAg
ICAKICAgICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKSVRUeXBlIG5leHRU
aWVySklUKEpJVFR5cGUgaml0VHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoaml0VHlwZSkg
ewotICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICAgICAgcmV0dXJu
IEpJVFR5cGU6OkRGR0pJVDsKLSAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAg
ICAgICByZXR1cm4gSklUVHlwZTo6RlRMSklUOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBKSVRU
eXBlOjpOb25lOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBib29sIGlzRXhl
Y3V0YWJsZVNjcmlwdChKSVRUeXBlIGppdFR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGpp
dFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgogICAgICAgICBjYXNlIEpJVFR5
cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRl
ZmF1bHQ6CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgICAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJ
VDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
MDcsNyArOTUsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVy
VGh1bms6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25l
OgorICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgIGNhc2UgSklU
VHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMTYsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNo
IChqaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAg
ICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTEyNCw2ICsxMTcsMjQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgc3RhdGlj
IGJvb2wgY2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KEpJVFR5cGUgaml0VHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6Cisg
ICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBlY3RlZExvd2VyLCBK
SVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNF
eGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKQEAgLTE0NSw5ICsxNTYsMTkgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzTG93ZXJPclNhbWVUaWVyKGV4cGVjdGVkTG93
ZXIsIGV4cGVjdGVkSGlnaGVyKTsKICAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1c2VzUmVwbGFj
ZW1lbnRDb2RlQmxvY2soSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpp
dFR5cGUgPT0gSklUVHlwZTo6TE9MSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8
IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUOworICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9v
bCBpc09wdGltaXppbmdKSVQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKKyAgICAgICAgcmV0dXJu
IGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklU
IHx8IGppdFR5cGUgPT0gSklUVHlwZTo6TE9MSklUOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzREZHT3JGVEwoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKICAgICAgICAgcmV0dXJuIGppdFR5
cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUOwogICAg
IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25z
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIGdlbmVy
aWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhCiAgICAgICAgIC8vIHdpdGggdGhpcyBieXRl
Y29kZSBvZmZzZXQgaW4gdGhlIG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5nbGVzcwog
ICAgICAgICAvLyBhbmQgY2FuIGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJseSBl
eGl0cyB0byBoYW5kbGVyLT50YXJnZXQKICAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFtZS4K
LSAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSkKKyAgICAgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjYXRjaFBDRm9ySW50
ZXJwcmV0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5k
bGVyLT50YXJnZXQpLnB0cigpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGNhdGNoUm91dGlu
ZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRl
ICJKSVQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2xvd1BhdGhDYWxs
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDUsNiArMTQ2LDcgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhp
bmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBhdGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0
YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xNTcsNiArMTU5LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAg
IC8vIE9PUFM6IE1ha2UgaXQgc28gdGhpbmdzIHRoYXQgY2FsbCB0aGlzIG9uIHRoZSBmYXN0IHBh
dGggZG9uJ3Qgc3BpbGwgdG8gdGhlIHN0YWNrIHR3aWNlLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xNjcsMjUg
KzE3MCw2IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICBy
ZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZO
b3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJl
Z2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQot
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYg
c2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVu
ZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKGl0ZXIg
IT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjph
ZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5
dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7
CkBAIC0yMDcsMjcgKzE5MSwzNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90
Rm9yQ2hlCiAgICAganVtcC5saW5rVG8oaXRlci0+dmFsdWUsIHRoaXMpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCitBTFdBWVNfSU5MSU5FIFNs
b3dDYXNlJiBKSVQ6OmVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAKKyAgICBpZiAoIW1fc2xvd0Nh
c2VzLnNpemUoKSB8fCBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCAhPSBtX2J5dGVj
b2RlSW5kZXgpIHsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKG1fYnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5z
YXZlUGxhbiA9IHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFk
c3QuaXNWYWxpZCgpID09ICEhcmVzdWx0KTsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnJl
c3VsdCA9IHJlc3VsdDsKKyAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmRzdCA9IGRzdDsKKyAg
ICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLmp1bXBzLmFwcGVuZChKdW1wTGlzdCB7IH0pOworICAg
IH0KKyAgICByZXR1cm4gbV9zbG93Q2FzZXMubGFzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QpCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXAsIFJlZyByZXN1bHQsIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBmb3IgKGNvbnN0IEp1bXAm
IGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBlbnN1cmVTbG93Q2FzZShy
ZXN1bHQsIGRzdCkuanVtcHNbMF0uYXBwZW5kKGp1bXApOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphZGRTbG93Q2FzZSgpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2Fz
ZShjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0gICAgCi0gICAgSnVtcCBlbXB0eUp1bXA7IC8vIERv
aW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93cyBoYXBweS4KLSAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworCisgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHQsIGRzdCk7CisgICAgZm9yIChj
b25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHNbMF0uYXBwZW5kKGp1bXApOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1w
KEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQpAQCAtNDA2LDExICszOTksNiBAQCBBTFdB
WVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zCiAgICAgcmV0dXJuIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKLXsKLSAgICBzdG9yZVRydXN0
ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwotfQotCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCkBAIC03MTcsNiArNzA1LDE4IEBAIEFMV0FZ
U19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6
OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0U2xvd09wKEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBTcGVjdWxhdGVk
VHlwZSBkc3RUeXBlKQoreworICAgIHNwaWxsRm9yQ2FsbCgpOworICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBmdW5jdGlvbik7CisgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBpZiAobV91c2VMT0wgJiYgZHN0LmlzVmFsaWQoKSkg
eworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBkc3RUeXBlOworICAgICAgICB3aWxsRGVmKGRz
dCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgfTsKIAot
ICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nID0gIUpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpOwogCiAgICAg
ICAgIGlmIChtX2dlbmVyYXRlRmFzdFBhdGhPblJlcGF0Y2gpIHsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xODIsOCArMTgwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpA
QCAtMjAwLDggKzE5Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTc1Niw4ICs3NTAsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzY2
LDggKzc1OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKQEAgLTEyNDIsOCArMTIzMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWQKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJh
YmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
QmFzaWNCbG9ja0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJF
eGNlcHRpb24uaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDYXN0Lmgi
CkBAIC00MSw2ICs0Miw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVk
ZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIu
aCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTEsNiArNTQs
MjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9zcmM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8gT09Q
UzogSWYgd2UgY2hhbmdlIHJlZ2FsbG9jIHN1Y2ggdGhhdCB0aGVyZSBjYW4gYmUgTiByZWdpc3Rl
cnMgcGVyIGxvY2FsLCB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIHR3
byByZWdzLgorICAgICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSAmJiBncHJGb3JPcGVyYW5kKHNy
YykgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMg
fTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92
ZW5UeXBlKHNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3JjLmlzQ29u
c3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKQEAgLTkwLDMyICsxMTUs
NTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogICAgIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRv
ckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRp
b25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBSZWdp
c3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0g
cmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgR1BSUmVnIHJl
c3VsdFJlZzsKKyAgICBHUFJSZWcgYWxsb2NhdG9yUmVnOworICAgIEdQUlJlZyBzY3JhdGNoUmVn
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gYWxsb2NhdG9yVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYWxsb2NhdG9yVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0VGVtcC0+Z3ByKCk7
CisgICAgICAgIGFsbG9jYXRvclJlZyA9IGFsbG9jYXRvclRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoUmVnID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
c3VsdFJlZyA9IHJlZ1QwOworICAgICAgICBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICAgICAg
c2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIH0KIAogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3Vs
dFJlZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAg
YXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9y
KSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2Ny
YXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdl
KHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0UmVnLCBieXRl
Y29kZS5tX2RzdCk7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0
ZWNvZGUubV9kc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyNSwyMyAr
MTcxLDUwIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5j
ZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBy
ZWdUMCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgY29uc3RydWN0b3JHUFI7
CisgICAgR1BSUmVnIGluc3RhbmNlR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgLy8gT09QUzogaW52ZW50IEtub3duQ2VsbE9wZXJhbmQKKyAgICBPcHRpb25hbDxD
ZWxsT3BlcmFuZD4gY29uc3RydWN0b3JUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
aGFzSW5zdGFuY2VUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNvbnN0cnVj
dG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGhhc0luc3RhbmNl
VGVtcC5lbXBsYWNlKCp0aGlzLCBoYXNJbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IGNvbnN0cnVjdG9y
VGVtcC0+Z3ByKCk7CisgICAgICAgIGluc3RhbmNlR1BSID0gaGFzSW5zdGFuY2VUZW1wLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gcmVn
VDE7CisgICAgICAgIGluc3RhbmNlR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBpbnN0YW5jZUdQUik7CisgICAgfQogCiAgICAg
Ly8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxk
IGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5j
dGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBpbnN0YW5jZUdQUiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0
YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29u
c3RydWN0b3IsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CiAKICAgICAvLyBDaGVj
ayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRo
ZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgdGVzdDgoWmVy
bywgQWRkcmVzcyhjb25zdHJ1Y3RvckdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQUik7
CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOwog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGlu
ayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdU
MCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNTEsNDAgKzIyNCw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdl
IHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9y
IHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBD
aGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMg
aXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQK
LSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAg
ICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBPcHRpb25h
bDxDZWxsT3BlcmFuZD4gdmFsdWVUZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJh
bmQ+IHByb3RvVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVU
ZW1wOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3RvVGVtcDsKKworICAgICAg
ICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gx
VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsK
KworICAgICAgICBHUFJSZWcgcHJvdG9HUFI7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKwor
ICAgICAgICByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Q2VsbCh2YWx1ZSkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm90bykpIHsKKyAgICAgICAgICAg
IHZhbHVlVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9U
ZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCBwcm90byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0g
dmFsdWVUZW1wQ2VsbC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcENl
bGwtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigp
LCBkc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWVUZW1wLmVtcGxhY2Uo
KnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcC5lbXBsYWNlKCp0aGlzLCBwcm90
byk7CisKKyAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVUZW1wLT5ncHIoKTsKKyAgICAgICAg
ICAgIHByb3RvR1BSID0gcHJvdG9UZW1wLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xv
d0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICAgICAgfQorCisgICAgICAg
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LAorICAgICAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgICAg
ICByZXN1bHRUZW1wLmdwcigpLAorICAgICAgICAgICAgdmFsdWVHUFIsCisgICAgICAgICAgICBw
cm90b0dQUiwKKyAgICAgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdw
cigpKTsKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRU
ZW1wLmdwcigpKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBh
bmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gV2UgdXNl
IHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3Qs
IGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcmVnVDEpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBwcm90
byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkg
dGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICByZWdUMCwg
Ly8gcmVzdWx0CisgICAgICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAgICAgIHJlZ1Qx
LCAvLyBwcm90bworICAgICAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBw
ZW5kKGdlbik7CisgICAgICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJl
Z1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgZ2VuLnN0dWJJbmZvKCktPmJhc2VHUFIsIGdlbi5zdHVi
SW5mbygpLT5yZWdzLnByb3RvdHlwZUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMTk5LDExICsz
MjUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1YwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRl
ZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIxMSwyOCAr
MzU1LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBpZiAoISEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAg
ICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2Vs
bChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzQ2Vs
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGF1dG8gbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgcmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0ZW1w
R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0
cihFcXVhbCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCks
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDEpOworICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEs
IHJlZ1QwKTsKKworICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI0MSwxMyArNDI5LDMzIEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0yNTUsMTIgKzQ2MywzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IElu
c3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xl
YW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Jvb2xlYW4pKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNCb29sZWFuKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCBpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB0
ZXN0NjQoWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1Qw
KTsKKyAgICAgICAgdGVzdDY0KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI2OCwxMSArNDk5LDI3IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRnVsbE51bWJlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Z1bGxO
dW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3Q2NChOb25aZXJvLCBpbnB1dEdQUiwgbnVtYmVy
VGFnUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3Rl
ciwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiAj
aWYgVVNFKEJJR0lOVDMyKQpAQCAtMjgyLDIxICs1MjksNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYmlnX2ludChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCaWdJ
bnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNC
aWdJbnQpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFs
dWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAg
ICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOwotICAgIGFuZDY0KHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkJpZ0ludDMyVGFnKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
MCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBO
T19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiop
CkBAIC0zMTMsMTggKzU5NSw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlw
ZShjb25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
Mih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMzMsMTggKzY0NCw2MSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgflNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5ncHIo
KTsgLy8gc3BlY3VsYXRlCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAg
ICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1NSw3ICs3MDksMTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4g
JWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCBieXRlY29kZS5tX3ZhbHVlIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmV0dXJuVmFsdWVH
UFIpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzY5LDE1ICs3MjgsNDEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsK
LQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+U3BlY1ByaW1pdGl2ZSkpIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUu
Z3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNJ
bW0gPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZPYmplY3QodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBp
c0ltbS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1ByaW1pdGl2ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIAorICAg
ICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICAgICAgaXNJbW0ubGluayh0aGlzKTsK
IAorICAgICAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzg2LDUyICs3NzEs
MjIxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIEp1
bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH4oU3BlY1N0cmluZyB8IFNwZWNT
eW1ib2wpKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSB8fCBzaG91bGRTcGVjdWxhdGVTdHJpbmco
c3JjKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2woc3JjKSkK
KyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHNyYywgdmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNy
YywgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0gYnJhbmNoSWZTdHJpbmcodmFs
dWVHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1i
b2wpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
dmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhdXRvIGlzU3RyaW5nID0g
YnJhbmNoSWZTdHJpbmcodmFsdWVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc1N0
cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBk
c3QpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aElmU3ltYm9sKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmco
cmVnVDApKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmIChzcmMgIT0g
ZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBmdW5jdGlvbiB7ICp0aGlzLCBieXRlY29kZS5tX2Z1bmN0aW9uIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBuYW1lIHsgKnRoaXMsIGJ5dGVjb2RlLm1fbmFtZSB9OworICAgICAgICBHUFJS
ZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG5hbWVHUFIg
PSBuYW1lLmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZnVuY3Rpb25HUFIsIG5hbWVHUFIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJh
bmQsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVCb29sZWFuKHZhbHVlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbih2YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMih2YWx1ZSkpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHRlc3QzMihaZXJvLCB2YWx1ZUdQ
UiwgdmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHZhbHVlKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZVRlbXAuZnByKCk7Cisg
ICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHRlbXBGUFIuZnByKCk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGF1dG8gbm9uWmVybyA9IGJyYW5jaERvdWJsZU5vblplcm8odmFsdWVGUFIsIHNj
cmF0Y2hGUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5vblplcm8ubGluayh0aGlzKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAg
ICBOdW1iZXJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
RlBSVGVtcCB0ZW1wRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyB2YWx1ZUZQUiA9
IHZhbHVlVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gdGVtcEZQ
Ui5mcHIoKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub25aZXJvID0gYnJhbmNoRG91Ymxl
Tm9uWmVybyh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbm9uWmVy
by5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
R1BSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdmFsdWVGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGNvbnN0
ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisgICAg
ICAgICAgICBjb25zdGV4cHIgYm9vbCBpbnZlcnQgPSB0cnVlOworICAgICAgICAgICAgZW1pdENv
bnZlcnRWYWx1ZVRvQm9vbGVhbigqbV92bSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZVRlbXAuZ3ByKCkg
fSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5m
cHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGludmVydCk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIC8vIEludmVydCBh
Z2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xl
YW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQotICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxv
dyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNw
ZWN0aXZlbHkpLgotICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hp
Y2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOwor
CisgICAgICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUg
d2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgICAgICAv
LyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3Ig
ZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgLy8gVGhlbiBpbnZl
cnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4s
IGFuZCBmbGlwIHRoZSBsb3cgYml0LgorICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
KTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1Qw
KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZh
bHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlv
bjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0
aW9uKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwg
dGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBt
b3JlIGNhc2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgZnBTY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIg
eyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBG
UFJSZWcgc2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwg
c2NyYXRjaDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICB9Cit9CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
LSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Cit2b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+
KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZh
bHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVh
bihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoY29uZGl0aW9uKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKE5vdEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKDApKSwgdGFyZ2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBtb3JlIGNh
c2VzIGlubGluZQorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRp
dGlvbiB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBT
Y3JhdGNoMSB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDIgeyAqdGhp
cyB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaDFGUFIgPSBmcFNjcmF0Y2gxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0
Y2gyRlBSID0gZnBTY3JhdGNoMi5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBzY3JhdGNoMUdQUiwgc2NyYXRj
aDJHUFIsIHNjcmF0Y2gxRlBSLCBzY3JhdGNoMkZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwg
dmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQwLDQ2ICs5OTQsMTI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAg
ICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGF1dG8gaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
aW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAg
ICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICB9Cit9CiAKLSAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCi0KLSAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOwotfTsKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAg
ICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwot
Ci0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRh
cmdldCk7ICAgICAgICAgICAgCisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgorICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKKworICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmlu
ZWQgJiBudWxsCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAotICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDg4LDEwICsxMTI1LDI2IEBAIHZvaWQg
SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKSB7CisgICAgICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC01MDAsMTAgKzExNTMsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am51bmRlZmluZWRfb3JfbnVsbChjbwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjT3RoZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC01MTUsNjUgKzExODQsNDQyIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0
IEluc3RydWMKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwotICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHNwZWNp
YWxQb2ludGVyKSkpIHsKKyAgICAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRh
ZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYXV0byBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3N0YXRpYyB2b2lkIGNvbXBhcmVTdHJpbmdzKEpJVCYgaml0LCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QmIGVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoLCBHUFJSZWcgbGhzR1BSLCBH
UFJSZWcgcmhzR1BSLCBHUFJSZWcgbGhzVGVtcEdQUiwgR1BSUmVnIHJoc1RlbXBHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSLCBHUFJSZWcgc2NyYXRjaDJHUFIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNH
UFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBsaHNUZW1wR1BSKTsKKyAgICBqaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaHNHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZh
bHVlKCkpLCByaHNUZW1wR1BSKTsKKworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZS
b3BlU3RyaW5nSW1wbChsaHNUZW1wR1BSKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFu
Y2hJZlJvcGVTdHJpbmdJbXBsKHJoc1RlbXBHUFIpKTsKKworICAgIGppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobGhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAKKyAgICBub3RFcXVhbC5hcHBlbmQoaml0LmJyYW5j
aDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNl
dCgpKSwKKyAgICAgICAgc2NyYXRjaEdQUikpOworICAgIAorICAgIGVxdWFsLmFwcGVuZChqaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgCisg
ICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNUZW1wR1BSLCBT
dHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSk7CisgICAgc2xvd1BhdGguYXBwZW5k
KGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09m
ZnNldCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdJbXBs
OjpmbGFnSXM4Qml0KCkpKSk7CisgICAgCisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobGhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgbGhzVGVtcEdQ
Uik7CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwg
U3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgcmhzVGVtcEdQUik7CisgICAgCisgICAgYXV0byBs
b29wID0gaml0LmxhYmVsKCk7CisgICAgCisgICAgaml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworCisgICAgeworICAgICAgICBqaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChsaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNPbmUpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIGF1dG8gbWFjcm9TY3Jh
dGNoID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJoc1RlbXBHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc09uZSksIG1hY3JvU2NyYXRjaCk7CisgICAgICAgIG5vdEVxdWFsLmFwcGVu
ZChqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoMkdQUiwgbWFj
cm9TY3JhdGNoKSk7CisgICAgfQorICAgIAorICAgIGppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICBlcXVh
bC5hcHBlbmQoaml0Lmp1bXAoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorc3RhdGljIHZvaWQgY29tcGFyZVN0cmlj
dEVxQ2VsbHMoSklUJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgbm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
c2xvd1BhdGgsIEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIsIEdQUlJlZyBsaHNUZW1wR1BS
LCBHUFJSZWcgcmhzVGVtcEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEdQUlJlZyBzY3JhdGNoMkdQ
UikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4o
KTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGVxdWFsLmFwcGVuZChqaXQu
YnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIGxoc0dQUiwgcmhzR1BSKSk7CisKKyAgICBz
bG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKworICAgIGF1dG8g
bGhzSXNTdHJpbmcgPSBqaXQuYnJhbmNoSWZTdHJpbmcobGhzR1BSKTsKKyAgICBub3RFcXVhbC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICBsaHNJc1N0cmluZy5saW5rKCZqaXQpOworICAgIG5v
dEVxdWFsLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RTdHJpbmcocmhzR1BSKSk7CisKKyAgICBjb21w
YXJlU3RyaW5ncyhqaXQsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BS
LCBsaHNUZW1wR1BSLCByaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICBBU1NFUlQodXNlTE9MKCkpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZp
cnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmhzID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXE+
Ojp2YWx1ZTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOwor
ICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJs
ZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmICghdmFsdWVzQ291
bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhy
aHMpKSB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEp1bXBM
aXN0IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgY29tcGFyZVN0cmluZ3MoKnRoaXMsIGVx
dWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1wLmdwcigpLCBy
aHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNW
YWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIG5vdEVxdWFsLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZh
bHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZTdHJpbmcobGhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZTdHJpbmcocmhzR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgY29tcGFy
ZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQ
UiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3Vi
bGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAu
ZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBj
b21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU51bWJlcihyaHMpKSB7CisgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNG
UFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6
IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9CisKKyAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmplcUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBBU1NFUlQodXNlTE9MKCkpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2Ft
ZTxPcCwgT3BKZXE+Ojp2YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgYXV0byBncENv
bXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlz
RXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOwor
CisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBl
KHJocykpKSB7CisgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9i
amVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwg
bGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAg
ICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7Cisg
ICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsK
KyAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgc2xv
d1BhdGg7CisKKyAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVhbCwgbm90RXF1
YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIo
KSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgIGlmIChpc0VxKSB7CisgICAgICAg
ICAgICAgICAgYWRkSnVtcChlcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBub3RFcXVh
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhZGRK
dW1wKG5vdEVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZTdHJpbmcocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJ
bnQocmhzR1BSKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07
CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcg
cmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBD
b21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAg
ICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIE51bWJl
ck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwg
dGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNw
ZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQ
UiksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgZXFJbXBsPE9wRXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9Cit9
CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBH
UFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBl
cUltcGw8T3BOZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
KworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICB9
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIEdQUlJlZyBsaHNHUFIg
PSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAg
cmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1Qw
KTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7Cit9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgamVxSW1wbDxPcEplcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CisgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSm5lcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgLy8g
T09QUzogV2UgY2FuIG1ha2UgdGhpcyBhIHNpbmdsZSBicmFuY2ggaWYgdGhlIHJlc3RvcmUgZG9l
c24ndCBjbG9iYmVyIHJldHVyblZhbHVlR1BSLgorICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRo
U2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
LCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDEpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxo
c0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0g
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZy
b21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwpAQCAtNTg5LDc0ICsxNjM1LDI0MCBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJocyA9IGJ5dGVjb2RlLm1fcmhzOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJv
b2wgaXNFcSA9IHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAg
ICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0
byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1
YWxPclVub3JkZXJlZDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCF2YWx1
ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlRmFsc2UgOiBKU1Zh
bHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVj
dChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhz
R1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBjb21wYXJl
UHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BS
KTsKKworICAgICAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IGVx
dWFsOworICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgICAg
IEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmluZ3MoKnRo
aXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1wLmdw
cigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAg
ICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAg
ICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAg
ICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0
aDsKKworICAgICAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxs
cygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1Rl
bXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAu
Z3ByKCkpOworCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAg
ICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAg
ICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUg
c3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzU2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHJoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
VGVtcCB0ZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBsaHNTY3JhdGNoR1BSID0gbGhzU2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByaHNTY3JhdGNoR1BSID0gcmhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgICAgICAgICBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIGRzdCk7CiAKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyogQXQgYSBo
aWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgotICAgIElm
IChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgIGdvdG8gc2xvd1Bh
dGg7Ci0gICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwotICAgIGlmIChyZXN1bHQpCi0gICAg
ICAgIGdvdG8gZG9uZTsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0g
ICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZG9uZToKLSAgICByZXR1cm4gcmVzdWx0OwotICAg
ICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8
IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQg
dGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9i
cmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBh
biBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBs
ZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBh
dCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBM
ZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJl
Z1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQo
Tm9uWmVybywgcmVnVDUpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAg
c2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJ
bnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBk
byBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ug
b25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dChmYWxzZSk7CisjZWxzZQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQotICAgICAgICB4b3I2NChUcnVzdGVk
SW1tNjQoMSksIHJlZ1Q1KTsKLSAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJl
Z1Q1IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CisgICAgICAg
ICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsaHNJc0NlbGwgPSBicmFuY2hJZkNl
bGwobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGJvdGhOb3RDZWxscyA9IGJyYW5jaElm
Tm90Q2VsbChyaHNHUFIpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFwcGVuZChqdW1wKCkp
OworCisgICAgICAgICAgICAgICAgbGhzSXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgbm90RXF1YWwuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyaHNHUFIpKTsKKworICAgICAgICAg
ICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RF
cUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwg
bGhzU2NyYXRjaEdQUiwgcmhzU2NyYXRjaEdQUiwgdGVtcEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBib3Ro
Tm90Q2VsbHMubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgICAgIC8vIGlmIGl0J3Mg
YSBkb3VibGUuCisgICAgICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIobGhzR1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKGxoc0dQUikpOworICAg
ICAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgICAgICBKdW1wIHJpZ2h0T0sgPSBi
cmFuY2hJZkludDMyKHJoc0dQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51
bWJlcihyaHNHUFIpKTsKKyAgICAgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKworICAgICAg
ICAgICAgaWYgKGlzRXEpCisgICAgICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj
b21wYXJlNjQoTm90RXF1YWwsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICAgICAgSnVtcExpc3QgZG9uZTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7
CisKKyAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgICAg
ICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
IWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworI2VuZGlmCisgICAgICAgIH0K
KworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CisKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJl
IFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJs
ZSkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIHJlc3VsdCA9IChsZWZ0ID09
IHJpZ2h0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAg
ICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQorICAgICAgICAgICAgZ290
byBzbG93UGF0aDsKKyAgICAgICAgZG9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91
YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2Yg
dGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJ
bnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpT
VmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBv
dmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMg
bm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0
IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1
MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdU
Myk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMp
LCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJl
Z1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwor
ICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0
KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1Q1KTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0
KE5vblplcm8sIHJlZ1Q1KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdz
IGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8g
RklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBp
cyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFy
ZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlOjpOU3RyaWN0RXEpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tNjQoMSks
IHJlZ1Q1KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKICNlbHNlIC8v
IGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0
byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdU
MSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAg
Ly8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFu
IGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEg
ZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsK
LSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRl
Z2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBk
b3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmln
aHRPSy5saW5rKHRoaXMpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY3NCw2OCArMTg4
NiwyMDMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbgogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVj
b2RlLm1fcmhzOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJvb2wgaXNFcSA9IHR5
cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcTsKKyAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFs
OworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQg
OiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRC
ZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICAgICAg
aWYgKCFpc0VxKQorICAgICAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7
CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVt
cExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
R1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICAgICAgY29tcGFy
ZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwg
cmhzR1BSLCBsaHNUZW1wLmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwg
c2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNFcSkgeworICAgICAgICAgICAgICAgICAgICBh
ZGRKdW1wKGVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFk
ZEp1bXAobm90RXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIGVxdWFsLmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENv
bXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgewor
ICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBS
ID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BS
VGVtcCBsaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzU2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSVGVtcCB0ZW1wMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgbGhzU2NyYXRjaEdQUiA9IGxoc1NjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzU2NyYXRjaEdQUiA9IHJoc1NjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgdGVtcDJHUFIgPSB0ZW1wMi5ncHIoKTsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgLyog
QXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgot
ICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCi0gICAgICAgZ290byBz
bG93UGF0aDsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICBnb3RvIHRha2VuOwotICAg
IGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICBnb3RvIHNsb3dQYXRo
OwotICAgIGdvdG8gbm90VGFrZW47Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1w
bGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmds
ZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQg
aWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAg
Ly8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBv
bmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVx
dWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdU
Myk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJl
Z1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7
Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwg
cmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJl
Z1Q1KSk7Ci0KLSAgICBKdW1wIGFyZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdU
MSk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAg
ICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIg
c3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBG
SVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlz
IGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJl
IHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoZmFsc2UpOworI2Vsc2UKKyAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1
YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGxlZnRJc0NlbGwgPSBicmFuY2hJZkNlbGwobGhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGJvdGhOb3RDZWxscyA9IGJyYW5jaElmTm90Q2VsbChyaHNHUFIpOwor
ICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgICAgICAg
ICAgbGVmdElzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwocmhzR1BSKSk7CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBz
bG93UGF0aDsKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywgZXF1
YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1NjcmF0Y2hHUFIsIHJo
c1NjcmF0Y2hHUFIsIHRlbXBHUFIsIHRlbXAyR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBib3RoTm90Q2VsbHMubGluayh0aGlz
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBp
cyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUs
IGFuZCB0aGVuIHRlc3QKKyAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAg
ICAgICBhdXRvIGxlZnRPSyA9IGJyYW5jaElmSW50MzIobGhzR1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKGxoc0dQUikpOworICAgICAgICAgICAgbGVmdE9LLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJoc0dQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyaHNHUFIpKTsKKyAg
ICAgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIGlmIChpc0VxKSB7Cisg
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAg
ICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7IAorICAg
ICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKG5vdEVxdWFsLCB0YXJnZXQpOworICAg
ICAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxo
cywgcmVnVDAsIHJocywgcmVnVDEpOwogCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpOU3RyaWN0RXEpIHsKLSAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0g
ICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7Ci0gICAgfQorI2lmIFVTRShCSUdJTlQzMikKKyAg
ICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3Ry
aWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQor
ICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAg
ICAgICAgICAgZ290byB0YWtlbjsKKyAgICAgICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBp
cyBDZWxsKQorICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBnb3RvIG5vdFRha2Vu
OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVm
dCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5z
dGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBi
cmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0
IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBt
YWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJ
ZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkg
aGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVx
dWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVn
VDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZI
aWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAg
YWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBKdW1wIGFy
ZUVxdWFsID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBhZGRKdW1w
KGFyZUVxdWFsLCB0YXJnZXQpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmlu
Z3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAv
LyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJl
IGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGgg
YXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisK
KyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpIHsK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgYXJlRXF1
YWwubGluayh0aGlzKTsKKyAgICAgICAgfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QxLCByZWdUMCksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0
KE5vdEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhl
ciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZp
bmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAg
SnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAg
ICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7
CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDApLCB0YXJnZXQpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTc0OCw4OSArMjA5NSwyMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cgogICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7
CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNH
UFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQ
UiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1Qw
KTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpICYgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9
CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmlj
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHJlZ1QwKSk7Ci0gICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKLQotICAgIGlzTm90
Q2VsbC5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoc3JjKSwgU3BlY0JpZ0ludCB8IFNw
ZWNCeXRlY29kZU51bWJlcikpIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KHNyYykp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUFueUJpZ0ludChzcmMsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgVVNFKEJJR0lO
VDMyKQorICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyNlbmRpZgorCisgICAgICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2lmIFVTRShCSUdJTlQzMikK
KyAgICAgICAgICAgIGF1dG8gaXNOdW1iZXIgPSBicmFuY2hJZk51bWJlcihpbnB1dEdQUik7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJpZ0ludDMyKGlucHV0R1BSLCBzY3Jh
dGNoR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNOdW1iZXIubGluayh0aGlz
KTsKKyNlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBtb3ZlKGlucHV0
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICAgICAgfQorICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgp
OworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworICAgICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwor
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcoc3JjKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RTdHJpbmcoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAg
ICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZU9iamVjdChzcmMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0
R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IGRl
YWwgd2l0aCB0aGlzLgorICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBpdCBz
byB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUuCisK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwog
CiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtODg4LDkgKzIzNzQsMjMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3BhcmVudF9zY29wZShjb25zdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNv
ZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoY3VycmVudFNjb3Bl
KSAmPSBTcGVjQ2VsbDsgLy8gV2Uga25vdyBpdCdzIGEgY2VsbC4KKworICAgICAgICBDZWxsT3Bl
cmFuZCBzY29wZSB7ICp0aGlzLCBjdXJyZW50U2NvcGUgfTsKKyAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTA1LDkg
KzI0MDUsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBqdW1wVGFi
bGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwot
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVu
a25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC05MjIsOSArMjQzMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
Y2hhcihjb25zdCBJbnN0CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBU
YWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTM4LDkzICsy
NDU0LDE0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAg
U3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0
R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOworICAgIHNwaWxs
Rm9yQ2FsbCgpOyAvLyBPT1BTOiBXZSBjYW4gZG8gYmV0dGVyLgogICAgIGxvYWQzMihjb2RlQmxv
Y2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1
Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2Rl
YnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxTnVsbEltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5t
X29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxTnVsbD46OnZh
bHVlOworICAgIGF1dG8gY29tcGFyZU9wID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
MCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHNj
cmF0Y2hHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgICAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChjb21wYXJl
T3AsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQ
Uik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVt
cCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihF
cXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7CisgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgfQog
Ci0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAg
ICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyAwIDogMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOworCisgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgICAgICBjb21wYXJlUHRyKGNvbXBh
cmVPcCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOworCisgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVn
VDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KK30KIAordm9pZCBKSVQ6OmVtaXRf
b3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGVxTnVsbEltcGw8T3BFcU51bGw+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxs
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIs
IHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZXFOdWxsSW1wbDxPcE5lcU51bGw+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0
IEluc3RydWN0aW9uKikKIHsKKyAgICAvLyBPT1BTOiBhc3NlcnQgd2UgaGF2ZSBubyByZWdpc3Rl
ciBzdGF0ZSBoZXJlIHNpbmNlIGVtaXRXcml0ZUJhcnJpZXIgY2FuIG1ha2UgQyBjYWxscy4KKwog
ICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91
ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2
b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQg
aW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+
bnVtVmFycygpOwotICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAg
ICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOworICAgIGZv
ciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgYXV0byB2YXJpYWJs
ZSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKHZhcmlhYmxlKSk7CisgICAgICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUodmFyaWFibGUpID0gU3BlY090aGVyOworICAg
IH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwogCkBAIC0xMDM1LDkgKzI2
MDUsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBy
ZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdw
cigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSks
IHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
c2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEwNDUsMTMgKzI2MjksODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9U
aGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
cmNEc3QsIHJlZ1QxKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9z
cmNEc3Q7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3Qo
KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisgICAgICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmln
aHQ/CisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgc2hvdWxkU3BlY3VsYXRlTm90Q2Vs
bChzcmNEc3QpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIC8vIE5vIG5l
ZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5LgorICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmICEocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY09iamVj
dE90aGVyKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0Rz
dCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAocHJvdmVuVHlwZShzcmNEc3QpICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7Cisg
ICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBz
aW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAg
ICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgbG9h
ZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworCisgICAgICAg
ICAgICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAg
ICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBP
T1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgICAg
ICBzZXRKU1ZhbHVlKHNyY0RzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEpOworCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICAgICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNTksNiArMjcxNCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9u
ID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0g
cmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtMTA2OCw3ICsy
NzI0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBS
ZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoUmVnID0gcmVnVDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2Fs
bGVlUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGNhbGxlZU9wZXJhbmQ7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDE7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVt
cDI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZ3ByVGVtcDM7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZ3ByVGVtcDQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNhbGxlZU9wZXJhbmQu
ZW1wbGFjZSgqdGhpcywgY2FsbGVlKTsKKyAgICAgICAgZ3ByVGVtcDEuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGdwclRlbXAyLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMy5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDQuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
Y2FsbGVlUmVnID0gY2FsbGVlT3BlcmFuZC0+Z3ByKCk7CisgICAgICAgIGFsbG9jYXRvclJlZyA9
IGdwclRlbXAxLT5ncHIoKTsKKyAgICAgICAgc3RydWN0dXJlUmVnID0gZ3ByVGVtcDItPmdwcigp
OworICAgICAgICBzY3JhdGNoUmVnID0gZ3ByVGVtcDMtPmdwcigpOworICAgICAgICByYXJlRGF0
YVJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgY2FjaGVkRnVuY3Rpb25SZWcgPSBncHJU
ZW1wNC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdFJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZywg
ZHN0KTsKKwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZykpKTsKQEAgLTEwODYsNjQgKzI3NjYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1
Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVj
a1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MCkpOwotfQotCi0KLS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoISEocHJvdmVuVHlwZShzcmMpICYgU3BlY0VtcHR5KSkgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KGlucHV0R1BSKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQorICAgIC8vIFRoaXMg
d29ya3MgZm9yIExPTCBzaW5jZSB0aGUgc2xvdyBwYXRoIGRvZXNuJ3QgZG8gYW55dGhpbmcgZXhj
ZXB0IGp1bXAgaGVyZS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CkBAIC0xMTYyLDggKzI4MTEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogeworICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsgLy8gTWFrZSBp
dCBzbyB3ZSBjYW4gT1NSIGVudGVyIHdpdGhvdXQgYW55IHJlZ2FsbG9jIG9yIHR5cGUgc3RhdGUu
CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5F
YXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgICAgICAvLyBPT1BT
OiBjbGVhciByZWdpc3RlciBzdGF0ZSBoZXJlIHNvIHdlIGNhbiBhbHdheXMgT1NSIGVudGVyLgog
ICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIo
aW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8g
c2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0
aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTExODcsMTMg
KzI4MzksMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93
IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGlt
aXplZCgpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgY29w
eUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xMjA2LDEx
ICsyODU2LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAg
IC8vIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkp
OyAvLyBPT1BTOiBJIHRoaW5rIHRoaXMgY2FuIGp1c3QgYmUgcmVtb3ZlZCBzbyBpdCB3b3JrcyBp
biBMT0wgdG9vLgogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CiAKQEAgLTEyMzMsMTAg
KzI4ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zCiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQq
PigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIApAQCAtMTI0NSw4ICsyODkyLDE4IEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9
IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdF
eHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzLCByZXR1cm5WYWx1
ZUdQUiB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNSZWdFeHBPYmplY3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChy
ZWdleHApKSk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTEyNTYsMjMgKzI5MTMsNDIgQEAg
dm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKIAorICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNj
b3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5tX3Njb3BlKTsK
KyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHQtPmdwcigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IHNjb3BlR1BSKTsKICNlbmRpZgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAg
IE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBl
bHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CisgICAgfQorCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzAxLDI0ICsyOTc3LDQ2
IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MDsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHNjb3BlOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzY29wZS5lbXBsYWNlKCp0aGlzLCBieXRlY29kZS5t
X3Njb3BlKTsKKyAgICAgICAgc2NvcGVHUFIgPSBzY29wZS0+Z3ByKCk7CisgICAgICAgIHNjb3Bl
LnJlc2V0KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICByZXN1bHQuZW1wbGFj
ZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHQtPmdw
cigpOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAj
ZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbmRpZgogCiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4
cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BS
LCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjRnVuY3Rpb247CiAgICAgfQogfQogCkBAIC0xMzQ5LDkgKzMwNDcsMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQg
PSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIHJlZ1QwLCBzaXplKTsKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICB9CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
Mih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIsIHNpemUpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTM2MCwxNCArMzA2OCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKworICAgIEdQ
UlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBs
YWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmdHUFIgPT0gcmV0dXJuVmFsdWVHUFIpOworICAg
IH0KKworICAgIC8vIE9PUFM6IElubGluZSB0aGUgYWxsb2NhdGlvbiBwYXRoIGhlcmUsIGl0IG1h
dHRlcnMgZm9yIHN1bnNwaWRlci1jcnlwdG8tYWVzCisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNpemVJbmRleCwgYXJnR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiAjZWxzZQotICAgIGVt
aXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgs
IHJlZ1QxLCBhcmdHUFIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIGFyZ0dQUikpOwogI2VuZGlmCiB9CiAKQEAg
LTEzODEsMTUgKzMxMDQsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9yIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDA5LDYgKzMxNTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9zdHJ1Y3R1cmVfcHJvcGVydHkoCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7
CisgICAgLy8gT09QUzoKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eCkucHRyKCk7CiAgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwpAQCAtMTQzNiw2ICsz
MTgyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9P
UFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE0NjEsMTUgKzMyMDksMTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKIAogICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogCiAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0
aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZv
ckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGVKdW1wKTsKICAgICAK
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHJlZ1QwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKGJh
ZFR5cGVKdW1wKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAogICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOwpAQCAtMTQ3OCwxMyArMzIyNiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfZW51bWVyYWJsZV9pbmRleGVkCiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVs
KCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFk
VHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlSnVtcCwgbW9kZSwgcHJvZmlsZSwg
ZG9uZSwgbmV4dEhvdFBhdGgpKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CkBAIC0xNTEwLDM3ICszMjU5LDgxIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9kaXJlY3RfcG5hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGVudW1lcmF0b3JWYWx1ZSB7ICp0aGlzLCBlbnVtZXJhdG9y
IH07CisgICAgICAgIEludDMyT3BlcmFuZCBpbmRleFZhbHVlIHsgKnRoaXMsIGluZGV4IH07Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVmFsdWUgeyAqdGhpcywgYmFzZSB9OworCisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BS
ID0gaW5kZXhWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCi0gICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CiAK
LSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5s
aW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxp
bmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNF
aWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndp
c2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdWIzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBuZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgIG5lZzMyKHJlZ1QxKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1Qx
KTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKKyAgICAgICAgCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTUwLDIxICszMzQzLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3AKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAg
R1BSUmVnIGluZGV4R1BSOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyBy
ZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxJbnQzMk9wZXJhbmQ+IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAg
ICAgIGVudW1lcmF0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBpbmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgaW5kZXhHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIp
OwogCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAs
IFRpbWVzRWlnaHQpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRj
aEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVz
RWlnaHQpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJp
bmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1
NzQsMjEgKzMzOTcsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YQogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMy
KEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpl
bmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisgICAgR1BSUmVnIGluZGV4R1BSOwor
ICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxJbnQzMk9wZXJhbmQ+
IGluZGV4VGVtcDsgLy8gT09QUzogS25vd25JbnQzMk9wZXJhbmQKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IGVudW1lcmF0b3JUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGluZGV4VGVtcC5lbXBsYWNlKCp0aGlzLCBpbmRleCk7CisgICAgICAgIGVudW1lcmF0b3JUZW1w
LmVtcGxhY2UoKnRoaXMsIGVudW1lcmF0b3IpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBp
bmRleEdQUiA9IGluZGV4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVt
ZXJhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGluZGV4R1BSID0gcmVnVDA7CisgICAgICAgIGVudW1lcmF0b3JHUFIgPSByZWdU
MTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwor
ICAgIH0KKworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmlj
UHJvcGVydHlJbmRleE9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwogCiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0g
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwogICAg
IAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTk4LDYgKzM0NTEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9j
YXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAorICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmls
ZSwgcmVnVDApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwpAQCAtMTY1OCw2ICszNTEzLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2Vu
KCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSBy
ZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJv
bG9ndWU+KCk7CkBAIC0xNjcyLDYgKzM1MzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fcHJvCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAg
ICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9
IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CkBAIC0xNjg0LDYgKzM1NDUsMTkzIEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMs
IG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZG
dW5jdGlvbihpbnB1dEdQUik7CisgICAgICAgIGF1dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RP
YmplY3QoaW5wdXRHUFIpOworICAgICAgICAKKyAgICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNH
ZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAKKyAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBub3RP
YmplY3QubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgCisgICAgICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wSXNDYWxsYWJsZT4oY3VycmVudEluc3RydWN0aW9uKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX2Z1bmN0aW9uKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdElzQ2FsbGFibGVJbXBsPE9wVHlw
ZW9mSXNGdW5jdGlvbj4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9m
SXNPYmplY3Q+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVy
YW5kIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIp
OworICAgICAgICAKKyAgICAgICAgYXV0byBpc051bGwgPSBicmFuY2hJZkVxdWFsKEpTVmFsdWVS
ZWdzIHsgaW5wdXRHUFIgfSwganNOdWxsKCkpOworICAgICAgICBhdXRvIGlzTm9uTnVsbE5vbkNl
bGwgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgYXV0byBpc0Z1bmN0aW9uID0gYnJhbmNoSWZGdW5jdGlvbihpbnB1dEdQUik7CisgICAgICAg
IGF1dG8gbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpOworICAgICAgICAK
KyAgICAgICAgYXV0byBzbG93UGF0aCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSkpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAKKyAgICAgICAgaXNO
dWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGlzTm9uTnVsbE5vbkNlbGwubGluayh0aGlzKTsKKyAgICAgICAgaXNGdW5jdGlv
bi5saW5rKHRoaXMpOworICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF90eXBlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4o
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX3ZhbHVlOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcGVyYW5kIH07CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyAgICAgICAgSnVtcCBzbG93UGF0aDsKKyAgICAgICAg
ZW1pdFR5cGVPZigKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSwgcmVzdWx0
R1BSLAorICAgICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUsIGJvb2wgZmFsbHNUaHJvdWdo
KSB7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0tPnNtYWxsU3RyaW5n
cy50eXBlU3RyaW5nKHR5cGUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZh
bGxzVGhyb3VnaCkKKyAgICAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKEp1bXAgdGhlU2xvd1BhdGgpIHsKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHRoZVNsb3dQYXRoOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nOworICAgIH0gZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RW51bWVyYWJsZUxlbmd0aD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIGJh
c2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhpbnB1dEdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9sZXhp
Y2FsX2Vudmlyb25tZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhp
Y2FsRW52aXJvbm1lbnQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CisgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4obV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpKTsKKyAgICBKU1ZhbHVlIGlu
aXRpYWxWYWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX2luaXRpYWxW
YWx1ZSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHN5bWJvbFRhYmxlLT5z
aW5nbGV0b24oKS5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgZW1pdFNsb3dPcChzbG93
X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZHN0
LCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHNjb3BlVGVtcCB7ICp0aGlzLCBzY29wZSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxVGVt
cCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKwor
ICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDFH
UFIgPSBzY3JhdGNoMVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNj
cmF0Y2gyVGVtcC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAg
YXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAorICAgICAg
ICAgICAgKm1fdm0sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSksIGJ1dHRlcmZseSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLAorICAgICAgICAgICAgc2xvd1BhdGgsIEpTTGV4aWNhbEVudmlyb25tZW50
OjphbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkpOworCisgICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gRG9uJ3Qg
bmVlZCBhIG1lbW9yeSBiYXJyaWVycyBzaW5jZSB3ZSBqdXN0IGZhc3QtY3JlYXRlZCB0aGUgYWN0
aXZhdGlvbiwgc28gdGhlCisgICAgICAgIC8vIGFjdGl2YXRpb24gbXVzdCBiZSB5b3VuZy4KKyAg
ICAgICAgc3RvcmVQdHIoc2NvcGVHUFIsIEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHN5bWJvbFRhYmxl
KSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlN5bWJv
bFRhYmxlKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBNdXN0IGluaXRpYWxpemUgYWxs
IG1lbWJlcnMgdG8gdW5kZWZpbmVkIG9yIHRoZSBURFogZW1wdHkgdmFsdWUuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGluaXRpYWxWYWx1ZSwgQWRkcmVzcyhyZXN1bHRH
UFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKFNjb3BlT2Zmc2V0KGkp
KSkpOworICAgICAgICAKKyAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyAvLyBPT1BTCit9CisKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTcwMiwxMSArMzc1MCwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9h
cmd1bWVudF9jb3VudChjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0
aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKLSAgICBib3hJbnQzMihyZWdUMCwgcmVz
dWx0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAs
IHJlZ1QxKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xNzE0LDI5ICszNzcxLDQ4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xl
bmd0aChjb25zdCAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1l
dGVyc1RvU2tpcDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0zMihudW1QYXJh
bXNUb1NraXApLCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRHUFIpOworCisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMy
KExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAg
ICAgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKworICAgICAgICBzZXRJbnQzMihkc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApOworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1
YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKKyAgICAgICAgc3ViMzIoSW1tMzIo
bnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgYm94SW50
MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwogI2VuZGlmCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7Cisg
ICAgICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCByZWdUMCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBy
ZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE3NDQsNDkgKzM4MjAsOTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2FyZ3VtZW50KGNvbnN0IElucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5P
ckVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFs
dWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
ICsgaW5kZXgpKSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMCk7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEs
IHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOwog
I2VuZGlmCiAKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKLSAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMg
PSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsK
LSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Ci0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotCi0gICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIG1vdmVWYWx1
ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3Mp
OworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKKyAgICAgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRz
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7
CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsK
KyAgICAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cm90b3R5cGVPZj4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1
ZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1w
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0KKworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2
bSgpLCB2YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSwgc2NyYXRjaEdQUiwgc2xv
d0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRHUFIsIGRzdCk7
CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAg
IH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3Mo
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QzOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKLSAgICBBU1NFUlQodmFsdWVSZWdzLnRhZ0dQ
UigpID09IHNjcmF0Y2hHUFIpOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBBU1NFUlQodmFsdWVS
ZWdzLnRhZ0dQUigpID09IHNjcmF0Y2hHUFIpOwogI2VuZGlmCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVJlZ3MpOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVJlZ3MpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwotICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIo
KSkpOworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRM
b2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNj
cmF0Y2hHUFIsIHNsb3dDYXNlcyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAg
ICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0
UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgfQogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyNCw2ICsxNDI0LDggQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOworCisgICAgLy9kYXRhTG9nTG4oImNvbXBhcmVMZXNzLCBsaHM6ICIs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgIiByaHM6ICIsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AyKSk7CiAgICAgCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihnbG9iYWxPYmplY3Qs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIp
KTsKIH0KQEAgLTE0OTEsNiArMTQ5Myw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Db21wYXIKICAgICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSk7CiAgICAgSlNWYWx1ZSBzcmMyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCisg
ICAgLy9kYXRhTG9nTG4oInN0cmljdGVxLCBsaHM6ICIsIHNyYzEsICIgcmhzOiAiLCBzcmMyKTsK
KwogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChnbG9iYWxPYmplY3QsIHNyYzEsIHNy
YzIpOwogfQogCkBAIC0xNjkxLDcgKzE2OTUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uRGVidWcsCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVB
bGxQcmVkaWN0aW9uc0FuZE9wdGltaXplQWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7Ci0gICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgIGNvZGVCbG9j
ay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogICAgIGNv
ZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogfQogCkBAIC0xNzQ1LDcgKzE3NDksNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAKICAgICBpZiAoIWNv
ZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0aW1pemVUb0RGRyIsICgi
Y291bnRlciA9ICIsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIoKSkpOwotICAgICAgICBj
b2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgICAgIGNvZGVCbG9jay0+YmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogICAgICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDaG9vc2luZyBub3QgdG8gb3B0aW1pemUg
IiwgKmNvZGVCbG9jaywgIiB5ZXQsIGJlY2F1c2UgdGhlIHRocmVzaG9sZCBoYXNuJ3QgYmVlbiBy
ZWFjaGVkLiIpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG51bGxwdHIp
OwogICAgIH0KQEAgLTE4MTQsNyArMTgxOCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25PcHRpbWkKICAgICAgICAgLy8gbm90aGluZyBsZWZ0IHRvIGRvLgogICAgICAgICBp
ZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogICAgICAgICAgICAg
Q09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheU9wdGltaXplVG9ERkciLCAoImNv
bXBpbGVkIGFuZCBmYWlsZWQiKSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFBy
ZWRpY3Rpb25zKCk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUo
KS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIkNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGls
ZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuIik7CiAgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICB9
CkBAIC0xODQzLDcgKzE4NDcsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
T3B0aW1pCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG51bGxwdHIp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3Vs
ZE9wdGltaXplTm93KCkpIHsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXpl
VG9ERkdOb3coKSkgewogICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ss
ICJkZWxheU9wdGltaXplVG9ERkciLCAoImluc3VmZmljaWVudCBwcm9maWxpbmciKSk7CiAgICAg
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksCiAgICAgICAgICAgICAg
ICAgIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKQEAgLTE4NzksNyAr
MTg4Myw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICB9
CiAgICAgCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCk7Ci0gICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NF
UlQob3B0aW1pemVkQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwob3B0aW1pemVkQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAKICAgICBpZiAodm9pZCogZGF0YUJ1ZmZlciA9IERG
Rzo6cHJlcGFyZU9TUkVudHJ5KHZtLCBjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0
ZWNvZGVJbmRleCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChvcHRpbWl6ZWRDb2Rl
QmxvY2ssICJvc3JFbnRyeSIsICgiYXQgYmMjIiwgYnl0ZWNvZGVJbmRleCkpOwpAQCAtMzQzMyw2
ICszNDM3LDQyIEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja0kKICAg
ICByZXR1cm4gMDsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdn
ZXJMT0xSZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSkK
K3sKKyAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxl
IGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CisgICAgLy8gcmVhbGx5IGJlIHBy
b2ZpdGFibGUuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKGxvbENvZGVCbG9jay0+dm0o
KS5oZWFwKTsKKworICAgIGlmIChnZXRlbnYoInByaW50RWFjaEpldHRpc29uIikgJiYgISFhdG9p
KGdldGVudigicHJpbnRFYWNoSmV0dGlzb24iKSkpCisgICAgICAgIGRhdGFMb2dMbigiamV0dGlz
b24sIGZvcmNpbmcgcmVvcHQgbm93OiAiLCAqbG9sQ29kZUJsb2NrKTsKKyAgICBsb2xDb2RlQmxv
Y2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAK
KyAgICAvLyBPT1BTOiBwcm9jZXNzIHZhbHVlIHByb2ZpbGVzIGhlcmUsIHNpbmNlIHdlJ3JlIGpl
dHRpc29uaW5nLCBob3BlZnVsbHkgdGhleSB1cGRhdGUgdy8gdGhpbmdzIHdlIGNhcmUgYWJvdXQu
CisKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obG9sQ29kZUJsb2NrLT52bSgpKTsKKworICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxvbENvZGVCbG9jaywgIjogRW50ZXJl
ZCByZW9wdGltaXplIGZyb20gTE9MIik7CisKKyAgICBDb2RlQmxvY2sqIGxsaW50Q29kZUJsb2Nr
ID0gbG9sQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIC8vIFdlIG11c3QgYmUgY2FsbGVk
IHdpdGggdGhlIGJhc2VsaW5lIGNvZGUgYmxvY2suCisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFz
ZWxpbmVDb2RlKGxsaW50Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgIENvZGVCbG9jayog
cmVwbGFjZW1lbnQgPSBsbGludENvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJl
cGxhY2VtZW50IHx8IHJlcGxhY2VtZW50ID09IGxsaW50Q29kZUJsb2NrKSB7CisgICAgICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxsaW50Q29kZUJsb2NrLCAiOiBOb3Qg
cmVvcHRpbWl6aW5nIExPTCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFj
ZW1lbnQgbXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkK
KyAgICAvLyB0byBjaGVjayBvdXIgbG9naWMuCisgICAgQVNTRVJUKGxsaW50Q29kZUJsb2NrLT5o
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGxvbENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKworICAgIC8vIE9PUFM6IGZpZ3Vy
ZSBvdXQgc3R1Y2sgaW4gYSBsb29wIGxvZ2ljCisgICAgbG9sQ29kZUJsb2NrLT5qZXR0aXNvbihQ
cm9maWxlcjo6SmV0dGlzb25EdWVUb09TUkV4aXQsIENvdW50UmVvcHRpbWl6YXRpb24pOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogSUdOT1JFX1dBUk5JTkdTX0VORApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTksNiArMzE5LDggQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25W
YWx1ZQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2Zp
bGVyTG9nLCB2b2lkLCAoVk0qKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB2b2lkLCAoVk0qKSk7CiAKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAo
Q29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsOCArMTg1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTIxMSw4ICsyMDksNiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTI4MSw4ICsyNzcsNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICAgICAr
K21fZ2V0QnlWYWxJbmRleDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgICAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwpAQCAtNTU4LDcgKzU1Miw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwogICAgIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIC8vIFRoZSByZWdpc3RlciBz
ZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBB
Uk0uCkBAIC01OTgsOCArNTkxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtNjM5LDggKzYzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0Pigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTY4Niw4ICs2NzUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKQEAgLTcyOSw4ICs3MTYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTc3OCw4ICs3NjMsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC04MTksOCArODAyLDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtMTEwMCw4ICsxMDgxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xMjU3LDggKzEyMzYsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRU
b1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5m
byhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAK
ICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50
U3RyZWFtLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNw
YWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIApAQCAtNTIsNTEgKzU0LDExNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJl
c3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFI7CisKKyAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZXN1bHRHUFI7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0g
cmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAg
ICB9CiAKICAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlv
bnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBu
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBK
dW1wIG5vdENlbGw7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgbm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgcHJvZmlsZSk7CisgICAgICAg
IGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIG1vdmUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgICAg
IHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAg
ICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocHJvcGVydHkp
KQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpIHx8
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8
ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5n
VHlwZUdQUiwgcHJvZmlsZSk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkp
LCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNl
IGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N5bWJv
bCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOworICAgICAgICB9CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZh
bHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgICAgIGlmICghdXNl
TE9MKCkpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKICAgICB9CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAg
IH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBpZiAoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
Ci0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5
VmFsSW5kZXhdOwotICAgICAgICArK21fZ2V0QnlWYWxJbmRleDsKLSAgICAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CisgICAgKyttX2dldEJ5VmFsSW5kZXg7
CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwNSw0MSArMTczLDcz
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBH
UFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywg
cHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VH
UFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MpOworICAgICAgICB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRl
TmFtZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
LQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgKyttX2dldEJ5VmFsSW5kZXg7CiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1Nyw2ICsyNTcsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCisg
ICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IE1heWJlIGRvIGJldHRlciBoZXJlPworCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgYm9vbCBwcm9wZXJ0eU5h
bWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKICAg
ICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCkBAIC0zMTksOCArNDIxLDExIEBA
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyByZWxvYWQg
dGhlIHJlZ2lzdGVycy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwg
dmFsdWUsIHJlZ1QxKTsKIAorICAgIGF1dG8gdW5hdmFpbGFibGVSZWdpc3RlcnMgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgdW5hdmFpbGFibGVSZWdpc3Rl
cnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKICAgICBKSVRQ
dXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIHByb3BlcnR5TmFtZSwKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVycywgcHJvcGVydHlOYW1lLAogICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2Rl
KGJ5dGVjb2RlKSwgcHV0S2luZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBp
ZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTMzOSw3ICs0NDQsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9y
IEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgcmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJikKIHsKICAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlOwpAQCAtMzQ3LDcgKzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1v
ZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CiAKLSAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRl
Y29kZSkgeworICAgIGF1dG8gZ2V0U3RhdGUgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAg
ICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTM1NSwxMyAr
NDYwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICB9
OwogCiAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisgICAgICAgIGdldFN0YXRlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhd
LmJ5VmFsSW5mbzsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xv
d1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CkBAIC0zODEsNiArNDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZv
KG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogRG8gYmV0
dGVyIGlmIHdlIGNhbiEKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKIApAQCAtMzk0
LDEzICs1MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAog
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBmYXN0UGF0aEptcCwgZG9uZSwgZG9uZSkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CiAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0g
Ynl0ZWNvZGUubV9wdXRLaW5kOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBM
YWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwpA
QCAtNDIwLDQ5ICs1MjUsMTA1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJh
c2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nl
c3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3Iu
Z3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBi
eXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAg
ICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJl
Z1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7
ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGdldHRlciB7
ICp0aGlzLCBieXRlY29kZS5tX2dldHRlciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgc2V0dGVy
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fc2V0dGVyIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgZ2V0
dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3QgYXR0cmli
dXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWws
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgcHJvcGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nl
c3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBi
YXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcHJv
cGVydHkgeyAqdGhpcywgYnl0ZWNvZGUubV9wcm9wZXJ0eSB9OworICAgICAgICBWYWx1ZU9wZXJh
bmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHBy
b3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIo
KTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgYXR0cmlidXRlcywgYWNjZXNzb3JHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFs
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NzIsMTgg
KzYzMyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaDsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAg
IHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoLmVtcGxhY2UoKnRo
aXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICBz
cGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgIGVsc2UKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCiAgICAgSklURGVsQnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7CisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNo
R1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTQ5MiwyNSArNjg3LDI3
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
RGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSBzbG93Q2FzZS5yZXN1bHQuZ3ByKCk7CisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MjAsMTkgKzcx
Nyw3MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhp
cywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgeworICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHByb3BlcnR5KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBiYXNlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkp
OworICAgIH0KKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJy
aWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyBy
ZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0
ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTQxLDIyMSArNzg5LDM2OCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmll
cihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5
VmFsc1ttX2RlbEJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdU
MSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJl
ZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
cHJvcGVydHlHUFIsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUikpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotICAgIAor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0g
cmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Qp
OworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAK
KyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
YmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJl
ZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEp1bXAgbm90QXJyYXlMZW5n
dGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5
SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3Ro
TW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSID0gdXNl
TE9MKCkgPyByZXN1bHRHUFIgOiByZWdUMTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJhc2VHUFIsIGluZGV4aW5nVHlwZUdQUiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFk
YXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJheUxlbmd0
aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRo
aXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Cisg
ICAgCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVl
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdGhpc1ZhbHVlOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB0aGlz
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdGhpc1ZhbHVlLmVtcGxh
Y2UoKnRoaXMsIHRoaXNWUmVnKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB0aGlzR1BSID0g
dGhpc1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdGhpc0dQ
UiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZCh0aGlzR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwodGhpc1ZSZWcpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh0aGlzVlJlZywg
dGhpc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0KIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpKTsK
KyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRH
UFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4Kytd
OwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCB0aGlzR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0g
Ynl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5k
IHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0
IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90
UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0
cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhp
cy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVW
UmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2Ny
YXRjaFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9
IHJlZ1QxOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2UsIGJhc2VHUFIsIHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCisg
ICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodmFsdWVHUFIpOworICAgIH0K
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChi
YXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwg
ZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQ
dXRLaW5kOjpOb3REaXJlY3QpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKQEAgLTc2NSw3NyArMTE2MCw5NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0
ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRp
b25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBz
aXplLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkz
OTUKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2VWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigp
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMp
OwotICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRC
eUlkSW5kZXgrK107CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigp
OwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigp
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAg
fQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAK
ICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Cisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107Cisg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CiAKKyAgICBK
SVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJ
VDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZp
cnR1YWxSZWdpc3RlciBkc3QsIEdQUlJlZyByZXN1bHRHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZh
ckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSksIHJlc3VsdEdQUiwgZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtODQ3LDE3ICsxMjYwLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW4KICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsK
IAorICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUp
OwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2gsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVzdWx0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtODY3
LDIxICsxMjg4LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJh
bmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1Qw
OworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BS
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgaWYgKGRlcHRoID4gMCkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9s
ZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRh
dGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CkBAIC04OTQsOSArMTMzMCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29s
dmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwg
cmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApAQCAtOTA5LDI5ICsxMzQ1LDI5IEBA
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVz
dWx0R1BSLCBkc3QpOwogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtOTQwLDE1ICsxMzc2LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQ
UlJlZyBzY3JhdGNoR1BSKQogewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHNjcmF0Y2hHUFIp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUikpOworICAg
IGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwg
R1BSUmVnIHJlZykKQEAgLTk2MiwxMiArMTQwMyw2IEBAIHZvaWQgSklUOjplbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcigKICAgICBsb2FkUHRyKHJlZywgcmVnKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKQEAgLTk3OCw1MSArMTQxMyw4NCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9
IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAg
ICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xv
dCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24n
dCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRk
aXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5q
ZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsK
LSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAgICAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAg
IEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAg
ICBvZmZzZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICAgICAgICAgIHNjb3BlR1BS
ID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0
VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29w
ZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QyOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
CisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBz
Y29wZUdQUiwgcmVzdWx0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRM
YW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2Nv
cGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAg
ICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKICAgICAgICAgICAg
IGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0R1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zm
c2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhp
cyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihv
ZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwot
ICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQs
IChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJl
c3VsdCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBuZWczMihvZmZzZXRH
UFIpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0R1BSLCBvZmZzZXRHUFIp
OworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIG9mZnNldEdQUiwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFs
dWUqKj4ob3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVj
ay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
OgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRT
bG90KTsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAg
ICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y29wZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9w
ZXJhbmRTbG90KSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0
R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJl
VmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTEwMzYsMTAgKzE1MDQsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
KyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKIApA
QCAtMTA1MiwyNyArMTUyMCwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJ
bmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2Up
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwg
ZHN0KTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKICAgICAgICAgYnJlYWs7CkBA
IC0xMDgyLDQwICsxNTUwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJv
bVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Y3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
IHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
ZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQot
dm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNz
T2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVj
dFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1p
dE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1Qx
KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENs
b3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdU
MSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMTI5LDIxICsxNTc5LDQ5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19zY29wZShjb25zdCBJbnMKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0
YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAg
R1BSUmVnIHZhbHVlR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2
YWx1ZSk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsK
ICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVy
ZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgT3B0
aW9uYWw8R1BSVGVtcD4gYnV0dGVyZmx5VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVH
UFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgR1BSUmVnIGJ1
dHRlcmZseUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAg
IHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNl
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseVZhbHVlLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gb2Zmc2V0VmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IGJ1dHRlcmZseVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAg
ICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlH
UFIgPSByZWdUMzsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCBzY29wZUdQUik7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCBvZmZzZXRHUFIpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KICAg
ICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1
bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAg
IHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAg
IG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJ1dHRlcmZseUdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOworICAgICAgICAgICAgbmVnUHRy
KG9mZnNldEdQUik7CisgICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQmFzZUluZGV4KGJ1
dHRlcmZseUdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExNTQsMjggKzE2MzIsNTcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAg
SlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxv
Y2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisKKyAgICAgICAgICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFs
dWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QwOworCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJl
IGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tz
IHN0YXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoq
PihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Q
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkK
LSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50
U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFy
aWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3Rh
bnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgbG9hZFB0cigmbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBlbWl0Tm90aWZ5
V3JpdGUoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbG9hZFB0cihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHN0
b3JlNjQodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAg
ICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BSLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF1c2VMT0woKSB8
fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZh
cjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJl
VmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OworCisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAg
ICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Cisg
ICAgICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhzY29wZUdQUiwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyAoKm9wZXJhbmRTbG90KSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwpAQCAtMTE5MCwxMiArMTY5NywyMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZh
bHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1
ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENv
ZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28g
ZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhcikpOwogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWlj
LCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1p
bml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgogCiAgICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5s
aW5rKHRoaXMpOwpAQCAtMTIwOSwyMyArMTcyNSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5Ogog
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAg
ICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdh
bnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBz
YW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3
ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywg
c2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwog
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwpAQCAtMTI0MiwxMCArMTc2Nyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpIHsKQEAgLTEyNjEsNjEgKzE3ODQsMTc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X2FyZ3VtZW50cyhjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwog
ICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFy
Z3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9
IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgfQogICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJl
c3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudHNHUFIs
IERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJn
dW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVudHNWYWx1
ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgR1BSUmVnIGFy
Z3VtZW50c0dQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAg
IHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBhcmd1bWVudHNHUFIg
PSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAg
ICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIHN0b3JlNjQodmFsdWVHUFIsIEFkZHJl
c3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICBpZiAoIXVzZUxPTCgpIHx8
ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNv
IHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBv
ciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJl
Z2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0
CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUg
Y29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBi
cmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICAv
LyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZShvd25lcikgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAg
ICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5
cGUodmFsdWUpICYgflNwZWNDZWxsKSkgeworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4g
dmFsdWVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZhbHVlKSAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9w
ZXJhbmQodmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQ
UiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQ
Uik7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
d25lciwgcmVnVDApOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IG93bmVyVmFsdWU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgIEdQUlJlZyBvd25lckdQUjsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NyYXRjaFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5n
cHIoKTsKKworICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZChvd25lcikgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgIG93bmVyR1BSID0gZ3ByRm9yT3BlcmFuZChvd25lcik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgb3duZXJWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgIG93bmVyR1BSID0gb3duZXJWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG93bmVyLCBvd25lckdQUik7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBvd25lckdQUiA9IHJlZ1QwOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDE7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICB9CisKICAg
ICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgaWYgKCF1
c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKG93bmVyKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAg
ICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwob3duZXJHUFIpOworICAgIH0KIAotICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0
aGlzKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNo
KHZtKCksIG93bmVyR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJl
Y29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIE5v
IG5lZWQgdG8gc2lsZW50IHNhdmUgdGhpcy4KKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNp
bGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxs
UmVjb3JkKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOworICAgIGlmIChvd25lck5vdENlbGwuaXNTZXQoKSkKICAgICAgICAgb3duZXJO
b3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwu
aXNTZXQoKSkgCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAgIC8vIC0g
S25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBkb24ndCBi
cmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3
aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9lc24ndCBw
b3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBhbHdheXMg
ZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBvZiBsaW5l
IGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0g
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUpIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGdw
ckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgdmFs
dWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgdmFs
dWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpCisgICAgICAg
ICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgIH0KIAog
ICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyVmFsdWUpIAorICAgIGlmICh2YWx1ZU5vdENlbGwuaXNTZXQoKSkgCiAgICAgICAgIHZhbHVl
Tm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0xMzI3LDExICsxOTY3LDI2IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJ
bnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAgICAgIHByb3ZlblR5cGUoYmFzZSkgJj0g
U3BlY0NlbGw7CisKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5k
ZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVn
VDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxf
ZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNDEsMTAg
KzE5OTYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbgogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwot
ICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworCisgICAgICAgIC8vIE9PUFM6IEtub3duQ2VsbE9wZXJhbmQhCisgICAg
ICAgIHByb3ZlblR5cGUoYmFzZSkgJj0gU3BlY0NlbGw7CisKKyAgICAgICAgc3RvcmVQdHIodmFs
dWVHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZz
ZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhy
ZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQo
aW5kZXgpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTE0NDcsOCArMjExNSwy
NSBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0CiAKIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgcmVnVDApOworICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbjsKKyAgICB7CisgICAgICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworICAgICAgICBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2NyYXRj
aEdQUik7CisgICAgfQorCisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNw
aWxsUmVjb3JkOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQg
PSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOworCiAgICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCkBAIC0xNDY2LDYgKzIxNTEs
OCBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBm
YWxzZTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIo
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICAKQEAgLTE1NjcsNiArMjI1NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZh
dGVOYW1lV2kKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgQVNTRVJUKChwdXRL
aW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9k
aXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQg
PT0gb3BfcHV0X2J5X3ZhbCkpOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2
b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywgIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVC
bG9jaywgIiBkaWQgYmVjb21lIHJlYWR5LiIpOwogICAgIApAQCAtNTUsNyArNTUsNyBAQCB2b2lk
IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0
IHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIXByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywg
IiByZXN1bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwy
MiBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgogCisjaW5jbHVk
ZSA8d3RmL1Njb3BlLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6
UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4gewog
cHVibGljOgotICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2sp
Ci0gICAgICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCisgICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21w
aWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQorICAgICAgICA6IG1fbGxpbnRDb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1f
Y29kZUJsb2NrVG9Db21waWxlKGNvbXBpbGVUeXBlID09IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA/
IG1fbGxpbnRDb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkgOiBtX2xsaW50Q29kZUJsb2NrKSAK
KyAgICAgICAgLCBtX2ppdChtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKSwgbV9jb2RlQmxvY2tU
b0NvbXBpbGUsIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIHsK
ICAgICAgICAgbV9qaXQuZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Cisg
ICAgICAgIC8vIE9PUFM6IHZpc2l0IHRoaXMgaW4gY29uY3VycmVudCBnYworICAgICAgICBpZiAo
bV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9jaykgeworICAgICAgICAgICAg
bV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVhcC5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21w
aWxlKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZCgp
CkBAIC01MywxNyArNjAsMjMgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoKQogICAgIHsK
ICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQubGluaygpOworCisgICAg
ICAgIGF1dG8gc2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICAgICAgaWYg
KG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRDb2RlQmxvY2spCisgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCkuaGVhcC51bnByb3RlY3QobV9jb2RlQmxvY2tU
b0NvbXBpbGUpOworICAgICAgICB9KTsKKwogICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAg
ICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19F
VkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVk
IikpOworICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2xsaW50Q29kZUJsb2NrLCAi
ZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CiAgICAgICAgICAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIGZh
aWxlZC4iKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7
CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKKyAg
ICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1
ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3Nm
dWw6CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAg
SklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5qaXRTb29uKCk7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGls
ZS0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrVG9Db21waWxlKTsK
KyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC03MSw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0g
ICAgVk0mIHZtKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPnZtKCk7IH0KKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9ja0tleSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2s7IH0KKyAgICBWTSYgdm0o
KSB7IHJldHVybiBtX2xsaW50Q29kZUJsb2NrLT52bSgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0Zp
bmlzaGVkQ29tcGlsaW5nKCkKICAgICB7CkBAIC04MCwxNSArOTMsMTYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9pc0ZpbmlzaGVkQ29tcGlsaW5nOwogICAgIH0KICAgICAKLSAgICBzdGF0
aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAgUGxhbiBwbGFu
KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFBsYW4gcGxh
bihjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAg
ICAgICAgcGxhbi5jb21waWxlSW5UaHJlYWQoKTsKICAgICAgICAgcGxhbi5maW5hbGl6ZSgpOwog
ICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBD
b2RlQmxvY2sqIG1fbGxpbnRDb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9ja1Rv
Q29tcGlsZTsKICAgICBKSVQgbV9qaXQ7CiAgICAgTG9jayBtX2xvY2s7CiAgICAgYm9vbCBtX2lz
RmluaXNoZWRDb21waWxpbmcgeyBmYWxzZSB9OwpAQCAtMjMzLDkgKzI0NywxMSBAQCB2b2lkIEpJ
VFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgICAgIGNvZGVCbG9jay0+ZG9u
dEpJVEFueXRpbWVTb29uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBKSVQ6OkNv
bXBpbGVUeXBlIGNvbXBpbGVUeXBlID0gT3B0aW9uczo6Zm9yY2VMT0woKSA/IEpJVDo6Q29tcGls
ZVR5cGU6OkxPTCA6IEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lOwogICAgIAogICAgIGlmICgh
T3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSB7Ci0gICAgICAgIFBsYW46OmNvbXBpbGVOb3co
Y29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgUGxhbjo6Y29t
cGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI0OSw3ICsyNjUsNyBAQCB2b2lk
IEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgICAgIAogICAgICAgICBp
ZiAobV9udW1BdmFpbGFibGVUaHJlYWRzKSB7CiAgICAgICAgICAgICBtX3BsYW5uZWQuYWRkKGNv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQ
bGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAg
UmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGNvbXBpbGVU
eXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICBtX3BsYW5zLmFw
cGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fcXVldWUuYXBwZW5kKHBsYW4pOwogICAgICAgICAg
ICAgbV9jb25kaXRpb24tPm5vdGlmeUFsbChsb2NrZXIpOwpAQCAtMjczLDE0ICsyODksMjQgQEAg
dm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgIC8vIFRoaXMgd29y
a3MgYXJvdW5kIHRoZSBpc3N1ZS4gSWYgdGhlIGNvbmN1cnJlbnQgSklUIHRocmVhZCBpcyBjb252
b3llZCwgd2UgcmV2ZXJ0IHRvIG1haW4KICAgICAvLyB0aHJlYWQgY29tcGlsZXMuIFRoaXMgaXMg
cHJvYmFibHkgbm90IGFzIGdvb2QgYXMgaWYgd2UgaGFkIG11bHRpcGxlIEpJVCB0aHJlYWRzLiBN
YXliZSB3ZQogICAgIC8vIGNhbiBkbyB0aGF0IHNvbWVkYXkuCi0gICAgUGxhbjo6Y29tcGlsZU5v
dyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIFBsYW46OmNvbXBp
bGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7
CiB9CiAKKy8qCiB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJs
b2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0m
IHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAg
ICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykK
KworICAgIGF1dG8gaXNDb21waWxlZCA9IFsmXSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07
CisKKyAgICBpZiAoaXNDb21waWxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYm9v
bCBpc1BsYW5uZWQ7CkBAIC0yOTYsMTcgKzMyMiwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21w
aWxlTm93KENvZGVCbG9jayogCiAgICAgfQogICAgIAogICAgIC8vIE5vdyBpdCBtaWdodCBiZSBj
b21waWxlZCEKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJw
cmV0ZXJUaHVuaykKKyAgICBpZiAoaXNDb21waWxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwg
YW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdpdGggdGhlCi0gICAgLy8gYmFzZWxpbmUgSklU
LgotICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7Ci0gICAgCi0gICAgLy8gT0ssIGp1c3Qg
Y29tcGlsZSBpdC4KLSAgICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0gICAgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKworICAgIGlmIChP
cHRpb25zOjpmb3JjZUxPTCgpKSB7CisgICAgICAgIENvZGVCbG9jayogbG9sQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOworICAgICAgICBKSVQ6OmNvbXBpbGUodm0sIGxv
bENvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBsb2xDb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShsb2xDb2RlQmxvY2spOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBh
dHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRoIHRoZQorICAgICAgICAv
LyBiYXNlbGluZSBKSVQuCisgICAgICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7CisgICAg
ICAgIAorICAgICAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgorICAgICAgICBKSVQ6OmNvbXBp
bGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0
aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgIH0K
IH0KKyovCiAKIHZvaWQgSklUV29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG15UGxhbnMp
CiB7CkBAIC0zMTQsNyArMzQ3LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQ
bGFucyYgbQogICAgICAgICBwbGFuLT5maW5hbGl6ZSgpOwogICAgICAgICAKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+
Y29kZUJsb2NrKCkpOworICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9ja0tl
eSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29y
a2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
V29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwb2xsKFZNJik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiwg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KSk7Ci0gICAgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIAogICAgIHN0YXRp
YyBKSVRXb3JrbGlzdCYgZW5zdXJlR2xvYmFsV29ya2xpc3QoKTsKICAgICBzdGF0aWMgSklUV29y
a2xpc3QqIGV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKTsKQEAgLTY2LDYgKzY1LDcgQEAg
cHJpdmF0ZToKICAgICBjbGFzcyBUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKICAg
ICAKKyAgICAvL3ZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAgICB2b2lkIGZpbmFs
aXplUGxhbnMoUGxhbnMmKTsKICAgICAKICAgICBQbGFucyBtX3F1ZXVlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxl
cjo6cmVnaXN0ZXJJbmRleChmcHIpXTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsg
cmV0dXJuIG1fbWFwW2ldOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgIGNv
bnN0IHsgcmV0dXJuIG1fbWFwW2ldOyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjphcnJheTxULCBN
YWNyb0Fzc2VtYmxlcjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IHsgfSB9Owog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xv
YmFsT2JqZWN0KgogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwg
RnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7CiAjZW5k
aWYKICAgICB9Ci0gICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICBpZiAoaXNXZWJBc3NlbWJseSB8
fCBKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
KCkubGFiZWxBdE9mZnNldCgwKSk7CiAgICAgZWxzZQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKS5sYWJlbEF0T2Zmc2V0KDApKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgcHVibGljOgogCiAgICAgSklUOjpDYWxsIGNhbGwo
KQogICAgIHsKKyAgICAgICAgLy8gT09QUz8KKyAgICAgICAgLy8gV2UganVzdCB3YW5uYSBkbyB0
aGlzIG9uIGZhc3QsIG5vdCBzbG93IHBhdGguCisgICAgICAgIC8vIG1faml0LT5zcGlsbEZvckNh
bGwoKTsKKwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2ppdC0+
bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
CiAgICAgICAgICAgICBtX2ppdC0+c2FtcGxlSW5zdHJ1Y3Rpb24oJm1faml0LT5tX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKClbbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXRdLCB0cnVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDggKzM2MywxMCBAQCBpbmxpbmUgYm9vbCBz
aG91bGRKSVQoQ29kZUJsb2NrKiBjb2RlQmxvCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBz
aG91bGQgdHJ5IHRvIE9TUi4KLWlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNz
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCitpbmxpbmUgQ29kZUJsb2NrKiBqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKQog
eworICAgIC8vIE9PUFM6IEltcGxlbWVudCB0aGlzIHcuci50IExPTC4KKwogICAgIERlZmVyR0NG
b3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsgLy8gTXkgY2FsbGVycyBkb24ndCBzZXQgdG9wIGNh
bGxmcmFtZSwgc28gd2UgZG9uJ3Qgd2FudCB0byBHQyBoZXJlIGF0IGFsbC4KICAgICBBU1NFUlQo
T3B0aW9uczo6dXNlSklUKCkpOwogICAgIApAQCAtMzczLDI5ICszNzUsNDUgQEAgaW5saW5lIGJv
b2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIGlmICghY29kZUJsb2NrLT5jaGVj
a0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNv
dW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91
bGQgYmUgbGlmdGVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xp
c3QoKS5wb2xsKHZtKTsKLSAgICAKKworICAgIGF1dG8gbG9sQ29kZUJsb2NrID0gWyZdKCkgLT4g
Q29kZUJsb2NrKiB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gY29kZUJs
b2NrLT5vcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAocmVwbGFjZW1l
bnQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlcGxhY2VtZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH07
CisKKyAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisKICAgICBzd2l0Y2ggKGNvZGVCbG9jay0+aml0VHlwZSgpKSB7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDogewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICIgICAgQ29kZSB3YXMgYWxyZWFkeSBjb21waWxlZC4iKTsKICAgICAgICAg
Y29kZUJsb2NrLT5qaXRTb29uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gY29kZUJsb2NrOwogICAgIH0KICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6
IHsKICAgICAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGlsZUxh
dGVyKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIHJldHVy
biBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKKyAgICAgICAg
aWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9jaygpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQg
Y29kZSBibG9jayBpbiBMTEludDogIiwgKmNvZGVCbG9jaywgIlxuIik7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBMTElu
dDogIiwgKmNvZGVCbG9jaywgIlxuIik7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBl
bnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5k
IGtpbmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5k
IGtpbmQpCiB7CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLAogICAgICAg
ICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5hbWUsICIgd2l0aCBleGVjdXRlQ291bnRlciA9
ICIsCkBAIC00MDYsMTggKzQyNCwyMSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5
T1NSKENvZGVCCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAg
ICAgfQogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKLSAgICBpZiAoIWppdENvbXBpbGVB
bmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spKQorICAgIENvZGVCbG9jayogY29tcGlsZWRD
b2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKTsKKyAg
ICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxw
dHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAi
T1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
bXBpbGVkQ29kZUJsb2NrLCAiT1NSIGVudHJ5IiwgKCJpbiBwcm9sb2d1ZSIpKTsKKworICAgIGNh
bGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAgICBpZiAo
a2luZCA9PSBQcm9sb2d1ZSkKLSAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmpp
dENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CisgICAgICAgIExMSU5UX1JF
VFVSTl9UV08oY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKGtpbmQgPT0gQXJpdHlDaGVjayk7Ci0gICAgTExJTlRf
UkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNr
QXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgIExMSU5UX1JFVFVSTl9U
V08oY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNr
QXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOwogfQogI2Vsc2UgLy8gRU5BQkxF
KEpJVCkKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGVudHJ5T1NSKENhbGxGcmFtZSosIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwg
RW50cnlLaW5kKQogewogICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAg
TExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKQEAgLTQyNywzMSArNDQ4LDMxIEBA
IHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKGVudHJ5X29zcikKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBl
bnRyeU9TUihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOwor
ICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJl
bnRyeV9vc3IiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY2FsbCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVy
biBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpz
RXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NhbGwiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29k
ZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0
IiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9s
b2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVu
dHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVj
dXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2Fs
bF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFt
ZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFi
bGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2Fy
aXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURfUEFS
QU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwg
ImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNr
KTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNh
bGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2siLCBBcml0
eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCkBAIC00ODAsMTkg
KzUwMSwyMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAgICAgTExJTlRf
UkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0gaml0Q29tcGlsZUFu
ZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7
CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhu
dWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9j
aywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAg
Q09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAi
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb21waWxlZENv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvbXBpbGVkQ29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKIAotICAgIGNvbnN0IEpJVENv
ZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKTsKKyAgICBjb25zdCBKSVRD
b2RlTWFwJiBjb2RlTWFwID0gY29tcGlsZWRDb2RlQmxvY2stPmppdENvZGVNYXAoKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZp
bmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7
CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxv
Y2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRh
cmdldCwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOwogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcs
MjAgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5iYXNl
bGluZUFsdGVybmF0aXZlKCkpOwogfQogCitGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVj
dXRhYmxlOjpsb2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKK3sKKyAgICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlOworICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICBlZGdlID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdl
dCgpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpOworICAgICAgICBlZGdlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7
CisgICAgfQorICAgIGlmICghZWRnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmxv
bE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKK30KKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNCwxMyArMTE0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29kZUJsb2NrRm9yQ29u
c3RydWN0KCk7CiAgICAgfQogCisgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGxvbE9yQmFzZWxpbmVD
b2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgRnVuY3Rpb25Db2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAg
ICAKLSAgICBGdW5jdGlvbkNvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJs
b2NrRm9yKGtpbmQpOwotICAgIH0KLQogICAgIFJlZlB0cjxUeXBlU2V0PiByZXR1cm5TdGF0ZW1l
bnRUeXBlU2V0KCkgCiAgICAgewogICAgICAgICBSYXJlRGF0YSYgcmFyZURhdGEgPSBlbnN1cmVS
YXJlRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBAIHN0YXRpYyB2b2lk
IGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgT3B0aW9u
czo6Zm9yY2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IDE7CisKICNpZiAh
ZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGlu
ZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcg
QEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCB1
c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRo
ZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRl
IGNsYXNzZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRzLCB0
cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwcml2YXRl
IHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCBmb3Jj
ZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7
CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgbGxpbnRfaGFuZGxl
X3VjYXVnaHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAgICAg
ICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAgICAgICAgICAgICBp
ZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8
fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAg
ICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgewog
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7
CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4
KGJpdHMsIHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwTExJbnQoQ29kZUJs
b2NrKiBjb2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQg
PSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7
CisgICAgLy8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdhbnQgdG8gZG8gd2l0aCB0aGUgbm8g
TExJbnQgb3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29t
cGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5u
ZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1i
ZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1h
bnlDb21waWxlcyA9IGZhbHNlOwogI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0aW9u
czo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBqc051bWJlcigwKTsgLy8gT09QUworCiAg
ICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8
fCAhT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29tcGls
ZXMgPSB0cnVlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTVRyYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQg
Vk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoZm91bmRDb2RlQmxvY2stPmpp
dFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3VuZENvZGVCbG9jay0+
aml0VHlwZSgpKSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKCptX2xvY2sp
OwogICAgICAgICBpZiAoIWxvY2tlcikKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBT
aWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgVk1U
cmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxlIChjYWxsRnJhbWUp
IHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2Rl
QmxvY2stPmppdFR5cGUoKSkpCisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNE
RkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpl
dHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAgICAgIGNhbGxGcmFt
ZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQpJbmRleDogVG9v
bHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9j
b21wYXJlLXJlc3VsdHMJKHJldmlzaW9uIDI3MTM3NikKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFy
ZS1yZXN1bHRzCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOCArMTgyLDggQEAgZGVmIGNvbXB1dGVN
dWx0aXBsZUh5cG90aGVzZXNTaWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFrZG93bnMoYSwgYik6
CiAgICAgbmFtZUxlbmd0aCA9IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0aCA9IGxlbihhW3Vu
aXRNYXJrZXJdKQotICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKKyAgICBhTGVuZ3Ro
ID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMworICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2Vy
XSkgKyAzCiAgICAgcmF0aW9MZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAgIHBWYWx1ZUhlYWRl
ciA9ICJwVmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZSkiCkBA
IC0yMTIsNyArMjEyLDcgQEAgZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIHBMZW5ndGgg
Kz0gMgogCiAgICAgc3RyaW5ncyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFt
ZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21w
YXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1
YnRlc3QiLCBhU2NvcmU9YVt1bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1hcmtlcl0sIG5hbWVM
ZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21w
YXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRl
ciwgcExlbmd0aD1wTGVuZ3RoKSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtrZXk6XntuYW1lTGVu
Z3RofX18e2FTY29yZTpee2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9fSB8e2NvbXBhcmU6
XntyYXRpb0xlbmd0aH19fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0KGtleT0ic3VidGVz
dCIsIGFTY29yZT0iYTogIiArIGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjogIiArIGJbdW5pdE1h
cmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJM
ZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2Vy
PXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5IGluIGEua2V5cygp
OgogICAgICAgICBpZiBrZXkgPT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAgIGNvbnRpbnVlCklu
ZGV4OiBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQsNyArNCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1bm5l
ciA9IHsKICAgICBuZXZlcklubGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAotICAg
IG51bWJlck9mREZHQ29tcGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVyT2ZE
RkdDb21waWxlczogKGZ1bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICByZXR1
cm4gKGYpID0+IHsKKyAgICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8gRW11
bGF0ZSBydW5uaW5nIHRoaXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJpbmcg
YmVmb3JlIHJldHVybmluZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAgICAg
ICAgICAgbWFwID0gbmV3IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAuZ2V0
KGYpIHx8IDA7CisgICAgICAgICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNldChm
LCBjb3VudCk7CisgICAgICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAgICAg
ICB9OworICAgIH0pKCksCiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3Q29k
ZUJsb2NrCiB9OwogCkBAIC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUodGhl
RnVuY3Rpb24sIF9hLCBfYgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOwog
ICAKICAgdHJ5IHsKLSAgICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpCisg
ICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1ZXMu
cHVzaChldmFsKF9hKSk7CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAgfSBj
YXRjaCAoZSkgewogICAgIGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVuY3Rp
b24gZGZnSW5jcmVtZW50KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAg
ICAgICByZXR1cm4gYXJndW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3Vt
ZW50KSkKKyAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6IDA7
CiAgICAgCiAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417923</attachid>
            <date>2021-01-19 16:26:56 -0800</date>
            <delta_ts>2021-01-19 17:07:49 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>615731</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAorLy90ZXN0TGlzdCA9IFsnY3J5cHRvLWFlcy1TUCddOwor
CiBpZiAodHlwZW9mIHRlc3RJdGVyYXRpb25Db3VudCA9PT0gInVuZGVmaW5lZCIpCiAgICAgdGVz
dEl0ZXJhdGlvbkNvdW50ID0gdW5kZWZpbmVkOwogCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL2JlbmNobWFyay1ydW5uZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw4IEBACiAv
LyBGSVhNRTogVXNlIHRoZSByZWFsIHByb21pc2UgaWYgYXZhaWxhYmxlLgogLy8gRklYTUU6IE1h
a2Ugc3VyZSB0aGlzIGludGVyZmFjZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHJlYWwgUHJvbWlz
ZS4KKworX19kaXNhYmxlU2FtcGxpbmdQcm9maWxlcigpOworCiBmdW5jdGlvbiBTaW1wbGVQcm9t
aXNlKCkgewogICAgIHRoaXMuX2NoYWluZWRQcm9taXNlID0gbnVsbDsKICAgICB0aGlzLl9jYWxs
YmFjayA9IG51bGw7CkBAIC0xMjgsMTcgKzEzMSwyMSBAQCBCZW5jaG1hcmtSdW5uZXIucHJvdG90
eXBlLl9ydW5UZXN0ID0gZnVuCiAKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcu
JyArIHRlc3QubmFtZSArICctc3RhcnQnKTsKICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7Cisg
ICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgdGVzdC5ydW4ocHJlcGFyZVJldHVy
blZhbHVlLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpOworICAgIF9fZGlzYWJsZVNh
bXBsaW5nUHJvZmlsZXIoKTsKICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgIHNlbGYuX3dy
aXRlTWFyayhzdWl0ZS5uYW1lICsgJy4nICsgdGVzdC5uYW1lICsgJy1zeW5jLWVuZCcpOwogCiAg
ICAgdmFyIHN5bmNUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTsKIAogICAgIHZhciBzdGFydFRp
bWUgPSBub3coKTsKKyAgICBfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgLy8gU29tZSBicm93c2VycyBkb24ndCBpbW1lZGlh
dGVseSB1cGRhdGUgdGhlIGxheW91dCBmb3IgcGFpbnQuCiAgICAgICAgIC8vIEZvcmNlIHRoZSBs
YXlvdXQgaGVyZSB0byBlbnN1cmUgd2UncmUgbWVhc3VyaW5nIHRoZSBsYXlvdXQgdGltZS4KICAg
ICAgICAgdmFyIGhlaWdodCA9IHNlbGYuX2ZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsKKyAgICAgICAgX19kaXNhYmxlU2FtcGxpbmdQcm9m
aWxlcigpOwogICAgICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgICAgICBzZWxmLl9mcmFt
ZS5jb250ZW50V2luZG93Ll91bnVzZWRIZWlnaHRWYWx1ZSA9IGhlaWdodDsgLy8gUHJldmVudCBk
ZWFkIGNvZGUgZWxpbWluYXRpb24uCiAgICAgICAgIHNlbGYuX3dyaXRlTWFyayhzdWl0ZS5uYW1l
ICsgJy4nICsgdGVzdC5uYW1lICsgJy1hc3luYy1lbmQnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW8KIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbkFzRG91YmxlTnVtYmVyKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkKTsKIAogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MpOwogCkBAIC02NjIsNiArNjYz
LDggQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVtYmVy
IiwgZnVuY3Rpb25Bc0RvdWJsZU51bWJlciwgMSk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJpc0RGR0VuYWJsZWQiLCBmdW5jdGlvbklzREZHRW5hYmxlZCwgMCk7CisKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJkcm9wQWxsTG9ja3MiLCBmdW5jdGlvbkRyb3BBbGxMb2NrcywgMSk7CiAK
ICAgICAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZv
clRlc3RpbmcoKSkgewpAQCAtMjY1Myw2ICsyNjU2LDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkFzRG91YmwKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91Ymxl
TnVtYmVyKG51bSkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RG
R0VuYWJsZWQsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKE9wdGlvbnM6OnVzZURGR0pJVCgpKSk7Cit9CisKIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2NrcywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQogewogICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBib29sIHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoY29kZUJsb2Nr
ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0
aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2Rl
Ojppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlz
YXNzZW1ibHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21T
aWduYXR1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFu
ZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpA
QCAtMjY5LDcgKzI3MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpk
dW0KIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVt
cEhlYWRlcihibG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBA
IHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQu
cHJpbnQoImJiIyIsIGJsb2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0
aW9uc0F0SGVhZCkgeworICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFk
OiBbIik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
QXRIZWFkLT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YSgiLCAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9u
cy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKG91dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAg
ICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7
CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQo
aSArIGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNv
ZGUoY3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNs
YXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01h
cCYgPSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0
ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsK
KyAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFt
JiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFw
KCkpOwogCiAgICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFu
dHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R3JhcGguaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1
YmxpYzoKIAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9p
ZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+
IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUo
KSkKKyAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGUsIHRydWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVy
ID0gV1RGOjpkYXRhRmlsZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1w
ZXI8Q29kZUJsb2NrVHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRo
aXMsIHNwZWN1bGF0aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8vIE5vIHVzZXMuCiAgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0gICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICBj
YXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2ptcDoKICAgICBjYXNlIG9wX25ld19vYmpl
Y3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgICAgICByZXR1cm47CiAKKyAgICBV
U0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQb2ludGVyKQogICAgIFVTRVMoT3BUb1RoaXMs
IHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHosIHRhcmdldFZpcnR1YWxSZWdpc3RlcikKICAg
ICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwgc3JjRHN0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5
cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0
LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1
Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQorICAgIGlmICgodGhpcy0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQogICAgICAgICBvdXQucHJpbnQo
IiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwogICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+
bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKE5ldmVySW5saW5lKSIpOwpAQCAt
MjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0K
ICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFw
KTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRoaXMtPmluc3RydWN0aW9ucygpKTsK
LSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywg
aW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01hcCk7CisgICAgQ29kZUJsb2NrQnl0
ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBn
cmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7CiB9CiAKIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06
OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNNYXApCkBAIC0yOTUsNiArMjk1LDcg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9vd25l
ckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0
KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50
ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKQorICAgICwgbV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpCiAgICAgLCBtX2NvbnN0YW50
UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMpCiAgICAgLCBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCkBA
IC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUq
IAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKIAogICAgIEFTU0VSVChz
b3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFt
ZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRlcnMgPSBvdGhlci5udW1QYXJhbWV0ZXJzKCk7
CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC04NTAs
NyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAvLyB0byB0aGUgQ29kZUJs
b2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIENvZGVC
bG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiB0aGUg
Q29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAg
ICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7CiAjZW5kaWYK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJlbW92ZSh0aGlzKTsKQEAgLTEwMzcsNyArMTAz
OSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJ
bnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBq
ZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNv
IGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4g
YXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5
KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNl
KFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1
OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAog
ICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkxP
TEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShK
SVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29u
ZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNo
YXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2
OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAogICAgICAgICBkZmdDb21t
b24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEy
MjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8g
SW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxp
bmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQg
ZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xk
IGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgot
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBA
IC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBl
KCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzog
U2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJ
Q3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAg
ICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAgIH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTUyOCw3ICsxNTM2LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAg
ICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgZGZn
Q29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYg
KzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3Vu
dGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNN
YXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbElu
Zm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmlyc3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52
YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBAIC0xNzc1LDggKzE3ODQsMTAg
QEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICBpZiAoZGZn
Q29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2Fs
bEZyYW1lIDogKmRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAgQVNT
RVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAg
ICAgICAvLyBUaGlzIHdpbGwgdHJhbnNpdGl2ZWx5IGtlZXAgdGhlIGJhc2VsaW5lIGNvZGUgYmxv
Y2sgYWxpdmUuIEl0J3MgZWFzaWVyIHRvIG5vdCB3b3JyeSB0aGF0IHdlJ3JlIHJlbHlpbmcgb24g
dGhlIExPTCBDb2RlQmxvY2sgc29tZWhvdy4KKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAg
ICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChj
b2RlQmxvY2spOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xODEwLDEyICsxODIxLDE1
IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAg
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKICAgICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0cyhsb2NrZXIsIHZpc2l0b3IpOwogICAg
IH0KICNlbmRpZgorCisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpMT0xKSVQpCisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKG1fYWx0ZXJuYXRpdmUpOwogfQogCiB2b2lkIENvZGVCbG9jazo6
c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgyMyw3ICsxODM3LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKIAog
I2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0
Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xODU5LDYgKzE4NzMsMjUgQEAgQ29kZUJsb2NrKiBDb2Rl
QmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdgogI2VuZGlmCiB9CiAKK0NvZGVCbG9jayogQ29kZUJs
b2NrOjpsb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAg
Q29kZUJsb2NrKiByZXN1bHQgPSB0aGlzOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGF1
dG8gaml0VHlwZSA9IHJlc3VsdC0+aml0VHlwZSgpOworICAgICAgICBpZiAoaml0VHlwZSA9PSBK
SVRDb2RlOjpMT0xKSVQgfHwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0
aXZlKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisg
ICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKK30KKwogQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2Vs
aW5lVmVyc2lvbigpCiB7CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE4NjcsNyArMTkwMCw3IEBAIENv
ZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogICAgICAgICByZXR1cm4gdGhp
czsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2VtZW50KCk7CiAgICAgaWYgKCFyZXN1
bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChzZWxmSklUVHlwZSkp
IHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhzZWxmSklU
VHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCBjYW4gYmUgbnVsbCBpZiB3
ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAgYW5kIHRoZSBleGVjdXRhYmxlCiAgICAgICAgICAg
ICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRzIGNvZGVCbG9ja3MgKHNlZSBFeGVjdXRhYmxlQmFz
ZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNzLAogICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQg
Y29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24gdGhlIHN0YWNrLCBhbmQgYXMgYW4gb3B0aW1pemlu
ZyBKSVQKQEAgLTE5MzEsNyArMTk2NCw3IEBAIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRs
ZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0
aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSkK
IHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNE
RkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2lu
KG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBBU1NFUlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2lu
YWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBDb2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29k
ZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKQEAgLTIyMzEsNTEgKzIyNjQsNTUgQEAgdm9pZCBD
b2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQogICAgIERlZmVyR0NGb3JBV2hpbGUg
ZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRvIGFjY29tcGxpc2ggdHdv
IHRoaW5ncyBoZXJlOgotICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2Nr
IGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0CisgICAg
Ly8gMSkgSWYgd2UncmUgREZHL0ZUTCwgbWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sg
aXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKICAgICAv
LyAgICB3ZSBzaG91bGQgT1NSIGV4aXQgYXQgdGhlIHRvcCBvZiB0aGUgbmV4dCBieXRlY29kZSBp
bnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0dXJuLgogICAgIC8vIDIpIE1ha2Ugc3VyZSB0aGF0IGlm
IHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1dGFibGUsIHRoZW4gd2Ugc2hvdWxkbid0IGNhbGwgdGhp
cyBDb2RlQmxvY2suCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0
VHlwZSgpKSkgewogICAgICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNocG9p
bnRzKCk7Ci0gICAgCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09s
ZEFnZSkgewotICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gaml0
Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShjb21waWxhdGlvbikpCi0gICAgICAgICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25S
ZWFzb24ocmVhc29uLCBkZXRhaWwpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBhY2NvbXBs
aXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0
IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgotICAgICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmludmFsaWRhdGUoKSkgewotICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGlu
dmFsaWRhdGVkLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVu
dCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtl
ZChvd25lckV4ZWN1dGFibGUoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBp
ZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKSB7CisgICAgICAgICAg
ICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21t
b24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGls
YXRpb24pKQorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihy
ZWFzb24sIGRldGFpbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgYWNjb21w
bGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBp
dCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KKyAgICAgICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aW52YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMg
IT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIXZt
LmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmIChERkc6
OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGludmFs
aWRhdGUgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIAog
ICAgIC8vIENvdW50IHRoZSByZW9wdGltaXphdGlvbiBpZiB0aGF0J3Mgd2hhdCB0aGUgdXNlciB3
YW50ZWQuCiAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlvbikgewogICAgICAgICAv
LyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRlcm5hdGl2ZSgpLgogICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgICAg
IGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGltaXphdGlvbigpOworI2lmIEVOQUJM
RShERkdfSklUKQogICAgICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgY291bnQgcmVvcHRpbWl6YXRpb24gZm9yICIsICp0
aGlzLCAiXG4iKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICBpZiAodGhpcyAhPSByZXBsYWNl
bWVudCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSB3ZXJlIG5ldmVyIHRoZSBl
bnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4gZm9yIE9TUiBlbnRyeSBjb2RlCiAgICAgICAgIC8v
IGJsb2Nrcy4KKyAgICAgICAgLy8gT3IsIHdlJ3JlIGFuIExPTCBDb2RlQmxvY2sgYW5kIHdlcmUg
YWxyZWFkeSBqZXR0aXNvbmVkLgogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGFs
dGVybmF0aXZlKCkpCiAgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYg
cmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcykKKyAgICBpZiAoSklUQ29k
ZTo6aXNERkdPckZUTChqaXRUeXBlKCkpICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25E
dWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQog
ICAgICAgICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiAKICAgICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2Fu
dCB0byBpbnN0YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFibGUKICAgICAvLyBiZWNhdXNlIHRo
YXQgd291bGQgYWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgpAQCAtMjMw
Niw3ICsyMzQzLDcgQEAgSlNHbG9iYWxPYmplY3QqIENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rgog
ICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7
CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3Qo
KTsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7CiB9CiAKIGNsYXNzIFJlY3Vyc2lvbkNoZWNrRnVuY3RvciB7
CkBAIC0yMzY1LDcgKzI0MDIsNyBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxs
KENhbGxGCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWhhc0Jhc2VsaW5lSklU
UHJvZmlsaW5nKCkpCisgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmICghREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMpKQpA
QCAtMjM5MCw3ICsyNDI3LDcgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChD
YWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENv
ZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CiAgICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VDYWxsTGluaygpLCAiICAgIENsZWFyaW5nIFNBQkkgYmNhdXNlIGNhbGxlciB3
YXMgYWxyZWFkeSBvcHRpbWl6ZWQuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI0ODMsMTIgKzI1
MjAsMTQgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVzKAogewogICAg
IEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKICAgICBpZiAoT3B0
aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkp
CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0
aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAgICAgICAgIHJldHVybiAobV9oYXNC
ZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cjsKICAgICB9CiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50
KCk7Ci0gICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXI7CisgICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNERkdPckZU
TChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyOwogfQogCiBpbnQzMl90IENvZGVCbG9jazo6Y29kZVR5cGVUaHJlc2hvbGRNdWx0
aXBsaWVyKCkgY29uc3QKQEAgLTI2NDEsNyArMjY4MCw3IEBAIGF1dG8gQ29kZUJsb2NrOjp1cGRh
dGVPU1JFeGl0Q291bnRlckFuZEMKIAogICAgIGJvb2wgZGlkVHJ5VG9FbnRlckluTG9vcCA9IGZh
bHNlOwogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1f
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxs
RnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkg
ewotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkgeworICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+ZGlk
VHJ5VG9FbnRlckluTG9vcCgpKSB7CiAgICAgICAgICAgICBkaWRUcnlUb0VudGVySW5Mb29wID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzA5LDcgKzI3NDgsNyBA
QCB2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0CiB2b2lkIENvZGVCbG9j
azo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7Ci0g
ICAgaWYgKHR5cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICBpZiAodHlwZSAhPSBK
SVRUeXBlOjpCYXNlbGluZUpJVCAmJiB0eXBlICE9IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAg
ICBkYXRhTG9nTG4oKnRoaXMsICI6IGV4cGVjdGVkIHRvIGhhdmUgYmFzZWxpbmUgY29kZSBidXQg
aGF2ZSAiLCB0eXBlKTsKICAgICAgICAgQ1JBU0hfV0lUSF9JTkZPKGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGppdENvZGUoKS5nZXQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpKTsKICAg
ICB9CkBAIC0yNzI3LDcgKzI3NjYsNyBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkCiAgICAgCiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnQgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNl
bWVudC0+aml0VHlwZSgpKSk7CiAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CkBAIC0yNzU2LDcgKzI3
OTUsOCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiB1
aW50MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRl
c2lyZWRUaHJlc2hvbGQpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsKKyAgICAvL0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSk7IC8vIE9PUFM6IFdlIGNhbGwgdGhpcyBmcm9tIHRoZSBMT0wgY29tcGlsZXIgdGhyZWFk
IGJlZm9yZSBpbnN0YWxsLgorCiAgICAgLy8gQ29tcHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3
ZSBkb24ndCBzYXR1cmF0ZS4gVGhpcyBpcyBjYWxsZWQgaW5mcmVxdWVudGx5CiAgICAgLy8gZW5v
dWdoIHRoYXQgdGhpcyBsb29wIHdvbid0IGh1cnQgdXMuCiAgICAgdW5zaWduZWQgcmVzdWx0ID0g
ZGVzaXJlZFRocmVzaG9sZDsKQEAgLTI4MzYsNyArMjg3Niw3IEBAIERGRzo6Q29kZU9yaWdpblBv
b2wmIENvZGVCbG9jazo6Y29kZU9yaWcKIAogc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJ
ZGVudGlmaWVycygpIGNvbnN0CiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCkt
PmRmZ0lkZW50aWZpZXJzLnNpemUoKTsKQEAgLTI4NDcsNyArMjg4Nyw3IEBAIGNvbnN0IElkZW50
aWZpZXImIENvZGVCbG9jazo6aWRlbnRpZmllcigKICAgICBzaXplX3QgdW5saW5rZWRJZGVudGlm
aWVycyA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQogICAgICAg
ICByZXR1cm4gbV91bmxpbmtlZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9u
KCktPmRmZ0lkZW50aWZpZXJzW2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107CiB9CiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkBAIC0yOTEyLDE4ICsyOTUyLDE5IEBAIHZvaWQgQ29kZUJs
b2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9ucygpCiAgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9u
cygpOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQorYm9vbCBDb2Rl
QmxvY2s6OnNob3VsZE9wdGltaXplVG9ERkdOb3coKQogewogICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgIiwgKnRoaXMsICIuLi4i
KTsKIAogICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRpb25zOjptYXhp
bXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAg
dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2sgPSBiYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgYmFzZWxpbmVDb2RlQmxvY2stPnVw
ZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVz
SW5Qcm9maWxlczsKLSAgICB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50
TGl2ZW5lc3MobnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzKTsKKyAgICBiYXNlbGluZUNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQ
cm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2dGKApAQCAtMjk0OCw3ICsyOTg5
LDggQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICNpZiBFTkFCTEUoREZH
X0pJVCkKIHZvaWQgQ29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkKIHsKLSAgICBB
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIC8vIE9PUFMK
KyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBBU1NFUlQo
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CiAgICAg
CiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsKQEAgLTMwNTAs
NiArMzA5Miw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50
Rm9yKHRoaXMpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTMyMjYsMTQgKzMyNjksMTQg
QEAgdm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbgogewogICAgIG1fbnVt
QnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7CiAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2lu
dHMpOwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBp
ZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb0RlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKIHZvaWQgQ29kZUJs
b2NrOjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGUgbW9kZSkKIHsKICAg
ICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7Ci0gICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5h
YmxlZCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAobW9k
ZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgp
KSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlclN0ZXBw
aW5nKTsKIH0KIApAQCAtMzI5Niw3ICszMzM5LDcgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogCiBib29sIENvZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEFyaXRo
RmFzdENhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIGlmICghaGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICBpZiAoIWhhc0Jhc2VsaW5lT3JMT0xQcm9maWxpbmco
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmls
ZSA9IGJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAg
ICAgaWYgKCFwcm9maWxlKQpAQCAtMzQyMSw5ICszNDY0LDkgQEAgT3B0aW9uYWw8Qnl0ZWNvZGVJ
bmRleD4gQ29kZUJsb2NrOjpieXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5
dGVjb2RlSW5kZXg7CiAgICAgSklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOwotICAg
IGlmIChqaXRUeXBlID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0
Y29kZUluZGV4KGppdFR5cGUpKQogICAgICAgICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJbmRl
eC5ieXRlY29kZUluZGV4KCk7Ci0gICAgZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpERkdK
SVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKKyAgICBlbHNlIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxs
U2l0ZUluZGV4KSk7CiAgICAgICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxs
U2l0ZUluZGV4KTsKQEAgLTM0NjYsNyArMzUwOSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0
YWxsZWRWTVRyYXBCcmVha3AKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJv
bSBhIHNpZ25hbCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAgICAgLy8gY2FyZWZ1bCB0byBub3Qg
Y2FsbCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFuZGxlciBzYWZlLCBlLmcuCiAgICAg
Ly8gd2Ugc2hvdWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBtX2ppdENvZGUuCi0gICAg
aWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENv
ZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5oYXNJbnN0YWxsZWRWTVRyYXBzQnJlYWtwb2lu
dHMoKTsKICNlbHNlCkBAIC0zNDgwLDcgKzM1MjMsNyBAQCBib29sIENvZGVCbG9jazo6aW5zdGFs
bFZNVHJhcEJyZWFrcG9pbnRzCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZy
b20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90
IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAg
IC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAg
IGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBh
dXRvJiBjb21tb25EYXRhID0gKm1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgY29tbW9uRGF0
YS5pbnN0YWxsVk1UcmFwQnJlYWtwb2ludHModGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
Niw2ICsxOTYsNyBAQCBwdWJsaWM6CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0
dGlzb24oKTsgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBsb2xPckJhc2Vs
aW5lQWx0ZXJuYXRpdmUoKTsKICAgICAKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKQEAg
LTM0Nyw3ICszNDgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNl
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghaGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmls
aW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVBy
b2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKQEAgLTM1
Niw3ICszNTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghaGFzQmFzZWxpbmVK
SVRQcm9maWxpbmcoKSkKKyAgICAgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVD
b3VudEZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKQEAgLTQzNiw5ICs0
MzcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGJv
b2wgaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSBjb25zdAorICAgIGJvb2wgaGFzQmFzZWxpbmVP
ckxPTFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7
CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHR5cGUgPT0g
SklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAtNTExLDYg
KzUxMyw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0
aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUlu
ZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVl
UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0
IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hB
cnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3ICs1NDIsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJlZW4gc29t
ZSBpbmxpbmluZy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICAgICAgcmV0dXJu
IEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAogICAgIGJv
b2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQpAQCAtODAzLDcgKzgwNiw3
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4g
MDsgfQogI2VuZGlmCiAKLSAgICBib29sIHNob3VsZE9wdGltaXplTm93KCk7CisgICAgYm9vbCBz
aG91bGRPcHRpbWl6ZVRvREZHTm93KCk7CiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9ucygpOwogICAgIHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogICAg
IHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1
ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwg
ZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJl
RGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVj
a2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2Zp
bGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCB1bnNpZ25lZCBDb2RlT3JpZ2lu
OjphcHByb3hpbWF0ZUhhc2goSW5sCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgPT0gdGVy
bWluYWwpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKLSAgICAgICAgcmVz
dWx0ICs9IFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChpbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU0Nl
bGwqPjo6aGFzaChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkp
OwogICAgICAgICAKICAgICAgICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0
Q2FsbGVyOwogICAgIH0KQEAgLTEyMSw3ICsxMjEsNyBAQCBDb2RlQmxvY2sqIENvZGVPcmlnaW46
OmNvZGVPcmlnaW5Pd25lcigpCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gdGhpcy0+aW5s
aW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpOworICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpOwogfQogCiBpbnQgQ29kZU9yaWdpbjo6c3RhY2tPZmZzZXQoKSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJ
VFR5cGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBA
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFeGkKICAgICBjYXNlIEV4aXRG
cm9tQW55dGhpbmc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbUFueXRoaW5nIik7CiAgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEV4aXRGcm9tTE9MOgorICAgICAgICBvdXQucHJpbnQoIkZyb21M
T0wiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdEZyb21ERkc6CiAgICAgICAgIG91
dC5wcmludCgiRnJvbURGRyIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gRXhp
dGluZ0pJVFR5cGUgOiB1aW50OF90IHsKICAgICBFeGl0RnJvbUFueXRoaW5nLAorICAgIEV4aXRG
cm9tTE9MLAogICAgIEV4aXRGcm9tREZHLAogICAgIEV4aXRGcm9tRlRMCiB9OwpAQCAtMzgsNiAr
MzksOCBAQCBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiBpbmxpbmUgRXhpdGluZ0pJ
VFR5cGUgZXhpdGluZ0pJVFR5cGVGb3IoSklUVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gRXhpdEZyb21M
T0w7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiBFeGl0RnJvbURG
RzsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAg
IH0KICAgICAKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJndW1lbnRzV2l0aEZpeHVwOyAv
LyBJbmNsdWRlcyAndGhpcycgYW5kIGFyaXR5IGZpeHVwcy4KLSAgICBXcml0ZUJhcnJpZXI8Q29k
ZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKKyAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBs
b2xPckJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCiAg
ICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90IGlu
Y2x1ZGUgZml4dXBzLgpAQCAtMjMxLDIwICsyMzEsMjEgQEAgc3RydWN0IElubGluZUNhbGxGcmFt
ZSB7CiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3Rh
Y2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3Rh
Y2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgp
OyB9CiAKLSAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0luU3RyaWN0Q29udGV4dCgpOyB9Cisg
ICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGxvbE9yQmFzZWxpbmVD
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0luU3RyaWN0Q29udGV4dCgpOyB9CiAKICAg
ICB2b2lkIGR1bXBCcmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oUHJpbnRTdHJlYW0mKSBjb25zdDsK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogCiAgICAgTUFLRV9QUklOVF9N
RVRIT0QoSW5saW5lQ2FsbEZyYW1lLCBkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uLCBicmll
ZkZ1bmN0aW9uSW5mb3JtYXRpb24pOwotCiB9OwogCiBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVDYWxsRnJhbWUpOwotICAgIHJldHVy
biBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgIGlmIChDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBA
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5k
c0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRz
IHsKIHB1YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJh
bmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3Vt
ZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6
ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAh
IXRyYWNrQ2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAo
IVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAg
bV92YWx1ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBU
JiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50
cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMs
IGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1
bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVt
Q29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVt
QXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3co
bnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJh
Y2tDYWxsZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQog
ICAgIApAQCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhP
cGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlh
bFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJn
dW1lbnRzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkK
KyAgICAgICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAg
IHsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVl
cy5maWxsKGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAg
ICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50
czsgfQogICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9j
YWxzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAg
c2l6ZV90IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6
ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNv
bnN0YW50cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0g
dHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+Cisg
ICAgc2l6ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlcy5zaXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAg
ICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsK
KyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5k
ZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6
ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
ZHggPCBudW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRz
KCkgKyBpZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7Cisg
ICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlk
eDsKKyAgICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1t0bXBJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBl
IGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wg
Zm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxl
ZT4+CisgICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAg
ICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3Qg
aWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZU
eXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgo
aWR4KV07IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92
YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9
CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90
IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSAr
IHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mVG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXpl
OwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAg
ICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMu
Z3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkg
KyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUg
KyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChl
bnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFs
aXphdGlvbikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5k
ZXgoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29u
c3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2Fs
KCkpOwogICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7
CiAgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0z
MzgsNiArMzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2Nh
bHMoKTsKICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0z
NjQsOSArNDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwg
bnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsK
LSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFy
Z3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJh
Y2tDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkp
OwogICAgIH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHBy
aXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBh
cmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBh
cmUgdG1wcy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9u
dW1Db25zdGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0
b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAg
dW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMg
eyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBA
IC01NywxMCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0
cgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIs
IHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAg
fQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgImNhbGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBP
cGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudElu
ZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiAr
ODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgs
ICI6IiwgdG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhj
ZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSA9IGppdC0+Y29kZUJsb2NrKCktPmppdENvZGUoKS0+bGl2
ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoaml0LT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOwogICAgICAgICBtX25lZWRzVG9SZXN0
b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24gPSBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgPiAwOwogICAgICAg
ICBpZiAobV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKQotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCkt
PmppdFR5cGUoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdP
ckZUTChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdp
c3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhj
ZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwogICAg
ICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKQEAgLTcxMCw3ICs3MTAsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGlj
QWNjZXNzCiAgICAgICAgIC8vIFdlIHNldCB0aGVzZSB0byBpbmRpY2F0ZSB0byB0aGUgc3R1YiB0
byByZW1vdmUgaXRzZWxmIGZyb20gdGhlIENvZGVCbG9jaydzCiAgICAgICAgIC8vIGV4Y2VwdGlv
biBoYW5kbGVyIHRhYmxlIHdoZW4gaXQgaXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIGNvZGVCbG9j
a1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMgPSBjb2RlQmxvY2s7Ci0gICAgICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVy
cy0+aml0VHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVC
bG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOwogICAgICAgICBjYWxs
U2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcgPSBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhj
ZXB0aW9uSGFuZGxpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3Bl
Y3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9
CiAKK2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlw
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVE
b3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJP
bmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVj
dCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRh
dGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRo
aXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUu
CiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6
CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQp
OwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBp
bnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OwpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7
IH0KICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xv
Y2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Cisg
ICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1
bWVudChtX3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNI
ZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVh
bFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9j
YWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTEx
Nyw2ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50
IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFu
ZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRo
aXNBcmd1bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChp
bnQgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50
SW5kZXgpIHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRl
eDsgfQogCiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBA
QCBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50
KSArIG9mZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
Rm9yQ29uc3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0
LDcgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFy
aWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFs
dWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0
aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBB
YnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNB
dEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6
OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwogICAgICAgICB9OwogCi0gICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJv
bUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUoKSkpOwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgQ29kZU9yaWdpbihieXRlY29k
ZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUoKSkpOwogICAgICAgICBpZiAocHJlZGljdGlvbiAhPSBT
cGVjTm9uZSkKICAgICAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwogCkBAIC05MzksNyArOTM5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdoaWxlIChzdGFjay0+bV9pbmxpbmVDYWxsRnJh
bWUgIT0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgICAgICAgICAgc3Rh
Y2sgPSBzdGFjay0+bV9jYWxsZXI7CiAKLSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVByb2Zp
bGVQcmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5tX3By
b2ZpbGVkQmxvY2ssICpjb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVBy
b2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5t
X3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgKmNvZGVPcmlnaW4pOwogICAg
ICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTk4Miw4ICs5ODIsOSBAQCBwcml2YXRlOgog
CiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUmIHByb2ZpbGUsIEFycmF5
OjpBY3Rpb24gYWN0aW9uKQogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHBy
b2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrKTsKICAg
ICAgICAgYm9vbCBtYWtlU2FmZSA9IHByb2ZpbGUub3V0T2ZCb3VuZHMobG9ja2VyKTsKICAgICAg
ICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGxvY2tlciwgJnByb2ZpbGUsIGFjdGlv
biwgbWFrZVNhZmUpOwogICAgIH0KQEAgLTE2NjgsNyArMTY2OSw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICBjb25zdCBJbnN0cnVjdGlvbiogc2F2ZWRD
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKICAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lh
bGl6YXRpb25LaW5kRm9yKGtpbmQpOwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
ZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0
aW9uS2luZCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVj
dXRhYmxlKCktPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsK
ICAgICBpbnNlcnRDaGVja3MoY29kZUJsb2NrKTsKIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVz
aCBjb25zdGFudHMhCkBAIC02ODczLDcgKzY4NzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBIYXNoU2V0PHVuc2lnbmVkLCBXVEY6Oklu
dEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2ln
bmVkPj4gc2VlbkFyZ3VtZW50czsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPm1f
bG9jayk7CiAKICAgICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwpAQCAtODM0NSwyMyArODM0
NiwyOCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgewog
ICAgICAgICBtX2V4aXRQcm9maWxlLmluaXRpYWxpemUobV9wcm9maWxlZEJsb2NrLT51bmxpbmtl
ZENvZGVCbG9jaygpKTsKIAotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9sYXp5T3BlcmFuZHMuaW5pdGlhbGl6ZShs
b2NrZXIsIG1fcHJvZmlsZWRCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKGxvY2tlcikp
OworICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiBjb2RlQmxvY2sgPSBtX3Byb2ZpbGVkQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0
aWFsaXplKGxvY2tlciwgY29kZUJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2Vy
KSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvIHRoaXMgd2hpbGUgaG9s
ZGluZyB0aGUgbG9jayBiZWNhdXNlIHdlIHdhbnQgdG8gZW5jb3VyYWdlIFN0cnVjdHVyZVN0dWJJ
bmZvJ3MKICAgICAgICAgLy8gdG8gYmUgcG90ZW50aWFsbHkgYWRkZWQgdG8gb3BlcmF0aW9ucyBh
bmQgYmVjYXVzZSB0aGUgcHJvZmlsZWQgYmxvY2sgY291bGQgYmUgaW4gdGhlCiAgICAgICAgIC8v
IG1pZGRsZSBvZiBMTEludC0+SklUIHRpZXItdXAgaW4gd2hpY2ggY2FzZSB3ZSB3b3VsZCBiZSBh
ZGRpbmcgdGhlIGluZm8ncyByaWdodCBub3cuCi0gICAgICAgIGlmIChtX3Byb2ZpbGVkQmxvY2st
Pmhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2st
PmdldElDU3RhdHVzTWFwKGxvY2tlciwgbV9iYXNlbGluZU1hcCk7CisgICAgICAgIGlmIChtX3By
b2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lT3JMT0xQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIG1f
cHJvZmlsZWRCbG9jay0+Z2V0SUNTdGF0dXNNYXAobV9iYXNlbGluZU1hcCk7CiAgICAgfQogICAg
IAotICAgIENvZGVCbG9jayogb3B0aW1pemVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxh
Y2VtZW50KCk7Ci0gICAgbV9vcHRpbWl6ZWRDb250ZXh0Lm9wdGltaXplZENvZGVCbG9jayA9IG9w
dGltaXplZEJsb2NrOwotICAgIGlmIChPcHRpb25zOjp1c2VQb2x5dmFyaWFudERldmlydHVhbGl6
YXRpb24oKSAmJiBvcHRpbWl6ZWRCbG9jaykgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG9wdGltaXplZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBvcHRpbWl6ZWRCbG9jay0+
Z2V0SUNTdGF0dXNNYXAobG9ja2VyLCBtX29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICB7Cisg
ICAgICAgIENvZGVCbG9jayogb3B0aW1pemVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxh
Y2VtZW50KCk7CisgICAgICAgIG1fb3B0aW1pemVkQ29udGV4dC5vcHRpbWl6ZWRDb2RlQmxvY2sg
PSBvcHRpbWl6ZWRCbG9jazsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVBvbHl2YXJpYW50RGV2
aXJ0dWFsaXphdGlvbigpICYmIG9wdGltaXplZEJsb2NrICYmIEpJVENvZGU6OmlzSGlnaGVyVGll
cihvcHRpbWl6ZWRCbG9jay0+aml0VHlwZSgpLCBtX3Byb2ZpbGVkQmxvY2stPmppdFR5cGUoKSkp
IHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIob3B0aW1pemVkQmxvY2st
Pm1fbG9jayk7CisgICAgICAgICAgICBvcHRpbWl6ZWRCbG9jay0+Z2V0SUNTdGF0dXNNYXAobG9j
a2VyLCBtX29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICAgICAgfQorICAgICAgICBieXRlQ29k
ZVBhcnNlci0+bV9pY0NvbnRleHRTdGFjay5hcHBlbmQoJm1fb3B0aW1pemVkQ29udGV4dCk7CiAg
ICAgfQotICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2ljQ29udGV4dFN0YWNrLmFwcGVuZCgmbV9vcHRp
bWl6ZWRDb250ZXh0KTsKICAgICAKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNX
aXRoRml4dXAgPSBzdGQ6Om1heDxpbnQ+KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAKQEAgLTgzNzUsNyArODM4MSw3IEBAIEJ5dGVDb2Rl
UGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKIAogICAgICAgICAvLyBUaGUgb3duZXIg
aXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBhIGJhcnJpZXIg
b24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgotICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRlQmFycmllcihj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIocHJvZmlsZWRCbG9jayk7
IC8vIE9PUFM6IEFzc2VydCBpdCdzIGEgTE9MLCBCYXNlbGluZSwgb3IgTExJbnQgQ0IuCiAgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lubGluZUNh
bGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBt
X2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIENvbW1vbkRhdGE6
OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZl
cmVuY2VzLmNoZWNrKHJlY292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGlu
bGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisgICAgICAgICAgICBpZiAo
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNl
bGluZUNvZGVCbG9jay5nZXQoKSkKICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5j
aGVjayhiYXNlbGluZUNvZGVCbG9jayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3
OCw3ICsxNjc4LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aAog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZp
bml0ZWx5IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQogICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudE5vZGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCkgPT0gYXJndW1lbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkgewotICAgICAgICAgICAg
ICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2sgPSBwcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmls
ZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC0xNjg2LDEyICsxNjg2LDEyIEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3Jh
cGg6Om1ldGgKIAogICAgICAgICAvLyBjdXJyZW50Tm9kZSBpcyBudWxsIHdoZW4gd2UncmUgZG9p
bmcgc3BlY3VsYXRpb24gY2hlY2tzIGZvciBjaGVja0FyZ3VtZW50VHlwZXMoKS4KICAgICAgICAg
aWYgKCFjdXJyZW50Tm9kZSB8fCBub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gY3VycmVudE5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyB8fCAhY3VycmVudE5vZGUtPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
ID0gcHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogICAgICAg
ICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBw
cm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5k
KCkpKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzAwLDcgKzE3MDAsNyBAQCBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRoCiAgICAgICAgICAgICBpZiAobm9kZS0+aGFz
SGVhcFByZWRpY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxvY2st
PnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKSk7CiAKLSAgICAgICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT5oYXNCYXNlbGlu
ZUpJVFByb2ZpbGluZygpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZWRCbG9jay0+aGFzQmFz
ZWxpbmVPckxPTFByb2ZpbGluZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEJpbmFyeUFyaXRo
UHJvZmlsZSogcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0
ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBpZiAoVW5hcnlB
cml0aFByb2ZpbGUqIHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
NDgxLDcgKzQ4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpOworICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJh
c2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICB9CiAgICAgCiAgICAgU2Ny
aXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2lu
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQKIFNVUFBSRVNTX0FTQU4KIHZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdP
ckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgQVNTRVJU
KCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgaGFu
ZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICAgICAgICAgIGppdC5icmFuY2hU
ZXN0OCgKICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sCiAgICAgICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoCi0gICAgICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLT5hZGRyZXNzT2ZEaWRUcnlUb0VudGVySW5Mb29wKCkpKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCktPmFkZHJlc3NPZkRpZFRyeVRvRW50ZXJJbkxvb3AoKSkpKTsKICAgICB9CiAgICAgCiAg
ICAgaml0Lm1vdmUoCkBAIC0zODQsOCArMzg0LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoVk0mIHZtLCBDQ2FsbAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAgIGZv
ciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykg
ewogICAgICAgICAgICAgaml0Lm1vdmUoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKAotICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmJh
c2VsaW5lQ29kZUJsb2NrLmdldCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tG
b3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CiAgICAgICAgICAgICBvc3JXcml0ZUJhcnJpZXIodm0sIGppdCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA0Myw3ICsyMDQzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkNyZWF0ZQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGNvZGVCbG9jayA9
IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKICAgICBlbHNl
CiAgICAgICAgIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgCkBAIC0z
NjA1LDcgKzM2MDUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dl
CiAgICAgCiAgICAgYm9vbCBkaWRUcnlUb0VudGVySW50b0lubGluZWRMb29wcyA9IGZhbHNlOwog
ICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0LT5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1l
ID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRv
RW50ZXJJbkxvb3AoKSkgewogICAgICAgICAgICAgZGlkVHJ5VG9FbnRlckludG9JbmxpbmVkTG9v
cHMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ0LDggKzY0
NCw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE4KICAgICAgICAg
ICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQoY29uc3RhbnQuZ2V0KCkpOwogCiAgICAgICAg
ICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICptX2lubGluZUNhbGxGcmFtZXMpIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGlubGluZUNh
bGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VS
VChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOworICAgICAg
ICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFz
ZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBD
aGVjayB0aGF0IGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgd2UgaGF2ZSBhbnl3aGVyZSBpbiB0
aGUgSklUQ29kZSBhcmUgYWxzbwpAQCAtNjkzLDggKzY5Myw4IEBAIHZvaWQgUGxhbjo6Y2hlY2tM
aXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4KIAogICAgIGlmIChtX2lubGluZUNhbGxGcmFtZXMpIHsK
ICAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqbV9pbmxpbmVDYWxsRnJhbWVz
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGlubGluZUNh
bGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGlu
bGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRHZXRBcmd1bWVudFN0YXIKIE1hY3JvQXNzZW1ibGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpl
bWl0T1NSRXhpdEZ1enpDaGVjaygpCiB7CiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFeGl0RnV6
eigpCi0gICAgICAgIHx8ICFjYW5Vc2VPU1JFeGl0RnV6emluZyhtX2ppdC5ncmFwaCgpLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG1fb3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAgfHwgIWNhblVzZU9T
UkV4aXRGdXp6aW5nKG1faml0LmdyYXBoKCkucHJvZmlsZWRDb2RlQmxvY2tGb3IobV9vcmlnaW4u
c2VtYW50aWMpKQogICAgICAgICB8fCAhZG9PU1JFeGl0RnV6emluZygpKQogICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXAoKTsKICAgICAKQEAgLTQ0MjgsOSArNDQyOCw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBib29sIG5lZWRzU2Ny
YXRjaEZQUlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkucHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
ICAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZUFkZDsKQEAgLTQ1MjAsOSArNDUyMCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZVN1YihOb2QKICAgICBib29sIG5lZWRzU2NyYXRjaEZQUlJlZyA9IHRydWU7CiAjZW5k
aWYKIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jayA9IG1faml0LmdyYXBoKCkucHJvZmlsZWRDb2RlQmxvY2tGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgg
PSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJv
ZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxl
Rm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2ppdC5jb2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAgICAgYXV0byBu
b25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKQEAgLTUxMTMsOSArNTEx
Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbmNPckRlYyhOb2QKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZShOb2RlKiBub2RlKQogewogICAgIC8vIEZJ
WE1FOiBhZGQgYSBmYXN0IHBhdGgsIGF0IGxlYXN0IGZvciBCaWdJbnQzMiwgYnV0IHByb2JhYmx5
IGFsc28gZm9yIEhlYXBCaWdJbnQgaGVyZS4KLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgp
LnByb2ZpbGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5k
ZXgoKTsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2Rl
QmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
KyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2st
PnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBK
SVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTmVnSUMoYXJpdGhQcm9m
aWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRl
T3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0
aE5lZ2F0ZTsKQEAgLTUzNjksOSArNTM2OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bChOb2QKICAgICBib29sIG5lZWRzU2NyYXRjaEZQUlJlZyA9IHRydWU7CiAjZW5k
aWYKIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jayA9IG1faml0LmdyYXBoKCkucHJvZmlsZWRDb2RlQmxvY2tGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgg
PSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJv
ZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxl
Rm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBKSVRNdWxJQyogbXVsSUMgPSBt
X2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBu
b25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw2IEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKIHsKICAgICBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkRGR0pJVCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAg
ICAgdW5zaWduZWQgbnVtVG1wczsKQEAgLTE1NSw2ICsxNTQsNyBAQCB1bnNpZ25lZCBWYXJpYWJs
ZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKICAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+
bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7CiAgICAgfSBlbHNlIHsKKyAg
ICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCk7CiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKTsKICAgICAgICAgbnVtVG1wcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1U
bXBzKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcg
QEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCksIDAsIDApOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMg
PSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAs
IDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZs
dXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKGkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI2ICs1
MiwxNyBAQCB2b2lkIENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGCiBib29sIENh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFT
U0VSVChjb2RlQmxvY2soKSk7Ci0gICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7
Ci0gICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgotICAgIGNhc2UgSklUVHlwZTo6
QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgSklUVHlwZTo6Tm9u
ZToKLSAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpJVENvZGU6OmNhbGxTaXRl
Qml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2soKS0+aml0VHlwZSgpKTsKIH0KIAogYm9vbCBD
YWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGNvZGVCbG9jaygpKTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkp
IHsKKyAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgY2FzZSBKSVRUeXBl
OjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgIGNhc2UgSklUVHlwZTo6RlRM
SklUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5LDggKzcwLDYgQEAgYm9vbCBDYWxsRnJh
bWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaQogICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxU
aHVuazoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTYsMTAgKzQ1NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRp
YyBIYW5kbGVySW5mbyogZmluZEV4CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZpc2l0
b3ItPmNhbGxGcmFtZSgpOwogICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleDsKLSAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAg
ICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCku
Yml0cygpOwotICAgIGVsc2UKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29k
ZUluZGV4KGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgZXhjZXB0aW9uSGFuZGxlcklu
ZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCk7CisgICAgZWxzZQorICAg
ICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5i
aXRzKCk7CiAKICAgICByZXR1cm4gY29kZUJsb2NrLT5oYW5kbGVyRm9ySW5kZXgoZXhjZXB0aW9u
SGFuZGxlckluZGV4LCByZXF1aXJlZEhhbmRsZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6
OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9
IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CisgICAgICAgIG1fZnJh
bWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCk7CiAgICAgICAgIG1fZnJhbWUubV9ieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlRm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgRXhlY3V0YWJsZUJhc2UqIEFzc2VtYmx5SGVscGVyczo6
ZXhlY3V0YQogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7Ci0gICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOworICAgIHJldHVybiBpbmxpbmVD
YWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogfQog
CiBBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkZhc3RUeXBl
ZEFycmF5KEdQUlJlZyBiYXNlR1BSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTggQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2lu
Y2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJCeXRlY29kZVVzZURlZi5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1
ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1
bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNs
dWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5N
YXAuaCIKQEAgLTQ5LDYgKzU1LDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3Qu
aD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7
CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAsNiAr
NjgsODkxIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExE
RkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJ
VDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVk
VHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9
IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0
LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9
IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHBy
b2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOwor
ICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93
IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7
CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgp
KQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9u
cy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJp
dGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENv
bnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRv
cl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVy
YXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFk
YXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0
ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9w
cmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5t
X3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+
KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50
ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1i
ZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJp
YzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAg
ICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBh
dXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQz
Mk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNC
eXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7
CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdo
dCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0Rv
dWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51
bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJs
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8
fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVy
ZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2Rl
TnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1
dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAg
ICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFBy
b2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJ
bnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJv
b2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEh
KGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5h
TikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAg
ICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2Rl
RG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAg
ICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0
aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
aWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgICAgICBpZiAo
ISEobGVmdCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVjdCkpIHx8ICEhKHJpZ2h0ICYgKFNwZWNC
aWdJbnQgfCBTcGVjT2JqZWN0KSkpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCaWdJ
bnQ7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICB9
OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9zdWIpCisgICAg
ICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICAgICAgZWxzZSBp
ZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgaGFuZGxl
KGluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+
YXM8T3BEaXY+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW9k
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKwor
ICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRlciBpZiB3ZSBwcm9m
aWxlIGV4aXRzIG9uICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0lu
dDMyT25seSB8IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IG9wX3Vuc2lnbmVkOgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21lIGtpbmQgb2YgZXhp
dCBzaXRlIGZlZWRiYWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0ludDMyT25seSB8IFNw
ZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF91cnNoaWZ0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ug
b3BfZGVjOgorICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJv
ZmlsZSYgcHJvZmlsZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBl
Rm9yKHNyYyk7CisgICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygp
ID8gU3BlY0FueUludEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVO
YU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAg
ICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRl
Y29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNw
ZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3Ny
Y0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRl
Y29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9u
ZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BO
ZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1f
b3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAg
ICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91Ymxl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsK
KyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAg
IGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0byBy
aWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVmdCAm
JiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNG
dWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29s
ZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOwor
ICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNo
aWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+
KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+
KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAg
ICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBlICYg
U3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1p
dGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9w
X3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJv
bCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAg
ICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRv
bid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNv
IHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMg
Y2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0
aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsm
XSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAg
ICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAg
ICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29k
ZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJh
eV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlC
dWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdB
cnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2Jq
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5
cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3Jl
YXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhp
cz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9i
eV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCks
IFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLCBTcGVjU3Ry
aW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4o
KSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5j
RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigp
LCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9z
Y29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3Bl
PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0
ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
LCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVy
dHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1
Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5T
dHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwg
U3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCksIFNwZWNT
dHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4
X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3Ry
aW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVz
dF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExl
bmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVz
b2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbElu
RXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+
KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNT
Y29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9u
ZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxs
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNl
T2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJh
dG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2Vu
ZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
c3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9s
ZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90
b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+
KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+
KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3Bl
Y3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxT
cGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlw
ZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVs
QnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lz
X2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFi
bGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBj
YXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBj
YXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBv
cF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9s
b2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3Bf
Y2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93
OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6Cisg
ICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rp
b25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVm
aW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6
CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0
cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2Fz
ZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2Fz
ZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3Bf
anN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6Cisg
ICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3Jl
YXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAg
Y2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pu
Z3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6Cisg
ICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ug
b3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBv
cF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9w
dXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNl
IG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3ByaXZh
dGVfbmFtZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3Jf
ZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRl
MTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3Vl
X25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9t
b2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxs
X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1
ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNh
c2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxs
aW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93
X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1w
b2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2Ug
bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJu
YWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVu
Y3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0
X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9l
eGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9o
aW50OgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25z
dHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5f
bG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRf
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9w
cm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSB3YXNt
X3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0X25vX3RsczoKKyAgICBjYXNlIG5vcm1hbF9v
c3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9yZXR1cm5f
dmFsdWU6CisgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgorICAgIGNh
c2Ugb3BfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29w
ZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxf
Y2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9ldmFs
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsOgor
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4
dDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKKyAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWls
X2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3Nsb3c6Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF90YWlsX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdzoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfY2FsbF9ldmFsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9y
X25leHRfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3Blbl9zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9j
aGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlv
bl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3RhZzoKKyAgICBjYXNl
IHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGw6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2Fz
bV9jYWxsX25vX3RsczoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJl
Y3Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2
b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RG
OjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNp
emUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNp
emUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3Bl
Y3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0
aXZlKCktPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxl
KFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxl
LmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAg
bV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIu
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewor
ICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAg
ICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHBy
b2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAg
ICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRp
Y3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFy
ZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZp
bGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVh
ZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBi
b29sIGNvbXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRzLnJlc2l6ZShtX2dy
YXBoLT5zaXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZT
LiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGlt
cGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAg
ICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFy
ZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09Q
UzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdl
IGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNv
ZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQ
cmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAg
ICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAgIG1fdXNlQ291bnRz
W2Jsb2NrLmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2Rl
QmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAgIGlmICghYmxvY2su
aXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAg
ICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7IGkgKyBibG9jay5s
ZWFkZXJPZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVj
b2RlSW5kZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9u
KGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1dGVV
c2VDb3VudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91
c2VDb3VudHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDaGVja3Bv
aW50IGNoZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMo
KTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVj
a3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURlZnNG
b3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9p
bnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJl
ZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNb
aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcHV0ZVVzZUNvdW50
cyA9IGZhbHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNyArOTYwLDEzIEBAIHZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVu
Y3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KQorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1
ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9j
aykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03NSw2
ICs5NzQsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAg
LCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZh
bHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6TE9M
KQogewogfQogCkBAIC0xMzcsMTEgKzEwMzcsMTkgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwK
ICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwK
KyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8j
I25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCkgeyBcCi0gICAgICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKLSAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7IFwKKyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7
IFwKKyAgICAgICAgICAgIGlmIChnZXRlbnYoInByaW50U2xvd0NhbGxDYXNlcyIpICYmIGF0b2ko
Z2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSkpIHsgXAorICAgICAgICAgICAgICAgIFN0cmlu
Z1ByaW50U3RyZWFtIGNiTmFtZTsgXAorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1w
KGNiTmFtZSk7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gY2JOYW1lLnRvU3RyaW5n
KCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsg
IiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsgXAorICAg
ICAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsgXAorICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FsbENhc2VSYW4oa2V5KTsgXAorICAgICAgICAgICAgICAgIH0pOyBcCisg
ICAgICAgICAgICB9IFwKKyAgICAgICAgICAgIGVtaXRTbG93T3Aoc2xvd19wYXRoXyMjbmFtZSwg
Y3VycmVudEluc3RydWN0aW9uLCBkc3QsIHR5cGUpOyBcCiAgICAgICAgIH0gXAogICAgICAgICBO
RVhUX09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7IFwKICAgICB9CkBAIC0xNTYsMjYgKzEwNjQs
NDYgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVG
SU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0
U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xv
d18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9P
UENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
bmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2Fs
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAg
IGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsg
XAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAg
ICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBT
bG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwogfQogCitzdGF0aWMgdm9pZCBzbG93Q2FsbENhc2VSYW4oU3RyaW5nIGtleSkK
K3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRf
dD4+IHNsb3dDYXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBz
dGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25zdHJ1Y3Qo
KTsKKyAgICB9KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAgICB1aW50
NjRfdCB2YWx1ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAo
KHZhbHVlICUgMTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwgdmFsdWUp
OworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2Nv
ZGVCbG9jaywgIlxuIik7CiAgICAgCkBAIC0yMzEsMTYgKzExNTksODUgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAg
ICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7
Ci0gICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0
YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIHBy
b3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hh
YmxlLgotICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQn
cyBldmVyIGhpdC4KLSAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMK
KworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAg
IG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1
dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5Qmxv
Y2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0u
Y29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNz
b3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKKyAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7
ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVh
ZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZh
bHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBhdCBl
bmQgb2YgYmIjIiwgbV9jdXJyZW50QmxvY2stPmluZGV4KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0g
V1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJy
ZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2so
KSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRl
Y2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nv
cl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtw
cmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNb
aV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdl
KCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0
aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisKKyAgICAgICAgICAgICAgICBt
X2N1cnJlbnRVc2VDb3VudHMgPSBXVEZNb3ZlKG1fdXNlQ291bnRzW21fY3VycmVudEJsb2NrLT5p
bmRleCgpXSk7CisgICAgICAgICAgICAgICAgbV9zcGlsbENhbmRpZGF0ZXMuY2xlYXIoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nh
c2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRl
eCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4g
MCkgeworICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlv
bnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBl
bnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJl
YWtwb2ludCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAg
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigp
OwogICAgICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwogCkBAIC0yNzgs
NDYgKzEyNzUsNDMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxv
Z0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7
CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklO
RV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVy
KQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0
eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rp
b24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3Ro
aXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xP
V19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChz
cHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xP
V19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJl
Y3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3Vt
ZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19P
UChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2Vu
ZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9X
X09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3Qs
IFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvciwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTdHJjYXQ+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKHB1
c2hfd2l0aF9zY29wZSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChnZXRfYnlfdmFsX3dpdGhfdGhpcywgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsV2l0aFRoaXM+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVf
U0xPV19PUChwdXRfYnlfaWRfd2l0aF90aGlzLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUp
CisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHJlc29sdmVfc2NvcGVf
Zm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKS5tX2RzdCwgU3BlY0hlYXBU
b3ApCisgICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5LCBWaXJ0dWFs
UmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nl
c3Nvcl9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJ
TkVfU0xPV19PUCh1bnJlYWNoYWJsZSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAg
ICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19zdGF0aWNfZXJyb3IsIFZpcnR1YWxSZWdpc3Rlcigp
LCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFk
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpLm1fZHN0LCBT
cGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKS5tX2RzdCwgU3BlY0FycmF5KQor
ICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
cHJlYWQ+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGhh
c19lbnVtZXJhYmxlX3Byb3BlcnR5LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5PigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cm9wZXJ0eUVudW1lcmF0b3I+KCkubV9kc3QsIFNwZWNDZWxsKQorICAgICAgICBERUZJTkVfU0xP
V19PUCh0b19pbmRleF9zdHJpbmcsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3Ry
aW5nPigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVf
ZGlyZWN0X2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFy
Z3VtZW50cz4oKS5tX2RzdCwgU3BlY0RpcmVjdEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVTY29wZWRBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNTY29wZWRBcmd1bWVudHMpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjT2JqZWN0T3Ro
ZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5LCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLm1fZHN0
LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVQcm9taXNlPigpLm1fZHN0LCBTcGVjUHJvbWlzZU9iamVjdCkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AobmV3X3Byb21pc2UsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdQ
cm9taXNlPigpLm1fZHN0LCBTcGVjUHJvbWlzZU9iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoY3JlYXRlX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVy
YXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfYXN5bmNfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5
bmNHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AobmV3X2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRv
cj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChwb3cs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQb3c+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJl
ciB8IFNwZWNCaWdJbnQpCiAKICAgICAgICAgREVGSU5FX09QKG9wX2FkZCkKICAgICAgICAgREVG
SU5FX09QKG9wX2JpdG5vdCkKQEAgLTM5OCw3ICsxMzkyLDExIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJfYmVn
aW4pCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2VuZCkKICAgICAgICAgREVG
SU5FX09QKG9wX2xzaGlmdCkKKyNpZiBDUFUoWDg2XzY0KQogICAgICAgICBERUZJTkVfT1Aob3Bf
bW9kKQorI2Vsc2UKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobW9kLCBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTW9kPigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQor
I2VuZGlmCiAgICAgICAgIERFRklORV9PUChvcF9tb3YpCiAgICAgICAgIERFRklORV9PUChvcF9t
dWwpCiAgICAgICAgIERFRklORV9PUChvcF9uZWdhdGUpCkBAIC00NzQsMTAgKzE0NzIsODQgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3Bf
bG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWwpCiAKKyAgICAgICAgREVGSU5FX09QKG9wX2lzX2NhbGxhYmxlKQor
ICAgICAgICBERUZJTkVfT1Aob3BfdHlwZW9mX2lzX2Z1bmN0aW9uKQorICAgICAgICBERUZJTkVf
T1Aob3BfdHlwZW9mX2lzX29iamVjdCkKKyAgICAgICAgREVGSU5FX09QKG9wX3R5cGVvZikKKwor
ICAgICAgICBERUZJTkVfT1Aob3BfbGVzcykKKyAgICAgICAgREVGSU5FX09QKG9wX2xlc3NlcSkK
KyAgICAgICAgREVGSU5FX09QKG9wX2dyZWF0ZXIpCisgICAgICAgIERFRklORV9PUChvcF9ncmVh
dGVyZXEpCisKKyAgICAgICAgREVGSU5FX09QKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCkKKwor
ICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCisKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIH0KIAorICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCkgeworICAgICAgICAgICAgaWYgKCFtX2NoZWNrZWRVc2VMT0wpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgICAgICAgICAgY2FzZSBvcF9jaGVja190
cmFwczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rocm93OgorICAgICAgICAgICAgICAgIGNh
c2Ugb3Bfam1wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWls
X2NhbGw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9w
dXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdz
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bfbm9wOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
aWRlbnRpdHlfd2l0aF9wcm9maWxlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90
eXBlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZGVidWc6CisgICAgICAgICAgICAgICAgY2Fz
ZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2Zp
bGVfY29udHJvbF9mbG93OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkRpZG4ndCBjaGVj
ayBMT0w6ICIsIG9wY29kZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQmIGNvdW50ZXIgPSBt
X2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAtLWNv
dW50ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFjb3VudGVyKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIE9PUFM6IERvIHRoaXMgbGF6aWx5IGluIHNsb3cgcGF0aCBjcmVhdGlvbi9zcGlsbEZv
ckNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy9tX3NwaWxsQ2FuZGlkYXRlcy5hcHBlbmQob3Bl
cmFuZCk7CisKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
R1BSUmVnIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xvYmJlcihncHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJGb3JPcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBS
UmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZnByKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3VycmVudEluc3RydWN0aW9uLT5u
dW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAgICAgICAgICAgICBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlv
biwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBj
b3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwg
IjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC00OTgsNiArMTU3MCwy
MCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCiAgICAgbV9qbXBUYWJsZS5j
bGVhcigpOwogfQogCitzdGF0aWMgdm9pZCBzbG93Q2FzZVJhbihTdHJpbmcga2V5KQoreworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90Pj4gc2xv
d0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgpOworICAg
IH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2NF90IHZh
bHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgodmFsdWUg
JSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7Cit9CisK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiB7CiAgICAgbV9nZXRCeUlkSW5k
ZXggPSAwOwpAQCAtNTE2LDE0ICsxNjAyLDI1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIHJhcmVDYXNlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8UmFy
ZUNhc2VQcm9maWxlPihtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CiAgICAgCiAgICAg
dW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IGl0
ZXItPnRvOworICAgIGZvciAoU2xvd0Nhc2UmIHNsb3dDYXNlIDogbV9zbG93Q2FzZXMpIHsKKyAg
ICAgICAgbV9ieXRlY29kZUluZGV4ID0gc2xvd0Nhc2UuYnl0ZWNvZGVJbmRleDsKIAogICAgICAg
ICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0g
bV9ieXRlY29kZUluZGV4OworICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5saW5rKHRoaXMpOwor
CisgICAgICAgIC8vQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCiAg
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKworICAgICAgICBp
ZiAoZ2V0ZW52KCJwcmludFNsb3dDYXNlcyIpICYmIGF0b2koZ2V0ZW52KCJwcmludFNsb3dDYXNl
cyIpKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gbmFtZTsKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5kdW1wKG5hbWUpOworICAgICAgICAgICAgU3RyaW5nIGtleSA9IG5hbWUu
dG9TdHJpbmcoKSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSkgKyAiICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCld
OworICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0JikgeworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlUmFuKGtleSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUgPSBudWxscHRyOwog
ICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQpAQCAtNTgwLDcgKzE2NzcsNiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3Bf
aGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3RyYXBzKQotICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVnYXRlKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk5LDYgKzE2OTUsOSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
aXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX25l
eHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCht
b2QpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodW5zaWduZWQpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluYykKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AoZGVjKQpAQCAtNjMxLDE5ICsxNzMwLDM0IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHJlc29s
dmVfc2NvcGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGNoZWNrX3RkeikKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodG9fcHJvcGVydHlfa2V5KQorICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUChpc19jYWxsYWJsZSkKKyAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQorICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19P
UCh0eXBlb2YpCisKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobGVzcykKKyAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobGVzc2VxKQorICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChncmVhdGVyKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChncmVh
dGVyZXEpCisKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoY3JlYXRlX2xleGljYWxf
ZW52aXJvbm1lbnQpCisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoSklUSW50ZXJuYWw6
OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIs
IGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9m
ZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FH
RShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvLyBPT1BTOgor
ICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2Vz
LmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5v
dWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy9SRUxF
QVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50
by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4i
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9m
aWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4n
dCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCAw
KTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CiAgICAgfQpAQCAtNjg4
LDYgKzE4MDIsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KKworICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7IC8vIE9PUFM6IGhlbHBmdWwg
Zm9yIHJ1bm5pbmcgTE9MIHcvb3V0IERGRy4KICAgICAKICAgICBzd2l0Y2ggKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSgpKSB7CiAgICAgY2FzZSBHbG9iYWxDb2RlOgpAQCAtNzc4LDYgKzE4OTQsODgg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBib29sIHByaW50RWFjaE9TUiA9IGdldGVu
digicHJpbnRFYWNoT1NSIikgJiYgISFhdG9pKGdldGVudigicHJpbnRFYWNoT1NSIikpOworCisg
ICAgaWYgKCFtX2V4aXRKdW1wcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSnVtcExpc3QgZXhpdENv
bW1vbjsKKyAgICAgICAgZm9yIChhdXRvJiBleGl0IDogbV9leGl0SnVtcHMpIHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQuZmlyc3Q7CisgICAgICAgICAgICBhdXRvIGp1
bXBzID0gZXhpdC5zZWNvbmQ7CisgICAgICAgICAgICBqdW1wcy5saW5rKHRoaXMpOworCisgICAg
ICAgICAgICBpZiAocHJpbnRFYWNoT1NSKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nUHJpbnRT
dHJlYW0gcHJpbnRTdHJlYW07CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAocHJp
bnRTdHJlYW0pOworICAgICAgICAgICAgICAgIENTdHJpbmcgc3RyID0gcHJpbnRTdHJlYW0udG9D
U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgc3RyLmJ1ZmZlcigpLT5yZWYoKTsgLy8gbGVhayBp
dC4KKyAgICAgICAgICAgICAgICBwcmludChzdHIuZGF0YSgpLCAiIC0+IGV4aXQgYXQgYmMjIiwg
IGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksICJcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYnJl
YWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2twb2ludCBleGl0cy4KKworICAgICAgICAg
ICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgp
KSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICAgICAgZXhpdENvbW1vbi5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCghZXhpdENvbW1vbi5lbXB0
eSgpKTsKKyAgICAgICAgZXhpdENvbW1vbi5saW5rKHRoaXMpOworCisKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiA9PSByZWdUNCk7CisgICAgICAgIEFTU0VS
VChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5zKG51bWJlclRhZ1Jl
Z2lzdGVyKSk7IC8vIFRoZSBjb2RlIGJlbG93IHJlbGllcyBvbiB0aGlzIGJlaW5nIGEgY2FsbGVl
IHNhdmUuCisKKyAgICAgICAgYXV0byBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaFdpdGhvdXRGZW5jZShtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgICAg
IG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIsIG51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2
ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5jZSB0aGUgTExJbnQgUEMgcmVnaXN0ZXIgaXMgYSB0
ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PU1JXcml0ZUJh
cnJpZXIpPihtX3ZtLCBtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgICAgIHByZXBh
cmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NG
dW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9TUldyaXRlQmFycmllcikpLCBub25B
cmdHUFIwKTsKKyAgICAgICAgY2FsbChub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAg
ICAgICBtb3ZlKG51bWJlclRhZ1JlZ2lzdGVyLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIG51bWJlclRhZ1Jl
Z2lzdGVyKTsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwor
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSks
IHJlZ1QzKTsKKyAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSksIHJlZ1QyKTsKKyAgICAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMik7CisgICAgICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigpKSk7CisKKyAgICAgICAg
YXV0byBza2lwSmV0dGlzb24gPSBicmFuY2gzMihCZWxvdywgcmVnVDIsIFRydXN0ZWRJbW0zMiht
X2NvZGVCbG9jay0+ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKSkpOworICAg
ICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdpc3Rlcik7IC8v
IHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJlZ2lzdGVyIGlz
IGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uVHJpZ2dl
ckxPTFJlb3B0aW1pemF0aW9uTm93KT4obV9jb2RlQmxvY2spOworICAgICAgICBwcmVwYXJlQ2Fs
bE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rp
b248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cp
KSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFn
KTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBudW1i
ZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIHNraXBKZXR0aXNvbi5saW5rKHRoaXMpOworICAgICAg
ICAKKyAgICAgICAgLy9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0
LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIC8vQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIHJlb3B0aW1pemVOb3cgPSBqaXQuYnJhbmNoMzIoCisgICAgICAgIC8v
ICAgIEFzc2VtYmx5SGVscGVyczo6R3JlYXRlclRoYW5PckVxdWFsLAorICAgICAgICAvLyAgICBB
c3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZKSVRFeGVjdXRlQ291bnRlcigpKSwKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxPU1JFeGl0
UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5r
KCkuY29kZSgpLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCk7CisgICAgICAgIC8vIE9PUFMKKyAg
ICAgICAgLy9pZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgIC8vICAgIGRl
c3RpbmF0aW9uID0gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29k
ZSgpOworICAgICAgICAvL2Vsc2UgCisgICAgICAgIC8vICAgIGRlc3RpbmF0aW9uID0gTExJbnQ6
Om5vcm1hbE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIG1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5tZXRhZGF0YVRhYmxlKCkpLCBM
TEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKTsKKyAgICAgICAgbW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIo
KSksIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKTsKKyAgICAgICAgbW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRh
Zyk7CisKKworICAgICAgICAvLyBPT1BTOiAKKyAgICAgICAgLy8gMS4gU3RvcmUgTExJbnQgY29k
ZWJsb2NrIHRvIGNhbGwgZnJhbWUKKyAgICAgICAgLy8gMi4gamV0dGlzb24gaWYgd2UgZXhjY2Vl
ZCBleGl0IGNvdW50CisgICAgICAgIC8vIDMuIHdyaXRlIGJhcnJpZXIgTExJbnQgY29kZSBibG9j
aworICAgIH0KKwogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKQEAgLTk2Nyw3ICsyMTY1LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5r
KCkKICAgICAKICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NP
REUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxp
bmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGlu
ZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2Rl
QmxvY2ssIHVzZUxPTCgpID8gSklUVHlwZTo6TE9MSklUIDogSklUVHlwZTo6QmFzZWxpbmVKSVQp
KS5kYXRhKCkpOwogICAgIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdv
cmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3Vs
dC5zaXplKCkpIC8KQEAgLTk3OCw3ICsyMTc2LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjps
aW5rKCkKICAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2Nr
OjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKICAgICB9CiAgICAgbV9jb2RlQmxvY2stPnNldEpJ
VENvZGUoCi0gICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhB
cml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpKTsKKyAgICAgICAgYWRvcHRSZWYoKm5l
dyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIHVzZUxPTCgpID8gSklUVHlw
ZTo6TE9MSklUIDogSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CiAKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVw
IGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCku
dW50YWdnZWRQdHIoKSk7CkBAIC0xMDcyLDYgKzIyNzAsOTUxIEBAIFNlY29uZHMgSklUOjp0b3Rh
bENvbXBpbGVUaW1lKCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsg
dG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6
c3BlY3VsYXRlKEV4aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgLy8gT09QUzogaGFuZGxlIEV4
aXRLaW5kLgorICAgIGlmICghbV9leGl0SnVtcHMuc2l6ZSgpIHx8IG1fZXhpdEp1bXBzLmxhc3Qo
KS5maXJzdCAhPSBtX2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fZXhpdEp1bXBzLmFwcGVuZCh7
IG1fYnl0ZWNvZGVJbmRleCwgSnVtcExpc3QoKSB9KTsKKyAgICBtX2V4aXRKdW1wcy5sYXN0KCku
c2Vjb25kLmFwcGVuZChqdW1wKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitWZWN0
b3I8UmVnLCAzMj4gY29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBi
ZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sg
Zm9yIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0
IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBz
b3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBWZWN0b3I8UmVnLCAzMj4gYWxsb3dlZDsKKyAg
ICBSZWdpc3RlclNldCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZl
cyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0
byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoYWxsb3dlZENhbGxlZVNh
dmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAg
IH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAg
IGlmICghYWxsQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQu
YXBwZW5kKHJlZyk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgVmVj
dG9yPFJlZywgMzI+JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVy
IHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAg
dGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVl
ZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRh
IGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5Owor
ICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPFJlZywgMzI+PiByZXN1bHQ7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0
KGNvbXB1dGVBbGxvd2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0LmdldCgpOworfQorCitzdGF0aWMgVmVjdG9yPFJlZywgMzI+JiBhbGxvd2VkRlBScygpCit7
CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUg
YSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1
dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMK
KyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
VmVjdG9yPFJlZywgMzI+PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNz
ZXJ0Tm9TbG93UGF0aCgpCit7CisgICAgLy8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcv
IHdyaXRlQmFycmllci4gQnV0IGdlbmVyYWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1h
eWJlIHdlIGNhbiBmaWd1cmUgc29tZXRoaW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2Fz
ZXMuc2l6ZSgpICYmIG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNv
ZGVJbmRleCkKKyAgICAvLyAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQ
UihHUFJSZWcgaGludCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGlu
dCAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJz
KCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgewor
ICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShy
ZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xv
YmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQ
UigpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxp
Y2F0aW9uIHcvIGFsbG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNB
bGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAg
YXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcu
ZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BT
OiBhZGQgc29tZSBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9m
IHRoZSBtYXAgYWdyZWUuCisKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gcmVnVmFsdWUub3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAg
YWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5k
KS5mcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1
c3QgY2xlYXIgdGhlIGlzQWxsb2NhdGVkL2xvY2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdo
dAorICAgICAgICAvLyBoYXZlIGNvZGUgdGhhdCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3Bl
cmFuZCgpCisgICAgICAgIC8vIC0gc3BpbGxGb3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3Bl
cmFuZCgpCisgICAgICAgIC8vCisgICAgICAgIC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29t
ZXRoaW5nIGxpa2UgdGhlIFZhbHVlT3BlcmFuZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAg
ICAgLy8gZGVhbGxvY2F0aW5nIHRoZSByZWdpc3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0
IGludG8gYSB0ZW1wLgorICAgICAgICAvLyBPdGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgp
IHJ1bnMgYW5kIGNhbGxzIHVubG9jaygpLCB3ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBp
bmNvbnNpc3RlbnQgc3RhdGUuCisgICAgICAgIHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICBy
ZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IGZhbHNlOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3Bp
bGxGb3JDYWxsSW1wbCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChh
dXRvIHNldCkgeworICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBp
ZiAoIWNhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlcklt
cGwocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMo
KSk7CisgICAgZG9DbG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNs
b3dQYXRoU2F2ZVBsYW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFz
dGVyCisgICAgU2F2ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZWcs
IHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUub3BlcmFuZCkpKTsKKyAgICB9
OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZO
ZWVkZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBh
cHBlbmRJZk5lZWRlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3Bp
bGxSZWNvcmQgSklUOjpzaWxlbnRTcGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlLCBGUFJS
ZWcgdG9JZ25vcmVGUFIpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0
ZXIKKyAgICBTaWxlbnRTcGlsbFJlY29yZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47
CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCkgeworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgIHJlc3VsdC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtlX3R1cGxl
KHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdWYWx1ZS5vcGVyYW5kKSkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJz
LmFkZChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93
ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZy5mcHIoKSAhPSB0b0lnbm9yZUZQUikKKyAgICAg
ICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgfQorICAgIGZvciAoUmVnIHJlZyA6IGFs
bG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSB0b0lnbm9yZSkKKyAgICAg
ICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgfQorCisgICAgcmVzdWx0LnN0YWNrU2l6
ZUZvclNwaWxsID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1Rv
U3RhY2tGb3JDYWxsKCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2ls
ZW50U3BpbGxSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3BpbGxlZFJl
Z2lzdGVycywgeyB9LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJlc3RvcmVG
cm9tU2F2ZVBsYW4oUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpLCByZWNvcmQuc2F2ZVBsYW4pOwor
fQorCitzdGF0aWMgdm9pZCBhZGRMb2FkQ291bnQodWludDY0X3QgY291bnQpCit7CisgICAgc3Rh
dGljIHVpbnQ2NF90IGNvdW50ZXI7CisgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgKytjb3VudGVyOworICAgICAgICBpZiAoY291bnRlciAlIDEwMDAw
ID09IDApCisgICAgICAgICAgICBkYXRhTG9nTG4oIlJ1bnRpbWUgbG9hZCBjb3VudDogIiwgY291
bnRlcik7CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVn
VG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFu
JiBzYXZlUGxhbikKK3sKKyAgICB1aW50NjRfdCBsb2FkQ291bnQgPSAwOworICAgIGZvciAoYXV0
byYgdHVwbGUgOiBzYXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gc3RkOjpnZXQ8MD4odHVw
bGUpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHN0ZDo6Z2V0PDE+KHR1cGxl
KTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZSA9IHN0ZDo6Z2V0PDI+KHR1cGxl
KTsKKworICAgICAgICBpZiAocmVnID09IHJlZ1RvSWdub3JlKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChvcGVyYW5kID09IG9wZXJhbmRUb0lnbm9yZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQocmVnLmlzRlBSKCkpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMo
KS5jb250YWlucyhzY3JhdGNoKSk7CisgICAgICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKCp0aGlzKTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKHByb3ZlblR5cGUpKQorICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAgICAgICAgICAgdW5ib3hE
b3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3Mg
eyBzY3JhdGNoIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworCisgICAgICAgICAgICAgICAgdW5ib3hE
b3VibGUoc2NyYXRjaCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsK
KworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgICsrbG9hZENvdW50OworICAgIH0KKworICAgIGlmIChmYWxzZSAmJiBs
b2FkQ291bnQpIHsKKyAgICAgICAgcHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAg
ICAgICAgIGFkZExvYWRDb3VudChsb2FkQ291bnQpOworICAgICAgICB9KTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNs
b3dDYXNlKQoreworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93
Q2FzZS5kc3QsIHNsb3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBk
ZWJ1ZyBhc3NlcnQgdG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsg
Z3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3Bl
cmFuZCk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3Zv
aWQgSklUOjpzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BS
VGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAg
IGJveERvdWJsZShmcHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOwor
ICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3Bl
cmFuZCk7IC8vIE9PUFM6IFZhbGlkYXRlIHRoYXQgZm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRz
PykgdGhhdCBkZWYsIHdpbGxEZWYgd2FzIGNhbGxlZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVy
YW5kKTsKKyAgICBhc3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3Bl
cmFuZCkgPSBTcGVjQnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9y
KG9wZXJhbmQpKTsKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9w
ZXJhbmQpOworfQorCit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5p
c0FsbG9jYXRlZCk7CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1
bmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVB
U0VfQVNTRVJUKHJlZ1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7
CisgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxp
ZCgpKQorICAgICAgICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1w
KEpJVCYgaml0LCBHUFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGlu
dCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6
OkdQUlRlbXA6OmdwcihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5s
b2NrKG1fZ3ByKTsKKworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BS
VGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYg
aml0KQorICAgIDogbV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIo
KQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9m
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0
LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9m
cHI7Cit9CisKK0pJVDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisK
K0pJVDo6SW50MzJPcGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7
CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBp
ZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMy
T3BlcmFuZDo6fkludDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30K
KworR1BSUmVnIEpJVDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSBy
ZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAg
ICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1f
aml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJv
dmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmTm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCBTcGVjSW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2Vs
bE9wZXJhbmQ6OkNlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNl
bGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklU
OjpDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBp
ZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2Ug
eworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0Lmdw
ckZvck9wZXJhbmQobV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZSht
X2dwcikub3BlcmFuZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJh
bmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90
Q2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZSht
X29wZXJhbmQsIFNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpO
b3RDZWxsT3BlcmFuZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7Cisg
ICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAo
cmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxP
cGVyYW5kOjp+Tm90Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9
CisKK0dQUlJlZyBKSVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIg
PSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsK
KyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsK
KyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSAmIFNwZWNDZWxsQ2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkNlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZp
bHRlclR5cGUobV9vcGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOwor
fQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpW
YWx1ZU9wZXJhbmQ6On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7
Cit9CisKK0dQUlJlZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNz
ZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9n
cHIgPSByZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQ
UigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9n
cHIpOworCisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9
CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6
RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3Bl
cmFuZDo6fkRvdWJsZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisK
K0ZQUlJlZyBKSVQ6OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7Cisg
ICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVP
cGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRl
bXAgeyBtX2ppdCB9OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAg
R1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0
ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBt
X2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7
IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRU
eXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3Bl
cmFuZCwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJs
ZShncHIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3Bl
cmFuZCk7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6TnVtYmVyT3BlcmFuZDo6TnVt
YmVyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9q
aXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJl
ZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6TnVtYmVyT3BlcmFuZDo6fk51bWJlck9wZXJh
bmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6Ok51bWJl
ck9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAg
ICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAg
IHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9
IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJu
IG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFu
ZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJh
bmQuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQu
bG9jayhtX2Zwcik7CisKKyAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5
cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVl
R1BSLCBtX2Zwcik7CisgICAgZWxzZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1f
aml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCB0ZW1wIHsgbV9q
aXQgfTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgICAgIG1f
aml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOworICAgICAgICBhdXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMy
KEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAg
aWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJh
bmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJ
Zk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFn
UmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCB0ZW1wR1BS
LCBtX2Zwcik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBp
c0ludDMyLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
dmFsdWVHUFIsIG1fZnByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB9CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisgICAgcmV0dXJuIG1fZnByOwor
fQorCitKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6OkludDMyQ29udmVydGluZ09wZXJhbmQo
SklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9w
ZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGdwcigpOworfQorCitKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6On5JbnQzMkNvbnZlcnRp
bmdPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklU
OjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlSW50MzIobV9vcGVyYW5k
KSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgb3AgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAg
ICAgIG1fZ3ByID0gb3AuZ3ByKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIH0g
ZWxzZSBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fb3BlcmFuZCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3By
ID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAg
ICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRl
bXBGUFIuZnByKCk7CisKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQz
MihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBp
ZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFu
ZCkpKQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
Tm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdS
ZWdpc3RlcnMpKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIs
IGZwcik7CisgICAgICAgIEp1bXBMaXN0IGRvbmU7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBp
ZiAoTWFjcm9Bc3NlbWJsZXJBUk02NDo6c3VwcG9ydHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVz
aW5nSmF2YVNjcmlwdFNlbWFudGljcygpKSB7CisgICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91
YmxlVG9JbnQzMlVzaW5nSmF2YVNjcmlwdFNlbWFudGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91
YmxlVG9JbnQzMihmcHIsIG1fZ3ByLCBCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAg
ICAgICAgICAgYXV0byBzcGlsbFJlY29yZCA9IG1faml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbCht
X2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5k
Tm9FeGNlcHRpb25DaGVjayhoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0lu
dDMyU2Vuc2libGVTbG93IDogb3BlcmF0aW9uVG9JbnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAg
ICAgICBtX2ppdC5zaWxlbnRGaWxsQWZ0ZXJDYWxsKHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBpc0ludDMy
LmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgbV9ncHIpOworCisg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgIH0gZWxzZSBpZiAobV9qaXQuc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BS
KCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIG1faml0LnNwZWN1bGF0
ZUJvb2xlYW4obV9vcGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1
c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwgbV9ncHIpOworICAgIH0gZWxzZSBpZiAobV9qaXQuc2hv
dWxkU3BlY3VsYXRlT3RoZXIobV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQ
UigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5zcGVjdWxh
dGVPdGhlcihtX29wZXJhbmQsIHZhbHVlR1BSKTsKKworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigwKSwgbV9ncHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRl
R1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVt
cEZQUiB7IG1faml0IH07CisgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisg
ICAgICAgIEp1bXBMaXN0IGRvbmU7CisKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJh
bmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOwor
ICAgICAgICBhdXRvIG5vdERvdWJsZSA9IG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJ
bnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworCisgICAg
ICAgIG1faml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyNpZiBDUFUoQVJN
NjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0RvdWJsZVRvSW50
MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAgICAgICAgIG1f
aml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKGZwciwgbV9n
cHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBl
bHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJh
bmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1bmNhdGVTdWNj
ZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQuc2lsZW50U3Bp
bGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91YmxlVG9JbnQoKSA/
IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMyLCBtX2dwciwg
ZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3BpbGxSZWNvcmQp
OworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG5vdERvdWJsZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGF1dG8gbm90T3RoZXIgPSBt
X2ppdC5icmFuY2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIpOwor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgbV9ncHIpOworICAgICAgICBkb25l
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG5vdE90aGVyLmxpbmsoJm1faml0KTsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Qm9vbGVh
bihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIG1fZ3ByKSk7CisgICAgICAgIG1faml0LmFuZDMy
KFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKKworICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0KTsKKyAgICAgICAg
bV9qaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNw
ZWNCeXRlY29kZU51bWJlciB8IFNwZWNPdGhlciB8IFNwZWNCb29sZWFuKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbV9ncHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAo
UmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7
CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5z
ZXQocmVnKTsKKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAg
ICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMo
KSkKKyAgICAgICAgYWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEpJVDo6c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJp
bmcodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7
Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5v
dFN5bWJvbCh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5
bWJvbDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOwor
ICAgIH0KKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lk
IEpJVDo6c3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSkKK3sKKyAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkg
eworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFu
Y2hJZk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0K
KyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQorewor
ICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRl
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICgh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykp
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAg
ICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpz
cGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQorewor
ICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0lu
dDMyT25seSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZh
bHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJl
cih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVy
OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhw
ciBib29sIHVzZUJpZ0ludDMyID0gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKG9wZXJhbmQpIHx8ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVD
ZWxsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAg
c2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwg
c2NyYXRjaEdQUikpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmln
SW50MzI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlz
QmlnSW50MzIgPSBicmFuY2hJZkJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlz
QmlnSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
QmlnSW50OworICAgIH0KKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorfQorCit2b2lkIEpJVDo6cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7CisgICAg
aWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUucHJv
dmVuVHlwZXMgPSBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVC
bG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0
YW50cygpOyArK2kpCisgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50
KGkpID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1
YWxSZWdpc3RlckZvckNvbnN0YW50KGkpKSk7CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMuY2FsbGVlKCkgPSBTcGVjRnVuY3Rpb247CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRv
UmVnID0gT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29u
c3RhbnRzKCkuc2l6ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgIG1fY3VycmVudFN0YXRlLnJlZ2lz
dGVycyA9IHsgfTsKK30KKwordm9pZCBKSVQ6OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0NvdW50
LCAiKSIpOworfQorCit2b2lkIEpJVDo6ZHVtcFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRhdGFM
b2dMbigiUmVnIGFsbG9jIHN0YXRlID0gWyIpOworICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2Vk
R1BScygpKSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIs
IHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoYXV0byByZWcgOiBh
bGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywg
IiA9ICIsIHJlZ1ZhbHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dMbigi
XSIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQ
Q1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAi
VW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFz
cyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsK
KyAgICBjbGFzcyBCeXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBj
bGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTA2LDE1
ICsxMTAsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3Ry
dWN0IFNsb3dDYXNlRW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwot
ICAgICAgICBCeXRlY29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRy
eShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6
IGZyb20oZikKLSAgICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3Rv
cjxzdGQ6OnR1cGxlPFJlZywgVmlydHVhbFJlZ2lzdGVyLCBTcGVjdWxhdGVkVHlwZT4+OworCisg
ICAgc3RydWN0IFNpbGVudFNwaWxsUmVjb3JkIHsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47
CisgICAgICAgIFJlZ2lzdGVyU2V0IHNwaWxsZWRSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVk
IHN0YWNrU2l6ZUZvclNwaWxsOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAg
ICAgICBTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6
IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBWZWN0b3I8TWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0LCAxPiBqdW1wczsgLy8gVXN1YWxseSBqdXN0IG9uZSBlbnRyeS4g
QnV0IGZvciB0aGluZ3Mgd2l0aCBjaGVja3BvaW50cywgd2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9u
ZSBzZXQgb2YgSnVtcExpc3RzCisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBN
YXliZSBoYXZlIGEgZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRo
cy4KKyAgICAgICAgUmVnIHJlc3VsdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAg
ICAgICAgVmVjdG9yPFJlZz4gYXJndW1lbnRzOyAvLyBTb21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFs
bG9jYXRpb24gc3RhdGUgaGVyZSBmb3IgY29udmVuaWVuY2UKICAgICB9OwogCiAgICAgc3RydWN0
IFN3aXRjaFJlY29yZCB7CkBAIC0xOTYsNyArMjExLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNz
IEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAg
Y2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewor
ICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwog
CkBAIC0yMDQsMTQgKzIyMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWw7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVm
YXVsdFN0cnVjdHVyZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1i
ZXIgLSBpbml0aWFsIG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4
Yml0IHZhbHVlLCBvciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3Mg
dGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVk
IG9mZnNldC4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVs
dE9mZnNldCA9IDI1NjsKLQogICAgIHB1YmxpYzoKLSAgICAgICAgSklUKFZNJiwgQ29kZUJsb2Nr
KiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBC
eXRlY29kZUluZGV4KDApKTsKKyAgICAgICAgZW51bSBjbGFzcyBDb21waWxlVHlwZSB7CisgICAg
ICAgICAgICBCYXNlbGluZSwKKyAgICAgICAgICAgIExPTAorICAgICAgICB9OworICAgICAgICAK
KyAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiwgQ29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXgg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAg
fkpJVCgpOwogCiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0o
KTsgfQpAQCAtMjIwLDIyICsyMzYsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvbXBp
bGF0aW9uUmVzdWx0IGxpbmsoKTsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0
aW9uQmVmb3JlQ29tcGlsZSgpOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIENvbXBpbGF0aW9u
UmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJ
bmRleCgwKSkKKworICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBjb21waWxlVHlwZSwgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0
ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAg
ICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGJ5dGVjb2RlT2Zmc2V0
KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2Nr
ZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAg
ICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAg
ICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4obG9ja2VyLCBi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJh
c2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1
dEJ5VmFsRGlyZWN0Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKICAgICAgICAgfQpAQCAtMjQzLDIxICsyNTksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0
QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRL
aW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewotICAgICAg
ICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNv
ZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVj
b2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRy
ZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2
bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1f
Ynl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGpp
dC5wcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0
dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2
bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGls
ZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAg
ICAgICB9CkBAIC0yODYsNiArMzAyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcyk7CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBz
cGlsbEZvckNhbGxJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJ
bXBsKCk7CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOwor
ICAgICAgICB9CisgICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4K
ICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTMyMyw5ICszNTMsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9p
ZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZShKdW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlz
dCYpOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9
IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93
Q2FzZShjb25zdCBKdW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IHsgfSk7CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7
CiAgICAgICAgIHZvaWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMzMyw3ICszNjUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3Bf
Y2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAt
MzUwLDcgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYpOwogCkBAIC0zNjAsNyArMzkyLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNv
bXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVx
VHlwZSk7CiAgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9Owot
ICAgICAgICB2b2lkIGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1w
VGFyZ2V0KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIpOwogICAgICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25k
aXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUs
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwpAQCAtNTA4LDggKzU0MCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERv
dWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0
cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFy
ZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTUxNywxMiArNTQ5
LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVk
QW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRp
b24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRp
b24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBT
bG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXpl
LCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYp
OwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0
IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAg
ICB2b2lkIGplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiop
OworCiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTU0Niw5ICs1ODcsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmls
ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Vu
ZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKQEAgLTYxMCw3ICs2NTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfYmVnaW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNp
ZiBDUFUoWDg2XzY0KQogICAgICAgICB2b2lkIGVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
Kik7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY3OCw3OCArNzIx
LDEwMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Rh
aWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVh
dGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVtaXRJc0NhbGxh
YmxlSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9pc19j
YWxsYWJsZShjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlwZW9m
X2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlw
ZW9mX2lzX2Z1bmN0aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF90eXBlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3A+CisgICAgICAgIHZvaWQgZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVt
aXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbGVz
c2VxKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9ncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVu
Z3RoKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50KGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVj
dF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3Jl
YXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21f
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRf
dG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBT
bG93UGF0aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChj
b25zdCBJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNo
aWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25l
ZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5l
d0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0
aW9uKik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IFZpcnR1YWxSZWdpc3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7Cisj
ZWxzZQogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpOworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVy
KEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21J
bmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODI5
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
SW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBn
ZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODQxLDIxIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBO
b25Qcm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVu
YW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAg
dm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5h
bWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lk
IGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVj
dGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNo
RnVuY3Rpb24sIFNsb3dDYXNlJik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gaXRlcisrLT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpdGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJv
bS5saW5rKHRoaXMpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZv
aWQgbGlua0R1bW15U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwot
ICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdp
c3Rlcik7Ci0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAg
ICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRl
Y29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICAgICAgdm9pZCBlbWl0
U2xvd09wKEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBTcGVjdWxhdGVkVHlwZSBkc3RUeXBlKTsKIAot
ICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dD
YXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQpOwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMo
U2xvd0Nhc2UmIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93
Q2FzZXMobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBV
TlVTRURfUEFSQU0oaXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29s
IGIgPSB0cnVlOworICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgIC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2Fz
ZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtODkxLDYgKzkzNywyNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBz
ZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVwZGF0
ZVRvcENhbGxGcmFtZSgpOworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb24pOworICAgICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBjYWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwor
ICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRvIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZhbHVlRlBS
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAg
ICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4u
Lik7CkBAIC05MDIsNiArOTY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBOb1By
b2ZpbGluZwogICAgICAgICB9OwogCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAg
ICAgICBib29sIHRyeUVtaXRMT0xCaXRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKTsKKwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
U25pcHBldEdlbmVyYXRvcj4KICAgICAgICAgdm9pZCBlbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgc2hv
dWxkRW1pdFByb2ZpbGluZyA9IFByb2ZpbGluZ1BvbGljeTo6Tm9Qcm9maWxpbmcpOwogCkBAIC05
NjEsNiArMTAzMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9u
KGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGls
ZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAg
ICAgICAgCkBAIC05NzEsNiArMTA0MywyOTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29w
aWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IElu
dmFsaWRHUFJSZWcpOworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVt
cCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJS
ZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcigpOyAvLyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0
cyBjYW4gYmUgYW55dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBt
X2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCk7CisgICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAg
ICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENl
bGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQo
SklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAg
ICAgICAgICAgflZhbHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJl
ZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBt
X29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIE51bWJlck9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5OdW1i
ZXJPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52
YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAg
ICAgICAgfTsKKworICAgICAgICAvLyBTcGVjdWxhdGUgbnVtYmVyK2Jvb2xlYW4rb3RoZXIsIGFu
ZCBjb252ZXJ0IHRvIGkzMi4gVXNlZnVsIGZvciBiaXRvcHMuCisgICAgICAgIGNsYXNzIEludDMy
Q29udmVydGluZ09wZXJhbmQgeyAKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJD
b252ZXJ0aW5nT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHBy
b3ZlblR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUob3BlcmFuZCkgJj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkp
OworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgIH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRT
dGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAg
ICAgICBGUFJSZWcmIGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3Bl
cmFuZChvcGVyYW5kKS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJl
ZzsKKyAgICAgICAgQWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0
cnVjdCBSZWdWYWx1ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107
CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWdd
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB3aWxsRGVmKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdQUlJlZyYgZ3By
ID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IElu
dmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5k
ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEZQUlJlZyYgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
ICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdw
ciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFyZWdWYWx1ZShncHIpLm9wZXJhbmQuaXNWYWxpZCgpKTsKKworICAgICAgICAg
ICAgZ3ByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdw
cikub3BlcmFuZCA9IG9wZXJhbmQ7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIGlm
ICghbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBhc3NpZ25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWdWYWx1ZShmcHIpLm9wZXJh
bmQuaXNWYWxpZCgpKTsKKworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZw
cjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQo
b3BlcmFuZCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
SW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0
aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBz
aG91bGRTcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZUludDMyQ29udmVydGluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCksIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNPdGhlciB8IFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxs
Q2hlY2spOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmco
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c1N0cmluZ1NwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlQmlnSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7
CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlTE9MKCk7CisKKyAgICAgICAg
dm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVT
eW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
TnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2
b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1vcmUgaW5mbyBoZXJlIGZvciB1cGRh
dGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9jYXRlR1BSKEdQUlJlZyBoaW50ID0g
SW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxvY2F0ZUZQUigpOworICAgICAgICB2
b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAgICAgICB2b2lkIHNldEpTVmFsdWUo
VmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBNYWtlIHRoaXMgdGFrZSB0aGUgcmVz
dWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0byBzZXQgaXQuCisgICAgICAgIHZv
aWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhSZWcpOworICAgICAgICBTYXZlUGxh
biBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVudFNwaWxsUmVjb3JkIHNpbGVudFNw
aWxsQmVmb3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUgPSBJbnZhbGlkR1BSUmVnLCBGUFJSZWcgdG9J
Z25vcmVGUFIgPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzaWxlbnRGaWxsQWZ0ZXJD
YWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgcmVzdG9yZUZy
b21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25v
cmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwog
CiAgICAgICAgIFZlY3RvcjxGYXJDYWxsUmVjb3JkPiBtX2ZhckNhbGxzOwpAQCAtOTkwLDcgKzEz
NDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBU
YWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAg
VmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOworICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBt
X3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGll
ZEdldFB1dEluZm9zOwpAQCAtMTAyNyw2ICsxMzg1LDg3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91
bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZyB7CisgICAgICAgICAgICAv
LyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4gdW5ib3hlZCB2YXJpYW50cworICAg
ICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBHUFJS
ZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgRlBSUmVnIGZwciB7IEludmFs
aWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBBbGxvY2VkUmVnJiBv
dGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IG90aGVyLmdw
cikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAg
ICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52
YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3Qg
UmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgeyB9OworICAg
ICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07CisgICAgICAgICAgICBib29sIGlzQWxs
b2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdWYWx1
ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQgIT0g
b3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8fCBsb2NrQ291bnQgIT0gb3RoZXIu
bG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlzQWxsb2NhdGVkICE9IG90aGVyLmlz
QWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IHsgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAg
IH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIH07
CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAgICAgICAgICAgT3BlcmFuZHM8QWxs
b2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAgICAgICAgUmVnaXN0ZXJNYXA8UmVn
VmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0
cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9pZCBtZXJnZShjb25zdCBCbG9ja1N0
YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3BlcmFu
ZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRUb1JlZy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1lcmdlKG90aGVyLm9wZXJhbmRUb1Jl
Z1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJvdmVuVHlwZXMuc2l6ZSgpID09IG90
aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92ZW5UeXBlc1tpXSwgb3RoZXIucHJv
dmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVycy5zaXplKCkg
PT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJyZW50U3RhdGU7CisKKyAgICAgICAg
dm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAgICAgICAgdm9pZCBkdW1wUmVnYWxs
b2NTdGF0ZSgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUdyYXBoPiBtX2dy
YXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0
ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+PiBtX3By
ZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4g
bV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczx1bnNpZ25lZCwg
dHJ1ZT4+IG1fdXNlQ291bnRzOworICAgICAgICBPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4gbV9j
dXJyZW50VXNlQ291bnRzOworICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAxNj4gbV9z
cGlsbENhbmRpZGF0ZXM7CisKKyAgICAgICAgVmVjdG9yPExvZ0VudHJ5PiBtX2V4aXRMb2c7CisK
KworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0ZT4+IG1fc3RhdGVBdEVuZDsKKyAg
ICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJlZGVjZXNzb3JzOworCisgICAgICAg
IGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fY2hlY2tlZFVzZUxPTCB7
IGZhbHNlIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Qnl0ZWNvZGVJbmRleCwgSnVtcExp
c3Q+PiBtX2V4aXRKdW1wczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsODYgKzQyLDg4IEBACiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgog
I2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmlu
dGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3Vi
bGVMZXNzVGhhbkFuZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFu
ZE9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBH
cmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRl
clRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91Ymxl
TGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNz
VGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIExlc3NUaGFuLCAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEps
ZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2Vx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFs
c2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFy
ZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
SmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxB
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVl
LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVMZXNzRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxP
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ckVxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JlbG93KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNDYsMzcgKzE0OCwxNjEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfamJlbG93ZXEoY29uc3QgSW5zdHJ1YwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKIAordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRDb21wYXJlT3BJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25k
aXRpb24gZ3BDb21wYXJlLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29tcGFyZSkKK3sKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhz
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1f
cmhzOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgY29tcGFyZURvdWJsZShkb3VibGVD
b21wYXJlLCBsaHNUZW1wLmZwcigpLCByaHNUZW1wLmZwcigpLCByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVOdW1iZXIocmhzKSkgfHwgIXByZWRpY3Rpb25Gb3IobGhzKSB8fCAhcHJlZGljdGlvbkZvcihy
aHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBjb21wYXJlRG91YmxlKGRvdWJsZUNvbXBhcmUsIGxoc1RlbXAuZnByKCksIHJoc1Rl
bXAuZnByKCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
c1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIH0KKworICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9sZXNzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNz
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRl
cmVkKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVk
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsQW5kT3JkZXJlZCk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRU
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworCisgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgcmVzdWx0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AxKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
aW5wdXRHUFIpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCBpbnB1
dEdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDAp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOworICAg
ICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25k
aXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRp
b24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29u
ZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93
aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNv
bnN0YW50IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8g
aW50IGltbWVkaWF0ZQogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhz
LmdwcigpLCByaHMuZ3ByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMu
ZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZU51bWJlcihvcDIpKSB8fCAhcHJlZGljdGlvbkZvcihvcDEpIHx8ICFwcmVkaWN0aW9u
Rm9yKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhz
LmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIFZhbHVlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworICAgICAgICB9
CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKKwogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKQEAgLTIyOSwxNyArMzU1LDQzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXAoY28KIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOwor
ICAgIEdQUlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsm
XSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0
UkhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIo
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJf
dCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSksIHRh
cmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGdldFJIUygp
OwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMy
KG9wMWltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29u
ZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdl
dCk7CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKICAgICB9CiB9
CiAKQEAgLTI1NSw0MyArNDA3LDg5IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChj
b25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBHUFJSZWcgbGhzR1BSOworICAgIEdQ
UlJlZyByaHNHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBhdXRvIGdldExIUyA9IFsmXSB7Cisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgbGhzVGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDEpOworICAgICAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKG9wMSkgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGxoc0dQUiA9IHJlZ1QwOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGxoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIGF1dG8gZ2V0UkhTID0g
WyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICByaHNUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUob3AyKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcmhzR1BSID0gcmVnVDE7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRHUFIgPSByZWdU
MjsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAg
ICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBj
b21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSwgcmVnVDApOworICAgICAg
ICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSksIHJlc3VsdEdQUik7
CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGdldFJIUygpOwogICAg
ICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwotICAgICAg
ICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVn
VDApOworICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMy
KG9wMWltbSksIHJlc3VsdEdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihj
b25kaXRpb24sIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKKyAgICAg
ICAgZ2V0UkhTKCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOwogICAgIH0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
U2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dP
cGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dP
cGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBv
cGVyYXRpb24sIGludmVydCwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0
aW9uLCBpbnZlcnQsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgU2xvd09wZXJh
dGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9w
ZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVy
YXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3By
KCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgYXV0byBmYWxs
dGhyb3VnaCA9IGJyYW5jaFRlc3QzMihpbnZlcnQgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFs
dWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGZhbGx0
aHJvdWdoLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBXZSBn
ZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBw
YXRoOgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1l
ZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQg
bnVtYmVyCiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQg
bnVtYmVyLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRD
b25zdGFudENoYXIob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwpAQCAtMzAwLDggKzQ5OCw2IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAg
IGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CkBAIC0zMjYsOCArNTIyLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAg
ICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwogICAgICAgICAgICAgYWRk
NjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsKQEAgLTM1MSwxMiArNTQ1LDExIEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KICAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QwKTsKICAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwor
ICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIEp1bXAg
ZmFpbDQgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVn
aXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QxKTsK
ICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwpAQCAtMzY5LDkgKzU2Miw5
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgZmFp
bDEubGluayh0aGlzKTsKICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKICAgICAgICAgZmFpbDMu
bGluayh0aGlzKTsKKyAgICAgICAgZmFpbDQubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC0zODEsMTEgKzU3
NCw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3Jj
RHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7IC8vIE9PUFM6IGVuc3Vy
ZSBmb3IgYWxsIG9wY29kZXMgcHJvdmVuVHlwZSBhZ3JlZXMgdy8gdGhlIHByZWRpY3Rpb24gcHJv
cGFnYXRpb24uCisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwgZnByKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1
dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3Qs
IGZwcik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFz
RG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
RXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEp
LCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigpOworICAgICAgICAg
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBhZGREb3VibGUo
QWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0Rz
dCwgZnByKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjRHN0
KSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRl
QWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMy
Li4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFk
ZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICBi
b3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNy
Y0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAg
ICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzkzLDEx
ICs2MjgsNjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSB0ZW1w
LmZwcigpOworICAgICAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAg
ICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShpbnB1dEdQUiwgcmVzdWx0RlBSKTsK
KyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAg
ICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAg
ICAgICAgICAgIHN1YkRvdWJsZShyZXN1bHRGUFIsIHRlbXBGUFIsIHJlc3VsdEZQUik7CisgICAg
ICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAg
ICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJy
YW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAg
ICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBG
UFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0RlBSID0gaW5w
dXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAg
ICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGxvYWRE
b3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICBzdWJEb3Vi
bGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShz
cmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1i
ZXIoc3JjRHN0KSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1w
RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBS
KTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOwor
ICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1
dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1
dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1
c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIs
IEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0Rz
dCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0lu
dCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMy
KE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCk7CisgICAgfQogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQw
Nyw1NCArNjkzLDExMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24q
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1v
ZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpIHx8IHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShyaHMpKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKworICAgICAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0VGVtcC5mcHIoKTsK
KworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNr
KE1hdGg6OmZtb2REb3VibGUsIHJlc3VsdEZQUiwgbGhzRlBSLCByaHNGUFIpOworCisgICAgICAg
ICAgICBzZXREb3VibGUoZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBm
b3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3Rl
cnM6OmVheCk7CisgICAgYXV0byBlYXggPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBhdXRvIGVk
eCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7
CisgICAgQVNTRVJUKHJlZ1QwID09IGVheCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7CiAg
ICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhv
cDEsIHJlZ1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Q0
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBlYXhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVkeFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gZWN4VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIEdQUlJlZyBsaHNHUFI7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2xvYmJlcihlYXgpOworICAgICAgICBj
bG9iYmVyKGVkeCk7CisgICAgICAgIGNsb2JiZXIoZWN4KTsKKyAgICAgICAgZWF4VGVtcC5lbXBs
YWNlKCp0aGlzLCBlYXgpOworICAgICAgICBlZHhUZW1wLmVtcGxhY2UoKnRoaXMsIGVkeCk7Cisg
ICAgICAgIGVjeFRlbXAuZW1wbGFjZSgqdGhpcywgZWN4KTsKKworICAgICAgICBlYXhUZW1wLT5n
cHIoKTsKKyAgICAgICAgZWR4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVjeFRlbXAtPmdwcigpOwor
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVheFRlbXAtPmdwcigpID09IGVheCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGVkeFRlbXAtPmdwcigpID09IGVkeCk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVjeFRlbXAtPmdwcigpID09IGVjeCk7CisKKyAgICAgICAgbGhzVGVtcC5lbXBsYWNl
KCp0aGlzLCBsaHMpOworICAgICAgICByaHNUZW1wLmVtcGxhY2UoKnRoaXMsIHJocyk7CisgICAg
ICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IG5ldyBuYW1l
LCBsaWtlIHNwaWxsRXhwZWN0aW5nU2xvd1BhdGgKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShl
YXgsIGRzdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykpCisgICAg
ICAgICAgICBzcGVjdWxhdGVJbnQzMihsaHMsIGxoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocmhz
LCByaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmhzR1BSKTsKKworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICAgICAgbW92
ZShyaHNHUFIsIGVjeCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGhzR1BSID0gcmVnVDQ7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgbGhzR1BSLCByaHMsIGVjeCk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAg
fQogCi0gICAgbW92ZShyZWdUNCwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Qz
MihaZXJvLCBlY3gpKTsKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGVheCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7
CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7CiAgICAgeDg2Q29udmVydFRvRG91
YmxlV29yZDMyKCk7CiAgICAgeDg2RGl2MzIoZWN4KTsKLSAgICBKdW1wIG51bWVyYXRvclBvc2l0
aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDAp
KTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7Ci0gICAg
Ym94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0KTsKLX0KKyAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgZWF4
IH0pOwogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwotfQotCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgZWF4KTsKKyAgICAgICAg
aWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhzKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCeXRlY29k
ZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1i
ZXI7CisgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUobGhz
KSwgU3BlY0JpZ0ludCkgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBT
cGVjQmlnSW50KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCaWdJbnQ7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBlYXgpOwogfQogCiAjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKQEAgLTQ2NCw3ICs4
MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAjZWxzZSAv
LyBVU0UoSlNWQUxVRTY0KQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
biwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJ
bnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKQEAgLTQ3NCw2ICs4MTYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCisKICAgICAvLyBDaGFy
YWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAg
ICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtNTYyLDE1ICs5MDUsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRp
b24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09w
ZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC03MjQsMTMgKzEwNjUsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNv
bnN0IEluc3RydWN0aQogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRp
b25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50Ci0gICAgZW1p
dE1hdGhJQ1Nsb3c8T3BOZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxl
ZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BO
ZWdhdGU+KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZSwgc2xvd0Nhc2UpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
K2Jvb2wgSklUOjp0cnlFbWl0TE9MQml0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGlmICghdXNlTE9MKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworCisgICAgYXV0byBiaXRPcCA9
IFsmXSAoR1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQUikgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVt
cC5ncHIoKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXRh
bmQ+KQorICAgICAgICAgICAgYW5kMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXRvcj4pCisgICAg
ICAgICAgICBvcjMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0eG9yPikKKyAgICAgICAgICAgIHhv
cjMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wTHNoaWZ0PikKKyAgICAgICAgICAgIGxzaGlmdDMyKGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19zYW1lX3Y8T3AsIE9wVXJzaGlmdD4pCisgICAgICAgICAgICB1cnNoaWZ0MzIobGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWVfdjxPcCwgT3BSc2hpZnQ+KQorICAgICAgICAgICAgcnNoaWZ0MzIobGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgc2V0SW50MzIocmVzdWx0LCByZXN1bHRHUFIpOwor
ICAgIH07CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3By
KCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyQ29udmVydGluZyhvcDEpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyQ29udmVydGluZyhvcDIpKSB7CisgICAgICAgIEludDMyQ29u
dmVydGluZ09wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQzMkNvbnZlcnRp
bmdPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxo
cy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKyAgICAgICAgYml0
T3AobGhzR1BSLCByaHNHUFIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYK
KworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1l
IFNuaXBwZXRHZW5lcmF0b3I+CkBAIC03NDEsMTcgKzExMzUsOCBAQCB2b2lkIEpJVDo6ZW1pdEJp
dEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgorICAgIGlmICh0cnlF
bWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAgICAgIHJldHVy
bjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZDsKQEAgLTc2MCwzMyArMTE0NSwxMDYgQEAgdm9pZCBKSVQ6OmVtaXRCaXRC
aW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMy
KGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQu
aXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICAvLyBPT1BTOiBnZXQgc29t
ZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAg
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisg
ICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQu
aXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
ICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKLSAgICBTbmlwcGV0R2VuZXJhdG9y
IGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmln
aHRSZWdzLCBzY3JhdGNoR1BSKTsKIAorICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0
Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChn
ZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7
CisKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdw
cigpLCByZXN1bHQpOworCiAgICAgaWYgKHByb2ZpbGluZ1BvbGljeSA9PSBQcm9maWxpbmdQb2xp
Y3k6OlNob3VsZEVtaXRQcm9maWxpbmcpCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKGJ5dGVjb2RlLCByZXN1bHRSZWdzLmdwcigpKTsKIAotICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQor
ICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNw
ZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBib29sIHJlc3VsdElzSW50MzIgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpIHsKKyAgICAgICAgICAgIHJlc3VsdElz
SW50MzIgPSB0cnVlOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBhZGQgYSBjYXNlIGZvciBC
aWdJbnQzMi4KKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICBub3QzMihyZXN1bHRHUFIpOworICAgICAgICBib3hJbnQz
MihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKHJlc3VsdElzSW50MzIpCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5OyAKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7IAor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICNlbHNlCkBAIC04MDMsNyArMTI2
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGkKIAogICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKGJ5dGVjb2RlKTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBsZWZ0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIGxlZnRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDksMTkgKzEzMDcs
OCBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gSW52YWxpZEZQUlJlZzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0
Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRGYXN0UGF0aDxP
cD4oY3VycmVudEluc3RydWN0aW9uKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU25pcHBldE9w
ZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwpAQCAt
ODczLDIxICsxMzIwLDc3IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0
IEkKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0
T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQ
UjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBJbnZhbGlkRlBSUmVnOworCisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJp
Z2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1w
RlBSOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEp
OworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2hUZW1wRlBSLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVtcEZQ
Ui0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAg
cmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAg
ICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXND
b25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdz
KTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHNjcmF0
Y2hGUFIyID0gZnBSZWdUMjsKKwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJpZ2h0UmVncyk7CisjZW5kaWYKIAogICAgIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IgZ2VuKGxl
ZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
Ci0gICAgICAgIGZwUmVnVDAsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIHNuaXBwZXRTaGlmdFR5
cGUpOworICAgICAgICBzY3JhdGNoRlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSMiwgc25pcHBl
dFNoaWZ0VHlwZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBB
U1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5r
KHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
KyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCByZXN1bHRSZWdzLmdwcigp
LCByZXN1bHQpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAg
ICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRB
c0RvdWJsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0g
U3BlY0ludDMyT25seSB8IFNwZWNCaWdJbnQ7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCBy
ZXN1bHRSZWdzLmdwcigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JzaGlmdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTAyLDE4ICsxNDA1LDY2IEBAIHZvaWQgSklU
OjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFk
ZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIGFkZERvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZw
cigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQ
Ui5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBT
cGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBtb3ZlKGxocy5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hBZGQzMihPdmVyZmxvdywgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsK
KyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShvcDEpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShvcDIpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgYWRkRG91YmxlKGxocy5m
cHIoKSwgcmhzLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZU51bWJlcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0
aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxocy5mcHIoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyByaHNGUFIgPSByaHMuZnByKCk7CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOworICAg
ICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRGUFIpOworICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVEFkZElDKCZhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BB
ZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVEFkZElDKiBhZGRJQyA9IGJpdHdpc2VfY2Fz
dDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9u
KSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3c8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CisgICAgZW1pdE1hdGhJQ1Nsb3c8T3BB
ZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRP
cHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRp
bWl6ZSwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRG
dW5jdGlvbj4KQEAgLTkyNCwxNSArMTQ3NSwzNSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVm
aXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCi0gICAgLy8g
U2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJl
Z2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICBKU1ZhbHVl
UmVncyBzcmNSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNyY1RlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcmNUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wZXJhbmQpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBzcmNSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzcmNUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRl
bXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRz
IGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisgICAgICAgIC8v
IFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyBy
ZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kLCBzcmNSZWdzKTsKKyAgICB9CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1Jl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC05NDEsMTkgKzE1MTIsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogCiAgICAgbWF0aElDLT5t
X2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBzY3JhdGNoR1BSKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7Ci0KICAgICBN
YXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9uLCBNYXRoSUNH
ZW5lcmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJ
bmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlv
blN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChzcmNSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTk2Myw3
ICsxNTM3LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAg
ICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwg
cmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9u
PgpAQCAtOTc0LDM5ICsxNTU1LDgyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5h
cnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCisgICAgU25pcHBldE9wZXJh
bmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CisgICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgp
KTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQorICAgICAgICBsZWZ0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKKyAgICBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQorICAgICAgICByaWdodE9wZXJhbmQuc2V0
Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisKKyAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
KwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZw
UmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7CisgICAgRlBSUmVn
IHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlv
bmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gbGVmdFRl
bXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKICNlbHNlCiAgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9
IGZwUmVnVDE7CiAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogI2VuZGlmCiAKLSAg
ICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJz
dCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5k
VHlwZXMuc2Vjb25kKCkpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIUdlbmVy
YXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAg
ICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICAgICAgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CisgICAgICAgIGlm
ICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkg
eworICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAg
ICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAg
fQogCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAgIGxlZnRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwotICAgIGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRD
b25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxlZnRUZW1wRlAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hG
UFIgPSBzY3JhdGNoVGVtcEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxlZnRUZW1wRlAt
PmZwcigpOworICAgICAgICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIHNjcmF0
Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmln
aHRGUFIgPSBmcFJlZ1QxOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisgICAgICAgIGlmICghR2VuZXJhdG9y
Ojppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIUdlbmVy
YXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CiAKLSAg
ICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVnVDAsIGZwUmVnVDEsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwogICAgIAog
ICAgIEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9w
ZXJhbmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3Bl
cmFuZCkpKTsKICAgICAKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29u
c3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
bGVmdFJlZ3MpOwotICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7Ci0KICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZVN0
YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgpAQCAtMTAxNSwxNyArMTYzOSwzNCBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAKICAgICBib29sIGdlbmVyYXRlZElubGlu
ZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAgICBpZiAobGVmdE9w
ZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKLSAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkp
IHsKKyAgICAgICAgICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAg
ICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAg
ICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgICAgIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIH0KKwogICAgICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwotICAg
IH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsZWZ0UmVncy5ncHIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmlnaHRSZWdzLmdwcigpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKQEAgLTEwMzUsMTEgKzE2NzYsMjAg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIH0pOwogI2Vu
ZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdz
LmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Ax
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2FtZV92
PE9wLCBPcEFkZD4pCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSGVhcFRv
cDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0hlYXBCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rp
b24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiog
bWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBw
cm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5j
dGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0
aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBs
YWJlbCgpOwpAQCAtMTA0OCw4ICsxNjk4LDggQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyB7IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSB9OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVn
cyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKQEAgLTEwODUsNyArMTczNSw3
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNo
RnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikK
K3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9m
aWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50
SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhT
dGFydCA9IGxhYmVsKCk7CkBAIC0xMDk1LDE2ICsxNzQ1LDYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotI2Vsc2UK
LSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0jZW5kaWYKLSAgICAKICAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgp
KTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuc2Vjb25kKCkpOwogCkBAIC0xMTE1LDE1ICsxNzU1LDM2IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKIAogICAgIEFTU0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0
T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRvcjo6aXNSaWdodE9w
ZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKIAotICAgIGlmIChHZW5lcmF0b3I6
OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBlbHNlIGlmIChHZW5lcmF0b3I6
OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSB9OworICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkgeworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKSB9OworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmlnaHRSZWdzLmdwcigpID09IHJlZ1QyID8gcmVnVDMgOiByZWdUMiB9OworICAgIH0gZWxz
ZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5k
KSkgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFJlZ3Mu
Z3ByKCkgPT0gcmVnVDAgPyByZWdUMSA6IHJlZ1QwIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9Owor
ICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKSB9OworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OworI2VuZGlmCisgICAgCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93
UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgogCisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0
T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQpAQCAtMTE1NiwyMyArMTgxNyw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlm
Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwotCi0gICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLQogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAg
IFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNv
bmQoKSk7CiAKQEAgLTExODgsNjIgKzE4MzIsMjM3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihj
b25zdCBJbnN0cnVjdGlvbioKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudERvdWJsZShv
cDIpKQogICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3BlcmFuZENvbnN0
YW50RG91YmxlKG9wMikpOwogI2VuZGlmCi0KICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJh
bmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIGxlZnRGUFI7CisgICAgRlBSUmVn
IHJpZ2h0RlBSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlv
bmFsPEZQUlRlbXA+IHNjcmF0Y2hUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gbGVmdFRl
bXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiByaWdodFRlbXBGUDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICBy
aWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGxlZnRUZW1wRlAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHJpZ2h0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBzY3JhdGNoVGVt
cEZQLT5mcHIoKTsKKyAgICAgICAgbGVmdEZQUiA9IGxlZnRUZW1wRlAtPmZwcigpOworICAgICAg
ICByaWdodEZQUiA9IHJpZ2h0VGVtcEZQLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAg
IGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CisKKyAgICAg
ICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBS
ZWdUMjsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBS
ID0gZnBSZWdUMTsKKwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVy
YW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CisjZW5kaWYKKyAgICAKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG51bGxwdHI7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKKyAgICAgICAgYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogCiAgICAgSklURGl2R2VuZXJhdG9yIGdlbihsZWZ0
T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAot
ICAgICAgICBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQ
UiwgYXJpdGhQcm9maWxlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAog
ICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpIHsKICAgICAgICAgZ2VuLmVuZEp1bXBMaXN0
KCkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLCBy
ZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXBMaXN0KCkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBzZXRK
U1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKICAgICB9IGVs
c2UgewogICAgICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCkuZW1wdHkoKSk7CiAgICAgICAg
IEFTU0VSVChnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9kaXYpOwogICAgICAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9m
aWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwgYXJpdGhQcm9maWxlLmRpZE9ic2VydmVO
ZWdaZXJvRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc1RlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmhz
RlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0g
cmVzdWx0VGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShs
aHNHUFIsIGxoc0ZQUik7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhz
R1BSLCByaHNGUFIpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3cs
IGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlc3VsdEdQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8sIGJyYW5j
aDMyKEJlbG93LCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihCZWxvdywgcmhzR1BSLCBU
cnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnBy
KCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIG11bERvdWJsZShs
aHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVO
dW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNG
UFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAg
IG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVs
SUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAg
IGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUsIHNs
b3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2Zp
bGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAg
ICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
VGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBS
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3By
KCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
cmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShsaHNG
UFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwor
ICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMu
ZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1
YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0
aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2Rl
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDAp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgd2lsbERl
Zihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJvb2wgSklUOjpjb21w
aWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBA
IC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAg
ICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAg
ICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAgICAgICBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
K3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3LDQ0IEBAIHZvaWQg
SklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9w
Q29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
X2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3Ry
dWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4OSwxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgp
OwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZl
IG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9p
bnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisgICAgLy8gT09Q
UzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPworCisgICAgc3Bp
bGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGlu
c3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAg
ICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6
R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJl
Z1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMt
Pm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKwor
ICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbmV4dENo
ZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENoZWNrcG9pbnRT
bG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAg
eyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAgPSByZXN1bHRU
ZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1QwID09IHJlZ1Qw
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAg
cHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAK
ICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRv
ckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzQsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAg
ICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5
LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5
dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3Vs
dCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShy
ZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAg
IHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOwor
ICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hl
Y2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwog
Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BS
KTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAg
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0ZXJzLAogICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3Vs
dEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9u
ZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xv
d1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAg
ICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwog
ICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAg
ICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3Bl
cnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQ
YXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAg
ICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUu
bGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRv
ck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJl
ZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChp
dGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGNvbnN0IGNoYXIqIEpJVENv
ZGU6OnR5cGVOYW1lKEpJVFR5cGUgamkKICAgICAgICAgcmV0dXJuICJMTEludCI7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgcmV0dXJuICJCYXNlbGluZSI7CisgICAg
Y2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAiTE9MIjsKICAgICBjYXNlIEpJ
VFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuICJERkciOwogICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgpAQCAtMTA4LDcgKzExMCw3IEBAIEpJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdp
dGhDb2RlUmVmKEMKIAogSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKCkK
IHsKLSAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChpc09wdGltaXppbmdK
SVQoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCisgICAgaWYg
KChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNERkdPckZUTChqaXRUeXBlKCkpICYm
IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKSkKICAgICAgICAgJiYgbV9yZWYuZXhlY3V0
YWJsZU1lbW9yeSgpKQogICAgICAgICBkYXRhTG9nKCJEZXN0cm95aW5nIEpJVCBjb2RlIGF0ICIs
IHBvaW50ZXJEdW1wKG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSksICJcbiIpOwogfQpAQCAtMjM3
LDYgKzIzOSwxMSBAQCBOYXRpdmVET01KSVRDb2RlOjpOYXRpdmVET01KSVRDb2RlKENvZGVSCiAj
aWYgRU5BQkxFKEpJVCkKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNl
cnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgp
CiB7CisgICAgLy8gRm9yIEJhc2VsaW5lIEpJVCwgdGhpcyBpcyB0cml2aWFsbHkgdHJ1ZS4KKyAg
ICAvLyBGb3IgTE9MIEpJVCwgZXZlcnl0aGluZyBpcyBhbHJlYWR5IHNwaWxsZWQgdG8gdGhlIHN0
YWNrIGF0IGVhY2ggb3Bjb2RlLCBzbyB3aGVuIHdlCisgICAgLy8gZ28gdG8gdGhlIG9wX2NhdGNo
LCB0aGUgbGl2ZSBzdGF0ZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRo
ZSBzdGFjay4KKyAgICAvLyBBbHNvLCBvcF9jYXRjaCBoYXMgbm8gaW5jb21pbmcgcmVnaXN0ZXIv
dHlwZSBwcm9vZiBzdGF0ZSwgc28gaXQncyB0cml2aWFsIHRvIGNhdGNoCisgICAgLy8gYW4gZXhj
ZXB0aW9uIGluIExPTCBqdXN0IGJ5IGp1bXBpbmcgdG8gb3BfY2F0Y2guCiAgICAgcmV0dXJuIHsg
fTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Qg
ewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVuaywKICAgICBCYXNlbGlu
ZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJVAogfTsKQEAgLTY3LDM2
ICs2OCwyMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogdHlwZU5hbWUoSklU
VHlwZSk7CiAKLSAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKSVRUeXBlOjpCYXNlbGluZUpJVDsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGlj
IEpJVFR5cGUgdG9wVGllckpJVCgpCiAgICAgewogICAgICAgICByZXR1cm4gSklUVHlwZTo6RlRM
SklUOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJVChKSVRUeXBl
IGppdFR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpERkdK
SVQ7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICAgICAgcmV0dXJuIEpJ
VFR5cGU6OkZUTEpJVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6Tm9uZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKICAgICBzdGF0aWMgYm9vbCBpc0V4ZWN1dGFibGVTY3JpcHQo
SklUVHlwZSBqaXRUeXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRo
dW5rOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0OgorCisgICAg
ICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA3LDcgKzk1LDExIEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgogICAgICAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoK
KyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRM
SklUOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE2
LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewog
ICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIGNhc2UgSklU
VHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjQsNiArMTE3LDI0
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGNhbGxTaXRl
Qml0c0FyZUJ5dGNvZGVJbmRleChKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGppdFR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgor
ICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEpJVFR5cGU6
OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgorICAgICAgICBjYXNlIEpJ
VFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHN0YXRp
YyBib29sIGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklUVHlwZSBleHBlY3Rl
ZEhpZ2hlcikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhlY3V0YWJsZVNjcmlw
dChleHBlY3RlZExvd2VyKSk7CkBAIC0xNDUsOSArMTU2LDE5IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBpc0xvd2VyT3JTYW1lVGllcihleHBlY3RlZExvd2VyLCBleHBlY3RlZEhp
Z2hlcik7CiAgICAgfQorCisgICAgc3RhdGljIGJvb2wgdXNlc1JlcGxhY2VtZW50Q29kZUJsb2Nr
KEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5
cGU6OkxPTEpJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJ
VFR5cGU6OkZUTEpJVDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaXNPcHRpbWl6aW5n
SklUKEpJVFR5cGUgaml0VHlwZSkKICAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJ
VFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCB8fCBqaXRUeXBlID09
IEpJVFR5cGU6OkxPTEpJVDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RGR09yRlRMKEpJ
VFR5cGUgaml0VHlwZSkKKyAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6
OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYQogICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGlu
IHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKICAgICAgICAgLy8gYW5k
IGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxl
ci0+dGFyZ2V0CiAgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0gICAgICAgIGlmICgh
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUo
KSkpCisgICAgICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+dGFyZ2V0KS5w
dHIoKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5u
YXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMTQ1LDYgKzE0Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwg
dGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3LDYgKzE1OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtl
IGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxs
IHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY3LDI1ICsxNzAsNiBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50
byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5l
bmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAi
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA3LDI3ICsx
OTEsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1
bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjpl
bnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwg
bV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93
UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9
PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7
CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nh
c2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJu
IG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQog
ewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExp
c3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVt
cCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1
bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdh
eSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChq
dW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGlu
dCByZWxhdGl2ZU9mZnNldCkKQEAgLTQwNiwxMSArMzk5LDYgQEAgQUxXQVlTX0lOTElORSBkb3Vi
bGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRl
ZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBS
ZWdpc3RlcklEIHZhbHVlKQpAQCAtNzE3LDYgKzcwNSwxOCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFN
b2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0K
IAordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFNsb3dPcChGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCwgU3BlY3VsYXRlZFR5cGUgZHN0VHlwZSkK
K3sKKyAgICBzcGlsbEZvckNhbGwoKTsKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZnVuY3Rpb24pOworICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CisgICAgaWYgKG1fdXNlTE9MICYmIGRzdC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gZHN0VHlwZTsKKyAgICAgICAgd2lsbERlZihkc3QpOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEs
NyArMTQxLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIH07CiAKLSAgICAgICAgYm9vbCBz
aG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSk7CisgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2Rl
Ojppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKIAogICAgICAgICBpZiAobV9nZW5l
cmF0ZUZhc3RQYXRoT25SZXBhdGNoKSB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYs
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9p
bmRleGVkCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51
bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2Nh
dGlvbi5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRGlzYWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FzdC5oIgpAQCAtNDEsNiArNDIs
OCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFj
ZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzU0LDI4IEBAIHZvaWQgSklU
OjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
c3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5n
ZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwg
d2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRH
UFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE1LDUzIEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
Q29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAg
R1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRv
clRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxv
Y2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdU
MDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBy
ZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVs
c2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5
ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJl
ZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwog
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUp
OwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MSw1MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBp
bnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9P
UFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNv
bnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFj
ZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgq
dGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOwor
ICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBp
bnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdU
MCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1
Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5v
dCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29u
c3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjQs
OTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5k
cyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJz
LgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUg
d2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90
byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkg
dGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0
KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBD
ZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1
bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9
OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BS
UmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0
VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNo
MlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxs
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwt
PmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKwor
ICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9
IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRl
bXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAg
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5n
cHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAg
ICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBl
bmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3Bl
Y3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJl
Z1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBi
YXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQg
Zm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAg
ICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAg
ICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAg
ICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5z
dGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5w
cm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI1LDI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NSw3MiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAg
IGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJU
ZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOwor
CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAg
ICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOSwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjMs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02
NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRl
c3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OSwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIo
Y29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9u
WmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQz
MikKQEAgLTI4MiwyMSArNTI5LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJ
ZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRH
UFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1
OTUsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9
IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDQsNjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0
ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWws
IEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0zNTUsNyArNzA5LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
Ynl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1
cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI4LDQxIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0
ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
T2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYg
KGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcxLDIyMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFu
Y2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5n
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24g
eyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFt
ZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BS
ID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWVUZW1wLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZwcigpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRv
IG5vblplcm8gPSBicmFuY2hEb3VibGVOb25aZXJvKHZhbHVlRlBSLCBzY3JhdGNoRlBSKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBub25aZXJvLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcEZQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZVRlbXAuZnBy
KCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHRlbXBGUFIuZnByKCk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGF1dG8gbm9uWmVybyA9IGJyYW5jaERvdWJsZU5vblplcm8odmFsdWVG
UFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5vblplcm8ubGluayh0aGlzKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaEdQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIHZhbHVlRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgdGVtcEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgICAgICAgICAgY29uc3Rl
eHByIGJvb2wgaW52ZXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jv
b2xlYW4oKm1fdm0sIEpTVmFsdWVSZWdzIHsgdmFsdWVUZW1wLmdwcigpIH0sIHJlc3VsdEdQUiwg
c2NyYXRjaEdQUi5ncHIoKSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBp
bnZlcnQpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVl
KGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBi
aXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3
aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAg
ICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRo
ZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVn
VDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJ
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMg
YSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIg
dGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUg
aW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNW
YWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUg
bG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVn
VDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25k
aXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZh
bHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxp
bmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEg
eyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKwor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gx
RlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9
IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBz
Y3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihO
b3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0g
ZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2Ny
YXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNo
MUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTk0LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1
dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAg
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
KyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1
bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2Fz
ZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgot
ICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0
aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAg
ICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQp
OworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0
byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAg
ICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAor
ICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0
aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAg
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSks
IHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEyNSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
dW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGlu
ZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNP
dGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNTAwLDEwICsxMTUzLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29y
X251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgewor
ICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsx
MTg0LDQ0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAg
QVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAg
ICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwg
Jm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAg
ICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7
CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8g
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQ
b2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCitz
dGF0aWMgdm9pZCBjb21wYXJlU3RyaW5ncyhKSVQmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBub3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgR1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQUiwg
R1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyByaHNUZW1wR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwg
R1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzR1BSLCBKU1N0cmluZzo6
b2Zmc2V0T2ZWYWx1ZSgpKSwgbGhzVGVtcEdQUik7CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmhzR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmhzVGVt
cEdQUik7CisKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwo
bGhzVGVtcEdQUikpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZSb3BlU3RyaW5n
SW1wbChyaHNUZW1wR1BSKSk7CisKKyAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgCisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2gzMigKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksCisgICAgICAg
IHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOworICAgIAorICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6Zmxh
Z3NPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5n
SW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVz
dDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgp
KSkpOworICAgIAorICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc1Rl
bXBHUFIsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIGxoc1RlbXBHUFIpOworICAgIGppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmRh
dGFPZmZzZXQoKSksIHJoc1RlbXBHUFIpOworICAgIAorICAgIGF1dG8gbG9vcCA9IGppdC5sYWJl
bCgpOworICAgIAorICAgIGppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBzY3JhdGNoR1BSKTsKKworICAgIHsKKyAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgobGhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
T25lKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBhdXRvIG1hY3JvU2NyYXRjaCA9IGppdC5zY3Jh
dGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChyaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNP
bmUpLCBtYWNyb1NjcmF0Y2gpOworICAgICAgICBub3RFcXVhbC5hcHBlbmQoaml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaDJHUFIsIG1hY3JvU2NyYXRjaCkpOwor
ICAgIH0KKyAgICAKKyAgICBqaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAgZXF1YWwuYXBwZW5kKGppdC5q
dW1wKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3N0YXRpYyB2b2lkIGNvbXBhcmVTdHJpY3RFcUNlbGxzKEpJVCYg
aml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QmIG5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoLCBHUFJS
ZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSLCBHUFJSZWcgbGhzVGVtcEdQUiwgR1BSUmVnIHJoc1Rl
bXBHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBHUFJSZWcgc2NyYXRjaDJHUFIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2Fs
bEhlbHBlcnM6OkVxdWFsLCBsaHNHUFIsIHJoc0dQUikpOworCisgICAgc2xvd1BhdGguYXBwZW5k
KGppdC5icmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisKKyAgICBhdXRvIGxoc0lzU3RyaW5nID0g
aml0LmJyYW5jaElmU3RyaW5nKGxoc0dQUik7CisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5qdW1w
KCkpOworCisgICAgbGhzSXNTdHJpbmcubGluaygmaml0KTsKKyAgICBub3RFcXVhbC5hcHBlbmQo
aml0LmJyYW5jaElmTm90U3RyaW5nKHJoc0dQUikpOworCisgICAgY29tcGFyZVN0cmluZ3Moaml0
LCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcEdQUiwg
cmhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnRydWU+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2Rl
Lm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBj
b25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAg
YXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29t
cGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92
ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9s
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhz
LCByaHNHUFIpOworCisgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaFRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAg
ICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisKKyAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWws
IHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwg
c2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1
ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBk
b25lID0ganVtcCgpOworCisgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkg
eworICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxo
c0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZw
cigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3Jl
IHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BS
KTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhz
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1f
cmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/
IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1
YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAg
ICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJp
bmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJo
cywgcmhzR1BSKTsKKworICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1w
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICBK
dW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAg
ICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwg
bGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1w
LmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGgpOworCisgICAgICAgICAgICBpZiAoaXNFcSkgeworICAgICAgICAgICAgICAgIGFkZEp1
bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwg
dGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1Rl
bXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNl
cyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVn
IHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVn
IHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAg
R1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCBy
aHNHUFIpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BK
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJo
c0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IFdlIGNhbiBt
YWtlIHRoaXMgYSBzaW5nbGUgYnJhbmNoIGlmIHRoZSByZXN0b3JlIGRvZXNuJ3QgY2xvYmJlciBy
ZXR1cm5WYWx1ZUdQUi4KKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dD
YXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJl
Z1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTYzNSwyNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29k
ZS5tX3JoczsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21w
YXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0g
aXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7
CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFs
KHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAg
ICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRl
bXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVt
cCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAg
ICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVhbCwgbm90
RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5n
cHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIG5v
dEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisg
ICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qg
bm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRl
bXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVt
cCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhp
cyB9OworCisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFs
LCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1wLmdwcigpLCByaHNU
ZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIG5v
dEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91Ymxl
KGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91Ymxl
KGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNh
c2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
VGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgbGhzU2NyYXRjaEdQUiA9IGxoc1NjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzU2NyYXRjaEdQUiA9IHJoc1NjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCBy
ZWdUMCwgc3JjMiwgcmVnVDEpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBk
byAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3Vs
dCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7
Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNs
b3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8g
VGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUg
bmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIK
LSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4g
YWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGln
aCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8
PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRv
dWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAg
IG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dl
c3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRk
NjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsK
LSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVP
ckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJl
Z1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1
KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVh
c3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5k
NjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1v
cmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBk
byB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoZmFsc2UpOworI2Vs
c2UKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdU
NSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICAgICAgSnVtcExpc3Qg
ZXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGF1dG8gbGhzSXNDZWxsID0gYnJhbmNoSWZDZWxsKGxoc0dQUik7Cisg
ICAgICAgICAgICAgICAgYXV0byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5vdENlbGwocmhzR1BS
KTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAg
ICAgICAgIGxoc0lzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFw
cGVuZChicmFuY2hJZk5vdENlbGwocmhzR1BSKSk7CisKKyAgICAgICAgICAgICAgICBKdW1wTGlz
dCBzbG93UGF0aDsKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywg
ZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1NjcmF0Y2hHUFIs
IHJoc1NjcmF0Y2hHUFIsIHRlbXBHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgYm90aE5vdENlbGxzLmxpbmso
dGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRo
ZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBm
aW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAg
ICAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRP
Sy5saW5rKHRoaXMpOworICAgICAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihy
aHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7
CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChpc0Vx
KQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVx
dWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXBM
aXN0IGRvbmU7CisgICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgICAg
ICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgbm90RXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1
ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxo
cywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBB
dCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Cisg
ICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAg
ICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0
IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7Cisg
ICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAg
ICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291
bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZO
dW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIElu
dDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZp
bmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBh
dCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAg
ICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwor
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChy
ZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1Qx
LCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdU
NSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cyku
CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwg
d2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lO
VDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5n
cykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0
aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMg
ZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAg
ICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlz
KTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0g
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQot
ICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAj
ZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE4ODYsMjAzIEBAIHZvaWQg
SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAg
ICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0
byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1
YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNH
UFIpOworCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAg
ICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRo
OworCisgICAgICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxz
KCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVt
cC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5n
cHIoKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAg
ICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkSnVtcChlcXVhbCwg
dGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhZGRKdW1wKG5vdEVxdWFs
LCB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIs
IHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzU2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHJoc1NjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
dGVtcDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIGxoc1NjcmF0Y2hHUFIgPSBsaHNTY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc1NjcmF0Y2hHUFIgPSByaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXAyR1BS
ID0gdGVtcDIuZ3ByKCk7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZl
bCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBp
cyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAg
aWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBD
ZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5v
dFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3Rl
YWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJh
bmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEg
SlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0
IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5v
dCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBz
ZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRk
NjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAg
SnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAo
YXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVt
cCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJp
Z0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxk
IGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3
ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGZhbHNlKTsKKyNlbHNlCisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAg
ICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0
byBsZWZ0SXNDZWxsID0gYnJhbmNoSWZDZWxsKGxoc0dQUik7CisgICAgICAgICAgICAgICAgYXV0
byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5vdENlbGwocmhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgICAgIGxlZnRJc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKHJoc0dQUikpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwg
c2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNTY3JhdGNoR1BSLCByaHNTY3JhdGNoR1BSLCB0
ZW1wR1BSLCB0ZW1wMkdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgp
OworCisgICAgICAgICAgICAgICAgYm90aE5vdENlbGxzLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZp
cnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0
CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICAgICAgYXV0byBsZWZ0
T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYXV0byByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdo
dE9LLmxpbmsodGhpcyk7CisgICAgICAgICAgICBpZiAoaXNFcSkgeworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIG5vdEVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeyAKKyAgICAgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMs
IHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmlj
dEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVh
bC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEg
aGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAg
ICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290
byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8g
dGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAg
ICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8K
KworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8
IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQg
dGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9i
cmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEg
bnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAor
ICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAg
ICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3Zl
T3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5j
aDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFy
Z2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRz
KS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNv
dWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMy
LCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7
CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93
IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4g
Rmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRl
c3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAg
ICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0
T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0
YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNl
bGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUu
IEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0
ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwg
dGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzIwOTUs
MjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21w
aWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxo
c0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAg
aWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVy
aWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkp
OwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmln
SW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBh
dXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNw
ZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJ
bnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBp
c05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChy
ZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3Jj
KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4K
KyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBl
bnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZy
YW1lKTsKQEAgLTg4OCw5ICsyMzc0LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRf
c2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUg
PSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNj
b3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdU
MCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7
IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAq
dGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdw
cigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2Jq
ZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyNDA1LDE3IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElU
YWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
OTIyLDkgKzI0MzAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5z
dAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNv
ZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBq
dW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hh
cldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFi
bGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjQ1NCwxNDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJs
ZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRl
eCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2Vy
UmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9
IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7
CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHBy
IGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRv
IGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENl
bGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBj
b21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1
bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1
bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAg
ICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAo
KTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9w
RXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMp
OwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiop
CiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBz
aW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRo
b3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAg
ICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2Fy
aWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0Mg
cHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAg
ICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0
V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSw5ICsyNjA1LDIzIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgR1BSUmVnIHNjb3BlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHJlc3VsdDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjb3BlID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgc2NvcGUgPSByZWdUMDsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NvcGUpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhzY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBzY29wZSk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHNjb3BlKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgc2NvcGUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDQ1LDEzICsy
NjI5LDg0IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1
Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJ
RDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OworICAgIGF1
dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPdmVycmlkZXNUb1RoaXMpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBl
KHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9
IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkgewor
ICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBw
cm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlmIChp
c1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb3Zl
blR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4g
aWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1
bXAgbm90Q2VsbDsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBu
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKTsKKyAgICAgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENl
bGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyBy
aWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1Qx
LCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1Qy
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShz
cmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdU
MSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwg
cmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzI3MTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29k
ZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5t
X2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJl
Z2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyArMjcyNCwzMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNo
ZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1Qz
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0Owor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMs
IGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJU
ZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNh
bGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3By
KCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1w
NC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOwor
ICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURh
dGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBA
IC0xMDg2LDY0ICsyNzY2LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2No
ZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlciwg
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0v
LyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVz
dGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHBy
b3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkp
OworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wg
c2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9m
Q3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsy
ODExLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikK
IHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9T
UiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5p
dGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0
ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRlci4KICAgICAgICAgdWludDY0
X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsK
ICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVy
biA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0
dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEzICsyODM5LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUg
SklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zy
b21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVu
dHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2
bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwxMSArMjg1NiwxMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9P
cHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAvLyBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0
aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAg
ICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVO
VVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsyODgyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1w
bGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjg5MiwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3Jl
Z2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHAp
KSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
UmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAg
ICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyOTEzLDQyIEBAIHZvaWQgSklUOjplbWl0
TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3Bl
R1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVz
dWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9M
KCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2Nv
cGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAj
ZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1
bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNv
ZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1
bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19h
c3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjk3Nyw0NiBAQCB2b2lkIEpJVDo6
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAg
ICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzY29wZS5yZXNldCgpOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNj
b3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVy
YXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVH
UFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwog
ICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVy
YXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0
aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICszMDQ3LDE5IEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9h
cmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6
ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRl
bXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0g
dGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQu
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93
aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAs
MTQgKzMwNjgsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0g
cmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYXJnR1BSID09IHJldHVyblZhbHVlR1BSKTsKKyAgICB9CisKKyAgICAvLyBP
T1BTOiBJbmxpbmUgdGhlIGFsbG9jYXRpb24gcGF0aCBoZXJlLCBpdCBtYXR0ZXJzIGZvciBzdW5z
cGlkZXItY3J5cHRvLWFlcworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFy
Z0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5k
ZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BS
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICszMTA0
LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9y
VmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZh
bHVlIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVz
cyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOworICAgICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxl
X3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTQwOSw2ICszMTUzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3By
b3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6
CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
IAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMzE4Miw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBi
ZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICszMjA5LDE1IEBAIHZvaWQgSklUOjplbWl0
X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhp
bmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFy
cmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3Ro
ZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dD
YXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFk
VHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAg
ICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwo
KTsKQEAgLTE0NzgsMTMgKzMyMjYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFi
bGVfaW5kZXhlZAogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFs
SW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHBy
b2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBh
dGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQ
YXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1l
cmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpA
QCAtMTUxMCwzNyArMzI1OSw4MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1l
KGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAot
ICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJ
bnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9w
ZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVt
ZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVz
RWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEp
OwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZs
eShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBp
cyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4g
aXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9m
IGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIo
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRj
aEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQg
YmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisK
KyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8g
Q29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9y
J3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAg
ICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEp
OworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBv
ZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsK
KyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdU
MSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGlu
dDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0
SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTU1MCwyMSArMzM0Myw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVy
ZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQ
UjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVy
YW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9y
VGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0g
ZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0g
cmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BS
KTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRl
eEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwg
cmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxv
YWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0
R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVy
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMzk3LDUx
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3Bl
cnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51
bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8v
IE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVt
ZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1w
bGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlz
LCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRl
eFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdw
cigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRl
eEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhP
ZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJv
dW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9Q
dHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BS
LCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTU5OCw2ICszNDUxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBl
KGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRh
dGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0g
Ynl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsK
KwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAog
ICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzUxMyw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFk
b3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNw
aWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fz
c2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxs
IGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAt
MTY3Miw2ICszNTMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3By
bwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNo
YWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENh
bGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25B
cmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4i
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRv
d0NoaWNrZW5UYWlsPigpOwpAQCAtMTY4NCw2ICszNTQ1LDE5MyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgordm9pZCBKSVQ6OmVtaXRJc0NhbGxhYmxlSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3Bl
cmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgIGF1dG8gaXNGdW5jdGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRH
UFIpOworICAgICAgICBhdXRvIG5vdE9iamVjdCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BS
KTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gc2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
CisgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhp
cyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBp
c0Z1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19jYWxsYWJsZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxh
YmxlSW1wbDxPcElzQ2FsbGFibGU+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX3R5cGVvZl9pc19mdW5jdGlvbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxhYmxlSW1wbDxPcFR5cGVvZklzRnVuY3Rpb24+
KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgCisg
ICAgICAgIGF1dG8gaXNOdWxsID0gYnJhbmNoSWZFcXVhbChKU1ZhbHVlUmVncyB7IGlucHV0R1BS
IH0sIGpzTnVsbCgpKTsKKyAgICAgICAgYXV0byBpc05vbk51bGxOb25DZWxsID0ganVtcCgpOwor
ICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gaXNGdW5j
dGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAgICBhdXRvIG5vdE9iamVj
dCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
c2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgCisgICAgICAgIGlzTnVsbC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOworICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc05v
bk51bGxOb25DZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsK
KyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlw
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gYnl0ZWNvZGUubV92YWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIEp1bXBM
aXN0IGRvbmU7CisgICAgICAgIEp1bXAgc2xvd1BhdGg7CisgICAgICAgIGVtaXRUeXBlT2YoCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0sIHJlc3VsdEdQUiwKKyAgICAgICAg
ICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlLCBib29sIGZhbGxzVGhyb3VnaCkgeworICAgICAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtLT5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0
eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgaWYgKCFmYWxsc1Rocm91Z2gpCisg
ICAgICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgWyZdIChKdW1wIHRoZVNsb3dQYXRoKSB7CisgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSB0aGVTbG93UGF0aDsKKyAgICAgICAgICAgIH0pOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZW51bWVy
YWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVM
ZW5ndGg+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoaW5wdXRHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
aW5kZXhlZExlbmd0aE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0
LCByZXN1bHRHUFIpOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7CisgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBt
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzeW1ib2xUYWJsZS0+c2luZ2xldG9uKCkuaXNT
dGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVtaXRTbG93T3Aoc2xvd19wYXRoX2NyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGRzdCwgU3BlY09iamVjdE90
aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBzY29wZVRlbXAgeyAqdGhpcywgc2NvcGUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRU
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVn
IHNjb3BlR1BSID0gc2NvcGVUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDFU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMlRlbXAuZ3By
KCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5
ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3RX
aXRoS25vd25TaXplPEpTTGV4aWNhbEVudmlyb25tZW50PigKKyAgICAgICAgICAgICptX3ZtLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hY3Rp
dmF0aW9uU3RydWN0dXJlKCkpLCBidXR0ZXJmbHksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwK
KyAgICAgICAgICAgIHNsb3dQYXRoLCBKU0xleGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNp
emUoc3ltYm9sVGFibGUpKTsKKworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgCisgICAgICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkg
YmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRo
ZQorICAgICAgICAvLyBhY3RpdmF0aW9uIG11c3QgYmUgeW91bmcuCisgICAgICAgIHN0b3JlUHRy
KHNjb3BlR1BSLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpKTsK
KyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzeW1ib2xUYWJsZSksIEFkZHJlc3MocmVz
dWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZTeW1ib2xUYWJsZSgpKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgLy8gTXVzdCBpbml0aWFsaXplIGFsbCBtZW1iZXJzIHRvIHVu
ZGVmaW5lZCBvciB0aGUgVERaIGVtcHR5IHZhbHVlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpOyArK2kpCisgICAgICAgICAgICBzdG9y
ZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWUsIEFkZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShTY29wZU9mZnNldChpKSkpKTsKKyAgICAgICAg
CisgICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsK
KyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09Q
UworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE3MDIsMTEgKzM3NTAsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQo
Y29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
QXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVS
ZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCBy
ZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBz
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAg
ICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0
X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwy
OSArMzc3MSw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3Ro
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNp
Z25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0g
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAg
SnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIo
bnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVn
VDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1
YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKElt
bTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1t
MzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tp
cCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVu
Z3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNzQ0LDQ5ICszODIwLDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFy
Z3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1
bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29k
ZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDAp
OwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVl
KGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAr
IGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFy
Z3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQo
KSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2Fk
VmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVW
YWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3Rv
dHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUs
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOwor
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikp
OworICAgICAgICB9CisKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNo
R1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9
PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2
bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJv
dG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVz
dWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjQsNiArMTQyNCw4IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Db21wYXIKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKworICAgIC8vZGF0YUxvZ0xuKCJjb21wYXJlTGVzcywgbGhzOiAiLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSksICIgcmhzOiAiLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwog
ICAgIAogICAgIHJldHVybiBqc0xlc3M8dHJ1ZT4oZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CkBAIC0xNDkx
LDYgKzE0OTMsOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGFyCiAg
ICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFs
dWUgc3JjMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAorICAgIC8vZGF0YUxvZ0xu
KCJzdHJpY3RlcSwgbGhzOiAiLCBzcmMxLCAiIHJoczogIiwgc3JjMik7CisKICAgICByZXR1cm4g
SlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFsT2JqZWN0LCBzcmMxLCBzcmMyKTsKIH0KIApAQCAt
MTY5MSw3ICsxNjk1LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRlYnVn
LAogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNB
bmRPcHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGNvZGVC
bG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICBjb2RlQmxvY2stPmJhc2VsaW5lQWx0
ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICBjb2RlQmxvY2stPm9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKIH0KIApAQCAtMTc0NSw3ICsxNzQ5LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNr
SWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChjb2RlQmxvY2ssICJkZWxheU9wdGltaXplVG9ERkciLCAoImNvdW50ZXIgPSAiLCBj
b2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCkpKTsKLSAgICAgICAgY29kZUJsb2NrLT51cGRh
dGVBbGxQcmVkaWN0aW9ucygpOworICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRp
dmUoKS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiQ2hvb3Npbmcgbm90IHRvIG9wdGltaXplICIsICpjb2RlQmxvY2ss
ICIgeWV0LCBiZWNhdXNlIHRoZSB0aHJlc2hvbGQgaGFzbid0IGJlZW4gcmVhY2hlZC4iKTsKICAg
ICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICB9CkBAIC0x
ODE0LDcgKzE4MTgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1p
CiAgICAgICAgIC8vIG5vdGhpbmcgbGVmdCB0byBkby4KICAgICAgICAgaWYgKCFjb2RlQmxvY2st
Pmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKICAgICAgICAgICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29kZUJsb2NrLCAiZGVsYXlPcHRpbWl6ZVRvREZHIiwgKCJjb21waWxlZCBhbmQgZmFp
bGVkIikpOwotICAgICAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwor
ICAgICAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFsbFBy
ZWRpY3Rpb25zKCk7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksICJDb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vz
bid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LiIpOwogICAgICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICAgICAgfQpAQCAtMTg0Myw3ICsx
ODQ3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAg
ICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygp
KSB7CisgICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZVRvREZHTm93KCkpIHsK
ICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlPcHRpbWl6
ZVRvREZHIiwgKCJpbnN1ZmZpY2llbnQgcHJvZmlsaW5nIikpOwogICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLAogICAgICAgICAgICAgICAgICJEZWxheWluZyBv
cHRpbWl6YXRpb24gZm9yICIsICpjb2RlQmxvY2ssCkBAIC0xODc5LDcgKzE4ODMsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENv
ZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwot
ICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENv
ZGVCbG9jayAmJiBKSVRDb2RlOjppc0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CiAgICAgCiAgICAgaWYgKHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JF
bnRyeSh2bSwgY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7
CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50
cnkiLCAoImF0IGJjIyIsIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTM0MzMsNiArMzQzNyw0MiBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9
CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6
YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpCit7CisgICAgLy8gSXQn
cyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3
YXlzLCBkb2luZyBzbyB3b3VsZG4ndAorICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xDb2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAg
ICBpZiAoZ2V0ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpICYmICEhYXRvaShnZXRlbnYoInByaW50
RWFjaEpldHRpc29uIikpKQorICAgICAgICBkYXRhTG9nTG4oImpldHRpc29uLCBmb3JjaW5nIHJl
b3B0IG5vdzogIiwgKmxvbENvZGVCbG9jayk7CisgICAgbG9sQ29kZUJsb2NrLT5iYXNlbGluZUFs
dGVybmF0aXZlKCktPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgCisgICAgLy8gT09QUzog
cHJvY2VzcyB2YWx1ZSBwcm9maWxlcyBoZXJlLCBzaW5jZSB3ZSdyZSBqZXR0aXNvbmluZywgaG9w
ZWZ1bGx5IHRoZXkgdXBkYXRlIHcvIHRoaW5ncyB3ZSBjYXJlIGFib3V0LgorCisgICAgc2FuaXRp
emVTdGFja0ZvclZNKGxvbENvZGVCbG9jay0+dm0oKSk7CisKKyAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICpsb2xDb2RlQmxvY2ssICI6IEVudGVyZWQgcmVvcHRpbWl6ZSBm
cm9tIExPTCIpOworCisgICAgQ29kZUJsb2NrKiBsbGludENvZGVCbG9jayA9IGxvbENvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKTsKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBiYXNl
bGluZSBjb2RlIGJsb2NrLgorICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShsbGlu
dENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKyAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0g
bGxpbnRDb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CisgICAgaWYgKCFyZXBsYWNlbWVudCB8fCBy
ZXBsYWNlbWVudCA9PSBsbGludENvZGVCbG9jaykgeworICAgICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICpsbGludENvZGVCbG9jaywgIjogTm90IHJlb3B0aW1pemluZyBM
T0wgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGJlZW4gamV0dGlzb25lZC4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlcGxhY2VtZW50IG11c3QgYmUg
b3B0aW1pemVkIGNvZGUuIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5CisgICAgLy8gdG8gY2hl
Y2sgb3VyIGxvZ2ljLgorICAgIEFTU0VSVChsbGludENvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVw
bGFjZW1lbnQoKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChsb2xDb2Rl
QmxvY2stPmppdFR5cGUoKSkpOworCisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IHN0dWNrIGlu
IGEgbG9vcCBsb2dpYworICAgIGxvbENvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9PU1JFeGl0LCBDb3VudFJlb3B0aW1pemF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMx
OSw4IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVmFsdWUKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwg
KFZNKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93
Q2hpY2tlbkxvZywgdm9pZCwgKFZNKikpOwogCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9s
Q29kZUJsb2NrKSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1
LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yODEsOCArMjc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93
IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTk4LDgg
KzU5MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYz
OSw4ICs2MzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC02ODYsOCArNjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC03MjksOCArNzE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC03NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtODE5LDggKzgwMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTExMDAsOCArMTA4MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwpAQCAtMTI1Nyw4ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJl
c29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8d3Rm
L1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lm
IFVTRShKU1ZBTFVFNjQpCiAKQEAgLTUyLDUxICs1NCwxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJv
cGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgaW5kZXhpbmdUeXBlR1BSID0gcmVzdWx0R1BSOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDA7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYg
KG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElD
TWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOwor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
YXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5p
c1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwor
ICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQogCi0gICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAg
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxh
dGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
dHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2Zp
bGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25s
eSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAg
fQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3MyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3Bl
cnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNl
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hl
YXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTcsNiArMjU3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2Fs
bCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMu
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7
CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1
dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCkBAIC0zMzksNyArNDQ0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRC
eVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Nyw3
ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6
OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBh
dXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
ICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2MCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxE
aXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzgxLDYg
KzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5k
ZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IERvIGJldHRlciBpZiB3ZSBjYW4h
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5NCwxMyArNTAwLDEyIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgZmFzdFBhdGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlW
YWxJbmZvOwogICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0
S2luZDsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGgg
PSBsYWJlbCgpOwogCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKQEAgLTQyMCw0OSArNTI1
LDEwNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywg
Ynl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2Fj
Y2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNv
ZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNv
ZGUubV9nZXR0ZXIgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRl
Y29kZS5tX3NldHRlciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
ZXR0ZXJHUFIgPSBzZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVy
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2dldHRlciwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2V0dGVyLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0
ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
cmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywg
cmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7
ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFj
Y2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7Cisg
ICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBi
eXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMs
IGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWws
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAg
ICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMs
IHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2MzMsNTIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdp
dGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQg
ZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFy
cmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC00OTIsMjUgKzY4NywyNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIp
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xv
d0Nhc2UucmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcsNzAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHBy
b3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7Cisg
ICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChwcm9wZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAg
ICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KQEAgLTU0MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZh
bEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9
IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
c3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJl
ZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERp
cmVjdE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwog
ICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5j
aDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9k
ZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlM
ZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9m
aWxlKTsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0
R1BSIDogcmVnVDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNl
R1BSLCBpbmRleGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0
aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhp
cyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlz
VlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHRoaXNHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQ
Uik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNW
UmVnKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxh
Z3MuaXNEaXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIg
dG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9m
ZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJn
dW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFu
ZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZz
ZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwot
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
YXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVj
b2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGly
ZWN0KTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03NjUsNzcg
KzExNjAsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdy
aXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25D
aGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRj
aHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVu
c2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0NywxNyAr
MTI2MCwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVu
c2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZH
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTg2NywyMSArMTI4OCwzNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChk
ZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgot
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25t
ZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgpAQCAtODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsK
ICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTk0MCwxNSArMTM3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBA
IC05NjIsMTIgKzE0MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+
KCk7CkBAIC05NzgsNTEgKzE0MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRH
UFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0g
cmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3Vs
dEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9p
ZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVx
dWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwog
Ci0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBs
b2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VO
QUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVy
VGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRz
dCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRT
bG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBy
ZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29w
ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3Bl
VmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
c2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CkBAIC0xMDM2LDEwICsxNTA0LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAogCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAg
aXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTEwNTIsMjcgKzE1
MjAsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1
bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Miw0MCArMTU1
MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmVnVDApOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShy
ZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQ
dHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTEyOSwyMSArMTU3OSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0
dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7Cisg
ICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zm
c2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
dHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9m
ZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwog
ICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNh
bid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5Lgog
ICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAg
c3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihj
b25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9w
ZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3Rv
cmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKQEAgLTExOTAsMTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8g
V2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2Nh
dGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRD
b2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBl
biBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29u
c3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAg
LTEyMDksMjMgKzE3MjUsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRo
ZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwg
c2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNj
cmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNo
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjYx
LDYxICsxNzg0LDE3OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVu
dHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBh
cmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpLCByZXN1bHRHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7Cisg
ICAgR1BSUmVnIHZhbHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVu
dHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFs
dWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9
IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1l
bnRzR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgIH0KKyAgICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQ
UiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAg
IC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBk
b24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4g
T3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9l
c24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBh
bHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBv
ZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJl
IGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2Vs
bCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2Up
IHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVO
b3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjQ2VsbCkpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAg
ICAgaWYgKGdwckZvck9wZXJhbmQob3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICBvd25lckdQUiA9IGdwckZvck9wZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG93bmVyVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9
IG93bmVyVmFsdWUtPmdwcigpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
d25lciwgb3duZXJHUFIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJH
UFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5v
dENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEo
cHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJl
Z1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNw
aWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVu
dCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29y
ZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAg
ICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWln
aHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQg
aXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMg
dG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxs
b2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisg
ICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxs
ICsgc2lsZW50IGZpbGwKKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOwor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZh
bHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9y
T3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
ISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVC
YXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAg
ICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0
aGlzKTsKIH0KIApAQCAtMTMyNywxMSArMTk2NywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChp
bmRleCkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93
bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5
dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsxOTk2LDIzIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRP
ZkludGVybmFsRmllbGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBl
KGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNz
KGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZp
ZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QxKTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgfQogfQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlW
YWw+KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUsMjUgQEAgdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW47CisgICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0K
KworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxC
ZWZvcmVDYWxsKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZp
bGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUxLDggQEAgdm9pZCBKSVQ6
OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNTY3LDYg
KzIyNTQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7
CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5k
OjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0
S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92
YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrKQogewogICAgIEFTU0VSVF9VTlVTRUQocHJvZmls
ZWRERkdDb2RlQmxvY2ssICFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgZGlkIGJl
Y29tZSByZWFkeS4iKTsKICAgICAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAg
ICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
ICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0OiAiLCBy
ZXN1bHQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMjIgQEAKICNpbmNsdWRl
ICJKSVQuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9TY29wZS5o
PgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUV29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsKIHB1YmxpYzoKLSAgICBQ
bGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCi0gICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICAgICAsIG1f
aml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQorICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGls
ZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAg
OiBtX2xsaW50Q29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX2NvZGVCbG9ja1RvQ29t
cGlsZShjb21waWxlVHlwZSA9PSBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgPyBtX2xsaW50Q29kZUJs
b2NrLT5uZXdSZXBsYWNlbWVudCgpIDogbV9sbGludENvZGVCbG9jaykgCisgICAgICAgICwgbV9q
aXQobV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCksIG1fY29kZUJsb2NrVG9Db21waWxlLCBjb21w
aWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIG1faml0
LmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOworICAgICAgICAvLyBPT1BT
OiB2aXNpdCB0aGlzIGluIGNvbmN1cnJlbnQgZ2MKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9D
b21waWxlICE9IG1fbGxpbnRDb2RlQmxvY2spIHsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrVG9D
b21waWxlLT52bSgpLmhlYXAucHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoKQpAQCAtNTMsMTcgKzYw
LDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKCkKICAgICB7CiAgICAgICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmxpbmsoKTsKKworICAgICAgICBhdXRvIHNjb3Bl
RXhpdCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja1Rv
Q29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2NrKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2Nr
VG9Db21waWxlLT52bSgpLmhlYXAudW5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAg
ICAgICAgfSk7CisKICAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICAgICAgY2FzZSBDb21w
aWxhdGlvbkZhaWxlZDoKLSAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxv
Y2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKKyAgICAgICAg
ICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9sbGludENvZGVCbG9jaywgImRlbGF5SklUQ29tcGls
ZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQuIik7Ci0gICAg
ICAgICAgICBtX2NvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7Ci0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOworICAgICAgICAgICAg
bV9sbGludENvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICBtX2xs
aW50Q29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgogICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlv
biBzdWNjZXNzZnVsLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLT5pbnN0YWxsQ29kZShtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
aml0U29vbigpOworICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPm93bmVyRXhlY3V0
YWJsZSgpLT5pbnN0YWxsQ29kZShtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgICAgICBt
X2xsaW50Q29kZUJsb2NrLT5qaXRTb29uKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
NzEsOCArODQsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNJiB2bSgpIHsg
cmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tLZXko
KSB7IHJldHVybiBtX2xsaW50Q29kZUJsb2NrOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9s
bGludENvZGVCbG9jay0+dm0oKTsgfQogICAgIAogICAgIGJvb2wgaXNGaW5pc2hlZENvbXBpbGlu
ZygpCiAgICAgewpAQCAtODAsMTUgKzkzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
aXNGaW5pc2hlZENvbXBpbGluZzsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgY29tcGls
ZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQorICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBj
b21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHBsYW4uY29t
cGlsZUluVGhyZWFkKCk7CiAgICAgICAgIHBsYW4uZmluYWxpemUoKTsKICAgICB9CiAgICAgCiBw
cml2YXRlOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2xs
aW50Q29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2tUb0NvbXBpbGU7CiAgICAg
SklUIG1faml0OwogICAgIExvY2sgbV9sb2NrOwogICAgIGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGls
aW5nIHsgZmFsc2UgfTsKQEAgLTIzMyw5ICsyNDcsMTEgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29t
cGlsZUxhdGVyKENvZGVCbG9jawogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29v
bigpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgSklUOjpDb21waWxlVHlwZSBjb21w
aWxlVHlwZSA9IE9wdGlvbnM6OmZvcmNlTE9MKCkgPyBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgOiBK
SVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZTsKICAgICAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNv
bmN1cnJlbnRKSVQoKSkgewotICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJs
b2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCkBAIC0yNDksNyArMjY1LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6
Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXZhaWxh
YmxlVGhyZWFkcykgewogICAgICAgICAgICAgbV9wbGFubmVkLmFkZChjb2RlQmxvY2spOwotICAg
ICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ss
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBw
bGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxhbik7CiAg
ICAgICAgICAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fY29uZGl0aW9u
LT5ub3RpZnlBbGwobG9ja2VyKTsKQEAgLTI3MywxNCArMjg5LDI0IEBAIHZvaWQgSklUV29ya2xp
c3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAvLyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUg
aXNzdWUuIElmIHRoZSBjb25jdXJyZW50IEpJVCB0aHJlYWQgaXMgY29udm95ZWQsIHdlIHJldmVy
dCB0byBtYWluCiAgICAgLy8gdGhyZWFkIGNvbXBpbGVzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBh
cyBnb29kIGFzIGlmIHdlIGhhZCBtdWx0aXBsZSBKSVQgdGhyZWFkcy4gTWF5YmUgd2UKICAgICAv
LyBjYW4gZG8gdGhhdCBzb21lZGF5LgotICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9j
aywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogfQogCisvKgogdm9p
ZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9j
ay0+dm0oKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisKKyAgICBhdXRvIGlz
Q29tcGlsZWQgPSBbJl0geworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklU
VHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgaWYgKGlz
Q29tcGlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJvb2wgaXNQbGFubmVkOwpA
QCAtMjk2LDE3ICszMjIsMjQgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxv
Y2sqIAogICAgIH0KICAgICAKICAgICAvLyBOb3cgaXQgbWlnaHQgYmUgY29tcGlsZWQhCi0gICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisg
ICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFdlIGRv
IHRoaXMgaW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxl
ZCwgdG8gY29tcGlsZSB3aXRoIHRoZQotICAgIC8vIGJhc2VsaW5lIEpJVC4KLSAgICBjb2RlQmxv
Y2stPnJlc2V0SklURGF0YSgpOwotICAgIAotICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCi0g
ICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQs
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VM
T0woKSkgeworICAgICAgICBDb2RlQmxvY2sqIGxvbENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3
UmVwbGFjZW1lbnQoKTsKKyAgICAgICAgSklUOjpjb21waWxlKHZtLCBsb2xDb2RlQmxvY2ssIEpJ
VDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgbG9sQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+aW5zdGFsbENvZGUobG9sQ29kZUJsb2NrKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQg
dGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKKyAgICAgICAgLy8gYmFzZWxpbmUgSklU
LgorICAgICAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0YSgpOworICAgICAgICAKKyAgICAgICAg
Ly8gT0ssIGp1c3QgY29tcGlsZSBpdC4KKyAgICAgICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxv
Y2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVk
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICB9CiB9CisqLwogCiB2b2lk
IEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBteVBsYW5zKQogewpAQCAtMzE0LDcg
KzM0Nyw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG0KICAgICAg
ICAgcGxhbi0+ZmluYWxpemUoKTsKICAgICAgICAgCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCptX2xvY2spOwotICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9jaygpKTsK
KyAgICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2tLZXkoKSk7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAgcHVibGljOgogICAgIHZvaWQgcG9sbChWTSYp
OwogICAgIAogICAgIHZvaWQgY29tcGlsZUxhdGVyKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgIHZvaWQg
Y29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAKICAgICBzdGF0aWMgSklUV29ya2xpc3Qm
IGVuc3VyZUdsb2JhbFdvcmtsaXN0KCk7CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGlu
Z0dsb2JhbFdvcmtsaXN0T3JOdWxsKCk7CkBAIC02Niw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAg
Y2xhc3MgVGhyZWFkOwogICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7CiAgICAgCisgICAgLy92b2lk
IGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgdm9pZCBmaW5hbGl6ZVBsYW5zKFBsYW5z
Jik7CiAgICAgCiAgICAgUGxhbnMgbV9xdWV1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5k
ZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21h
cC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtp
XTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBt
X21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6
OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTIs
NyArMTQ5Miw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpT
RW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAg
IGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2Rl
QmxvY2stPmppdFR5cGUoKSkpCisgICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNE
RkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZz
ZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlu
a0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAg
ICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBu
b3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZz
ZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAg
bV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2Myw4ICszNjMsMTAgQEAgaW5saW5lIGJvb2wgc2hvdWxkSklUKENvZGVC
bG9jayogY29kZUJsbwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBP
U1IuCi1pbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApKQoraW5saW5lIENvZGVCbG9jayogaml0Q29tcGlsZUFuZFNldEhl
dXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKKyAgICAvLyBPT1BT
OiBJbXBsZW1lbnQgdGhpcyB3LnIudCBMT0wuCisKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVy
R0Modm0uaGVhcCk7IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdl
IGRvbid0IHdhbnQgdG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJ
VCgpKTsKICAgICAKQEAgLTM3MywyOSArMzc1LDQ1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVB
bmRTZXRIZXVyaXN0aWNzKFYKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9s
ZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRl
bGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29k
ZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4i
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCiAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucG9sbCh2bSk7
Ci0gICAgCisKKyAgICBhdXRvIGxvbENvZGVCbG9jayA9IFsmXSgpIC0+IENvZGVCbG9jayogewor
ICAgICAgICBpZiAoQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGNvZGVCbG9jay0+b3B0aW1pemVk
UmVwbGFjZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6TE9MSklUKQorICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisgICAgaWYgKGF1
dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9jaygpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCiAg
ICAgc3dpdGNoIChjb2RlQmxvY2stPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6QmFz
ZWxpbmVKSVQ6IHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAi
ICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuIik7CiAgICAgICAgIGNvZGVCbG9jay0+aml0
U29vbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsK
ICAgICB9CiAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOiB7CiAgICAgICAgIEpJ
VFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRlcihjb2RlQmxvY2ss
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIGlmIChhdXRvKiByZXN1
bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAg
ICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICBkZWZhdWx0OgotICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4g
TExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIH0K
KyAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxv
Y2ssICJcbiIpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQorc3RhdGlj
IFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQogewogICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgKmNvZGVCbG9jaywg
IjogRW50ZXJlZCAiLCBuYW1lLCAiIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLApAQCAtNDA2LDE4
ICs0MjQsMjEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogICAg
ICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICBWTSYg
dm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyh2bSwgY29kZUJsb2NrKSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0gaml0
Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jayk7CisgICAgaWYgKCFjb21waWxl
ZENvZGVCbG9jaykKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsK
ICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgi
aW4gcHJvbG9ndWUiKSk7CisgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVCbG9j
aywgIk9TUiBlbnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7CisKKyAgICBjYWxsRnJhbWUtPnNldENv
ZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gUHJvbG9n
dWUpCi0gICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1
dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBp
bGVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOwog
ICAgIEFTU0VSVChraW5kID09IEFyaXR5Q2hlY2spOwotICAgIExMSU5UX1JFVFVSTl9UV08oY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRh
YmxlQWRkcmVzcygpLCBudWxscHRyKTsKKyAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29k
ZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRh
YmxlQWRkcmVzcygpLCBudWxscHRyKTsKIH0KICNlbHNlIC8vIEVOQUJMRShKSVQpCi1zdGF0aWMg
U2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBj
aGFyKiwgRW50cnlLaW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxs
RnJhbWUqLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKIHsK
ICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgIExMSU5UX1JFVFVSTl9U
V08obnVsbHB0ciwgbnVsbHB0cik7CkBAIC00MjcsMzEgKzQ0OCwzMSBAQCBzdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9v
c3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50
cnlPU1IoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJv
bG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NhbGwpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanND
YXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+
Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9n
dWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwo
KSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRf
U0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24q
PihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29u
c3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsK
KyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxG
cmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qo
KSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVj
aykKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8
SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2Rl
QmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIs
IEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwgQXJp
dHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9m
b3JfY29uc3RydWN0X2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICBy
ZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkp
LT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAgcmV0dXJu
IGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9v
c3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQpAQCAtNDgwLDE5ICs1MDEsMjIgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVs
bHB0ciwgbnVsbHB0cik7CiAgICAgfQogICAgIAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhl
dXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpCisgICAg
Q29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNz
KHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIGlmICghY29t
cGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0
cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJvc3JFbnRyeSIs
ICgiYXQgIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkpOwogCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29tcGlsZWRDb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb21waWxlZENvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAKLSAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFw
ID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CisgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1h
cCA9IGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CiAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAgdm9pZCog
anVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIEFTU0VS
VChqdW1wVGFyZ2V0KTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29k
ZUJsb2NrKTsKICAgICAKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJnZXQsIGNhbGxGcmFt
ZS0+dG9wT2ZGcmFtZSgpKTsKICNlbHNlIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDIwIEBAIEZ1bmN0aW9u
Q29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2
ZSgpKTsKIH0KIAorRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6bG9sT3JC
YXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogZWRnZTsKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9y
Q2FsbCkKKyAgICAgICAgZWRnZSA9IG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAg
ICAgICAgZWRnZSA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOworICAgIH0KKyAgICBp
ZiAoIWVkZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5sb2xPckJhc2VsaW5lQWx0
ZXJuYXRpdmUoKSk7Cit9CisKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTMgKzExNCw5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpOwogICAg
IH0KIAorICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgCi0gICAgRnVuY3Rp
b25Db2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcihraW5kKTsK
LSAgICB9Ci0KICAgICBSZWZQdHI8VHlwZVNldD4gcmV0dXJuU3RhdGVtZW50VHlwZVNldCgpIAog
ICAgIHsKICAgICAgICAgUmFyZURhdGEmIHJhcmVEYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMywxMCBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxsSklU
T3B0aW9ucygpCiAKIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiB7
CisgICAgT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkg
PSAxOworICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmluZWQoTkRFQlVH
KQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3Qu
aAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNyw3IEBAIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoQm9vbCwgdXNlSklUQ2FnZSwgY2Fu
VXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZVB1YmxpY1N0
YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwg
dW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwK
ICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHJpdmF0ZSBzdGF0aWMgZGF0YSBm
aWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRp
b24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw3ICs1
OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAg
ICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGxsaW50X2hhbmRsZV91Y2F1Z2h0X2V4Y2Vw
dGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8v
IGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8
fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0b3BD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8
dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogICAgICAgICAgICAg
ICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2Rl
QmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
OCw3ICszOTgsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cExMSW50KENvZGVCbG9jayogY29kZUJsCiBz
dGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lm
IEVOQUJMRShKSVQpCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxl
KHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIC8vIE9PUFM6
IEZpZ3VyZSBvdXQgd2hhdCB3ZSB3YW50IHRvIGRvIHdpdGggdGhlIG5vIExMSW50IG9wdGlvbi4u
Li4KKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVC
bG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBAIEpTVmFsdWUgbnVtYmVyT2ZERkdDb21waWxl
cyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29sIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSBm
YWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgp
KQorICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7IC8vIE9PUFMKKwogICAgIGlmICghT3B0aW9u
czo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVzZUJhc2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6OnVz
ZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsKICNl
bHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUlu
c3RhbGxUcmFwQnJlYWtwb2ludHMoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Cisg
ICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
ICAgICAgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAgaWYg
KCFsb2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRy
eSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRh
dGVDb2RlQmxvY2tzT25TdGFjCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYg
KGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpKQorICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJs
b2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUt
PmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29t
cGFyZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRz
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkod29y
a2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw4IEBAIGRlZiBjb21wdXRlTXVsdGlwbGVIeXBvdGhl
c2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIG5hbWVMZW5n
dGggPSBsZW4oInN1YnRlc3QiKQotICAgIGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKLSAg
ICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pCisgICAgYUxlbmd0aCA9IGxlbihhW3VuaXRN
YXJrZXJdKSArIDMKKyAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMwogICAgIHJh
dGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIpCiAKICAgICBwVmFsdWVIZWFkZXIgPSAicFZhbHVlIChz
aWduaWZpY2FuY2UgdXNpbmcgRmFsc2UgRGlzY292ZXJ5IFJhdGUpIgpAQCAtMjEyLDcgKzIxMiw3
IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhhLCBiKToKICAgICBwTGVuZ3RoICs9IDIKIAogICAgIHN0
cmluZ3MgPSBbXQotICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpee25hbWVMZW5ndGh9fXx7YVNj
b3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7Y29tcGFyZTpee3JhdGlvTGVu
Z3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5PSJzdWJ0ZXN0IiwgYVNjb3Jl
PWFbdW5pdE1hcmtlcl0sIGJTY29yZT1iW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5n
dGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCBy
YXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExl
bmd0aCkpCisgICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6
XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9
fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9ImE6
ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2NvcmU9ImI6ICIgKyBiW3VuaXRNYXJrZXJdLCBuYW1lTGVu
Z3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFy
ZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIs
IHBMZW5ndGg9cExlbmd0aCkpCiAgICAgZm9yIGtleSBpbiBhLmtleXMoKToKICAgICAgICAgaWYg
a2V5ID09IHVuaXRNYXJrZXI6CiAgICAgICAgICAgICBjb250aW51ZQpJbmRleDogTGF5b3V0VGVz
dHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgTGF5b3V0
VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcg
KzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRlc3RSdW5uZXIgPSB7CiAgICAgbmV2
ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlvbiwKLSAgICBudW1iZXJPZkRGR0Nv
bXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51bWJlck9mREZHQ29tcGlsZXM6IChm
dW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAgICAgcmV0dXJuIChmKSA9PiB7Cisg
ICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51
bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAgICAgIC8vIEVtdWxhdGUgcnVubmluZyB0
aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0aWVyaW5nIGJlZm9yZSByZXR1cm5p
bmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAgICAgICAgIG1hcCA9IG5l
dyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50ID0gbWFwLmdldChmKSB8fCAwOworICAg
ICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIG1hcC5zZXQoZiwgY291bnQpOworICAg
ICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsKKyAgICAgICAgfTsKKyAgICB9KSgp
LAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4dE5ld0NvZGVCbG9jawogfTsKIApA
QCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBfYSwg
X2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKICAgCiAgIHRyeSB7Ci0g
ICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQorICAgIHdoaWxlICghZGZn
Q29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkp
OworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgIH0gY2F0Y2ggKGUpIHsKICAg
ICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBAIGZ1bmN0aW9uIGRmZ0luY3JlbWVu
dChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0cykKICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkpCisgICAgaWYg
KCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
biAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3RhcnQgOiAwOwogICAgIAogICAgIHJl
dHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417927</attachid>
            <date>2021-01-19 17:07:49 -0800</date>
            <delta_ts>2021-01-20 14:36:53 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>620438</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAorLy90ZXN0TGlzdCA9IFsnY3J5cHRvLWFlcy1TUCddOwor
CiBpZiAodHlwZW9mIHRlc3RJdGVyYXRpb25Db3VudCA9PT0gInVuZGVmaW5lZCIpCiAgICAgdGVz
dEl0ZXJhdGlvbkNvdW50ID0gdW5kZWZpbmVkOwogCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL2JlbmNobWFyay1ydW5uZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw4IEBACiAv
LyBGSVhNRTogVXNlIHRoZSByZWFsIHByb21pc2UgaWYgYXZhaWxhYmxlLgogLy8gRklYTUU6IE1h
a2Ugc3VyZSB0aGlzIGludGVyZmFjZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHJlYWwgUHJvbWlz
ZS4KKworX19kaXNhYmxlU2FtcGxpbmdQcm9maWxlcigpOworCiBmdW5jdGlvbiBTaW1wbGVQcm9t
aXNlKCkgewogICAgIHRoaXMuX2NoYWluZWRQcm9taXNlID0gbnVsbDsKICAgICB0aGlzLl9jYWxs
YmFjayA9IG51bGw7CkBAIC0xMjgsMTcgKzEzMSwyMSBAQCBCZW5jaG1hcmtSdW5uZXIucHJvdG90
eXBlLl9ydW5UZXN0ID0gZnVuCiAKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcu
JyArIHRlc3QubmFtZSArICctc3RhcnQnKTsKICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7Cisg
ICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgdGVzdC5ydW4ocHJlcGFyZVJldHVy
blZhbHVlLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpOworICAgIF9fZGlzYWJsZVNh
bXBsaW5nUHJvZmlsZXIoKTsKICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgIHNlbGYuX3dy
aXRlTWFyayhzdWl0ZS5uYW1lICsgJy4nICsgdGVzdC5uYW1lICsgJy1zeW5jLWVuZCcpOwogCiAg
ICAgdmFyIHN5bmNUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTsKIAogICAgIHZhciBzdGFydFRp
bWUgPSBub3coKTsKKyAgICBfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgLy8gU29tZSBicm93c2VycyBkb24ndCBpbW1lZGlh
dGVseSB1cGRhdGUgdGhlIGxheW91dCBmb3IgcGFpbnQuCiAgICAgICAgIC8vIEZvcmNlIHRoZSBs
YXlvdXQgaGVyZSB0byBlbnN1cmUgd2UncmUgbWVhc3VyaW5nIHRoZSBsYXlvdXQgdGltZS4KICAg
ICAgICAgdmFyIGhlaWdodCA9IHNlbGYuX2ZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsKKyAgICAgICAgX19kaXNhYmxlU2FtcGxpbmdQcm9m
aWxlcigpOwogICAgICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgICAgICBzZWxmLl9mcmFt
ZS5jb250ZW50V2luZG93Ll91bnVzZWRIZWlnaHRWYWx1ZSA9IGhlaWdodDsgLy8gUHJldmVudCBk
ZWFkIGNvZGUgZWxpbWluYXRpb24uCiAgICAgICAgIHNlbGYuX3dyaXRlTWFyayhzdWl0ZS5uYW1l
ICsgJy4nICsgdGVzdC5uYW1lICsgJy1hc3luYy1lbmQnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW8KIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbkFzRG91YmxlTnVtYmVyKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkKTsKIAogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MpOwogCkBAIC02NjIsNiArNjYz
LDggQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVtYmVy
IiwgZnVuY3Rpb25Bc0RvdWJsZU51bWJlciwgMSk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJpc0RGR0VuYWJsZWQiLCBmdW5jdGlvbklzREZHRW5hYmxlZCwgMCk7CisKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJkcm9wQWxsTG9ja3MiLCBmdW5jdGlvbkRyb3BBbGxMb2NrcywgMSk7CiAK
ICAgICAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZv
clRlc3RpbmcoKSkgewpAQCAtMjY1Myw2ICsyNjU2LDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkFzRG91YmwKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91Ymxl
TnVtYmVyKG51bSkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RG
R0VuYWJsZWQsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKE9wdGlvbnM6OnVzZURGR0pJVCgpKSk7Cit9CisKIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2NrcywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQogewogICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBib29sIHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoY29kZUJsb2Nr
ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0
aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2Rl
Ojppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlz
YXNzZW1ibHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21T
aWduYXR1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFu
ZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpA
QCAtMjY5LDcgKzI3MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpk
dW0KIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVt
cEhlYWRlcihibG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBA
IHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQu
cHJpbnQoImJiIyIsIGJsb2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0
aW9uc0F0SGVhZCkgeworICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFk
OiBbIik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
QXRIZWFkLT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YSgiLCAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9u
cy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKG91dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAg
ICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7
CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQo
aSArIGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNv
ZGUoY3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNs
YXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01h
cCYgPSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0
ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsK
KyAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFt
JiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFw
KCkpOwogCiAgICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFu
dHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R3JhcGguaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1
YmxpYzoKIAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9p
ZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+
IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUo
KSkKKyAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGUsIHRydWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVy
ID0gV1RGOjpkYXRhRmlsZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1w
ZXI8Q29kZUJsb2NrVHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRo
aXMsIHNwZWN1bGF0aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8vIE5vIHVzZXMuCiAgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0gICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICBj
YXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2ptcDoKICAgICBjYXNlIG9wX25ld19vYmpl
Y3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgICAgICByZXR1cm47CiAKKyAgICBV
U0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQb2ludGVyKQogICAgIFVTRVMoT3BUb1RoaXMs
IHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHosIHRhcmdldFZpcnR1YWxSZWdpc3RlcikKICAg
ICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwgc3JjRHN0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5
cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0
LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1
Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQorICAgIGlmICgodGhpcy0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQogICAgICAgICBvdXQucHJpbnQo
IiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwogICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+
bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKE5ldmVySW5saW5lKSIpOwpAQCAt
MjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0K
ICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFw
KTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRoaXMtPmluc3RydWN0aW9ucygpKTsK
LSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywg
aW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01hcCk7CisgICAgQ29kZUJsb2NrQnl0
ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBn
cmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7CiB9CiAKIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06
OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNNYXApCkBAIC0yOTUsNiArMjk1LDcg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9vd25l
ckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0
KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50
ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKQorICAgICwgbV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpCiAgICAgLCBtX2NvbnN0YW50
UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMpCiAgICAgLCBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCkBA
IC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUq
IAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKIAogICAgIEFTU0VSVChz
b3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFt
ZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRlcnMgPSBvdGhlci5udW1QYXJhbWV0ZXJzKCk7
CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC04NTAs
NyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAvLyB0byB0aGUgQ29kZUJs
b2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIENvZGVC
bG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiB0aGUg
Q29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAg
ICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7CiAjZW5kaWYK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJlbW92ZSh0aGlzKTsKQEAgLTEwMzcsNyArMTAz
OSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJ
bnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBq
ZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNv
IGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4g
YXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5
KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNl
KFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1
OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAog
ICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkxP
TEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShK
SVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29u
ZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNo
YXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2
OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAogICAgICAgICBkZmdDb21t
b24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEy
MjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8g
SW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxp
bmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQg
ZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xk
IGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgot
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBA
IC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBl
KCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzog
U2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJ
Q3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAg
ICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAgIH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTUyOCw3ICsxNTM2LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAg
ICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgZGZn
Q29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYg
KzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3Vu
dGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNN
YXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbElu
Zm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmlyc3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52
YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBAIC0xNzc1LDggKzE3ODQsMTAg
QEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICBpZiAoZGZn
Q29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2Fs
bEZyYW1lIDogKmRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAgQVNT
RVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAg
ICAgICAvLyBUaGlzIHdpbGwgdHJhbnNpdGl2ZWx5IGtlZXAgdGhlIGJhc2VsaW5lIGNvZGUgYmxv
Y2sgYWxpdmUuIEl0J3MgZWFzaWVyIHRvIG5vdCB3b3JyeSB0aGF0IHdlJ3JlIHJlbHlpbmcgb24g
dGhlIExPTCBDb2RlQmxvY2sgc29tZWhvdy4KKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAg
ICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKGNvZGVCbG9jayk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTE4MTAs
MTIgKzE4MjEsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5k
ZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlz
aXRvcik7CiAgICAgfQogI2VuZGlmCisKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkxP
TEpJVCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQobV9hbHRlcm5hdGl2ZSk7CiB9CiAKIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODIzLDcgKzE4MzcsNyBAQCB2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAgICAgVU5VU0VEX1BBUkFNKHZp
c2l0b3IpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE4NTksNiArMTg3MywyNSBAQCBDb2Rl
QmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVBbHRlcm5hdGl2CiAjZW5kaWYKIH0KIAorQ29kZUJs
b2NrKiBDb2RlQmxvY2s6OmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpCit7CisjaWYgRU5BQkxF
KEpJVCkKKyAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHRoaXM7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgYXV0byBqaXRUeXBlID0gcmVzdWx0LT5qaXRUeXBlKCk7CisgICAgICAgIGlmIChq
aXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVCB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRU
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IHJlc3Vs
dC0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OworI2Vsc2UKKyAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCiBDb2RlQmxvY2sqIENvZGVC
bG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtMTg2Nyw3ICsx
OTAwLDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAg
IHJldHVybiB0aGlzOwogICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAg
ICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNl
bGZKSVRUeXBlKSkgeworICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJs
b2NrKHNlbGZKSVRUeXBlKSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBi
ZSBudWxsIGlmIHdlJ3ZlIGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUK
ICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4
ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0
aGUgY3VycmVudCBjb2RlQmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBh
biBvcHRpbWl6aW5nIEpJVApAQCAtMTkzMSw3ICsxOTY0LDcgQEAgSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckluZGV4KAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2Nr
OjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5h
bENhbGxTaXRlKQogewogI2lmIEVOQUJMRShERkdfSklUKQotICAgIFJFTEVBU0VfQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdl
dENvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSkpOwogICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJ
bmRleChvcmlnaW5hbENhbGxTaXRlLmJpdHMoKSkpOwogICAgIENvZGVPcmlnaW4gb3JpZ2luYWxP
cmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpOwpAQCAtMjIzMSw1MSArMjI2NCw1
NSBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8gYWNj
b21wbGlzaCB0d28gdGhpbmdzIGhlcmU6Ci0gICAgLy8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhp
cyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4g
dG8gaXQKKyAgICAvLyAxKSBJZiB3ZSdyZSBERkcvRlRMLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGlz
IENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0
byBpdAogICAgIC8vICAgIHdlIHNob3VsZCBPU1IgZXhpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0
IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRoZSByZXR1cm4uCiAgICAgLy8gMikgTWFrZSBz
dXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIgZXhlY3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRu
J3QgY2FsbCB0aGlzIENvZGVCbG9jay4KIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNE
RkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNs
ZWFyV2F0Y2hwb2ludHMoKTsKLSAgICAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvT2xkQWdlKSB7Ci0gICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGls
YXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKLSAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5z
ZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBU
aGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0
IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCi0gICAgICAgIGlmICghaml0Q29kZSgp
LT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9
IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5o
ZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsK
KyAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShjb21waWxhdGlvbikpCisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRp
c29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBhYm91
dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgorICAgICAgICAgICAgaWYgKCFqaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1
c3koKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAg
ICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRhdGFMb2coIiAg
ICBEaWQgaW52YWxpZGF0ZSAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiAgICAgCiAgICAgLy8gQ291bnQgdGhlIHJlb3B0aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0
IHRoZSB1c2VyIHdhbnRlZC4KICAgICBpZiAobW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBjYWxsIGFsdGVybmF0aXZlKCku
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2
NzcKICAgICAgICAgYmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7
CisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3Nl
bWJseSgpKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIERpZCBjb3VudCByZW9wdGltaXphdGlv
biBmb3IgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmICh0aGlz
ICE9IHJlcGxhY2VtZW50KCkpIHsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUg
bmV2ZXIgdGhlIGVudHJ5cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUK
ICAgICAgICAgLy8gYmxvY2tzLgorICAgICAgICAvLyBPciwgd2UncmUgYW4gTE9MIENvZGVCbG9j
ayBhbmQgd2VyZSBhbHJlYWR5IGpldHRpc29uZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoYWx0ZXJuYXRpdmUoKSkKICAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVB
ZnRlcldhcm1VcCgpOwogCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVU
b09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQorICAg
IGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkgJiYgcmVhc29uICE9IFByb2ZpbGVy
OjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVU
b1ZNVHJhcHMpCiAgICAgICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKIAogICAgIC8vIEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBX
ZSBkb24ndCB3YW50IHRvIGluc3RhbGwgY29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQogICAgIC8v
IGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgYSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBz
ZXQuCkBAIC0yMzA2LDcgKzIzNDMsNyBAQCBKU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9i
YWxPYmplY3RGCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIGds
b2JhbE9iamVjdCgpOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJh
c2VsaW5lQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKIH0KIAogY2xhc3MgUmVjdXJzaW9uQ2hl
Y2tGdW5jdG9yIHsKQEAgLTIzNjUsNyArMjQwMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJ
bmNvbWluZ0NhbGwoQ2FsbEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaGFz
QmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICBpZiAoIWhhc0Jhc2VsaW5lT3JMT0xQcm9maWxp
bmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFERkc6Om1pZ2h0SW5saW5lRnVuY3Rp
b24odGhpcykpCkBAIC0yMzkwLDcgKzI0MjcsNyBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5j
b21pbmdDYWxsKENhbGxGCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAg
ICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
ICAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCksICIgICAgQ2xlYXJpbmcgU0FCSSBiY2F1
c2UgY2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXplZC4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MjQ4MywxMiArMjUyMCwxNCBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGls
ZXMoCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwog
ICAgIGlmIChPcHRpb25zOjp0ZXN0VGhlRlRMKCkpIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VERkdKSVQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAobV9kaWRGYWls
RlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gMTAwMDAwMDsKICAgICAgICAgcmV0
dXJuIChtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyOwogICAgIH0KICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gdGhpcy0+
cmVwbGFjZW1lbnQoKTsKLSAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09w
dGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcjsKKyAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2Rl
Ojppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXI7CiB9CiAKIGludDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRo
cmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdApAQCAtMjY0MSw3ICsyNjgwLDcgQEAgYXV0byBDb2Rl
QmxvY2s6OnVwZGF0ZU9TUkV4aXRDb3VudGVyQW5kQwogCiAgICAgYm9vbCBkaWRUcnlUb0VudGVy
SW5Mb29wID0gZmFsc2U7CiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7
IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNh
bGxGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CisgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsKICAgICAgICAgICAgIGRpZFRyeVRvRW50
ZXJJbkxvb3AgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3MDks
NyArMjc0OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXQKIHZv
aWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEpJVFR5cGUgdHlwZSA9IGpp
dFR5cGUoKTsKLSAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgIGlm
ICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHR5cGUgIT0gSklUVHlwZTo6TE9MSklU
KSB7CiAgICAgICAgIGRhdGFMb2dMbigqdGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGlu
ZSBjb2RlIGJ1dCBoYXZlICIsIHR5cGUpOwogICAgICAgICBDUkFTSF9XSVRIX0lORk8oYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oaml0Q29kZSgpLmdldCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4o
dHlwZSkpOwogICAgIH0KQEAgLTI3MjcsNyArMjc2Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRP
cHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNh
c2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNl
bWVudCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09y
RlRMKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKICAgICAgICAgb3B0aW1pemVOZXh0SW52b2Nh
dGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKQEAg
LTI3NTYsNyArMjc5NSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hv
bGQKICAgICAKIHVpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQo
dWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIC8vQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKTsgLy8gT09QUzogV2UgY2FsbCB0aGlzIGZyb20gdGhlIExPTCBjb21w
aWxlciB0aHJlYWQgYmVmb3JlIGluc3RhbGwuCisKICAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxh
bWUgd2F5IHNvIHdlIGRvbid0IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkK
ICAgICAvLyBlbm91Z2ggdGhhdCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4KICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBkZXNpcmVkVGhyZXNob2xkOwpAQCAtMjgzNiw3ICsyODc2LDcgQEAgREZHOjpD
b2RlT3JpZ2luUG9vbCYgQ29kZUJsb2NrOjpjb2RlT3JpZwogCiBzaXplX3QgQ29kZUJsb2NrOjpu
dW1iZXJPZkRGR0lkZW50aWZpZXJzKCkgY29uc3QKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICByZXR1cm4gbV9qaXRDb2RlLT5k
ZmdDb21tb24oKS0+ZGZnSWRlbnRpZmllcnMuc2l6ZSgpOwpAQCAtMjg0Nyw3ICsyODg3LDcgQEAg
Y29uc3QgSWRlbnRpZmllciYgQ29kZUJsb2NrOjppZGVudGlmaWVyKAogICAgIHNpemVfdCB1bmxp
bmtlZElkZW50aWZpZXJzID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsK
ICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmll
cnMpCiAgICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0g
ICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICByZXR1cm4gbV9qaXRDb2Rl
LT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmllcnNbaW5kZXggLSB1bmxpbmtlZElkZW50aWZpZXJz
XTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKQEAgLTI5MTIsMTggKzI5NTIsMTkgQEAg
dm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKCkKICAgICB1cGRhdGVBbGxBcnJh
eVByZWRpY3Rpb25zKCk7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygp
Citib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVUb0RGR05vdygpCiB7CiAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAq
dGhpcywgIi4uLiIpOwogCiAgICAgaWYgKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IE9w
dGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAKLSAgICB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7CisgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICBiYXNlbGluZUNv
ZGVCbG9jay0+dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogICAgIAogICAgIHVuc2lnbmVk
IG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKICAgICB1bnNpZ25lZCBudW1i
ZXJPZlNhbXBsZXNJblByb2ZpbGVzOwotICAgIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rp
b25zQW5kQ291bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMs
IG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOworICAgIGJhc2VsaW5lQ29kZUJsb2NrLT51cGRh
dGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MobnVtYmVyT2ZMaXZl
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAog
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZ0YoCkBAIC0y
OTQ4LDcgKzI5ODksOCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogI2lm
IEVOQUJMRShERkdfSklUKQogdm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Cisg
ICAgLy8gT09QUworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwog
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShhbHRlcm5hdGl2ZSgpLT5qaXRUeXBl
KCkpKTsKICAgICAKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2ZSgp
OwpAQCAtMzA1MCw2ICszMDkyLDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVy
Q291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklU
OgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJl
Z2lzdGVyQ291bnRGb3IodGhpcyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApAQCAtMzIyNiwx
NCArMzI2OSwxNCBAQCB2b2lkIENvZGVCbG9jazo6YWRkQnJlYWtwb2ludCh1bnNpZ25lZCBuCiB7
CiAgICAgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsKICAgICBBU1NFUlQobV9u
dW1CcmVha3BvaW50cyk7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpl
dHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJCcmVha3BvaW50KTsKIH0KIAog
dm9pZCBDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZShDb2RlQmxvY2s6OlN0ZXBwaW5nTW9kZSBt
b2RlKQogewogICAgIG1fc3RlcHBpbmdNb2RlID0gbW9kZTsKLSAgICBpZiAobW9kZSA9PSBTdGVw
cGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb0Rl
YnVnZ2VyU3RlcHBpbmcpOwogfQogCkBAIC0zMjk2LDcgKzMzMzksNyBAQCBVbmFyeUFyaXRoUHJv
ZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiAKIGJvb2wgQ29kZUJsb2NrOjpjb3VsZFRha2VT
cGVjaWFsQXJpdGhGYXN0Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAg
aWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgIGlmICghaGFzQmFzZWxpbmVPckxP
TFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlID0gYmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKICAgICBpZiAoIXByb2ZpbGUpCkBAIC0zNDIxLDkgKzM0NjQsOSBAQCBPcHRpb25h
bDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OmJ5dGVjCiB7CiAgICAgT3B0aW9uYWw8Qnl0ZWNv
ZGVJbmRleD4gYnl0ZWNvZGVJbmRleDsKICAgICBKSVRUeXBlIGppdFR5cGUgPSB0aGlzLT5qaXRU
eXBlKCk7Ci0gICAgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCBq
aXRUeXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIGlmIChKSVRDb2RlOjpjYWxsU2l0
ZUJpdHNBcmVCeXRjb2RlSW5kZXgoaml0VHlwZSkpCiAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBj
YWxsU2l0ZUluZGV4LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBlbHNlIGlmIChqaXRUeXBlID09IEpJ
VFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgIGVsc2Ug
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2Rl
T3JpZ2luKGNhbGxTaXRlSW5kZXgpKTsKICAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBjb2Rl
T3JpZ2luKGNhbGxTaXRlSW5kZXgpOwpAQCAtMzQ2Niw3ICszNTA5LDcgQEAgYm9vbCBDb2RlQmxv
Y2s6Omhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcAogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJl
IGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAgICAvLyBjYXJl
ZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5kbGVyIHNhZmUs
IGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50IG9mIG1faml0
Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAg
IGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmhhc0luc3RhbGxlZFZNVHJh
cHNCcmVha3BvaW50cygpOwogI2Vsc2UKQEAgLTM0ODAsNyArMzUyMyw3IEBAIGJvb2wgQ29kZUJs
b2NrOjppbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBi
ZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAgICAgLy8gY2Fy
ZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFuZGxlciBzYWZl
LCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBtX2pp
dENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAg
ICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGF1dG8mIGNvbW1vbkRhdGEgPSAqbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAg
ICBjb21tb25EYXRhLmluc3RhbGxWTVRyYXBCcmVha3BvaW50cyh0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTk2LDYgKzE5Niw3IEBAIHB1YmxpYzoKIAogICAgIENvZGVCbG9jayogYWx0ZXJu
YXRpdmVGb3JKZXR0aXNvbigpOyAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlQmxvY2sq
IGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlQmxvY2sq
IGxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBHZXQgcmlk
IG9mIHRoaXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMzY3NwpAQCAtMzQ3LDcgKzM0OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbGlrZWx5VG9U
YWtlU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAg
aWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgICAgICBpZiAoIWhhc0Jhc2VsaW5l
T3JMT0xQcm9maWxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9
IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGJ5dGVjb2RlSW5k
ZXgpOwpAQCAtMzU2LDcgKzM1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY291bGRUYWtlU2xv
d0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAgaWYgKCFo
YXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lT3JMT0xQ
cm9maWxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVD
YXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwpA
QCAtNDM2LDkgKzQzNywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CisgICAgYm9vbCBo
YXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBq
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIEpJVFR5cGUgdHlwZSA9
IGppdFR5cGUoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQg
fHwgdHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CiAgICAgfQogICAgIAogI2lmIEVOQUJMRShKSVQp
CkBAIC01MTEsNiArNTEzLDcgQEAgcHVibGljOgogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBm
b3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBG
dW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpAQCAtNTM5LDcgKzU0Miw3IEBA
IHB1YmxpYzoKICAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5zIGltcGxpZXMgdGhhdCB0aGVyZSBo
YXMgYmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wgaGFzQ29kZU9yaWdpbnMoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpOworICAg
ICAgICByZXR1cm4gSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpOwogICAgIH0KICAgICAg
ICAgCiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENhbGxTaXRlSW5kZXggaW5kZXgpCkBAIC04
MDMsNyArODA2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mREZHQ29tcGlsZXMo
KSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAotICAgIGJvb2wgc2hvdWxkT3B0aW1pemVOb3coKTsK
KyAgICBib29sIHNob3VsZE9wdGltaXplVG9ERkdOb3coKTsKICAgICB2b2lkIHVwZGF0ZUFsbFZh
bHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAgICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRpY3Rp
b25zKCk7CiAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lkIENvZGVCbG9jazo6
Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1fdmFs
dWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKK30KIAordGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoQ2F0Y2hQcm9maWxlKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgaWYg
KGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKGF1dG8m
IHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKQorICAgICAgICAgICAg
ZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgQ29k
ZU9yaWdpbjo6aXNBcHByb3hpbWF0ZWx5RXF1YWxUbygKICAgICAgICAgaWYgKCFhSGFzSW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgICAgICBp
ZiAoYUlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgIT0gYklubGluZUNh
bGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisgICAgICAgIGlmIChhSW5saW5lQ2Fs
bEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpICE9IGJJbmxpbmVDYWxsRnJhbWUt
PmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBhID0gYUlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwpA
QCAtOTksNyArOTksNyBAQCB1bnNpZ25lZCBDb2RlT3JpZ2luOjphcHByb3hpbWF0ZUhhc2goSW5s
CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgPT0gdGVybWluYWwpCiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAKLSAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxK
U0NlbGwqPjo6aGFzaChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsK
KyAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChpbmxpbmVDYWxs
RnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICAKICAgICAgICAg
Y29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgIH0KQEAgLTEy
MSw3ICsxMjEsNyBAQCBDb2RlQmxvY2sqIENvZGVPcmlnaW46OmNvZGVPcmlnaW5Pd25lcigpCiAg
ICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gdGhpcy0+aW5saW5lQ2FsbEZyYW1lKCk7CiAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgIHJldHVybiBi
YXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwogfQog
CiBpbnQgQ29kZU9yaWdpbjo6c3RhY2tPZmZzZXQoKSBjb25zdApAQCAtMTQ1LDcgKzE0NSw3IEBA
IHZvaWQgQ29kZU9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKICAgICAgICAgICAgIG91
dC5wcmludCgiIC0tPiAiKTsKICAgICAgICAgCiAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWUq
IGZyYW1lID0gc3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgICAgIG91dC5w
cmludChmcmFtZS0+YnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1BvaW50ZXIo
ZnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwgIj4gIik7CisgICAgICAgICAgICBvdXQu
cHJpbnQoZnJhbWUtPmJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVy
KGZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwgIj4gIik7CiAgICAgICAgICAg
ICBpZiAoZnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIo
Y2xvc3VyZSkgIik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0aW5nSklUVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgRXhpCiAgICAgY2FzZSBFeGl0RnJvbUFueXRoaW5nOgogICAgICAgICBvdXQucHJpbnQoIkZy
b21Bbnl0aGluZyIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0RnJvbUxPTDoKKyAg
ICAgICAgb3V0LnByaW50KCJGcm9tTE9MIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4
aXRGcm9tREZHOgogICAgICAgICBvdXQucHJpbnQoIkZyb21ERkciKTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRU
eXBlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGl0aW5nSklUVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiAgICAgRXhpdEZy
b21Bbnl0aGluZywKKyAgICBFeGl0RnJvbUxPTCwKICAgICBFeGl0RnJvbURGRywKICAgICBFeGl0
RnJvbUZUTAogfTsKQEAgLTM4LDYgKzM5LDggQEAgZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4
X3QgewogaW5saW5lIEV4aXRpbmdKSVRUeXBlIGV4aXRpbmdKSVRUeXBlRm9yKEpJVFR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAg
ICAgICAgcmV0dXJuIEV4aXRGcm9tTE9MOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAg
ICAgICByZXR1cm4gRXhpdEZyb21ERkc7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1l
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE3ICs0NSwxNyBAQCBK
U0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUZvckNhCiAKIENvZGVCbG9ja0hhc2gg
SW5saW5lQ2FsbEZyYW1lOjpoYXNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYmFzZWxpbmVDb2Rl
QmxvY2stPmhhc2goKTsKKyAgICByZXR1cm4gbG9sT3JCYXNlbGluZUNvZGVCbG9jay0+aGFzaCgp
OwogfQogCiBDU3RyaW5nIElubGluZUNhbGxGcmFtZTo6aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5oYXNoQXNTdHJpbmdJZlBv
c3NpYmxlKCk7CisgICAgcmV0dXJuIGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmhhc2hBc1N0cmlu
Z0lmUG9zc2libGUoKTsKIH0KIAogQ1N0cmluZyBJbmxpbmVDYWxsRnJhbWU6OmluZmVycmVkTmFt
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihiYXNl
bGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLT5lY21hTmFtZSgpLnV0ZjgoKTsKKyAg
ICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGxvbE9yQmFzZWxpbmVDb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpKS0+ZWNtYU5hbWUoKS51dGY4KCk7CiB9CiAKIHZvaWQgSW5s
aW5lQ2FsbEZyYW1lOjpkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wQnJp
ZWZGdW5jdGlvbkkKIAogdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50
KGJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKSk7CisgICAgb3V0LnByaW50KGJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbigp
LCAiOjwiLCBSYXdQb2ludGVyKGxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpKTsKICAgICBp
ZiAoaXNJblN0cmljdENvbnRleHQoKSkKICAgICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1vZGUp
Iik7CiAgICAgb3V0LnByaW50KCIsICIsIGRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4KCksICIs
ICIsIHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAg
IH0KICAgICAKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJndW1lbnRzV2l0aEZpeHVwOyAv
LyBJbmNsdWRlcyAndGhpcycgYW5kIGFyaXR5IGZpeHVwcy4KLSAgICBXcml0ZUJhcnJpZXI8Q29k
ZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKKyAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBs
b2xPckJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCiAg
ICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90IGlu
Y2x1ZGUgZml4dXBzLgpAQCAtMjMxLDIwICsyMzEsMjEgQEAgc3RydWN0IElubGluZUNhbGxGcmFt
ZSB7CiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3Rh
Y2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3Rh
Y2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgp
OyB9CiAKLSAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0luU3RyaWN0Q29udGV4dCgpOyB9Cisg
ICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGxvbE9yQmFzZWxpbmVD
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0luU3RyaWN0Q29udGV4dCgpOyB9CiAKICAg
ICB2b2lkIGR1bXBCcmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oUHJpbnRTdHJlYW0mKSBjb25zdDsK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogCiAgICAgTUFLRV9QUklOVF9N
RVRIT0QoSW5saW5lQ2FsbEZyYW1lLCBkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uLCBicmll
ZkZ1bmN0aW9uSW5mb3JtYXRpb24pOwotCiB9OwogCiBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVDYWxsRnJhbWUpOwotICAgIHJldHVy
biBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgIGlmIChDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBA
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVyYW5k
c0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJhbmRz
IHsKIHB1YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9wZXJh
bmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3Vt
ZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG51
bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAgICwg
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qgc2l6
ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAh
IXRyYWNrQ2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBpZiAo
IVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAgICAg
bV92YWx1ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBU
JiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50
cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMs
IGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1
bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVt
Q29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cobnVt
QXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3co
bnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJh
Y2tDYWxsZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQog
ICAgIApAQCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5kcyhP
cGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlh
bFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJn
dW1lbnRzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkK
KyAgICAgICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQogICAg
IHsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3ZhbHVl
cy5maWxsKGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAKICAg
ICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50
czsgfQogICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTG9j
YWxzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9CisgICAg
c2l6ZV90IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFudHM7
IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6
ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJPZkNv
bnN0YW50cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0g
dHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+Cisg
ICAgc2l6ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlcy5zaXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlkeCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0gICAg
ICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsK
KyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50SW5k
ZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJP
ZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAgc2l6
ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
ZHggPCBudW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRz
KCkgKyBpZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7Cisg
ICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIGlk
eDsKKyAgICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVl
c1t0bXBJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZUeXBl
IGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJvb2wg
Zm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxl
ZT4+CisgICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAg
ICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXplX3Qg
aWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZU
eXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgo
aWR4KV07IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92
YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFudChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9
CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6ZV90
IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSAr
IHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mVG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXpl
OwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAgICAg
ICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMu
Z3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkg
KyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUg
KyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlmIChl
bnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFs
aXphdGlvbikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgb3Bl
cmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVlSW5k
ZXgoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRvQ29u
c3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2Fs
KCkpOwogICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAogICAg
IFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZSgp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9B
cmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7
CiAgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBAIC0z
MzgsNiArMzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2Nh
bHMoKTsKICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBAIC0z
NjQsOSArNDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4IDwg
bnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsK
LSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsg
bnVtYmVyT2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJPZkFy
Z3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodHJh
Y2tDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSkp
OwogICAgIH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHBy
aXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBh
cmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBh
cmUgdG1wcy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMgYXJl
IGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQgbV9u
dW1Db25zdGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAgIFN0
b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAgICAg
dW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFudHMg
eyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CkBA
IC01NywxMCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0
cgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIs
IHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAgICAg
fQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgImNhbGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9pZCBP
cGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudElu
ZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgsNiAr
ODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgs
ICI6IiwgdG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxs
ZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhj
ZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSA9IGppdC0+Y29kZUJsb2NrKCktPmppdENvZGUoKS0+bGl2
ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoaml0LT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOwogICAgICAgICBtX25lZWRzVG9SZXN0
b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24gPSBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgPiAwOwogICAgICAg
ICBpZiAobV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKQotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCkt
PmppdFR5cGUoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdP
ckZUTChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdp
c3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhj
ZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwogICAg
ICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKQEAgLTcxMCw3ICs3MTAsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGlj
QWNjZXNzCiAgICAgICAgIC8vIFdlIHNldCB0aGVzZSB0byBpbmRpY2F0ZSB0byB0aGUgc3R1YiB0
byByZW1vdmUgaXRzZWxmIGZyb20gdGhlIENvZGVCbG9jaydzCiAgICAgICAgIC8vIGV4Y2VwdGlv
biBoYW5kbGVyIHRhYmxlIHdoZW4gaXQgaXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIGNvZGVCbG9j
a1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMgPSBjb2RlQmxvY2s7Ci0gICAgICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVy
cy0+aml0VHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVC
bG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOwogICAgICAgICBjYWxs
U2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcgPSBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhj
ZXB0aW9uSGFuZGxpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24oU3Bl
Y3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7CiB9
CiAKK2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlw
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNvZGVE
b3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50MzJP
bmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0cnVj
dCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRh
dGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRo
aXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUu
CiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJsaWM6
CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbnQp
OwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBp
bnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OwpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7
IH0KICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xv
Y2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Cisg
ICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1
bWVudChtX3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wgaXNI
ZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVh
bFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9j
YWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAgLTEx
Nyw2ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50
IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFu
ZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRo
aXNBcmd1bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChp
bnQgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0YW50
SW5kZXgpIHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRl
eDsgfQogCiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUsOSBA
QCBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJuIFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50
KSArIG9mZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
Rm9yQ29uc3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0
LDcgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwgdmFy
aWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFs
dWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFsdWVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJzZWN0
aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBB
YnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNB
dEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFsdWU6
OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVk
ZSAiSGVhcC5oIgogI2luY2x1ZGUgIkluQnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkluc3RhbmNl
T2ZTdGF0dXMuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW1tdXRhYmxlQnV0
dGVyZmx5LmgiCkBAIC05MDUsNyArOTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
biBwcmVkaWN0aW9uOwogICAgICAgICB9OwogCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5dGVj
b2RlT2Zmc2V0KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgQ29kZU9yaWdpbihi
eXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUoKSkpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tB
bmRCeXRlY29kZU9mZnNldChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmJhc2Vs
aW5lQWx0ZXJuYXRpdmUoKSwgQ29kZU9yaWdpbihieXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJh
bWUoKSkpOwogICAgICAgICBpZiAocHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKICAgICAgICAgICAg
IHJldHVybiBwcmVkaWN0aW9uOwogCkBAIC05MzksNyArOTQwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHdoaWxlIChzdGFjay0+bV9pbmxpbmVDYWxsRnJhbWUgIT0gY29kZU9yaWdpbi0+aW5s
aW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay0+bV9jYWxsZXI7
CiAKLSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNv
ZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5tX3Byb2ZpbGVkQmxvY2ssICpjb2RlT3Jp
Z2luKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZv
ckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5tX3Byb2ZpbGVkQmxvY2stPmJhc2Vs
aW5lQWx0ZXJuYXRpdmUoKSwgKmNvZGVPcmlnaW4pOwogICAgICAgICB9CiAKICAgICAgICAgZGVm
YXVsdDoKQEAgLTk4Miw4ICs5ODMsOSBAQCBwcml2YXRlOgogCiAgICAgQXJyYXlNb2RlIGdldEFy
cmF5TW9kZShBcnJheVByb2ZpbGUmIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uKQogICAg
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrKTsKKyAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrKTsKICAgICAgICAgYm9vbCBtYWtlU2FmZSA9
IHByb2ZpbGUub3V0T2ZCb3VuZHMobG9ja2VyKTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZTo6
ZnJvbU9ic2VydmVkKGxvY2tlciwgJnByb2ZpbGUsIGFjdGlvbiwgbWFrZVNhZmUpOwogICAgIH0K
QEAgLTE2NjgsNyArMTY3MCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9k
ZSogY2EKICAgICBjb25zdCBJbnN0cnVjdGlvbiogc2F2ZWRDdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2N1cnJlbnRJbnN0cnVjdGlvbjsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxp
emF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQp
OwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxl
KCktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmxvbE9yQmFzZWxp
bmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpbnNlcnRDaGVja3MoY29k
ZUJsb2NrKTsKIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMhCkBAIC02ODcz
LDcgKzY4NzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBIYXNoU2V0PHVuc2lnbmVkLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gc2VlbkFyZ3VtZW50czsK
IAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPm1fbG9jayk7CiAKICAgICAgICAgICAg
ICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIm
IHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQo
cHJvZmlsZS5tX29wZXJhbmQpOwpAQCAtODM0NSwyMyArODM0NywyOCBAQCBCeXRlQ29kZVBhcnNl
cjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgewogICAgICAgICBtX2V4aXRQcm9maWxl
LmluaXRpYWxpemUobV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKIAotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgbV9sYXp5T3BlcmFuZHMuaW5pdGlhbGl6ZShsb2NrZXIsIG1fcHJvZmlsZWRCbG9j
ay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKGxvY2tlcikpOworICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvKiBjb2RlQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
OworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CisgICAgICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFsaXplKGxvY2tlciwgY29kZUJs
b2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2VyKSk7CisgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIC8vIFdlIGRvIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgbG9jayBiZWNhdXNl
IHdlIHdhbnQgdG8gZW5jb3VyYWdlIFN0cnVjdHVyZVN0dWJJbmZvJ3MKICAgICAgICAgLy8gdG8g
YmUgcG90ZW50aWFsbHkgYWRkZWQgdG8gb3BlcmF0aW9ucyBhbmQgYmVjYXVzZSB0aGUgcHJvZmls
ZWQgYmxvY2sgY291bGQgYmUgaW4gdGhlCiAgICAgICAgIC8vIG1pZGRsZSBvZiBMTEludC0+SklU
IHRpZXItdXAgaW4gd2hpY2ggY2FzZSB3ZSB3b3VsZCBiZSBhZGRpbmcgdGhlIGluZm8ncyByaWdo
dCBub3cuCi0gICAgICAgIGlmIChtX3Byb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lSklUUHJvZmls
aW5nKCkpCi0gICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2stPmdldElDU3RhdHVzTWFwKGxvY2tl
ciwgbV9iYXNlbGluZU1hcCk7CisgICAgICAgIGlmIChtX3Byb2ZpbGVkQmxvY2stPmhhc0Jhc2Vs
aW5lT3JMT0xQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jay0+Z2V0SUNT
dGF0dXNNYXAobV9iYXNlbGluZU1hcCk7CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogb3B0
aW1pemVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgbV9vcHRp
bWl6ZWRDb250ZXh0Lm9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZEJsb2NrOwotICAgIGlm
IChPcHRpb25zOjp1c2VQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24oKSAmJiBvcHRpbWl6ZWRC
bG9jaykgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG9wdGltaXplZEJsb2Nr
LT5tX2xvY2spOwotICAgICAgICBvcHRpbWl6ZWRCbG9jay0+Z2V0SUNTdGF0dXNNYXAobG9ja2Vy
LCBtX29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICB7CisgICAgICAgIENvZGVCbG9jayogb3B0
aW1pemVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxhY2VtZW50KCk7CisgICAgICAgIG1f
b3B0aW1pemVkQ29udGV4dC5vcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRCbG9jazsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnVzZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbigpICYmIG9w
dGltaXplZEJsb2NrICYmIEpTQzo6SklUQ29kZTo6aXNIaWdoZXJUaWVyKG9wdGltaXplZEJsb2Nr
LT5qaXRUeXBlKCksIG1fcHJvZmlsZWRCbG9jay0+aml0VHlwZSgpKSkgeworICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihvcHRpbWl6ZWRCbG9jay0+bV9sb2NrKTsKKyAgICAg
ICAgICAgIG9wdGltaXplZEJsb2NrLT5nZXRJQ1N0YXR1c01hcChsb2NrZXIsIG1fb3B0aW1pemVk
Q29udGV4dC5tYXApOworICAgICAgICB9CisgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2ljQ29u
dGV4dFN0YWNrLmFwcGVuZCgmbV9vcHRpbWl6ZWRDb250ZXh0KTsKICAgICB9Ci0gICAgYnl0ZUNv
ZGVQYXJzZXItPm1faWNDb250ZXh0U3RhY2suYXBwZW5kKCZtX29wdGltaXplZENvbnRleHQpOwog
ICAgIAogICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1dpdGhGaXh1cCA9IHN0ZDo6
bWF4PGludD4oYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKTsKIApAQCAtODM3NSw3ICs4MzgyLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0
YWNrRW50cnk6OklubGluZQogCiAgICAgICAgIC8vIFRoZSBvd25lciBpcyB0aGUgbWFjaGluZSBj
b2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgYmFycmllciBvbiB0aGF0IHdoZW4gdGhl
CiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCi0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNv
ZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHByb2ZpbGVkQmxvY2spOyAvLyBPT1BTOiBB
c3NlcnQgaXQncyBhIExPTCwgQmFzZWxpbmUsIG9yIExMSW50IENCLgogICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUgPyBt
X2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9jYWxsZXItPm1f
Y29kZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0U3Rh
Y2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBDb21tb25EYXRhOjp2YWxpZGF0ZVJl
ZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVj
ayhyZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJh
bWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQorICAgICAgICAgICAgaWYgKENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxv
Y2suZ2V0KCkpCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soYmFzZWxp
bmVDb2RlQmxvY2spOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzgsNyArMTY3OCw3
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3VtZW50RGVmaW5pdGVseSBub2Rl
cyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3ZWxsOgogICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4NDEKICAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnROb2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IGFyZ3Vt
ZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
ID0gcHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICZwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVu
dChhcmd1bWVudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTY4Niwx
MiArMTY4NiwxMiBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRoCiAK
ICAgICAgICAgLy8gY3VycmVudE5vZGUgaXMgbnVsbCB3aGVuIHdlJ3JlIGRvaW5nIHNwZWN1bGF0
aW9uIGNoZWNrcyBmb3IgY2hlY2tBcmd1bWVudFR5cGVzKCkuCiAgICAgICAgIGlmICghY3VycmVu
dE5vZGUgfHwgbm9kZS0+b3JpZ2luLnNlbWFudGljICE9IGN1cnJlbnROb2RlLT5vcmlnaW4uc2Vt
YW50aWMgfHwgIWN1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKKyAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IHByb2ZpbGVk
Q29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAKICAgICAgICAgICAgIGlmIChu
b2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewogICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm9maWxlZEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
ay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMTcwMCw3ICsxNzAwLDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSBHcmFwaDo6bWV0aAogICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0
aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZwcm9maWxlZEJsb2NrLT52YWx1ZVByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkp
OwogCi0gICAgICAgICAgICBpZiAocHJvZmlsZWRCbG9jay0+aGFzQmFzZWxpbmVKSVRQcm9maWxp
bmcoKSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lT3JMT0xQ
cm9maWxpbmcoKSkgewogICAgICAgICAgICAgICAgIGlmIChCaW5hcnlBcml0aFByb2ZpbGUqIHJl
c3VsdCA9IHByb2ZpbGVkQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKFVuYXJ5QXJpdGhQcm9maWxl
KiByZXN1bHQgPSBwcm9maWxlZEJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5k
ZXgobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4MSw3ICs0ODEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICAgICAgCi0gICAgICAg
IHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKTsKKyAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgfQogICAgIAogICAgIFNjcmlwdEV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGVGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKQEAgLTQ5Miw3
ICs0OTIsNyBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsKKyAgICAg
ICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAg
ICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNh
bGxGcmFtZSk7CiAgICAgfQogICAgIApAQCAtNTAwLDYgKzUwMCwxMyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgIH0KKworICAgIENvZGVC
bG9jayogcHJvZmlsZWRDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikK
KyAgICB7CisgICAgICAgIGlmIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+bG9s
T3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9j
azsKKyAgICB9CiAgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dElzU3RpbGxWYWxpZChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCB2b2lkIE9TUkVudHJ5RGF0YTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FOCiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIEFTU0VSVCghY29kZUJs
b2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIGhhbmRsZUV4aXRD
b3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDgoCiAg
ICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpOb25aZXJvLAogICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+YWRk
cmVzc09mRGlkVHJ5VG9FbnRlckluTG9vcCgpKSkpOworICAgICAgICAgICAgICAgICAgICBpbmxp
bmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5h
ZGRyZXNzT2ZEaWRUcnlUb0VudGVySW5Mb29wKCkpKSk7CiAgICAgfQogICAgIAogICAgIGppdC5t
b3ZlKApAQCAtMzg0LDggKzM4NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGwKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3IgKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpIHsKICAgICAg
ICAgICAgIGppdC5tb3ZlKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay5nZXQoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAg
ICAgICAgICAgb3NyV3JpdGVCYXJyaWVyKHZtLCBqaXQsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwNDMsNyArMjA0Myw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25DcmVhdGUKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGlu
ZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBjb2RlQmxvY2sgPSBpbmxpbmVD
YWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CiAgICAgZWxzZQogICAgICAg
ICBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIApAQCAtMzYwNSw3ICsz
NjA1LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZQogICAgIAog
ICAgIGJvb2wgZGlkVHJ5VG9FbnRlckludG9JbmxpbmVkTG9vcHMgPSBmYWxzZTsKICAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhpdC0+bV9jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGlu
ZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmxv
bE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5M
b29wKCkpIHsKICAgICAgICAgICAgIGRpZFRyeVRvRW50ZXJJbnRvSW5saW5lZExvb3BzID0gdHJ1
ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0NCw4ICs2NDQsOCBAQCBD
b21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROCiAgICAgICAgICAgICAgICAg
dHJhY2tlZFJlZmVyZW5jZXMuYWRkKGNvbnN0YW50LmdldCgpKTsKIAogICAgICAgICAgICAgZm9y
IChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqbV9pbmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkp
OwotICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChpbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5saW5l
Q2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICB0cmFja2VkUmVmZXJlbmNlcy5hZGQoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gQ2hlY2sgdGhh
dCBhbnkgb3RoZXIgcmVmZXJlbmNlcyB0aGF0IHdlIGhhdmUgYW55d2hlcmUgaW4gdGhlIEpJVENv
ZGUgYXJlIGFsc28KQEAgLTY5Myw4ICs2OTMsOCBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuCiAKICAgICBpZiAobV9pbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAg
IGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1faW5saW5lQ2FsbEZyYW1lcykgewotICAg
ICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkp
OwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChpbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxs
RnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxv
Y2suZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0QXJn
dW1lbnRTdGFyCiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9TUkV4
aXRGdXp6Q2hlY2soKQogewogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRXhpdEZ1enooKQotICAg
ICAgICB8fCAhY2FuVXNlT1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVC
bG9ja0ZvcihtX29yaWdpbi5zZW1hbnRpYykpCisgICAgICAgIHx8ICFjYW5Vc2VPU1JFeGl0RnV6
emluZyhtX2ppdC5ncmFwaCgpLnByb2ZpbGVkQ29kZUJsb2NrRm9yKG1fb3JpZ2luLnNlbWFudGlj
KSkKICAgICAgICAgfHwgIWRvT1NSRXhpdEZ1enppbmcoKSkKICAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wKCk7CiAgICAgCkBAIC00NDI4LDkgKzQ0MjgsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJS
ZWcgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLnByb2Zp
bGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmJp
bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklU
QWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFyaXRoUHJvZmls
ZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGlt
aXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7
CkBAIC00NTIwLDkgKzQ1MjAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVT
dWIoTm9kCiAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcgPSB0cnVlOwogI2VuZGlmCiAKLSAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLnByb2ZpbGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+
b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuY29k
ZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWI7CkBAIC01MTEzLDkgKzUxMTMsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5jT3JEZWMoTm9kCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVOZWdhdGUoTm9kZSogbm9kZSkKIHsKICAgICAvLyBGSVhNRTogYWRk
IGEgZmFzdCBwYXRoLCBhdCBsZWFzdCBmb3IgQmlnSW50MzIsIGJ1dCBwcm9iYWJseSBhbHNvIGZv
ciBIZWFwQmlnSW50IGhlcmUuCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1f
aml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxl
ZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0g
ICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51
bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CisgICAgVW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT51bmFyeUFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUTmVnSUMq
IG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAg
ICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXpl
OwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7
CkBAIC01MzY5LDkgKzUzNjksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVN
dWwoTm9kCiAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcgPSB0cnVlOwogI2VuZGlmCiAKLSAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLnByb2ZpbGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+
b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29k
ZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0
cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNiBAQCB1bnNpZ25lZCBWYXJp
YWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiB7CiAgICAgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpE
RkdKSVQpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOwogICAgIHVuc2ln
bmVkIG51bVRtcHM7CkBAIC0xNTUsNiArMTU0LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0
cmVhbTo6cmVjb25zdHJ1YwogICAgICAgICBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpLnRvTG9jYWwoKSArIDE7CiAgICAgICAgIG51bVRtcHMgPSBjb2RlQmxvY2stPm51bVRtcHMo
KSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0OwogICAgIH0gZWxzZSB7CisgICAgICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
OwogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxh
YmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
LCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwLCAwKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5h
cmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNiArNTIsMTcgQEAg
dm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRgogYm9vbCBDYWxsRnJhbWU6
OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29k
ZUJsb2NrKCkpOwotICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewotICAgIGNh
c2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6Ci0gICAg
Y2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVC
eXRjb2RlSW5kZXgoY29kZUJsb2NrKCktPmppdFR5cGUoKSk7CiB9CiAKIGJvb2wgQ2FsbEZyYW1l
OjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChj
b2RlQmxvY2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAg
Y2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgIGNhc2UgSklUVHlwZTo6QmFzZWxp
bmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC03OSw4ICs3MCw2IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxs
U2l0ZUJpdHNBcmVDb2RlT3JpZ2kKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU2LDEwICs0NTYsMTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxl
ckluZm8qIGZpbmRFeAogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxs
RnJhbWUoKTsKICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVySW5kZXg7Ci0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIGV4
Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsK
LSAgICBlbHNlCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChj
b2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNh
bGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOworICAgIGVsc2UKKyAgICAgICAgZXhj
ZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwog
CiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJ
bmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5s
aW5lZEZyYW1lKENhbGwKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3RlcikudW5ib3hlZEludDMyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZnJhbWUu
bV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7Ci0gICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICBtX2ZyYW1lLm1fY29k
ZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwog
ICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5k
ZXgoKTsKIAogICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZUZvckNhbGxGcmFtZShjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIEV4ZWN1dGFibGVCYXNlKiBBc3NlbWJseUhlbHBlcnM6OmV4ZWN1dGEK
ICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgp
OwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1l
LT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKIH0KIAogQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZGYXN0VHlwZWRBcnJheShH
UFJSZWcgYmFzZUdQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTIgKzMwLDE4IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJC
eXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNv
ZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNs
dWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0Fz
eW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgog
I2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBA
IC00OSw2ICs1NSw4IEBACiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5j
bHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50
ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY4LDg5MSBA
QCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGls
ZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBP
dmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1
dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlw
ZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOwor
ICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1
bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7
CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5n
ZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAg
Ly8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUg
dHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07
CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBT
cGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2Fs
bF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29u
c3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JpdHhvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRu
b3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdG5vdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBu
YW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbjog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVu
PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0
ZXJhdG9yUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
bmV4dCwgbWV0YWRhdGEubV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNl
dFR5cGUoYnl0ZWNvZGUubV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVBy
b2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9tb3Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBl
Rm9yKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmll
bGQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdp
dGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1
bWVudHM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJp
Yz4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICgh
KGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJv
ZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
IGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAg
ICAgICAgaWYgKCEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVj
RG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJl
TmFOOworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJp
Z0ludDMyIGJldHRlcgorICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJp
bmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8
IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoK
KyAgICBjYXNlIG9wX3N1YjoKKyAgICBjYXNlIG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRs
ZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAo
IShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwor
CisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVs
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
Qnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVBy
b2R1Y2VOYU5Gcm9tTm9uTmFOID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2Owor
ICAgICAgICAgICAgICAgIGlmIChtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYg
U3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGSVhNRTogQ2FuIHByb2JhYmx5IGRvIGJldHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAg
aWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICAgICAgaWYgKCEhKGxlZnQg
JiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3QpKSB8fCAhIShyaWdodCAmIChTcGVjQmlnSW50IHwg
U3BlY09iamVjdCkpKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjQmlnSW50OworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgfTsKKworICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAg
aGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVj
dGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAg
aWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0
cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkg
fCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIg
fCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNp
Z25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBm
ZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50
QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoK
KyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHBy
b2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMp
OworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAg
ICAgc2V0VHlwZShkc3QsIHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNB
bnlJbnRBc0RvdWJsZSA6IFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVEb3Vi
bGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklY
TUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdl
IHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+
KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlz
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJv
bWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKSwgU3BlY1N0cmluZyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVj
RnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4
cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1
bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhh
c0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3By
b3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJl
UHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9o
YXNfZW51bWVyYWJsZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0
dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwg
U3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwg
U3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3Ro
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCks
IFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2Nv
cGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCks
IFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3Bl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURp
cmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJn
dW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3Vt
ZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRB
cmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4o
KSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
Z2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3By
ZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4o
KSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
U3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
c3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVx
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVh
dGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxv
dzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5n
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVj
U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRU
eXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRl
ZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxf
YnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pc19jYWxsYWJs
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0
aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9j
aGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9u
b3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJf
c2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6Cisg
ICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3Ry
YXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBj
YXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ug
b3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6
CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRh
X3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNh
c2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAg
ICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5l
cV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51
bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3Rl
cToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6Cisg
ICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bf
am5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJl
cToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ug
b3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRj
aF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92
YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmls
ZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9w
dXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRf
c2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAg
Y2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vu
dmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAg
IGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6
CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3By
b2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1
ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAg
Y2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5l
cmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3Ry
YW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25h
dGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2Nv
bnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFt
cG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAg
ICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dl
dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3Jfb3Blbl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6
CisgICAgY2FzZSBsbGludF9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2Ugd2FzbV90cmFtcG9s
aW5lX3dhc21fY2FsbF9pbmRpcmVjdF9ub190bHM6CisgICAgY2FzZSBub3JtYWxfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2dldF9ob3N0X2NhbGxfcmV0dXJuX3ZhbHVlOgor
ICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2Nh
bGxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2Nh
bGxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfZXZhbF9zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbDoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9j
b25zdHJ1Y3Q6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW46CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX29wX2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF9zbG93OgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2Nh
bGxfZXZhbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0X3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW5fc2xvdzoKKyAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdW50
YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrX3RhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2Nv
bnN0cnVjdF9hcml0eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSB3YXNtX3Ry
YW1wb2xpbmVfd2FzbV9jYWxsOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9u
b190bHM6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6
OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVu
aXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVt
Q2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5t
X2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJs
b2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5h
dCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChz
aXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0g
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJl
ZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOwor
CisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcs
ICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1f
cHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9n
TG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2Fs
bGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgYm9vbCBjb21w
dXRlVXNlQ291bnRzID0gdHJ1ZTsKKyAgICBtX3VzZUNvdW50cy5yZXNpemUobV9ncmFwaC0+c2l6
ZSgpKTsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUg
cmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2Yg
aG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8v
IElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5k
ZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBp
cyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMu
Li4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNC
bG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlv
bnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBp
ZiAoY29tcHV0ZVVzZUNvdW50cykKKyAgICAgICAgICAgICAgICBtX3VzZUNvdW50c1tibG9jay5p
bmRleCgpXSA9IE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5j
b25zdGFudHMoKS5zaXplKCksIDApOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlC
bG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAg
ICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggeyBpICsgYmxvY2subGVhZGVyT2Zm
c2V0KCkgfTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRz
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXNlQ291bnRz
W2Jsb2NrLmluZGV4KCldLm9wZXJhbmQob3BlcmFuZCkgKz0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVj
a3BvaW50ID0gY3VycmVudEluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNr
cG9pbnQtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwg
Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNv
ZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3Vu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25z
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3Vs
YXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbXB1dGVVc2VDb3VudHMgPSBmYWxz
ZTsKKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSkKKyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTY3LDcgKzk2MCwxMyBAQCB2b2lkIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJl
dGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
K2Jvb2wgSklUOjp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7CisgICAg
cmV0dXJuIG1fdXNlTE9MOworfQorCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAg
LCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUsNiArOTc0LDcg
QEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9jYW5C
ZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAg
ICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQorICAgICwgbV91c2VMT0woY29tcGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxPTCkKIHsKIH0K
IApAQCAtMTM3LDExICsxMDM3LDE5IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogICAgICAgICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBcCiAgICAgTkVY
VF9PUENPREUobmFtZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCisjZGVmaW5l
IERFRklORV9TTE9XX09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7
IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsg
XAotICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCi0gICAgICAgICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAg
ICAgICAgICBpZiAoZ2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSAmJiBhdG9pKGdldGVudigi
cHJpbnRTbG93Q2FsbENhc2VzIikpKSB7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBjYk5hbWU7IFwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChjYk5hbWUp
OyBcCisgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGNiTmFtZS50b1N0cmluZygpICsgIiBi
YyMiICsgU3RyaW5nOjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9w
Y29kZU5hbWVzW2N1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07IFwKKyAgICAgICAgICAg
ICAgICBwcm9iZShbPV0oUHJvYmU6OkNvbnRleHQmKSB7IFwKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0NhbGxDYXNlUmFuKGtleSk7IFwKKyAgICAgICAgICAgICAgICB9KTsgXAorICAgICAgICAg
ICAgfSBcCisgICAgICAgICAgICBlbWl0U2xvd09wKHNsb3dfcGF0aF8jI25hbWUsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgZHN0LCB0eXBlKTsgXAogICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REVfSU5fTUFJTihvcF8jI25hbWUpOyBcCiAgICAgfQpAQCAtMTU2LDI2ICsxMDY0LDQ2IEBAIHZv
aWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9X
Q0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNu
YW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1l
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5h
bWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwK
ICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xv
d0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAg
ICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAor
ICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhG
dW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAorc3RhdGljIHZvaWQgc2xvd0NhbGxDYXNlUmFuKFN0cmluZyBrZXkpCit7CisgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+PiBzbG93
Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxs
X29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93Q2FzZXMuY29uc3RydWN0KCk7CisgICAg
fSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMuZ2V0KCk7CisgICAgdWludDY0X3QgdmFs
dWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCh2YWx1ZSAl
IDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihrZXksICI6ICIsIHZhbHVlKTsKK30KKwog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDE2ICsxMTU5LDg1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2Fz
ZSA9IDA7Ci0gICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAgICAgdW5z
aWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwotICAgICAg
ICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxs
IGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KLSAg
ICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBo
aXQuCi0gICAgICAgICAgICBicmVha3BvaW50KCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICAvLyBPT1BTCisKKyAgICAg
ICAgbV9zdGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBtX3ByZWRl
Y2Vzc29ycy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBibG9j
ayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJsb2NrKCkgfHwg
YmxvY2suaXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGZvciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmNvbnRhaW5z
KGJsb2NrLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICBtX3ByZWRlY2Vzc29yc1tzdWNj
ZXNzb3JJbmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CisgICAgfQogCi0gICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSwgbGFiZWwoKSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNl
dCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJi
IyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1
bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUo
bV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1f
Y3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBt
X2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2Nr
LT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMg
PSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0
ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhl
YWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
VXNlQ291bnRzID0gV1RGTW92ZShtX3VzZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0p
OworICAgICAgICAgICAgICAgIG1fc3BpbGxDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUg
PSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3Rh
cnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKKyAg
ICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVu
dGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRo
YXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KKyAgICAgICAgICAgIGJyZWFrcG9pbnQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAg
IG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSwgbGFiZWwoKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKIApAQCAtMjc4LDQ2ICsxMjc1
LDQzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogI2Vu
ZGlmCiAKKworICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVn
IGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAg
ICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAg
ICB9CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBERUZJTkVfU0xPV19P
UChpbl9ieV92YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3MpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGxlc3NlcSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19j
YWxsYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHR5cGVvZikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lz
X29iamVjdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1c2hf
d2l0aF9zY29wZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJv
bm1lbnQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVf
U0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVz
b2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChk
ZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hh
YmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AobmV3X2FycmF5X2J1ZmZlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xP
V19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9f
aW5kZXhfc3RyaW5nKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3Vt
ZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX3Jlc3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9t
aXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2FzeW5jX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AocG93KQorICAgICAgICBERUZJTkVfU0xPV19PUChpbl9i
eV92YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0
PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhf
c2NvcGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
cHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCks
IFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lz
dGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVT
Y29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVy
KCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJv
cGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVG
SU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05v
bmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5
KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigp
Lm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVy
YWJsZV9wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9w
ZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlF
bnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodG9f
aW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKS5t
X2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9h
cmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+
KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3BlY0Nl
bGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9T
TE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4o
KS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0
ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCku
bV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Fz
eW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJh
dG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKG5l
d19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9k
c3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVj
QmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChv
cF9iaXRub3QpCkBAIC0zOTgsNyArMTM5MiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQogICAg
ICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9PUChv
cF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkKKyNl
bHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRpZgog
ICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAg
ICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc0LDEwICsxNDcyLDg0IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFk
b3dfY2hpY2tlbl9wcm9sb2d1ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsKQogCisgICAgICAgIERFRklORV9PUChvcF9pc19jYWxsYWJsZSkKKyAgICAgICAg
REVGSU5FX09QKG9wX3R5cGVvZl9pc19mdW5jdGlvbikKKyAgICAgICAgREVGSU5FX09QKG9wX3R5
cGVvZl9pc19vYmplY3QpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2YpCisKKyAgICAgICAg
REVGSU5FX09QKG9wX2xlc3MpCisgICAgICAgIERFRklORV9PUChvcF9sZXNzZXEpCisgICAgICAg
IERFRklORV9PUChvcF9ncmVhdGVyKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcmVxKQor
CisgICAgICAgIERFRklORV9PUChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisKKyAgICAgICAg
REVGSU5FX09QKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQorCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsK
KyAgICAgICAgICAgIGlmICghbV9jaGVja2VkVXNlTE9MKSB7CisgICAgICAgICAgICAgICAgc3dp
dGNoIChvcGNvZGVJRCkgeworICAgICAgICAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF90aHJvdzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2pt
cDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3ByaXZh
dGVfbmFtZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHk6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5
X3dpdGhfcHJvZmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRy
b2xfZmxvdzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAi
LCBvcGNvZGVJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworCisgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkJiBjb3VudGVyID0gbV9jdXJyZW50
VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgLS1jb3VudGVyOwor
ICAgICAgICAgICAgICAgIGlmICghY291bnRlcikgeworICAgICAgICAgICAgICAgICAgICAvLyBP
T1BTOiBEbyB0aGlzIGxhemlseSBpbiBzbG93IHBhdGggY3JlYXRpb24vc3BpbGxGb3JDYWxsCisg
ICAgICAgICAgICAgICAgICAgIC8vbV9zcGlsbENhbmRpZGF0ZXMuYXBwZW5kKG9wZXJhbmQpOwor
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBn
cHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGdwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2Ji
ZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGZwcik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBm
b3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZD
aGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNr
cG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5k
ZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1f
c2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNDk4LDYgKzE1NzAsMjAgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogICAgIG1fam1wVGFibGUuY2xlYXIoKTsK
IH0KIAorc3RhdGljIHZvaWQgc2xvd0Nhc2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShv
bmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKwor
ICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsr
bWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkg
PT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogewogICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsK
QEAgLTUxNiwxNCArMTYwMiwyNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJv
ZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVk
IGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1f
c2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsK
KyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGluayh0aGlzKTsKKworICAgICAg
ICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisKKyAgICAgICAgaWYgKGdldGVu
digicHJpbnRTbG93Q2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSkpIHsK
KyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG5hbWU7CisgICAgICAgICAgICBtX2NvZGVC
bG9jay0+ZHVtcChuYW1lKTsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBuYW1lLnRvU3RyaW5n
KCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsg
IiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsKKyAgICAg
ICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZVJhbihrZXkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlID0gbnVsbHB0cjsKICAgICAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKQEAgLTU4MCw3ICsxNjc3LDYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX25lcSkKQEAgLTU5OSw2ICsxNjk1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9y
X29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2Vu
ZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGRlYykKQEAgLTYzMSwxOSArMTczMCwzNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3Bl
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChjaGVja190ZHopCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9TTE9XX09QKHRvX3Byb3BlcnR5X2tleSkKKyAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AoaXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKHR5cGVvZl9pc19mdW5jdGlvbikKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
dHlwZW9mX2lzX29iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9m
KQorCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGxlc3MpCisgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGxlc3NlcSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1df
T1AoZ3JlYXRlcikKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ3JlYXRlcmVxKQor
CisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25t
ZW50KQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0g
bV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lU
SF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAh
PSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2Fz
ZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RU
by5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxp
bmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAg
Ly9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8
fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1w
cyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0
KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAg
ICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9j
b3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0
IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAg
ICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTY4OCw2ICsxODAy
LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAg
ICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBPT1BTOiBoZWxwZnVsIGZvciBydW5u
aW5nIExPTCB3L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3OCw2ICsxODk0LDg4IEBAIHZvaWQg
SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1
bHRDb2RlT3JpZ2luKCkpOwogCisgICAgYm9vbCBwcmludEVhY2hPU1IgPSBnZXRlbnYoInByaW50
RWFjaE9TUiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaE9TUiIpKTsKKworICAgIGlmICgh
bV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1bXBMaXN0IGV4aXRDb21tb247Cisg
ICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBzKSB7CisgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICAgICAgYXV0byBqdW1wcyA9IGV4
aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0aGlzKTsKKworICAgICAgICAgICAg
aWYgKHByaW50RWFjaE9TUikgeworICAgICAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIHBy
aW50U3RyZWFtOworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKHByaW50U3RyZWFt
KTsKKyAgICAgICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHByaW50U3RyZWFtLnRvQ1N0cmluZygp
OworICAgICAgICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVmKCk7IC8vIGxlYWsgaXQuCisgICAg
ICAgICAgICAgICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBleGl0IGF0IGJjIyIsICBieXRlY29k
ZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQo
KTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMuCisKKyAgICAgICAgICAgIG1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50
OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4aXRDb21tb24uYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4aXRDb21tb24uZW1wdHkoKSk7Cisg
ICAgICAgIGV4aXRDb21tb24ubGluayh0aGlzKTsKKworCisgICAgICAgIHN0YXRpY19hc3NlcnQo
TExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOworICAgICAgICBBU1NFUlQoUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhudW1iZXJUYWdSZWdpc3Rlcikp
OyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBiZWluZyBhIGNhbGxlZSBzYXZlLgor
CisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2hX
aXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBtb3ZlKExM
SW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUgdGhpcyBh
cm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVtcC4KKyAg
ICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4o
bV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBwcmVwYXJlQ2FsbE9w
ZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJnR1BSMCk7
CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgbW92
ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBudW1iZXJUYWdSZWdpc3Rlcik7
CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpLCByZWdUMyk7
CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7CisgICAgICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkpOworCisgICAgICAgIGF1dG8gc2tp
cEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxv
Y2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkpKTsKKyAgICAgICAgbW92
ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRo
aXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAu
CisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9w
dGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRp
b24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93KSksIG5vbkFy
Z0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAg
ICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVn
aXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0aGlzKTsKKyAgICAgICAgCisgICAg
ICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGlu
ZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAvL0Fzc2VtYmx5SGVscGVy
czo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMyKAorICAgICAgICAvLyAgICBBc3Nl
bWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgLy8gICAgQXNzZW1ibHlI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhl
Y3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4g
ZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUo
KS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8v
aWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBkZXN0aW5hdGlv
biA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAg
ICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxP
U1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJl
Z2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTElu
dDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworCisK
KyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0b3JlIExMSW50IGNvZGVibG9jayB0
byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29uIGlmIHdlIGV4Y2NlZWQgZXhpdCBj
b3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExMSW50IGNvZGUgYmxvY2sKKyAgICB9
CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
CkBAIC05NjcsNyArMjE2NSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAg
CiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAg
ICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNv
ZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCB1
c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgp
KTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFz
ZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgp
KSAvCkBAIC05NzgsNyArMjE3Niw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAg
ICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5r
TW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAot
ICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0
SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJ
VCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAs
ICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgp
LnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2Vk
UHRyKCkpOwpAQCAtMTA3Miw2ICsyMjcwLDk1MSBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxl
VGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZH
Q29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0
ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0S2luZC4K
KyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmlyc3Qg
IT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5dGVj
b2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNlY29uZC5h
cHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorVmVjdG9yPFJlZywg
MzI+IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0
b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlz
CisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRv
IGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9r
ZXkgZm9yIGFybS4uLgorCisgICAgVmVjdG9yPFJlZywgMzI+IGFsbG93ZWQ7CisgICAgUmVnaXN0
ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0g
QmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKGFsbG93ZWRDYWxsZWVTYXZlcy5jb250
YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsK
KyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFs
bENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFwcGVuZChy
ZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFZlY3RvcjxSZWcs
IDMyPiYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBo
ZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRl
QWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQo
KTsKK30KKworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxsb3dlZEZQUnMoKQoreworICAgIC8v
IE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVy
ZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdl
IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8g
T09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxS
ZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAg
ICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAg
fSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xv
d1BhdGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtzIGN1cnJlbnRseSB3LyB3cml0ZUJh
cnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5pY2UgYXNzZXJ0LiBNYXliZSB3ZSBj
YW4gZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8vaWYgKG1fc2xvd0Nhc2VzLnNpemUo
KSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgp
CisgICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVn
IGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52
YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVn
IDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcu
Z3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BS
cygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAg
ICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBs
KHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQorewor
ICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3
LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAg
ICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICgh
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2Nr
Q291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdW
YWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNv
bWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFw
IGFncmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAg
IGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkg
eworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRS
ZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGNsZWFy
IHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAg
ICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAgLy8gLSBWYWx1ZU9wZXJhbmQoKQor
ICAgICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAvLyAtIH5WYWx1ZU9wZXJhbmQoKQor
ICAgICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBkZWFsbG9jYXRlIHNvbWV0aGluZyBs
aWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVwIGZ1bGx5CisgICAgICAgIC8vIGRl
YWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5IGRlZ3JhZGluZyBpdCBpbnRvIGEg
dGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5WYWx1ZU9wZXJhbmQoKSBydW5zIGFu
ZCBjYWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAgICAgICAgLy8gYW4gaW5jb25zaXN0
ZW50IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQorICAgICAgICAgICAgcmVnVmFsdWUu
aXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwordm9pZCBKSVQ6OnNwaWxsRm9yQ2Fs
bEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0byBzZXQp
IHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYgKCFjYWxs
ZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkpOworICAg
IGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpzbG93UGF0aFNh
dmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAg
IFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVn
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1
ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgfTsKKworICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJl
Zyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZO
ZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3Jk
IEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSwgRlBSUmVnIHRvSWdu
b3JlRlBSKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAg
U2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1
dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZWcsIHJl
Z1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUub3BlcmFuZCkpKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycy5hZGQocmVn
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGlmIChyZWcuZnByKCkgIT0gdG9JZ25vcmVGUFIpCisgICAgICAgICAgICBh
cHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BS
cygpKSB7CisgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gdG9JZ25vcmUpCisgICAgICAgICAgICBh
cHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGls
bCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxs
UmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3Jl
UmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMs
IHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQ
bGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3JkLnNhdmVQbGFuKTsKK30KKworc3Rh
dGljIHZvaWQgYWRkTG9hZENvdW50KHVpbnQ2NF90IGNvdW50KQoreworICAgIHN0YXRpYyB1aW50
NjRfdCBjb3VudGVyOworICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgaWYgKGNvdW50ZXIgJSAxMDAwMCA9PSAwKQor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJSdW50aW1lIGxvYWQgY291bnQ6ICIsIGNvdW50ZXIpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3Jl
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYgc2F2ZVBs
YW4pCit7CisgICAgdWludDY0X3QgbG9hZENvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIHR1cGxl
IDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHN0ZDo6Z2V0PDA+KHR1cGxlKTsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBzdGQ6OmdldDwxPih0dXBsZSk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUgPSBzdGQ6OmdldDwyPih0dXBsZSk7CisKKyAg
ICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2Ny
YXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFp
bnMoc2NyYXRjaCkpOworICAgICAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGRpc2FsbG93U2NyYXRjaCgqdGhpcyk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKSkKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShz
Y3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUpKQorICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHNj
cmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIGlzSW50MzIgPSBicmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgc2NyYXRj
aCB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHNj
cmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0g
anVtcCgpOworCisgICAgICAgICAgICAgICAgaXNJbnQzMi5saW5rKHRoaXMpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisKKyAgICAg
ICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICArK2xvYWRDb3VudDsKKyAgICB9CisKKyAgICBpZiAoZmFsc2UgJiYgbG9hZENvdW50
KSB7CisgICAgICAgIHByb2JlKFs9XSAoUHJvYmU6OkNvbnRleHQmKSB7CisgICAgICAgICAgICBh
ZGRMb2FkQ291bnQobG9hZENvdW50KTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2UuZHN0
LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNz
ZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3By
KS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBI
YXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6
c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVt
cCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3Vi
bGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9y
ZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOyAv
LyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMgKC9jaGVja3BvaW50cz8pIHRoYXQg
ZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cisg
ICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0g
U3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1
ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5k
KSk7CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsK
K30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJl
ZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworICAgIGlm
ICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGpp
dCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQorCitHUFJSZWcgSklUOjpHUFJUZW1w
OjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKwor
ICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7CisgICAgbV9qaXQubG9jayhtX2dw
cik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0
LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAg
ICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAg
ICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0
ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQor
CitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAh
PSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6Oklu
dDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6
On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAg
IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1f
aml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1f
aml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2Nr
KG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUo
bV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFu
Y2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwg
U3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5k
OjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBt
X2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0g
bV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFu
ZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9w
ZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9w
ZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAg
ICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9n
cHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5k
LCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9w
ZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6
fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJS
ZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5k
KTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOwor
ICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAg
IG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAg
IG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5s
b2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVj
Q2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNo
SWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBl
KG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklU
OjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAg
ICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVy
YW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitH
UFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFu
ZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVn
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKwor
ICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAg
bV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9w
ZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVn
IHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5E
b3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcg
SklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBS
UmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAg
ICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9q
aXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0
ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsK
KyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwg
SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9q
aXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhh
dmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNw
ZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0
ZW1wR1BSLCBtX2Zwcik7CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOwor
CisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6Ok51bWJlck9wZXJh
bmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQor
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZv
ck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAg
ICAgIGZwcigpOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6On5OdW1iZXJPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpOdW1iZXJPcGVyYW5k
OjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1
cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAg
ICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAg
IGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7Cisg
ICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2pp
dCwgbV9vcGVyYW5kIH07CisgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigp
OworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9m
cHIpOworCisgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3Bl
cmFuZCkpKQorICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9m
cHIpOworICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92
ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07Cisg
ICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgICAgICBtX2ppdC51bmJv
eERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVl
UmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworCisgICAgICAgIGlmICghaXNC
eXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisg
ICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3Vi
bGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVy
cykpOworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIp
OworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgaXNJbnQzMi5s
aW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlR1BS
LCBtX2Zwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfQorCisgICAgbV9q
aXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgbV9qaXQu
YXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklU
OjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYgaml0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsK
K30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjp+SW50MzJDb252ZXJ0aW5nT3BlcmFu
ZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJD
b252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgp
OworCisgICAgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZUludDMyKG1fb3BlcmFuZCkpIHsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIG9wIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBtX2dw
ciA9IG9wLmdwcigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICB9IGVsc2UgaWYg
KG1faml0LnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX29wZXJhbmQpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0
LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIEZQ
UlRlbXAgdGVtcEZQUiB7IG1faml0IH07CisgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRlBSLmZw
cigpOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgaWYgKCFpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAg
ICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJs
ZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJz
KSk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1fZ3ByLCBmcHIpOwor
ICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3Jv
QXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFT
Y3JpcHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50
MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25l
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7
CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50
MzIoZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAg
IGF1dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZw
cik7CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0
aW9uQ2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNp
YmxlU2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9q
aXQuc2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZt
X2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIG1fZ3ByKTsKKworICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4obV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5k
IHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9w
ZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5zcGVjdWxhdGVCb29sZWFu
KG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0z
MigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1
bGF0ZU90aGVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFu
ZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVP
cGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAg
ICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlT3RoZXIo
bV9vcGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIG1fZ3ByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVy
YW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBt
X2ppdCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBK
dW1wTGlzdCBkb25lOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50
MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAg
YXV0byBub3REb3VibGUgPSBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNW
YWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICBtX2pp
dC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7CisjaWYgQ1BVKEFSTTY0KQorICAg
ICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJBUk02NDo6c3VwcG9ydHNEb3VibGVUb0ludDMyQ29udmVy
c2lvblVzaW5nSmF2YVNjcmlwdFNlbWFudGljcygpKSB7CisgICAgICAgICAgICBtX2ppdC5jb252
ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2YVNjcmlwdFNlbWFudGljcyhmcHIsIG1fZ3ByKTsKKyAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorI2Vu
ZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFRydW5j
YXRlRG91YmxlVG9JbnQzMihmcHIsIG1fZ3ByLCBCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCkp
OworICAgICAgICAgICAgYXV0byBzcGlsbFJlY29yZCA9IG1faml0LnNpbGVudFNwaWxsQmVmb3Jl
Q2FsbChtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LmNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0QW5kTm9FeGNlcHRpb25DaGVjayhoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkgPyBvcGVyYXRp
b25Ub0ludDMyU2Vuc2libGVTbG93IDogb3BlcmF0aW9uVG9JbnQzMiwgbV9ncHIsIGZwcik7Cisg
ICAgICAgICAgICBtX2ppdC5zaWxlbnRGaWxsQWZ0ZXJDYWxsKHNwaWxsUmVjb3JkKTsKKyAgICAg
ICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBu
b3REb3VibGUubGluaygmbV9qaXQpOworICAgICAgICBhdXRvIG5vdE90aGVyID0gbV9qaXQuYnJh
bmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIG1fZ3ByKTsKKyAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsKKyAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RPdGhlci5saW5rKCZtX2ppdCk7CisgICAgICAg
IG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEJvb2xlYW4oSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcikpOworICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVk
SW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lnpl
cm9FeHRlbmQzMlRvV29yZCh2YWx1ZUdQUiwgbV9ncHIpOworCisgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7CisgICAgfQorCisgICAgcmV0dXJu
IG1fZ3ByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1
YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcp
IHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7
CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFk
ZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAg
ICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVl
QXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJh
bmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVl
QXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2
b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wo
dmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9Cisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNw
ZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7Cisg
ICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RP
dGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVP
YmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAo
IWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUo
b3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRl
SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAo
IWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9ubHkp
KQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQor
eworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFu
ZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFsdWUp
KTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29uc3Rl
eHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9vbCB1
c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChvcGVy
YW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYg
VVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihvcGVyYW5kKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hH
UFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMyOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0ludDMy
ID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0ludDMy
LmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsK
KyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYK
K30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKQoreworICAgIGlmICghdXNl
TE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVz
ID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNv
bnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsg
KytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0
ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNhbGxl
ZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZyA9IE9w
ZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1f
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygp
LnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7
IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIsICIsIGxvY2tDb3VudCwgIikiKTsK
K30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkKK3sKKyAgICBkYXRhTG9nTG4oIlJl
ZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEdQUnMoKSkg
eworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAg
ZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1
ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEZQ
UnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAg
ICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCBy
ZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkYXRhTG9nTG4oIl0iKTsKK30K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVP
cmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBv
aW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xh
c3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29k
ZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwNiwxNSArMTEwLDI2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93
Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAg
Qnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYp
Ci0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjp0
dXBsZTxSZWcsIFZpcnR1YWxSZWdpc3RlciwgU3BlY3VsYXRlZFR5cGU+PjsKKworICAgIHN0cnVj
dCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAg
ICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFja1Np
emVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xv
d0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3Ig
dGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9m
IEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2
ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAg
ICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZl
Y3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9u
IHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hS
ZWNvcmQgewpAQCAtMTk2LDcgKzIxMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xB
U1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJ
VF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAg
dXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRT
bG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMjA0
LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1
Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5p
dGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1
ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNw
bGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQu
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQg
PSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxs
cHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJ
bmRleCgwKSk7CisgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZVR5cGUgeworICAgICAgICAgICAg
QmFzZWxpbmUsCisgICAgICAgICAgICBMT0wKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IEpJVChWTSYsIENvZGVCbG9jayosIENvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsK
IAogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KQEAg
LTIyMCwyMiArMjM2LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJl
c3VsdCBsaW5rKCk7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9y
ZUNvbXBpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkp
CisKKyAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5k
ZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywg
Ynl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1
cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBieXRlY29kZU9mZnNldCkucHJpdmF0
ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7
CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERp
cmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAg
ICAgIH0KQEAgLTI0MywyMSArMjU5LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0
aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ss
IENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4
ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0
S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewotICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
SW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0
ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpC
YXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQpA
QCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JD
YWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOwor
CisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2Fs
bCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAg
IENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzUzLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAg
ICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29u
c3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7
IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVh
bFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAg
ICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyArMzY1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTM1MCw3ICsz
ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChj
b25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM5Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwog
ICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAg
dm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxl
T3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7
CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1NDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25k
aXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC01MTcsMTIgKzU0OSwyMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91
YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29s
IGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xvd09wZXJh
dGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3Qg
aW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAg
ICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVj
dGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBq
ZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAg
ICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYsOSArNTg3LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW9uKik7CkBAIC02MTAsNyArNjUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgQ1BVKFg4
Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiopOworI2Vu
ZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NzgsNzggKzcyMSwxMDAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
bGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0SXNDYWxsYWJsZUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfaXNfY2FsbGFibGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZl9pc19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZl9pc19m
dW5jdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlwZW9m
KGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgor
ICAgICAgICB2b2lkIGVtaXRDb21wYXJlT3BJbXBsKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRp
b25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2xl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2xlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ3JlYXRlcihjb25zdCBJbnN0
cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0
aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChjb25z
dCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhG
dW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBWaXJ0dWFs
UmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWcpOworI2Vsc2UKICAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVl
KiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzY0LDggKzgyOSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3Rh
bnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NzgsMzggKzg0MSwyMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmls
ZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9m
aWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1p
dE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlv
biosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVu
Y3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0
Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0
aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9u
LCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0
ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0
aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtE
dW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAg
ICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwot
ICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZv
aWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQorICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgICAgIHZvaWQgZW1pdFNsb3dPcChG
dW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCwgU3BlY3VsYXRlZFR5cGUgZHN0VHlwZSk7CiAKLSAgICAgICAg
Ym9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNl
JiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1f
c2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BB
UkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1
ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
ICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVy
LCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+KTsKQEAgLTg5MSw2ICs5MzcsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1
bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxs
RnJhbWUoKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsK
KyAgICAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FsbDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAg
ICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAg
ICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb24pOworICAgICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwpAQCAt
OTAyLDYgKzk2OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTm9Qcm9maWxpbmcK
ICAgICAgICAgfTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgYm9v
bCB0cnlFbWl0TE9MQml0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbik7CisKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRH
ZW5lcmF0b3I+CiAgICAgICAgIHZvaWQgZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHNob3VsZEVtaXRQ
cm9maWxpbmcgPSBQcm9maWxpbmdQb2xpY3k6Ok5vUHJvZmlsaW5nKTsKIApAQCAtOTYxLDYgKzEw
MzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
KCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlv
blByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJ
bnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygp
OwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApA
QCAtOTcxLDYgKzEwNDMsMjkyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRo
UHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQ
UlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIo
KTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJl
IGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJ
bnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwor
ICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
OworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAg
R1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFu
ZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
VmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAg
IH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5k
OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJS
ZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOdW1i
ZXJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTnVtYmVyT3BlcmFuZChK
SVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+TnVtYmVyT3BlcmFu
ZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgLy8gU3BlY3VsYXRlIG51bWJlcitib29sZWFuK290aGVyLCBhbmQgY29udmVy
dCB0byBpMzIuIFVzZWZ1bCBmb3IgYml0b3BzLgorICAgICAgICBjbGFzcyBJbnQzMkNvbnZlcnRp
bmdPcGVyYW5kIHsgCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyQ29udmVydGlu
Z09wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfklu
dDMyQ29udmVydGluZ09wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBl
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3Vs
YXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3Vs
YXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3Bl
cmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBS
UmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3Bl
cmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAg
ICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFu
ZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVn
VmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAg
IH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAg
ICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZv
ck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1
YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcmIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
Z1ZhbHVlKGZwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAg
ICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghcmVnVmFsdWUoZ3ByKS5vcGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGdwckZv
ck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJh
bmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3Vy
cmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
YXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnVmFsdWUoZnByKS5vcGVyYW5kLmlzVmFs
aWQoKSk7CisKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAg
ICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQp
KQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMkNv
bnZlcnRpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdT
cGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55Qmln
SW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0lu
dDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAg
ICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAgIHZvaWQgc3Bl
Y3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lk
IHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisK
KyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsg
Ly8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJv
ZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRH
UFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJ
bnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZp
cnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxS
ZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92
ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2b2lkIGxvY2so
UmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1Bh
dGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9y
ZUNhbGwoR1BSUmVnIHRvSWdub3JlID0gSW52YWxpZEdQUlJlZywgRlBSUmVnIHRvSWdub3JlRlBS
ID0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2FsbChjb25z
dCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhT
YXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2ZVBs
YW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25z
dCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAg
ICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4gbV9mYXJDYWxsczsKQEAgLTk5MCw3ICsxMzQ4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxT
bG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dD
YXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hl
czsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJ
bmZvczsKQEAgLTEwMjcsNiArMTM4NSw4NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRv
dWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAg
IC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVn
IH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAg
ICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYg
KGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJS
ZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVl
IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAg
IHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7
IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9w
ZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3Vu
dAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRl
ZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9OworCisg
ICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAg
ICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWcs
IHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiBy
ZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4gcHJv
dmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3Ro
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5z
aXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOwor
CisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92
ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVz
W2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVz
W2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVy
LnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNb
aV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHZvaWQgcmVz
ZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3RhdGUo
KTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAg
ICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAg
ICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0aW9u
c0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3VycmVu
dFByZWRpY3Rpb25zOworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8dW5zaWduZWQsIHRydWU+PiBt
X3VzZUNvdW50czsKKyAgICAgICAgT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+IG1fY3VycmVudFVz
ZUNvdW50czsKKyAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMTY+IG1fc3BpbGxDYW5k
aWRhdGVzOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisKKyAgICAg
ICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZl
Y3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1f
dXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9
OworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9l
eGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDg2ICs0Miw4OCBAQAogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRl
ICJTbG93UGF0aENhbGwuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Smxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1Ro
YW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5P
ckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsK
KyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3Jl
YXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2ps
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3Jk
ZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
bmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dD
YXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdy
ZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1
ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQ2LDM3ICsxNDgsMTYxIEBAIHZvaWQgSklU
OjplbWl0X29wX2piZWxvd2VxKGNvbnN0IEluc3RydWMKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAK
K3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0Q29tcGFyZU9wSW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGdw
Q29tcGFyZSwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbXBhcmUpCit7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNv
bXBhcmUzMihncENvbXBhcmUsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFyZSwg
bGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IGlmICgoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHJocykpIHx8ICFwcmVkaWN0aW9uRm9yKGxocykgfHwgIXByZWRpY3Rpb25Gb3IocmhzKSkgewor
ICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAg
Y29tcGFyZURvdWJsZShkb3VibGVDb21wYXJlLCBsaHNUZW1wLmZwcigpLCByaHNUZW1wLmZwcigp
LCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICB9CisKKyAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8v
IE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3Ry
dWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9y
ZGVyZWQpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93
Q2FzZShyZXN1bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMSkpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BS
KTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRy
dXN0ZWRJbW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94
SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikK
IHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNl
cyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBp
bnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1l
ZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9w
MiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwg
cmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCBy
aHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVO
dW1iZXIob3AyKSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AxKSB8fCAhcHJlZGljdGlvbkZvcihvcDIp
KSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSks
IHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1
ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRp
b24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBA
IC0yMjksMTcgKzM1NSw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
KGNvCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJS
ZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywg
b3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsm
XSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1t
ID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwog
ICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAgICAg
ICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0p
KSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiks
IHJoc0dQUiwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAg
ICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBAIC0y
NTUsNDMgKzQwNyw4OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5z
CiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhz
R1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsK
KyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7Cisg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlz
LCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJf
dCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFyZTMy
KGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAgIH0g
ZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50
MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFy
ZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAg
ICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0p
LCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9u
LCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJI
UygpOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKICAgICB9Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVy
YXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9u
IG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9u
IG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9w
MSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9u
LCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52
ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9u
U2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24s
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNp
emUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2gg
PSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5s
aW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUg
aW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAg
ICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAg
ICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgog
ICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4K
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0OTgsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1
bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzUyMiw2IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBm
YWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJl
clRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTEsMTIgKzU0NSwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdU
MSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAg
SnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAg
IG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs1NjIsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmso
dGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhp
cyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1NzQsNTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsK
KyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHBy
b2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1cmUgZm9yIGFs
bCBvcGNvZGVzIHByb3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9u
LgorICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVz
cygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOwor
ICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5k
OjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRH
UFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0
KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRl
QWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAg
ICAgICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAg
ICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3Mo
Jm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93
Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIo
aW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0g
U3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJv
eEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNjI4LDYy
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3Qp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlm
IChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBG
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsK
KyAgICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAg
bG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAg
ICBzdWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAg
ICAgIHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIz
MihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAg
IHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRy
dXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0
RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBp
bnB1dEZQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0Rz
dCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVn
IGlucHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRl
bXAuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAg
ICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAg
ICAgICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNy
Y0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0z
MigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVl
UmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVj
Qnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxv
dywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QpOworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lO
OiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzY5
MywxMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBK
SVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSB8fCBzaG91bGRTcGVjdWxhdGVE
b3VibGUocmhzKSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisKKyAgICAgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworCisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhNYXRoOjpm
bW9kRG91YmxlLCByZXN1bHRGUFIsIGxoc0ZQUiwgcmhzRlBSKTsKKworICAgICAgICAgICAgc2V0
RG91YmxlKGRzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJ
RElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgp
OworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZS
ZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFT
U0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VS
VChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdU
NCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihl
ZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhp
cywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBl
Y3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChl
Y3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywg
bGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNH
UFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdw
cigpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFtZSwgbGlrZSBz
cGlsbEV4cGVjdGluZ1Nsb3dQYXRoCisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3Qp
OworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAg
c3BlY3VsYXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJo
c0dQUik7CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BS
LCBlY3gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KGVjeCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAg
IG1vdmUocmVnVDQsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywg
ZWN4KSk7CiAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwg
ZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEVxdWFsLCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRl
bm9taW5hdG9yTm90TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQz
MigpOwogICAgIHg4NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAg
SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhz
R1BSLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJv
LCBlZHgpKTsKICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMy
KGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRf
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYg
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
KQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNC
aWdJbnQpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0lu
dCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgZWF4KTsKIH0KIAogI2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArODA2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpT
VkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJs
ZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7
CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzQsNiArODE2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxl
c3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRM
b2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MiwxNSArOTA1LDEzIEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9w
LCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24g
b3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9h
ZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpA
QCAtNzI0LDEzICsxMDY1LDY2IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdh
dGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lD
Kj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAv
LyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVO
ZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNT
bG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihu
ZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
T3B0aW1pemUsIHNsb3dDYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+Citib29sIEpJ
VDo6dHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKworICAgIGF1dG8gYml0T3AgPSBbJl0gKEdQ
UlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7
CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0YW5kPikKKyAg
ICAgICAgICAgIGFuZDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0b3I+KQorICAgICAgICAgICAg
b3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJpdHhvcj4pCisgICAgICAgICAgICB4b3IzMihsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZV92PE9wLCBPcExzaGlmdD4pCisgICAgICAgICAgICBsc2hpZnQzMihsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2Ft
ZV92PE9wLCBPcFVyc2hpZnQ+KQorICAgICAgICAgICAgdXJzaGlmdDMyKGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8
T3AsIE9wUnNoaWZ0PikKKyAgICAgICAgICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworCisgICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICB9Owor
CisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50
MzIob3AyKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAg
ICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AyKSkgeworICAgICAgICBJbnQzMkNvbnZlcnRpbmdP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFu
ZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQ
UiwgcmhzR1BSKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0
R2VuZXJhdG9yPgpAQCAtNzQxLDE3ICsxMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlP
cEZhc3RQYXRoKGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExPTEJp
dEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAKICAg
ICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9w
ZXJhbmQ7CkBAIC03NjAsMzMgKzExNDUsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BG
YXN0UGF0aChjb25zdCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KG9wMikpOwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZh
c3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVt
cC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywg
b3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJp
Z2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVz
dWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRS
ZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBp
ZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwor
ICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYg
KCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
c2NyYXRjaEdQUik7CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmln
aHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVt
aXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVz
dWx0KTsKKwogICAgIGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91
bGRFbWl0UHJvZmlsaW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxl
ZE9wY29kZShieXRlY29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZShieXRlY29kZSwgcmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wTGlzdCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0g
dHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIu
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzEyNjEsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDE5ICsxMzA3LDggQEAgdm9p
ZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IElu
dmFsaWRGUFJSZWc7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0g
ZnBSZWdUMjsKLSNlbmRpZgorICAgIGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJl
bnRJbnN0cnVjdGlvbikpCisgICAgICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxl
ZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTg3MywyMSAr
MTMyMCw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAg
ICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQu
aXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAg
RlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKwor
ICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAg
ICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJl
Z3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3Jh
dGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAg
ICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Cisg
ICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9
IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFu
ZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAg
ICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAg
ICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5
cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdl
bi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQz
Mk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVn
cy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMiwxOCArMTQwNSw2NiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBh
ZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUlu
dEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAg
ICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJo
cy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5t
X2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVO
dW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhz
RlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAg
IGFkZERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRk
SUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAg
IGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNs
b3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+
CkBAIC05MjQsMTUgKzE0NzUsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5
TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9t
IHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJl
Z1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0
byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3Jj
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVy
YW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRj
aFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsg
c3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVz
dWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVz
aW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSBy
ZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIg
dG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBz
Y3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxNTEyLDIyIEBAIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0
b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRo
SUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlv
blN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29k
ZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7
CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAg
ICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTUzNywx
NCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAj
ZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJl
Z3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVz
dWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJv
dmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3Mp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3
NCwzOSArMTU1NSw4MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElD
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRP
cGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVy
YW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0
Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50
MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQ
UlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQ
UjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVt
cDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJU
ZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7Cisg
ICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAg
IEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1Qx
OwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBl
dE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0g
ICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNl
Y29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6Omlz
TGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVy
YXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAg
ICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRD
b25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQz
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2Ny
YXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsK
KyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0g
ZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0g
ZnBSZWdUMTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwg
IXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0
T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6Omlz
UmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElD
LT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1
bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BS
LCBzY3JhdGNoRlBSKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRP
cGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxl
ZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NF
UlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAm
JiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7
CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxl
ZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdz
KTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0
T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxh
YmVsKCk7CiAjZW5kaWYKQEAgLTEwMTUsMTcgKzE2MzksMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0g
bWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAg
ICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlz
Q29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAg
ICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAg
ICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICBy
aWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQ
cm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UK
KyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJp
Z2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNjc2LDIwIEBAIHZvaWQg
SklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7
CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNC
eXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BB
ZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNIZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
dHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRG
dW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAg
ICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZh
bHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsK
QEAgLTEwNDgsOCArMTY5OCw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE3MzUsNyBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9u
Pgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5j
dGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0
aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBs
YWJlbCgpOwpAQCAtMTA5NSwxNiArMTc0NSw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
LSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9w
ZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAg
U25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29u
ZCgpKTsKIApAQCAtMTExNSwxNSArMTc1NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFs
aWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRP
cGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0
T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkg
fTsKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkpIHsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0
UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdl
bmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09
IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsK
KyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRp
ZgorICAgIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFy
dCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE4MTcsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQ
UlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAg
ICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBs
ZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0
T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwog
CkBAIC0xMTg4LDYyICsxODMyLDIzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAg
ICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJs
ZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQ
UlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQ
UjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVt
cDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJU
ZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7Cisg
ICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnBy
KCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRG
UFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BS
ID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBS
ID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICgh
bGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAg
fQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Cisg
ICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVn
VDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0Nv
bnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwor
I2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxs
cHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQs
IHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAg
ZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRo
UHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAo
Z2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdz
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVn
cy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
TGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShy
ZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAg
ICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNw
ZWNCaWdJbnQ7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFy
aXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRP
YnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVnWmVyb0Rv
dWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGxo
c0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRl
bXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzR1BSLCBs
aHNGUFIpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQUiwgcmhz
RlBSKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hN
dWwzMihPdmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAgICAgICAg
ICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihCZWxv
dywgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
RXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoQmVsb3csIHJoc0dQUiwgVHJ1c3RlZElt
bTMyKDApKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
ZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCBy
aHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9w
MikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBG
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3Vi
bGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMo
JmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9p
bnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0
aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRp
b25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhz
RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNG
UFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIo
KSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigp
LCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91
YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIo
T3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAg
ICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCBy
aHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUo
bGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3Vi
bGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3Vi
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1
YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAg
ICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3Vi
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBz
bG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9Q
X0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxEZWYoZHN0KTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2Nv
ZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAg
ICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYg
KzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAg
ICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBD
YWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisK
KyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7
CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAg
LTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9l
dmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVj
dD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOwor
ICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25z
dHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAg
IC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBs
ZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFj
aCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3Vy
ZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2Fs
bCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlv
biwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAg
ZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMp
KSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0Owot
ICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1w
TGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50
U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisK
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMs
IHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0VGVtcC5ncHIo
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdUMCk7CisgICAg
ICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3ZlblR5
cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAgZmFz
dENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHNs
b3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBy
ZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDExIEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7
CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVl
bHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMg
d2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4u
LgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBy
ZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOwog
CkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0gICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAg
SnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRT
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAg
ICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5w
cm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBK
U1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7
CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsK
KworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAgICAgY29uc3Qg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAg
SnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsK
IAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAg
ICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAg
ICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgd2ls
bERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhp
cyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0Pihp
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1NSw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJl
c3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAg
ICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9i
amVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3Vs
dEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJS
ZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAg
R1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRDb2RlOjp0eXBl
TmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAgIGNhc2UgSklU
VHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoK
QEAgLTEwOCw3ICsxMTAsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29kZVJl
ZihDCiAKIEpJVENvZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZigpCiB7Ci0gICAg
aWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQorICAgIGlmICgoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKGlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiBPcHRpb25z
OjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCiAgICAgICAgICYmIG1fcmVmLmV4ZWN1dGFibGVNZW1v
cnkoKSkKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBKSVQgY29kZSBhdCAiLCBwb2ludGVy
RHVtcChtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpLCAiXG4iKTsKIH0KQEAgLTIzNyw2ICsyMzks
MTEgQEAgTmF0aXZlRE9NSklUQ29kZTo6TmF0aXZlRE9NSklUQ29kZShDb2RlUgogI2lmIEVOQUJM
RShKSVQpCiBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhj
ZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KQogeworICAg
IC8vIEZvciBCYXNlbGluZSBKSVQsIHRoaXMgaXMgdHJpdmlhbGx5IHRydWUuCisgICAgLy8gRm9y
IExPTCBKSVQsIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBzcGlsbGVkIHRvIHRoZSBzdGFjayBhdCBl
YWNoIG9wY29kZSwgc28gd2hlbiB3ZQorICAgIC8vIGdvIHRvIHRoZSBvcF9jYXRjaCwgdGhlIGxp
dmUgc3RhdGUgbXVzdCBhbHJlYWR5IGJlIGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUgc3RhY2su
CisgICAgLy8gQWxzbywgb3BfY2F0Y2ggaGFzIG5vIGluY29taW5nIHJlZ2lzdGVyL3R5cGUgcHJv
b2Ygc3RhdGUsIHNvIGl0J3MgdHJpdmlhbCB0byBjYXRjaAorICAgIC8vIGFuIGV4Y2VwdGlvbiBp
biBMT0wganVzdCBieSBqdW1waW5nIHRvIG9wX2NhdGNoLgogICAgIHJldHVybiB7IH07CiB9CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90IHsKICAgICBI
b3N0Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxpbmVKSVQsCisg
ICAgTE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02NywzNiArNjgsMjMg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJVFR5cGUpOwog
Ci0gICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewotICAgICAgICByZXR1
cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBKSVRUeXBl
IHRvcFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRUeXBl
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6REZHSklUOwotICAg
ICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpG
VExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0KEpJVFR5cGUg
aml0VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBjYXNl
IEpJVFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAgICAgICBjYXNl
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxp
bmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAgICAgY2FzZSBK
SVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBk
ZWZhdWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlw
ZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTExNiw2ICsxMDgs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDYgKzExNywyNCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsU2l0ZUJpdHNBcmVC
eXRjb2RlSW5kZXgoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChqaXRU
eXBlKSB7CisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpI
b3N0Q2FsbFRodW5rOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBzdGF0aWMgYm9vbCBp
c0xvd2VyVGllcihKSVRUeXBlIGV4cGVjdGVkTG93ZXIsIEpJVFR5cGUgZXhwZWN0ZWRIaWdoZXIp
CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0V4ZWN1dGFibGVTY3JpcHQoZXhwZWN0
ZWRMb3dlcikpOwpAQCAtMTQ1LDkgKzE1NiwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRIaWdoZXIpOwog
ICAgIH0KKworICAgIHN0YXRpYyBib29sIHVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhKSVRUeXBl
IGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xK
SVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpG
VExKSVQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGlzT3B0aW1pemluZ0pJVChKSVRU
eXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpE
RkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBl
OjpMT0xKSVQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNERkdPckZUTChKSVRUeXBlIGpp
dFR5cGUpCisgICAgewogICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQg
fHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxG
cmFtZSogY2EKICAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFj
aGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCiAgICAgICAgIC8vIGFuZCBjYW4gY2F1
c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdl
dAogICAgICAgICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQorICAg
ICAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0
VHlwZSgpKSkKICAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CiAj
aWYgRU5BQkxFKEpJVCkKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTE0NSw2ICsxNDYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5j
dGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24g
dGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogI2Vsc2UKQEAgLTE1Nyw2ICsxNTksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0
YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0
aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUg
c3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTE2NywyNSArMTcwLDYgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5
dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
LXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYg
aXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50
KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNywyNyArMTkxLDM2IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtU
byhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xv
d0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nh
c2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9M
KQorICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZl
UGxhbigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1
bHQpOworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAg
ICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0
KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0IHsgfSk7CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dD
YXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBz
KCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0
ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5h
cHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1w
TGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFr
ZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVt
cHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1w
TGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRp
dmVPZmZzZXQpCkBAIC00MDYsMTEgKzM5OSw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6
Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3Vi
bGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCks
IGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSkKQEAgLTcxNyw2ICs3MDUsMTggQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6
OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRTbG93
T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1bGF0ZWRUeXBlIGRzdFR5cGUpCit7CisgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIGZ1bmN0aW9uKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
ICAgIGlmIChtX3VzZUxPTCAmJiBkc3QuaXNWYWxpZCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IGRzdFR5cGU7CisgICAgICAgIHdpbGxEZWYoZHN0KTsKKyAgICB9Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3
IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICB9OwogCi0gICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpOworICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNERkdP
ckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSk7CiAKICAgICAgICAgaWYgKG1fZ2VuZXJhdGVGYXN0
UGF0aE9uUmVwYXRjaCkgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsx
MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0
Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIK
ICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUg
IkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKQEAgLTQxLDYgKzQyLDggQEAKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
IAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01MSw2ICs1NCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBJZiB3ZSBjaGFuZ2UgcmVnYWxs
b2Mgc3VjaCB0aGF0IHRoZXJlIGNhbiBiZSBOIHJlZ2lzdGVycyBwZXIgbG9jYWwsIHdlIGNhbiBt
YWtlIHRoaXMgc3VjaCB0aGF0IHdlIGRvbid0IG5lZWQgdHdvIHJlZ3MuCisgICAgICAgIGlmIChz
cmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzExNSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJl
bnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklE
IHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBh
bGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVn
ID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAg
ICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7Cisg
ICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJl
ZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwog
ICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmlu
YWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNzEsNTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0lu
c3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VH
UFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZl
bnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3Rv
clRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMs
IGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhh
c0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAg
aW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VH
UFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdl
IGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAg
IGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0lt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQ
SSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9y
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1l
bnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjI0LDkzIEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9
IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAv
LyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhp
cyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNl
bGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRf
YnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFs
dWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNj
cmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRl
bXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90
b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3By
KCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdw
cigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNl
KCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMs
IHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1Rl
bXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigp
LCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVH
UFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90
b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisg
ICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAg
c2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7
CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBM
b2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkp
IGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2lu
Y2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBp
dCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBt
dXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1i
b2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHBy
b3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAg
IHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAg
ICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2Zz
W21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VP
Zk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBl
R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMyNSwyOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNTUsNzIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZp
bmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwu
bGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNP
dGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1
bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVu
ZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAK
KyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1w
IG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MjksMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
dW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDYzLDM1IEBAIHZv
aWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyNpZiBDUFUoQVJNNjQpCisgICAg
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BS
LCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoWmVy
bywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMjY4LDExICs0OTksMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IElu
c3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1i
ZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJl
Z1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0
NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0y
ODIsMjEgKzUyOSw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQz
Mk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAot
ICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRU
eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayks
IHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMxMywxOCArNTk1LDQ3IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29k
ZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KTsKKworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjQ0LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29i
amVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09i
amVjdCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1
ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkp
CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9y
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisg
ICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzU1LDcgKzcwOSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVH
UFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcyOCw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmpl
Y3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAm
IH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2
YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJp
bWl0aXZlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChy
ZWdUMCkpOworICAgICAgICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0g
c3JjKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIgKzc3MSwyMjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1i
b2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZh
bHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
ZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rp
b25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBy
ZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhp
cywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0
aW9uLmdwcigpOworICAgICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5j
dGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
dmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKHZhbHVlKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUodmFsdWUp
KSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyB2YWx1ZUZQUiA9IHZhbHVlVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gdGVtcEZQUi5mcHIoKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub25aZXJv
ID0gYnJhbmNoRG91YmxlTm9uWmVybyh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbm9uWmVyby5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWVUZW1wLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZwcigpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhdXRvIG5vblplcm8gPSBicmFuY2hEb3VibGVOb25aZXJvKHZhbHVlRlBSLCBzY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBub25aZXJvLmxpbmsodGhpcyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hHUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCB2YWx1ZUZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIHRl
bXBGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBib29s
IGludmVydCA9IHRydWU7CisgICAgICAgICAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCpt
X3ZtLCBKU1ZhbHVlUmVncyB7IHZhbHVlVGVtcC5ncHIoKSB9LCByZXN1bHRHUFIsIHNjcmF0Y2hH
UFIuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW52ZXJ0KTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7
IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxs
IGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAw
IG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhl
biBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJh
Y2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7
Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IGFn
YWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVh
biwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhl
IGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyBy
ZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1
ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQu
CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICB4b3I2NChUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJH
UFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZw
U2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0
Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFG
UFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0K
K30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRp
b24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25k
aXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWws
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIg
eyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
R1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBz
Y3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRj
aDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNj
cmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00NDAsNDYgKzk5NCwxMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwo
Y29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihz
cmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRo
aXMpOworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1w
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0K
LSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxs
Ci0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19
Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gy
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1
dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5v
dyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAg
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0g
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRo
ZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFkZEp1
bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQp
OworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Cisg
ICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00ODgsMTAgKzExMjUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5l
ZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8u
CisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUw
MCwxMCArMTE1MywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNv
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAgICAg
ICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE4NCw0NDIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VSVChz
cGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFs
UG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAgICAg
ICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVxdWFsID0g
YnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5h
c0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRh
Lm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
c3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigx
KSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorc3RhdGljIHZv
aWQgY29tcGFyZVN0cmluZ3MoSklUJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgbm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYgc2xvd1BhdGgsIEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIsIEdQUlJlZyBs
aHNUZW1wR1BSLCBHUFJSZWcgcmhzVGVtcEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEdQUlJlZyBz
Y3JhdGNoMkdQUikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc0dQUiwgSlNTdHJpbmc6Om9mZnNldE9m
VmFsdWUoKSksIGxoc1RlbXBHUFIpOworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJoc0dQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJoc1RlbXBHUFIpOwor
CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZlJvcGVTdHJpbmdJbXBsKGxoc1RlbXBH
UFIpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwocmhz
VGVtcEdQUikpOworCisgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNU
ZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgIAorICAgIG5vdEVxdWFsLmFwcGVuZChqaXQuYnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVt
cEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLAorICAgICAgICBzY3JhdGNo
R1BSKSk7CisgICAgCisgICAgZXF1YWwuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0
LmJyYW5jaFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0
KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZs
YWdJczhCaXQoKSkpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMigKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKyAg
ICAKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNUZW1wR1BSLCBT
dHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBsaHNUZW1wR1BSKTsKKyAgICBqaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0
KCkpLCByaHNUZW1wR1BSKTsKKyAgICAKKyAgICBhdXRvIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAg
ICAKKyAgICBqaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aEdQUik7CisKKyAgICB7CisgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KGxoc1RlbXBHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgYXV0byBtYWNyb1NjcmF0Y2ggPSBqaXQuc2NyYXRjaFJlZ2lz
dGVyKCk7CisgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgocmhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgbWFj
cm9TY3JhdGNoKTsKKyAgICAgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2gyR1BSLCBtYWNyb1NjcmF0Y2gpKTsKKyAgICB9Cisg
ICAgCisgICAgaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRj
aEdQUikubGlua1RvKGxvb3AsICZqaXQpOworICAgIGVxdWFsLmFwcGVuZChqaXQuanVtcCgpKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCitzdGF0aWMgdm9pZCBjb21wYXJlU3RyaWN0RXFDZWxscyhKSVQmIGppdCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBu
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgR1BSUmVnIGxoc0dQ
UiwgR1BSUmVnIHJoc0dQUiwgR1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyByaHNUZW1wR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgR1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgZXF1YWwuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJz
OjpFcXVhbCwgbGhzR1BSLCByaHNHUFIpKTsKKworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJh
bmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
SWZIZWFwQmlnSW50KHJoc0dQUikpOworCisgICAgYXV0byBsaHNJc1N0cmluZyA9IGppdC5icmFu
Y2hJZlN0cmluZyhsaHNHUFIpOworICAgIG5vdEVxdWFsLmFwcGVuZChqaXQuanVtcCgpKTsKKwor
ICAgIGxoc0lzU3RyaW5nLmxpbmsoJmppdCk7CisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFu
Y2hJZk5vdFN0cmluZyhyaHNHUFIpKTsKKworICAgIGNvbXBhcmVTdHJpbmdzKGppdCwgZXF1YWws
IG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXBHUFIsIHJoc1RlbXBH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEp0cnVlPigpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHBy
IGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BD
b21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBp
c0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsK
KworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShs
aHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
SlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNl
bGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BS
KTsKKworICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hU
ZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAg
ICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisg
ICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0
aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hU
ZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgs
IHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIp
OworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgewor
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVn
IHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJl
LCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAg
ICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIp
OworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxh
dGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChs
aHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJ
bnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwg
ZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAg
ICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYg
KCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMp
KSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlU3Ry
aW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQ
Uik7CisKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlz
IH07CisKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qg
bm90RXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAg
Y29tcGFyZVN0cmluZ3MoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwg
cmhzR1BSLCBsaHNUZW1wLmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwg
c2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsK
KworICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGVxdWFs
LCB0YXJnZXQpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZEp1bXAobm90RXF1YWwsIHRhcmdldCk7
CisgICAgICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgewor
ICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERv
dWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQ
UiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBS
KSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgIE51bWJlck9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4K
KworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJo
c0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2
YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
Owordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
Owordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSBy
ZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlz
IGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFs
dWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2
b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhy
b3c+KCk7CkBAIC01ODksNzQgKzE2MzUsMjQwIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlz
RXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBE
b3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAg
IGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAg
R1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1Rl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhp
cyB9OworCisgICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICAgICAg
SnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisK
KyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBz
bG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNj
cmF0Y2hUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVl
OjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNW
YWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAg
ICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFs
OworICAgICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAg
R1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1Rl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKwor
ICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1
YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIo
KSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVl
OjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNW
YWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMp
KSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMp
KSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJl
LgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBsaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhz
U2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9Owor
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIGxoc1Nj
cmF0Y2hHUFIgPSBsaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc1NjcmF0
Y2hHUFIgPSByaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNy
YzIsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
IAogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3Vt
aW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVm
dCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlm
IChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsK
LSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJh
Z21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0
aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkg
cmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8g
VGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAx
PDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBh
dCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxs
IGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJl
Z1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdo
Qml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2
NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwg
cmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVn
VDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBp
cyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1Qx
LCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGZhbHNlKTsKKyNlbHNlCiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAg
IGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOwor
ICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIGxoc0lzQ2VsbCA9IGJyYW5jaElmQ2VsbChsaHNHUFIpOworICAgICAgICAg
ICAgICAgIGF1dG8gYm90aE5vdENlbGxzID0gYnJhbmNoSWZOb3RDZWxsKHJoc0dQUik7CisgICAg
ICAgICAgICAgICAgbm90RXF1YWwuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBs
aHNJc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHJoc0dQUikpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBu
b3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNTY3JhdGNoR1BSLCByaHNTY3Jh
dGNoR1BSLCB0ZW1wR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGJvdGhOb3RDZWxscy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEg
ZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5k
IHRoZW4gdGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAg
IEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0
aGlzKTsKKyAgICAgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAg
ICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworCisgICAgICAgICAgICBpZiAoaXNFcSkKKyAgICAg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wTGlzdCBkb25l
OworICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVl
OjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVl
VHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1Qw
LCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBz
bG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxs
IHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBk
b25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRo
aXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5h
aXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisg
ICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhl
biBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBo
aWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0
aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZp
bmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRk
NjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywg
cmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUp
OworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisg
ICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxl
YXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29t
ZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkg
bmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkK
KyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hC
b29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90
aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBs
ZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAg
Y29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFy
ZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxODg2LDIwMyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdU
MCwgc3JjMiwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8g
Z3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21w
YXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMp
LCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKwor
ICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1w
TGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAg
ICAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
R1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7
ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywg
ZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCks
IHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAg
IGlmIChpc0VxKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7
CisgICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVt
cC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBk
byBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAyIHsg
KnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBsaHNTY3JhdGNoR1BSID0gbGhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByaHNTY3JhdGNoR1BSID0gcmhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0
ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAy
LmdwcigpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8g
KGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0
ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCBy
aWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsK
LSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJs
ZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRo
ZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50
MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJl
RXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFs
LCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBp
ZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4K
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxz
ZSk7CisjZWxzZQorICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBM
aXN0IG5vdEVxdWFsOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbGVmdElz
Q2VsbCA9IGJyYW5jaElmQ2VsbChsaHNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gYm90aE5v
dENlbGxzID0gYnJhbmNoSWZOb3RDZWxsKHJoc0dQUik7CisgICAgICAgICAgICAgICAgbm90RXF1
YWwuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBsZWZ0SXNDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgbm90RXF1YWwuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyaHNH
UFIpKTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRo
LCBsaHNHUFIsIHJoc0dQUiwgbGhzU2NyYXRjaEdQUiwgcmhzU2NyYXRjaEdQUiwgdGVtcEdQUiwg
dGVtcDJHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAg
ICAgICAgICAgICAgIGJvdGhOb3RDZWxscy5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAg
ICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAgIGF1dG8gbGVmdE9LID0gYnJh
bmNoSWZJbnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIobGhzR1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAg
IGF1dG8gcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5r
KHRoaXMpOworICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgYWRkSnVtcChlcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAobm90RXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZXF1YWwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7
CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewot
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0
aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2
ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1Bh
dGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOwor
ICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdv
dG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAg
ICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291
bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZO
dW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIElu
dDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZp
bmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBh
dCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAg
ICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwor
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChy
ZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVh
bCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisK
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQg
bGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAg
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBz
b21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3Ro
IGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRl
c3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAg
Ly8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9L
LmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmso
dGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
LSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8g
Y292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2
NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0
ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAg
ICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElm
SW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkp
OworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJl
Z1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7
CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsyMDk1LDIyOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3Ry
aWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJo
c0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhT
YXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFy
Z2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJS
ZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nh
c2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51
bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVj
Qnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBK
dW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5r
KHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgewor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RD
ZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051
bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
OworICAgICAgICB9CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1Qw
KSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAg
ICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsK
LQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAo
c3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisgICAgcmVz
ZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0
aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2
ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBA
IC04ODgsOSArMjM3NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNv
bnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
YXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBr
bm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1
cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVy
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNj
b3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjQwNSwxNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigm
dm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsy
NDMwLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxl
LT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzI0NTQsMTQ3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBU
YWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAg
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IFdl
IGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3Rz
QWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2
bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5v
RGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlz
RXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJl
T3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0
KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVt
cCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihp
c0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJl
T3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOwor
ICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21w
YXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4o
Y3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQot
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAg
IC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1p
dFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJ
IGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVn
aXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9s
b25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJl
LgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChz
aXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJl
c3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJv
dmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsOSArMjYwNSwyMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA0NSwxMyArMjYyOSw4NCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQq
IGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBhdXRvIGlzU3Ry
aWN0ID0gYnl0ZWNvZGUubV9lY21hTW9kZS5pc1N0cmljdCgpOwogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyY0RzdCkpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworCisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3Zl
cnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAo
aXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBU
b3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlm
IChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAg
ICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlw
ZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3Qg
JiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNy
Y0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisgICAgICAgICAgICAgICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihP
dmVycmlkZXNUb1RoaXMpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IC8vIE5vIG5lZWQgdG8gdXBkYXRlIHByb3ZlblR5cGUsIHNpbmNlIHdlJ3JlIGFuIGlkZW50aXR5
LgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENl
bGw7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBz
cmNEc3QpOworICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T3ZlcnJpZGVzVG9UaGlzKSk7CisgICAgICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0
KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3Jj
RHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/Cisg
ICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxP
YmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBy
ZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFs
T2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTA1OSw2ICsyNzE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMo
Y29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxs
ZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRl
QmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRD
YWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklE
IHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI3MjQsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rp
b25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJU
ZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUp
OworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBn
cHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVy
YW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAg
ICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcg
PSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigp
OworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
Y2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBy
YXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0
YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2
NCArMjc2NiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHoo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBj
YXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFs
UmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBl
KHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRo
ZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjIsOCArMjgxMSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjpl
bWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CisgICAg
cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIg
d2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNG
b3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emlu
Z0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRl
IGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAgIHVpbnQ2NF90KiBwdHIg
PSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAg
IGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFu
Y2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21J
bmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjgzOSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRp
bWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVP
clJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1l
KTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9i
eXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI4NTYsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVk
RW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhp
cyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFS
QU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjg4Miw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50
KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOwogfQogCkBAIC0xMjQ1LDggKzI4OTIsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9i
amVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1Jl
Z2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8
UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1p
dFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjkxMyw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmND
b21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
CisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3Bl
LmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNj
b3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBs
YWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+
Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsK
ICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRl
Y2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7
CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2Vu
ZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlv
bjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI5NzcsNDYgQEAgdm9pZCBKSVQ6OmVtaXROZXdG
dW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29w
ZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVzZXQoKTsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwg
ZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNl
IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVu
Y19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAg
ICB9CiB9CiAKQEAgLTEzNDksOSArMzA0NywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJy
YXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAg
ICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZh
bHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAg
IEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5l
bXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdw
cigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
QXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICszMDY4
LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJ
bmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFyZ0dQUiA9PSByZXR1cm5WYWx1ZUdQUik7CisgICAgfQorCisgICAgLy8gT09QUzogSW5s
aW5lIHRoZSBhbGxvY2F0aW9uIHBhdGggaGVyZSwgaXQgbWF0dGVycyBmb3Igc3Vuc3BpZGVyLWNy
eXB0by1hZXMKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEu
bV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdU
MSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRh
ZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMzEwNCwzNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsg
KnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0
aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1
cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0
MDksNiArMzE1Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgK
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQ
YXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzMxODIsOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVt
ZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhl
cmU/CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMzIwOSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUo
cHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAg
YmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVz
IGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOwor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xv
d0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0x
NDc4LDEzICszMjI2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4
ZWQKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1f
Ynl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwor
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAs
MzcgKzMyNTksODEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJh
c2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
LQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0g
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKIAotICAgIC8vIE90aGVyd2lzZSBpdCdz
IG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSks
IHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0
aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4g
aW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisg
ICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihv
ZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAg
IAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMg
YSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAg
IC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihl
bnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1dGUg
dGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7
CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hl
ZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQor
ICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
IHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOworICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IG9m
ZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVy
Zmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAg
ICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEg
KzMzNDMsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAg
IFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1
Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5k
ZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5k
ZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1w
bGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4
R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0
b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOwor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAg
fQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
IHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAK
ICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzM5Nyw1MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JH
UFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBL
bm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRo
aXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVy
YXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5n
cHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCBy
ZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGlu
ayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRj
aEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE1OTgsNiArMzQ1MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlw
ZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1w
TGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzM1MTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9u
QXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHBy
b2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiAr
MzUzMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlj
a2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUo
KTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAh
PSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2Vu
VGFpbD4oKTsKQEAgLTE2ODQsNiArMzU0NSwxOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaQogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3Zv
aWQgSklUOjplbWl0SXNDYWxsYWJsZUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOwor
ICAgICAgICBhdXRvIGlzRnVuY3Rpb24gPSBicmFuY2hJZkZ1bmN0aW9uKGlucHV0R1BSKTsKKyAg
ICAgICAgYXV0byBub3RPYmplY3QgPSBicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUik7CisgICAg
ICAgIAorICAgICAgICBhdXRvIHNsb3dQYXRoID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IE92ZXJyaWRlc0dldENhbGxEYXRhKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIAorICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNGdW5jdGlv
bi5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2FsbGFibGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0SXNDYWxsYWJsZUltcGw8
T3BJc0NhbGxhYmxlPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBlbWl0SXNDYWxsYWJsZUltcGw8T3BUeXBlb2ZJc0Z1bmN0aW9uPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBh
dXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisgICAgICAgIAorICAgICAgICBh
dXRvIGlzTnVsbCA9IGJyYW5jaElmRXF1YWwoSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9LCBqc051
bGwoKSk7CisgICAgICAgIGF1dG8gaXNOb25OdWxsTm9uQ2VsbCA9IGp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGlzRnVuY3Rpb24gPSBi
cmFuY2hJZkZ1bmN0aW9uKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBub3RPYmplY3QgPSBicmFu
Y2hJZk5vdE9iamVjdChpbnB1dEdQUik7CisgICAgICAgIAorICAgICAgICBhdXRvIHNsb3dQYXRo
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IE92
ZXJyaWRlc0dldENhbGxEYXRhKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIAorICAgICAgICBpc051bGwubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNOb25OdWxsTm9u
Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBpc0Z1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAg
IG5vdE9iamVjdC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5
dGVjb2RlLm1fdmFsdWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25l
OworICAgICAgICBKdW1wIHNsb3dQYXRoOworICAgICAgICBlbWl0VHlwZU9mKAorICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9LCByZXN1bHRHUFIsCisgICAgICAgICAgICBbJl0g
KFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Rocm91Z2gpIHsKKyAgICAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV92bS0+c21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGlmICghZmFsbHNUaHJvdWdoKQorICAgICAgICAg
ICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIFsmXSAoSnVtcCB0aGVTbG93UGF0aCkgeworICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
dGhlU2xvd1BhdGg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNTdHJpbmc7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVu
Z3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxv
YWQzMihBZGRyZXNzKGlucHV0R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRM
ZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNv
ZGUubV9zeW1ib2xUYWJsZSkpOworICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc3ltYm9sVGFibGUtPnNpbmdsZXRvbigpLmlzU3RpbGxWYWxp
ZCgpKSB7CisgICAgICAgICAgICBlbWl0U2xvd09wKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudCwgY3VycmVudEluc3RydWN0aW9uLCBkc3QsIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgc2Nv
cGVUZW1wIHsgKnRoaXMsIHNjb3BlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBzY29wZUdQ
UiA9IHNjb3BlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxVGVtcC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDJUZW1wLmdwcigpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3du
U2l6ZTxKU0xleGljYWxFbnZpcm9ubWVudD4oCisgICAgICAgICAgICAqbV92bSwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0
cnVjdHVyZSgpKSwgYnV0dGVyZmx5LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsCisgICAgICAg
ICAgICBzbG93UGF0aCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKHN5bWJv
bFRhYmxlKSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBEb24ndCBuZWVkIGEgbWVtb3J5IGJhcnJpZXJz
IHNpbmNlIHdlIGp1c3QgZmFzdC1jcmVhdGVkIHRoZSBhY3RpdmF0aW9uLCBzbyB0aGUKKyAgICAg
ICAgLy8gYWN0aXZhdGlvbiBtdXN0IGJlIHlvdW5nLgorICAgICAgICBzdG9yZVB0cihzY29wZUdQ
UiwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSk7CisgICAgICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc3ltYm9sVGFibGUpLCBBZGRyZXNzKHJlc3VsdEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mU3ltYm9sVGFibGUoKSkpOworICAgICAgICAg
ICAgCisgICAgICAgIC8vIE11c3QgaW5pdGlhbGl6ZSBhbGwgbWVtYmVycyB0byB1bmRlZmluZWQg
b3IgdGhlIFREWiBlbXB0eSB2YWx1ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsgKytpKQorICAgICAgICAgICAgc3RvcmVUcnVzdGVk
VmFsdWUoaW5pdGlhbFZhbHVlLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGUoU2NvcGVPZmZzZXQoaSkpKSk7CisgICAgICAgIAorICAgICAg
ICBtdXRhdG9yRmVuY2UoKm1fdm0pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBl
bHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29u
dHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzAy
LDExICszNzUwLDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50
Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdU
MCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFs
dWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJ
bnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzM3NzEs
NDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVt
UGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVy
b0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFt
c1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1
bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1Q
YXJhbXNUb1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNl
dEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1Qw
KTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAg
emVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBh
cmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdU
MCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAj
ZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5r
KHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCks
IHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1Qx
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVn
VDEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9h
cmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0
OSArMzgyMCw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVn
VDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkp
LCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91
dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3Vs
dFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIp
OworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNV
bmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAj
ZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRj
aEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFs
dWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsK
LSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2
bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3Mp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDI0LDYgKzE0MjQsOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uQ29tcGFyCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAg
ICAvL2RhdGFMb2dMbigiY29tcGFyZUxlc3MsIGxoczogIiwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpLCAiIHJoczogIiwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKICAgICAKICAg
ICByZXR1cm4ganNMZXNzPHRydWU+KGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQpAQCAtMTQ5MSw2ICsxNDkz
LDggQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIEpTVmFs
dWUgc3JjMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIHNyYzIg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKKyAgICAvL2RhdGFMb2dMbigic3RyaWN0
ZXEsIGxoczogIiwgc3JjMSwgIiByaHM6ICIsIHNyYzIpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6
OnN0cmljdEVxdWFsKGdsb2JhbE9iamVjdCwgc3JjMSwgc3JjMik7CiB9CiAKQEAgLTE2OTEsNyAr
MTY5NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EZWJ1ZywKICNpZiBF
TkFCTEUoREZHX0pJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kT3B0aW1p
emVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBjb2RlQmxvY2stPnVw
ZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZl
KCktPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVy
V2FybVVwKCk7CiB9CiAKQEAgLTE3NDUsNyArMTc0OSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25PcHRpbWkKIAogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1p
emF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAiZGVsYXlPcHRpbWl6ZVRvREZHIiwgKCJjb3VudGVyID0gIiwgY29kZUJsb2Nr
LT5qaXRFeGVjdXRlQ291bnRlcigpKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJl
ZGljdGlvbnMoKTsKKyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVw
ZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldCwg
YmVjYXVzZSB0aGUgdGhyZXNob2xkIGhhc24ndCBiZWVuIHJlYWNoZWQuIik7CiAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQpAQCAtMTgxNCw3ICsx
ODE4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAg
ICAvLyBub3RoaW5nIGxlZnQgdG8gZG8uCiAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
ZGVCbG9jaywgImRlbGF5T3B0aW1pemVUb0RGRyIsICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsK
LSAgICAgICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9u
cygpOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29k
ZSBibG9jayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZl
IGFuIG9wdGltaXplZCByZXBsYWNlbWVudC4iKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KQEAgLTE4NDMsNyArMTg0Nyw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgeworICAg
ICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVUb0RGR05vdygpKSB7CiAgICAgICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0aW1pemVUb0RGRyIs
ICgiaW5zdWZmaWNpZW50IHByb2ZpbGluZyIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgICAgICAgICAiRGVsYXlpbmcgb3B0aW1pemF0
aW9uIGZvciAiLCAqY29kZUJsb2NrLApAQCAtMTg3OSw3ICsxODgzLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sq
IG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBBU1NF
UlQob3B0aW1pemVkQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sg
JiYgSklUQ29kZTo6aXNERkdPckZUTChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwog
ICAgIAogICAgIGlmICh2b2lkKiBkYXRhQnVmZmVyID0gREZHOjpwcmVwYXJlT1NSRW50cnkodm0s
IGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG9wdGltaXplZENvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJh
dCBiYyMiLCBieXRlY29kZUluZGV4KSk7CkBAIC0zNDMzLDYgKzM0MzcsNDIgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrSQogICAgIHJldHVybiAwOwogfQogCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93
LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKQoreworICAgIC8vIEl0J3Mgc29ydCBv
ZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9p
bmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KKyAgICBEZWZlckdD
Rm9yQVdoaWxlIGRlZmVyR0MobG9sQ29kZUJsb2NrLT52bSgpLmhlYXApOworCisgICAgaWYgKGdl
dGVudigicHJpbnRFYWNoSmV0dGlzb24iKSAmJiAhIWF0b2koZ2V0ZW52KCJwcmludEVhY2hKZXR0
aXNvbiIpKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJqZXR0aXNvbiwgZm9yY2luZyByZW9wdCBub3c6
ICIsICpsb2xDb2RlQmxvY2spOworICAgIGxvbENvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2
ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgIAorICAgIC8vIE9PUFM6IHByb2Nlc3Mg
dmFsdWUgcHJvZmlsZXMgaGVyZSwgc2luY2Ugd2UncmUgamV0dGlzb25pbmcsIGhvcGVmdWxseSB0
aGV5IHVwZGF0ZSB3LyB0aGluZ3Mgd2UgY2FyZSBhYm91dC4KKworICAgIHNhbml0aXplU3RhY2tG
b3JWTShsb2xDb2RlQmxvY2stPnZtKCkpOworCisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCAqbG9sQ29kZUJsb2NrLCAiOiBFbnRlcmVkIHJlb3B0aW1pemUgZnJvbSBMT0wi
KTsKKworICAgIENvZGVCbG9jayogbGxpbnRDb2RlQmxvY2sgPSBsb2xDb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCk7CisgICAgLy8gV2UgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29k
ZSBibG9jay4KKyAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUobGxpbnRDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOworCisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGxsaW50Q29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpOworICAgIGlmICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1l
bnQgPT0gbGxpbnRDb2RlQmxvY2spIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCAqbGxpbnRDb2RlQmxvY2ssICI6IE5vdCByZW9wdGltaXppbmcgTE9MIGJlY2F1
c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHRoZSByZXBsYWNlbWVudCBtdXN0IGJlIG9wdGltaXpl
ZCBjb2RlLiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eQorICAgIC8vIHRvIGNoZWNrIG91ciBs
b2dpYy4KKyAgICBBU1NFUlQobGxpbnRDb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50
KCkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQobG9sQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKTsKKworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBzdHVjayBpbiBhIGxvb3Ag
bG9naWMKKyAgICBsb2xDb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T1NSRXhpdCwgQ291bnRSZW9wdGltaXphdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw2ICszMTksOCBAQCBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblZhbHVlCiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csIHZvaWQsIChWTSopKTsK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5M
b2csIHZvaWQsIChWTSopKTsKIAorSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25U
cmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9j
aykpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpA
QCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwpAQCAtMjgxLDggKzI3Nyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01NTgsNyArNTUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAg
ICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxh
YmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9z
ZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC02MzksOCArNjMw
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAt
Njg2LDggKzY3NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5
LDggKzcxNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtNzc4LDggKzc2Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
QEAgLTgxOSw4ICs4MDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0x
MTAwLDggKzEwODEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3Bl
LCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsK
QEAgLTEyNTcsOCArMTIzNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlw
ZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPHd0Zi9TY29wZWRM
YW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQogCkBAIC01Miw1MSArNTQsMTE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3Bl
cnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVn
IGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7
CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAgIGlmIChtX3VzZUxPTCkgeworICAg
ICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFs
dWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAg
cHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGluZGV4
aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0g
cmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAogICAgIGlmIChtZXRhZGF0
YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJl
ck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAg
aWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwg
U3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwg
aW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkK
KyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KIAotICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHBy
b3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKIAog
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJv
cGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAg
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0
eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0
aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisgICAgICAgIH0KICAgICAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsK
LSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwot
Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsr
bV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
LSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBw
cm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTA1LDQxICsxNzMsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9w
ZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJl
c3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7
CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTU3LDYgKzI1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0g
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0lu
dGVnZXJDb25zdGFudCkKQEAgLTMxOSw4ICs0MjEsMTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAg
YXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAt
MzM5LDcgKzQ0NCw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQK
ICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJv
b2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBAIC0zNDcsNyArNDUyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3Qo
KTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRT
dGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzU1LDEzICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3Qp
Ci0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0Pigp
KTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGly
ZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAor
ICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBEbyBiZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogCkBAIC0zOTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5k
ZXgsIGZhc3RQYXRoSm1wLCBkb25lLCBkb25lKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsK
ICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0
dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5t
X2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJf
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNz
b3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAg
ICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBh
Y2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAg
aW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFz
ZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0
dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9z
ZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBH
UFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOworICAgICAgICBHUFJSZWcgc2V0dGVyR1BS
ID0gc2V0dGVyLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRl
ciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRl
ciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1
dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsK
LSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywg
Ynl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlz
LCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7
ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Cisg
ICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQz
Ml90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUu
bV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29k
ZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBi
eXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOCArNjMzLDUyIEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQ
UiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3Jp
dGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xv
YmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDkyLDI1ICs2ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJl
c3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUyMCwxOSArNzE3LDcwIEBAIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBi
YXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAg
IHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3Bl
cnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
cHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVs
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
IAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1
ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBj
YW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlz
IGNlbGwuCkBAIC01NDEsMjIxICs3ODksMzY4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAg
SklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
KHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAg
IH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdz
LCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlw
ZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7
CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BS
KTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVz
dWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7
Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAo
KmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkp
OwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAm
bWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7Cisg
ICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJl
Z1QxOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5k
ZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFy
cmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAg
IH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0K
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dl
dEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAg
ICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BS
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJh
c2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNW
UmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlz
R1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1f
Z2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGly
ZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFi
bGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdl
IHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBo
YXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2Vu
ZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBh
bHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFs
dWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVn
IGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICBz
Y3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUt
PmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICBz
Y3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFz
ZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBy
ZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAg
ICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAg
ICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBj
YW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlz
IGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJh
c2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFs
dWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
KHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisK
KyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNl
LnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BS
UmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAg
ICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgp
LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBk
ZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwg
cmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDcsMTcgKzEyNjAsMjUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBk
ZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC04NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29s
dmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgZGVwdGgpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAg
ICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoZGVwdGggPiAw
KQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVu
dC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBE
eW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKQEAgLTg5NCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7
CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogCkBAIC05MDksMjkgKzEzNDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3Vs
dEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC05NDAsMTUg
KzEzNzYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0g
ICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAg
IGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEy
ICsxNDAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAg
IGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAt
OTc4LDUxICsxNDEzLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUu
c2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVn
VDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Ym9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBH
UFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwot
ICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVW
YWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNldFZhbHVlOworICAgICAg
ICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1w
bGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAg
ICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFz
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAg
ICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKG9w
ZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7
Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
T3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAg
ICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAg
ICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBz
aWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFz
ZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7CisgICAgICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7CisgICAgICAgICAgICBsb2FkNjQo
QmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7Cisg
ICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFs
dWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQ
UiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMTAzNiwxMCArMTUwNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
IAotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzTm90R2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsK
KyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwODIsNDAgKzE1NTAsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJlZ1QwKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3Vs
dEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwot
fQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsK
LSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRp
cmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwot
ICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1Qw
LCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXRO
b3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMjks
MjEgKzE1NzksNDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9
IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgfQorCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVz
IGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZl
X3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BS
VGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJm
bHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJl
ZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9
IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IHJlZ1QzOworICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAg
ICAgIH0KIAorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJl
U2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFy
IGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBi
dXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMg
Y2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgaml0QXNzZXJ0KHNj
b3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0
cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAg
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNs
b3QsIG9mZnNldEdQUik7CisgICAgICAgICAgICBuZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAg
ICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNlSW5kZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMTE1NCwyOCArMTYzMiw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKKworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAg
ICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgp
KSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdh
eXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KICAgICAgICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRj
aEdQUik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdU
MCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwor
ICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRT
bG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICBsb2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlX
cml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgIHN0b3JlNjQo
dmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRT
Y29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1
cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Cisg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xv
dCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQ
UjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFs
dWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2Nv
cGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5
V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZh
bHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6
CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CkBAIC0xMTkwLDEyICsxNjk3LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFs
dWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0
IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhp
cyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRo
LCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVt
cCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBK
dW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2Ug
YXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRp
bmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CkBAIC0xMjA5LDIz
ICsxNzI1LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAg
ICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBz
Y3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJz
IG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdl
IGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BS
IGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsK
KwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJ
bmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8v
IExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CkBAIC0xMjQyLDEwICsxNzY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBl
KCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpAQCAtMTI2MSw2MSArMTc4
NCwxNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50
c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRz
VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywg
YXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9y
YWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVz
dWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3Rv
cmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0
KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0
V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJl
ZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIo
KTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9
CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0
dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtu
b3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJh
bmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lz
ZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9w
dWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4
ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBj
b2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlk
IFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3Ig
U2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAg
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsK
ICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwp
KSB7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFs
dWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworCisgICAgICAgIGlmIChn
cHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgb3duZXJH
UFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBv
d25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgb3duZXJHUFIgPSBvd25lclZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93
bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVn
VDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIH0KKwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5
cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0g
ICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0
Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29y
ZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0
aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxl
bnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93
bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFs
dWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBP
T1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5j
aCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBj
YW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNh
cmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRl
IHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0g
TWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVu
dCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQo
dmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdw
cigpOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVl
R1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZUdQUik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3Zl
blR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihv
d25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZh
bHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9
CiAKQEAgLTEzMjcsMTEgKzE5NjcsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFs
X2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwg
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRl
bXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3Bl
cmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZz
ZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmpl
Y3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM0MSwxMCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFk
ZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKGluZGV4KSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAg
ICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAm
PSBTcGVjQ2VsbDsKKworICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BS
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0K
IAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25z
dCBJbnN0cnVjdGlvbiopOwpAQCAtMTQ0Nyw4ICsyMTE1LDI1IEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJy
aWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVl
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3Jh
dGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBP
cHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2Fs
bCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2
bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJD
YWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0NjYsNiArMjE1MSw4IEBAIHZvaWQgSklUOjplbWl0QnlW
YWxJZGVudGlmaWVyQ2hlY2soUmVnaXMKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIApAQCAtMTU2Nyw2ICsyMjU0LDgg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRL
aW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1f
dXNlTE9MID0gZmFsc2U7CisKICAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0
ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0g
UHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBw
cm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHByb2ZpbGVkREZHQ29k
ZUJsb2NrLCAhcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAi
T3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVh
ZHkuIik7CiAgICAgCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9m
aWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIEFTU0VS
VCghcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
IHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1p
emluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHJlc3VsdDogIiwgcmVzdWx0KTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDIyIEBACiAjaW5jbHVkZSAiSklULmgi
CiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKwogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpJVFdvcmtsaXN0OjpQbGFuIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPEpJVFdvcmtsaXN0OjpQbGFuPiB7CiBwdWJsaWM6Ci0gICAgUGxhbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQotICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBtX2ppdChjb2Rl
QmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBQ
bGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDogbV9sbGlu
dENvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9jb2RlQmxvY2tUb0NvbXBpbGUoY29t
cGlsZVR5cGUgPT0gSklUOjpDb21waWxlVHlwZTo6TE9MID8gbV9sbGludENvZGVCbG9jay0+bmV3
UmVwbGFjZW1lbnQoKSA6IG1fbGxpbnRDb2RlQmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29k
ZUJsb2NrVG9Db21waWxlLT52bSgpLCBtX2NvZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUs
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQg
dGhpcyBpbiBjb25jdXJyZW50IGdjCisgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAh
PSBtX2xsaW50Q29kZUJsb2NrKSB7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+
dm0oKS5oZWFwLnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgpCiAgICAgewogICAgICAgICBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQgPSBtX2ppdC5saW5rKCk7CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBt
YWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUg
IT0gbV9sbGludENvZGVCbG9jaykKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGls
ZS0+dm0oKS5oZWFwLnVucHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0p
OworCiAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25G
YWlsZWQ6Ci0gICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVs
YXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKG1fbGxpbnRDb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNv
bXBpbGF0aW9uIGZhaWxlZCIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxv
Y2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRD
b2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOworICAgICAgICAgICAgbV9sbGludENvZGVC
bG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vz
c2Z1bC4iKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5z
dGFsbENvZGUobV9jb2RlQmxvY2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24o
KTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+
aW5zdGFsbENvZGUobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICAgICAgbV9sbGludENv
ZGVCbG9jay0+aml0U29vbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0
LDggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+dm0oKTsgfQorICAgIENvZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1
cm4gbV9sbGludENvZGVCbG9jazsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2Rl
QmxvY2stPnZtKCk7IH0KICAgICAKICAgICBib29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAg
IHsKQEAgLTgwLDE1ICs5MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNo
ZWRDb21waWxpbmc7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkKKyAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6
OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgewotICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5
cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRo
cmVhZCgpOwogICAgICAgICBwbGFuLmZpbmFsaXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToK
LSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9sbGludENvZGVC
bG9jazsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2pp
dDsKICAgICBMb2NrIG1fbG9jazsKICAgICBib29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZh
bHNlIH07CkBAIC0yMzMsOSArMjQ3LDExIEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRl
cihDb2RlQmxvY2sKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUg
PSBPcHRpb25zOjpmb3JjZUxPTCgpID8gSklUOjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21w
aWxlVHlwZTo6QmFzZWxpbmU7CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50
SklUKCkpIHsKLSAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29t
cGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApAQCAtMjQ5LDcgKzI2NSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVM
YXRlcihDb2RlQmxvY2sKICAgICAgICAgCiAgICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVh
ZHMpIHsKICAgICAgICAgICAgIG1fcGxhbm5lZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAg
IFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpKTsKICAgICAgICAgICAgIG1fcGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAg
ICAgbV9xdWV1ZS5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5
QWxsKGxvY2tlcik7CkBAIC0yNzMsMTQgKzI4OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21w
aWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJ
ZiB0aGUgY29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFp
bgogICAgIC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBh
cyBpZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRv
IHRoYXQgc29tZWRheS4KLSAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBp
bGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29y
a2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7
CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5
cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVk
ID0gWyZdIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bmspCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNv
ZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5Niwx
NyArMzIyLDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAg
ICB9CiAgICAgCiAgICAgLy8gTm93IGl0IG1pZ2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChp
c0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGlu
IGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNv
bXBpbGUgd2l0aCB0aGUKLSAgICAvLyBiYXNlbGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNl
dEpJVERhdGEoKTsKLSAgICAKLSAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6
Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KTsKLSAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5p
bnN0YWxsQ29kZShjb2RlQmxvY2spOworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsK
KyAgICAgICAgQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2Vt
ZW50KCk7CisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBp
bGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxvbENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkt
Pmluc3RhbGxDb2RlKGxvbENvZGVCbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2Ug
ZG8gdGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFp
bGVkLCB0byBjb21waWxlIHdpdGggdGhlCisgICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAg
ICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBq
dXN0IGNvbXBpbGUgaXQuCisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6
OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3Jr
bGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYgbXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBA
QCB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4t
PmZpbmFsaXplKCk7CiAgICAgICAgIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2Nr
KTsKLSAgICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAg
IG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw3ICs1NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAK
ICAgICB2b2lkIGNvbXBpbGVMYXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVO
b3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAgICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVH
bG9iYWxXb3JrbGlzdCgpOwogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxX
b3JrbGlzdE9yTnVsbCgpOwpAQCAtNjYsNiArNjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRo
cmVhZDsKICAgICBmcmllbmQgY2xhc3MgVGhyZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxl
Tm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIHZvaWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAg
IAogICAgIFBsYW5zIG1fcXVldWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3Rlck1hcC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcild
OwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgp
OyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAg
ICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07
IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51
bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIs
NyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRy
VGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNX
ZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKQorICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwo
Y2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsK
ICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhv
dFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwx
MCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBP
T1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cg
cGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9Q
Q09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5z
YW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2pp
dC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjMsOCArMzYzLDEwIEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNv
ZGVCbG8KIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5s
aW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKSkKK2lubGluZSBDb2RlQmxvY2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNz
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVt
ZW50IHRoaXMgdy5yLnQgTE9MLgorCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhl
YXApOyAvLyBNeSBjYWxsZXJzIGRvbid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3
YW50IHRvIEdDIGhlcmUgYXQgYWxsLgogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAg
ICAgCkBAIC0zNzMsMjkgKzM3NSw0NSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyhWCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVk
KCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENv
bXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+
bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAog
ICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAor
CisgICAgYXV0byBsb2xDb2RlQmxvY2sgPSBbJl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAg
aWYgKENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2Vt
ZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkxPTEpJVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1
bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRj
aCAoY29kZUJsb2NrLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklU
OiB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2Rl
IHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQog
ICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlz
dDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9s
Q29kZUJsb2NrKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAi
LCAqY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0
YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4i
KTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksCiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVy
ZWQgIiwgbmFtZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKQEAgLTQwNiwxOCArNDI0LDIx
IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJ
TlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29k
ZUJsb2NrLT52bSgpOwotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNv
ZGVCbG9jaykpCisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVB
bmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxv
Y2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0g
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xv
Z3VlIikpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1Ig
ZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2so
Y29tcGlsZWRDb2RlQmxvY2spOwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAg
ICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRk
cmVzcygpLCBudWxscHRyKTsKKyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVC
bG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NF
UlQoa2luZCA9PSBBcml0eUNoZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+
aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgbnVsbHB0cik7CisgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+
aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgbnVsbHB0cik7CiB9CiAjZWxzZSAvLyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRo
UmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVu
dHJ5S2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29k
ZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxw
dHIsIG51bGxwdHIpOwpAQCAtNDI3LDMxICs0NDgsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJu
VHlwZSBlbnRyeU9TUihDb2RlQgogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewog
ICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsK
IH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQog
ewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAg
ICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0
dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpz
Q2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xP
V19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rp
b24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9y
Q2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNo
ZWNrKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxs
KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2sp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9hcml0eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVu
dHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVj
dXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9T
UihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+
anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9T
TE9XX1BBVEhfREVDTChsb29wX29zcikKQEAgLTQ4MCwxOSArNTAxLDIyIEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51
bGxwdHIpOwogICAgIH0KICAgICAKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNz
KHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9j
ayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29k
ZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29k
ZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAg
IAotICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIs
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
bXBpbGVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpKTsKIAotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpMT0xKSVQpOwogCi0gICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVC
bG9jay0+aml0Q29kZU1hcCgpOworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21w
aWxlZENvZGVCbG9jay0+aml0Q29kZU1hcCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJn
ZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRh
cmdldCk7CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7
CiAgICAgCiAgICAgTExJTlRfUkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9m
RnJhbWUoKSk7CiAjZWxzZSAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIE9yaWdpblN0YWNr
OjpPcmlnaW5TdGFjayhEYXRhYmFzZSYgZGF0YWIKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgc3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXBwZW5kKE9yaWdpbigKLSAg
ICAgICAgICAgIGRhdGFiYXNlLmVuc3VyZUJ5dGVjb2Rlc0ZvcihzdGFja1tpXS5pbmxpbmVDYWxs
RnJhbWUoKS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLAorICAgICAgICAgICAgZGF0YWJhc2Uu
ZW5zdXJlQnl0ZWNvZGVzRm9yKHN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSgpLT5sb2xPckJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKSwKICAgICAgICAgICAgIHN0YWNrW2ldLmJ5dGVjb2RlSW5kZXgo
KSkpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNiArNjcsMjAgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6YgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2Ut
PmNvZGVCbG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOwogfQogCitGdW5jdGlvbkNvZGVC
bG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpsb2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
KiBlZGdlOworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICBlZGdlID0gbV9j
b2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICBlZGdlID0gbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgfQorICAgIGlmICghZWRnZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRn
ZS0+Y29kZUJsb2NrKCktPmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKK30KKwogdm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCwxMyArMTE0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gY29kZUJsb2NrRm9yQ29uc3RydWN0KCk7CiAgICAgfQogCisgICAgRnVuY3Rpb25Db2RlQmxv
Y2sqIGxvbE9yQmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOwogICAgICAgICAKLSAgICBGdW5jdGlvbkNvZGVCbG9jayogcHJvZmlsZWRDb2Rl
QmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwotICAgIH0KLQogICAgIFJlZlB0cjxUeXBl
U2V0PiByZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCkgCiAgICAgewogICAgICAgICBSYXJlRGF0YSYg
cmFyZURhdGEgPSBlbnN1cmVSYXJlRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAz
LDEwIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25z
OjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICBPcHRpb25zOjp1c2VERkdKSVQo
KSA9IDA7CisgICAgT3B0aW9uczo6Zm9yY2VMT0woKSA9IDE7CisgICAgT3B0aW9uczo6dXNlTExJ
bnQoKSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgT3B0aW9uczo6dmFsaWRhdGVE
RkdFeGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MjcsNiArNTI3LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdl
KCk7CiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoQm9vbCwgdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5v
cm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMg
ZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAogICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0
YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwg
dW5kZXJzdGFuZCBwcml2YXRlIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBc
CisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBP
cHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgU2FtcGxpbmdQcm9m
aWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgIG9yaWdpbi53YWxrVXBJbmxpbmVT
dGFjayhbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKICAgICAgICAgICAgICAg
ICBtYWNoaW5lT3JpZ2luID0gY29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICBhdXRvKiBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAg
ICAgIGFwcGVuZENvZGVCbG9jayhpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPmJh
c2VsaW5lQ29kZUJsb2NrLmdldCgpIDogbWFjaGluZUNvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhpbmxpbmVDYWxs
RnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgOiBt
YWNoaW5lQ29kZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgICAg
ICB9KTsKIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RTYW1wbGluZ1Byb2ZpbGVy
RGF0YUZvckpTQ1NoZWxsKCkpIHsKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJv
ZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBM
TEludCdzIGxsaW50X2hhbmRsZV91Y2F1Z2h0X2V4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0
IGFnYWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYml0cyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0
YWNrVHJhY2UubGxpbnRQQykpOwogICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0g
dHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2spOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhl
Y3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgsOCBAQCBzdGF0aWMgdm9p
ZCBzZXR1cExMSW50KENvZGVCbG9jayogY29kZUJsCiBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShKSVQpCi0gICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIC8vIE9PUFM6IEZpZ3VyZSBvdXQgd2hhdCB3ZSB3YW50
IHRvIGRvIHdpdGggdGhlIG5vIExMSW50IG9wdGlvbi4uLi4KKyAgICBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlwZTo6
QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0
aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0
UnVubmVyVXRpbHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2
NSw5IEBAIEpTVmFsdWUgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlIHRoZUYKIHsKICAgICBi
b29sIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSBmYWxzZTsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICByZXR1cm4ganNOdW1i
ZXIoMCk7IC8vIE9PUFMKKwogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkgfHwgIU9wdGlvbnM6
OnVzZUJhc2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6OnVzZURGR0pJVCgpKQogICAgICAgICBwcmV0
ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MCw3ICsxNDAsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JG
VEwoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSB0
cnlIb2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAgICAgICAgICBy
ZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3
ICsxODIsNyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjCiAKICAg
ICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoY29kZUJs
b2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAg
ICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMp
OwogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUp
OwogICAgIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBU
b29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkod29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4
Miw4IEBAIGRlZiBjb21wdXRlTXVsdGlwbGVIeXBvdGhlc2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1
bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIG5hbWVMZW5ndGggPSBsZW4oInN1YnRlc3QiKQotICAg
IGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKLSAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1h
cmtlcl0pCisgICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKSArIDMKKyAgICBiTGVuZ3Ro
ID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMwogICAgIHJhdGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIp
CiAKICAgICBwVmFsdWVIZWFkZXIgPSAicFZhbHVlIChzaWduaWZpY2FuY2UgdXNpbmcgRmFsc2Ug
RGlzY292ZXJ5IFJhdGUpIgpAQCAtMjEyLDcgKzIxMiw3IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhh
LCBiKToKICAgICBwTGVuZ3RoICs9IDIKIAogICAgIHN0cmluZ3MgPSBbXQotICAgIHN0cmluZ3Mu
YXBwZW5kKCJ8e2tleTpee25hbWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3Jl
Ol57Ykxlbmd0aH19IHx7Y29tcGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3Ro
fX18Ii5mb3JtYXQoa2V5PSJzdWJ0ZXN0IiwgYVNjb3JlPWFbdW5pdE1hcmtlcl0sIGJTY29yZT1i
W3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxl
bmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwg
cE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCisgICAgc3RyaW5ncy5hcHBl
bmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6Xnti
TGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwi
LmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9ImE6ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2Nv
cmU9ImI6ICIgKyBiW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9
YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1y
YXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCiAgICAg
Zm9yIGtleSBpbiBhLmtleXMoKToKICAgICAgICAgaWYga2V5ID09IHVuaXRNYXJrZXI6CiAgICAg
ICAgICAgICBjb250aW51ZQpJbmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUt
cHJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXBy
ZS5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxv
bmUtcHJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlz
OwogCiBzZWxmLnRlc3RSdW5uZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJ
bmxpbmVGdW5jdGlvbiwKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBp
bGVzLAorICAgIG51bWJlck9mREZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0
IG1hcDsKKyAgICAgICAgcmV0dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFi
bGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisK
KyAgICAgICAgICAgIC8vIEVtdWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0
byBnZXQgc29tZSB0aWVyaW5nIGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlm
ICghbWFwKQorICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAg
bGV0IGNvdW50ID0gbWFwLmdldChmKSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAg
ICAgICAgICAgIG1hcC5zZXQoZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAv
IDQwMDApIHwgMDsKKyAgICAgICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJs
b2NrOiBmYWlsTmV4dE5ld0NvZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0
aW9uIGRmZ1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJh
eS5wcm90b3R5cGUucHVzaDsKICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7
Zjp0aGVGdW5jdGlvbn0pKQorICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259
KSkgewogICAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVz
aChldmFsKF9hKSk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2
LDcgKzM2MSw3IEBAIGZ1bmN0aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlk
RmFpbFNvbWVUZXN0cykKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYg
KCFkZmdDb21waWxlZChhcmd1bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkg
JiYgaXNERkdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8g
YXJndW1lbnQuc3RhcnQgOiAwOwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417998</attachid>
            <date>2021-01-20 14:36:53 -0800</date>
            <delta_ts>2021-01-20 15:02:14 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>620405</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDgg
QEAgaWYgKGlzRDgpCiBpZiAodHlwZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0
ZXN0TGlzdCA9IHVuZGVmaW5lZDsKIAorLy90ZXN0TGlzdCA9IFsnY3J5cHRvLWFlcy1TUCddOwor
CiBpZiAodHlwZW9mIHRlc3RJdGVyYXRpb25Db3VudCA9PT0gInVuZGVmaW5lZCIpCiAgICAgdGVz
dEl0ZXJhdGlvbkNvdW50ID0gdW5kZWZpbmVkOwogCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL2JlbmNobWFyay1ydW5uZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw4IEBACiAv
LyBGSVhNRTogVXNlIHRoZSByZWFsIHByb21pc2UgaWYgYXZhaWxhYmxlLgogLy8gRklYTUU6IE1h
a2Ugc3VyZSB0aGlzIGludGVyZmFjZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHJlYWwgUHJvbWlz
ZS4KKworX19kaXNhYmxlU2FtcGxpbmdQcm9maWxlcigpOworCiBmdW5jdGlvbiBTaW1wbGVQcm9t
aXNlKCkgewogICAgIHRoaXMuX2NoYWluZWRQcm9taXNlID0gbnVsbDsKICAgICB0aGlzLl9jYWxs
YmFjayA9IG51bGw7CkBAIC0xMjgsMTcgKzEzMSwyMSBAQCBCZW5jaG1hcmtSdW5uZXIucHJvdG90
eXBlLl9ydW5UZXN0ID0gZnVuCiAKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcu
JyArIHRlc3QubmFtZSArICctc3RhcnQnKTsKICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7Cisg
ICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgdGVzdC5ydW4ocHJlcGFyZVJldHVy
blZhbHVlLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpOworICAgIF9fZGlzYWJsZVNh
bXBsaW5nUHJvZmlsZXIoKTsKICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgIHNlbGYuX3dy
aXRlTWFyayhzdWl0ZS5uYW1lICsgJy4nICsgdGVzdC5uYW1lICsgJy1zeW5jLWVuZCcpOwogCiAg
ICAgdmFyIHN5bmNUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTsKIAogICAgIHZhciBzdGFydFRp
bWUgPSBub3coKTsKKyAgICBfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgLy8gU29tZSBicm93c2VycyBkb24ndCBpbW1lZGlh
dGVseSB1cGRhdGUgdGhlIGxheW91dCBmb3IgcGFpbnQuCiAgICAgICAgIC8vIEZvcmNlIHRoZSBs
YXlvdXQgaGVyZSB0byBlbnN1cmUgd2UncmUgbWVhc3VyaW5nIHRoZSBsYXlvdXQgdGltZS4KICAg
ICAgICAgdmFyIGhlaWdodCA9IHNlbGYuX2ZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsKKyAgICAgICAgX19kaXNhYmxlU2FtcGxpbmdQcm9m
aWxlcigpOwogICAgICAgICB2YXIgZW5kVGltZSA9IG5vdygpOwogICAgICAgICBzZWxmLl9mcmFt
ZS5jb250ZW50V2luZG93Ll91bnVzZWRIZWlnaHRWYWx1ZSA9IGhlaWdodDsgLy8gUHJldmVudCBk
ZWFkIGNvZGUgZWxpbWluYXRpb24uCiAgICAgICAgIHNlbGYuX3dyaXRlTWFyayhzdWl0ZS5uYW1l
ICsgJy4nICsgdGVzdC5uYW1lICsgJy1hc3luYy1lbmQnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW8KIAogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvbkFzRG91YmxlTnVtYmVyKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkKTsKIAogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9ja3MpOwogCkBAIC02NjIsNiArNjYz
LDggQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVtYmVy
IiwgZnVuY3Rpb25Bc0RvdWJsZU51bWJlciwgMSk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJpc0RGR0VuYWJsZWQiLCBmdW5jdGlvbklzREZHRW5hYmxlZCwgMCk7CisKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJkcm9wQWxsTG9ja3MiLCBmdW5jdGlvbkRyb3BBbGxMb2NrcywgMSk7CiAK
ICAgICAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZv
clRlc3RpbmcoKSkgewpAQCAtMjY1Myw2ICsyNjU2LDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkFzRG91YmwKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91Ymxl
TnVtYmVyKG51bSkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc0RG
R0VuYWJsZWQsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopKQoreworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKE9wdGlvbnM6OnVzZURGR0pJVCgpKSk7Cit9CisKIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRyb3BBbGxMb2NrcywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQogewogICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBib29sIHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoY29kZUJsb2Nr
ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0
aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2Rl
Ojppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlz
YXNzZW1ibHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21T
aWduYXR1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFu
ZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQpA
QCAtMjY5LDcgKzI3MSw3IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojpk
dW0KIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci12b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IElDU3RhdHVzTWFwJiBpY1N0YXR1c01hcCkKK3ZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxvY2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkLCBQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCiB7CiAgICAgZHVt
cEhlYWRlcihibG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogCkBAIC0yODMsNiArMjg1LDIzIEBA
IHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW0KIAogICAgICAgICBvdXQu
cHJpbnQoImJiIyIsIGJsb2NrLmluZGV4KCksICJcbiIpOwogCisgICAgICAgIGlmIChwcmVkaWN0
aW9uc0F0SGVhZCkgeworICAgICAgICAgICAgb3V0LnByaW50KCJwcmVkaWN0aW9ucyBhdCBoZWFk
OiBbIik7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBwcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
QXRIZWFkLT5hdChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YSgiLCAiKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9u
cy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0
aW9uKG91dCwgcHJlZGljdGlvbnMuYXJndW1lbnQoaSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mTG9jYWxz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCAiPSIpOworICAgICAg
ICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmxvY2FsKGkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiXVxuIik7CisgICAgICAgIH0KKwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7
CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQo
aSArIGJsb2NrLmxlYWRlck9mZnNldCgpKTsKICAgICAgICAgICAgIGR1bXBlci5kdW1wQnl0ZWNv
ZGUoY3VycmVudEluc3RydWN0aW9uLCBpY1N0YXR1c01hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KIGNs
YXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyIGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVy
PEJsb2NrPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01h
cCYgPSBJQ1N0YXR1c01hcCgpKTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBQcmludFN0cmVhbSYgb3V0
ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgpKTsK
KyAgICBzdGF0aWMgdm9pZCBkdW1wR3JhcGgoQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQgPSBXVEY6Om51bGxvcHQsIFByaW50U3RyZWFt
JiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFw
KCkpOwogCiAgICAgdm9pZCBkdW1wSWRlbnRpZmllcnMoKTsKICAgICB2b2lkIGR1bXBDb25zdGFu
dHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R3JhcGguaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1
YmxpYzoKIAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci0gICAgdm9p
ZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4+
IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUo
KSkKKyAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGUsIHRydWU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50U3RyZWFtJiBwcmludGVy
ID0gV1RGOjpkYXRhRmlsZSgpKQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1w
ZXI8Q29kZUJsb2NrVHlwZT46OmR1bXBHcmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgKnRo
aXMsIHNwZWN1bGF0aW9uQXRIZWFkLCBwcmludGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcgogICAgIC8vIE5vIHVzZXMuCiAgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgogICAgIGNhc2Ugb3BfZGVidWc6Ci0gICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICBj
YXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2ptcDoKICAgICBjYXNlIG9wX25ld19vYmpl
Y3Q6CkBAIC0xMDMsNiArMTAyLDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKFZpcgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgICAgICByZXR1cm47CiAKKyAgICBV
U0VTKE9wSm5lcVB0ciwgdmFsdWUsIHNwZWNpYWxQb2ludGVyKQogICAgIFVTRVMoT3BUb1RoaXMs
IHNyY0RzdCkKICAgICBVU0VTKE9wQ2hlY2tUZHosIHRhcmdldFZpcnR1YWxSZWdpc3RlcikKICAg
ICBVU0VTKE9wSWRlbnRpdHlXaXRoUHJvZmlsZSwgc3JjRHN0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5
cGUoUHJpbgogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0
LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1
Y3Rpb25zU2l6ZSgpKTsKLSAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQorICAgIGlmICgodGhpcy0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQogICAgICAgICBvdXQucHJpbnQo
IiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOwogICAgIGlmIChvd25lckV4ZWN1dGFibGUoKS0+
bmV2ZXJJbmxpbmUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKE5ldmVySW5saW5lKSIpOwpAQCAt
MjM0LDcgKzIzNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0K
ICAgICBJQ1N0YXR1c01hcCBzdGF0dXNNYXA7CiAgICAgZ2V0SUNTdGF0dXNNYXAoc3RhdHVzTWFw
KTsKICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKHRoaXMsIHRoaXMtPmluc3RydWN0aW9ucygpKTsK
LSAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wR3JhcGgodGhpcywg
aW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBvdXQsIHN0YXR1c01hcCk7CisgICAgQ29kZUJsb2NrQnl0
ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBn
cmFwaCwgV1RGOjpudWxsb3B0LCBvdXQsIHN0YXR1c01hcCk7CiB9CiAKIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06
OlJlZiYgaXQsIGNvbnN0IElDU3RhdHVzTWFwJiBzdGF0dXNNYXApCkBAIC0yOTUsNiArMjk1LDcg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9vd25l
ckV4ZWN1dGFibGUob3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0
KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50
ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKQorICAgICwgbV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMob3RoZXIubV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpCiAgICAgLCBtX2NvbnN0YW50
UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3RlcnMpCiAgICAgLCBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihvdGhlci5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbikKICAgICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCkBA
IC0zMDksNyArMzEwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUq
IAogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKIAogICAgIEFTU0VSVChz
b3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFt
ZXRlcnMoKSk7CisKKyAgICBtX251bVBhcmFtZXRlcnMgPSBvdGhlci5udW1QYXJhbWV0ZXJzKCk7
CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC04NTAs
NyArODUyLDcgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAvLyB0byB0aGUgQ29kZUJs
b2NrLiBIb3dldmVyLCBpdHMgbGlmZWN5Y2xlIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIENvZGVC
bG9jaywgYW5kCiAgICAgLy8gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiB0aGUg
Q29kZUJsb2NrIGRlc3RydWN0cy4KIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAg
ICAgICBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7CiAjZW5kaWYK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLnJlbW92ZSh0aGlzKTsKQEAgLTEwMzcsNyArMTAz
OSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJ
bnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBq
ZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNv
IGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4g
YXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZU
TChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTEwNDUsNyArMTA0Nyw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5
KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNl
KFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1
OCw2ICsxMDYwLDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAog
ICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkxP
TEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc4LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShK
SVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29u
ZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNo
YXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2
OSw3ICsxMTc1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAogICAgICAgICBkZmdDb21t
b24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEy
MjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8g
SW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxp
bmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQg
ZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xk
IGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgot
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBA
IC0xNTE5LDggKzE1MjUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBl
KCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzog
U2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJ
Q3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAg
ICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAgIH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTUyOCw3ICsxNTM2LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAg
ICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgZGZn
Q29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYg
KzE1NTYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3Vu
dGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CkBAIC0xNTkwLDcgKzE1OTksNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNN
YXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbElu
Zm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmlyc3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52
YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBAIC0xNzc1LDggKzE3ODQsMTAg
QEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICBpZiAoZGZn
Q29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2Fs
bEZyYW1lIDogKmRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAgQVNT
RVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAg
ICAgICAvLyBUaGlzIHdpbGwgdHJhbnNpdGl2ZWx5IGtlZXAgdGhlIGJhc2VsaW5lIGNvZGUgYmxv
Y2sgYWxpdmUuIEl0J3MgZWFzaWVyIHRvIG5vdCB3b3JyeSB0aGF0IHdlJ3JlIHJlbHlpbmcgb24g
dGhlIExPTCBDb2RlQmxvY2sgc29tZWhvdy4KKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAg
ICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKGNvZGVCbG9jayk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTE4MTAs
MTIgKzE4MjEsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5k
ZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlz
aXRvcik7CiAgICAgfQogI2VuZGlmCisKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkxP
TEpJVCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQobV9hbHRlcm5hdGl2ZSk7CiB9CiAKIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODIzLDcgKzE4MzcsNyBAQCB2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAgICAgVU5VU0VEX1BBUkFNKHZp
c2l0b3IpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE4NTksNiArMTg3MywyNSBAQCBDb2Rl
QmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVBbHRlcm5hdGl2CiAjZW5kaWYKIH0KIAorQ29kZUJs
b2NrKiBDb2RlQmxvY2s6OmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpCit7CisjaWYgRU5BQkxF
KEpJVCkKKyAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHRoaXM7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgYXV0byBqaXRUeXBlID0gcmVzdWx0LT5qaXRUeXBlKCk7CisgICAgICAgIGlmIChq
aXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVCB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRU
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IHJlc3Vs
dC0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OworI2Vsc2UKKyAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCiBDb2RlQmxvY2sqIENvZGVC
bG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtMTg2Nyw3ICsx
OTAwLDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAg
IHJldHVybiB0aGlzOwogICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAg
ICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNl
bGZKSVRUeXBlKSkgeworICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJs
b2NrKHNlbGZKSVRUeXBlKSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBi
ZSBudWxsIGlmIHdlJ3ZlIGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUK
ICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4
ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0
aGUgY3VycmVudCBjb2RlQmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBh
biBvcHRpbWl6aW5nIEpJVApAQCAtMTkzMSw3ICsxOTY0LDcgQEAgSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckluZGV4KAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2Nr
OjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5h
bENhbGxTaXRlKQogewogI2lmIEVOQUJMRShERkdfSklUKQotICAgIFJFTEVBU0VfQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdl
dENvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSkpOwogICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJ
bmRleChvcmlnaW5hbENhbGxTaXRlLmJpdHMoKSkpOwogICAgIENvZGVPcmlnaW4gb3JpZ2luYWxP
cmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpOwpAQCAtMTk0OSw2ICsxOTgyLDgg
QEAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeAogCiB2b2lkIENvZGVC
bG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKKyAgICBBU1NFUlQoYmFzZWxpbmVBbHRlcm5hdGl2
ZSgpID09IHRoaXMpOworCiAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5h
dChieXRlY29kZUluZGV4KTsKICAgICBPcENhdGNoIG9wID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBvcC5tZXRhZGF0YSh0aGlzKTsKQEAgLTIyMzEs
NTEgKzIyNjYsNTUgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aQog
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCgpKTsKICAgICAKICAgICAvLyBXZSB3
YW50IHRvIGFjY29tcGxpc2ggdHdvIHRoaW5ncyBoZXJlOgotICAgIC8vIDEpIE1ha2Ugc3VyZSB0
aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYg
d2UgcmV0dXJuIHRvIGl0CisgICAgLy8gMSkgSWYgd2UncmUgREZHL0ZUTCwgbWFrZSBzdXJlIHRo
YXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3
ZSByZXR1cm4gdG8gaXQKICAgICAvLyAgICB3ZSBzaG91bGQgT1NSIGV4aXQgYXQgdGhlIHRvcCBv
ZiB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcmV0dXJuLgogICAgIC8v
IDIpIE1ha2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhlIG93bmVyIGV4ZWN1dGFibGUsIHRoZW4g
d2Ugc2hvdWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2suCiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBqaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5jbGVhcldhdGNocG9pbnRzKCk7Ci0gICAgCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRp
b24qIGNvbXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0
KCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlvbikpCi0gICAgICAgICAgICBjb21w
aWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOwotICAgICAgICAKLSAg
ICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2Vl
cGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgotICAgICAgICBpZiAo
IWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewotICAgICAgICAgICAgLy8g
V2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3ko
KSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKLSAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T2xkQWdlKSB7CisgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9u
ID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9u
LT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtl
ZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KKyAgICAgICAgICAg
IGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJl
bnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAgICBk
YXRhTG9nKCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogICAgIAogICAgIC8vIENvdW50IHRoZSByZW9wdGltaXphdGlvbiBpZiB0
aGF0J3Mgd2hhdCB0aGUgdXNlciB3YW50ZWQuCiAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGlt
aXphdGlvbikgewogICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRl
cm5hdGl2ZSgpLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIzNjc3CiAgICAgICAgIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGlt
aXphdGlvbigpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoREZHOjpzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgY291bnQgcmVv
cHRpbWl6YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAg
ICBpZiAodGhpcyAhPSByZXBsYWNlbWVudCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB3ZSB3ZXJlIG5ldmVyIHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4gZm9yIE9TUiBl
bnRyeSBjb2RlCiAgICAgICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgLy8gT3IsIHdlJ3JlIGFuIExP
TCBDb2RlQmxvY2sgYW5kIHdlcmUgYWxyZWFkeSBqZXR0aXNvbmVkLgogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKGFsdGVybmF0aXZlKCkpCiAgICAgICAgIGFsdGVybmF0aXZlKCkt
Pm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1U
cmFwcykKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpICYmIHJlYXNvbiAh
PSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFzb24gIT0gUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9WTVRyYXBzKQogICAgICAgICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7Ci0j
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1
cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFi
bGUKICAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgYWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJl
bWVtYmVyZWQgc2V0LgpAQCAtMjMwNiw3ICsyMzQ1LDcgQEAgSlNHbG9iYWxPYmplY3QqIENvZGVC
bG9jazo6Z2xvYmFsT2JqZWN0RgogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAg
IHJldHVybiBnbG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIGlubGluZUNhbGxGcmFt
ZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiB9CiAKIGNsYXNzIFJl
Y3Vyc2lvbkNoZWNrRnVuY3RvciB7CkBAIC0yMzY1LDcgKzI0MDQsNyBAQCB2b2lkIENvZGVCbG9j
azo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxGCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAgaWYgKCFoYXNCYXNlbGluZU9y
TE9MUHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghREZHOjptaWdodElu
bGluZUZ1bmN0aW9uKHRoaXMpKQpAQCAtMjM5MCw3ICsyNDI5LDcgQEAgdm9pZCBDb2RlQmxvY2s6
Om5vdGljZUluY29taW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRU
eXBlKCkpKSB7CiAgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpLCAiICAgIENsZWFyaW5n
IFNBQkkgYmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuIik7CiAgICAgICAgIHJl
dHVybjsKQEAgLTI0ODMsMTIgKzI1MjIsMTQgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpudW1iZXJP
ZkRGR0NvbXBpbGVzKAogewogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRU
eXBlKCkpKTsKICAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7CisgICAgICAgIGlmICgh
T3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYg
KG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CiAg
ICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9w
dGltaXphdGlvblJldHJ5Q291bnRlcjsKICAgICB9CiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCA9IHRoaXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgcmV0dXJuICgocmVwbGFjZW1lbnQgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSAr
IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CisgICAgcmV0dXJuICgocmVwbGFjZW1lbnQg
JiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkg
KyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogfQogCiBpbnQzMl90IENvZGVCbG9jazo6
Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKQEAgLTI2NDEsNyArMjY4Miw3IEBA
IGF1dG8gQ29kZUJsb2NrOjp1cGRhdGVPU1JFeGl0Q291bnRlckFuZEMKIAogICAgIGJvb2wgZGlk
VHJ5VG9FbnRlckluTG9vcCA9IGZhbHNlOwogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxl
ci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkg
eworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CiAgICAgICAgICAgICBk
aWRUcnlUb0VudGVySW5Mb29wID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0yNzA5LDcgKzI3NTAsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25T
bG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBKSVRUeXBl
IHR5cGUgPSBqaXRUeXBlKCk7Ci0gICAgaWYgKHR5cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
IHsKKyAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiB0eXBlICE9IEpJVFR5
cGU6OkxPTEpJVCkgewogICAgICAgICBkYXRhTG9nTG4oKnRoaXMsICI6IGV4cGVjdGVkIHRvIGhh
dmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlKTsKICAgICAgICAgQ1JBU0hfV0lUSF9J
TkZPKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGppdENvZGUoKS5nZXQoKSksIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHR5cGUpKTsKICAgICB9CkBAIC0yNzI3LDcgKzI3NjgsNyBAQCB2b2lkIENvZGVC
bG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiAgICAgc3dpdGNoIChyZXN1bHQp
IHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50LT5q
aXRUeXBlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnQgJiYgSklUQ29k
ZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7CiAgICAgICAgIG9wdGltaXpl
TmV4dEludm9jYXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ29tcGlsYXRpb25G
YWlsZWQ6CkBAIC0yNzU2LDcgKzI3OTcsOCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0
aW9uVGhyZXNob2xkCiAgICAgCiB1aW50MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50
VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7Ci0gICAgQVNTRVJUKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAvL0FTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7IC8vIE9PUFM6IFdlIGNhbGwgdGhpcyBmcm9tIHRo
ZSBMT0wgY29tcGlsZXIgdGhyZWFkIGJlZm9yZSBpbnN0YWxsLgorCiAgICAgLy8gQ29tcHV0ZSB0
aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4gVGhpcyBpcyBjYWxsZWQgaW5m
cmVxdWVudGx5CiAgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29wIHdvbid0IGh1cnQgdXMuCiAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsKQEAgLTI4MzYsNyArMjg3OCw3
IEBAIERGRzo6Q29kZU9yaWdpblBvb2wmIENvZGVCbG9jazo6Y29kZU9yaWcKIAogc2l6ZV90IENv
ZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0CiB7Ci0gICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZH
T3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgcmV0dXJuIG1f
aml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzLnNpemUoKTsKQEAgLTI4NDcsNyAr
Mjg4OSw3IEBAIGNvbnN0IElkZW50aWZpZXImIENvZGVCbG9jazo6aWRlbnRpZmllcigKICAgICBz
aXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50
aWZpZXJzKCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCB1bmxpbmtl
ZElkZW50aWZpZXJzKQogICAgICAgICByZXR1cm4gbV91bmxpbmtlZENvZGUtPmlkZW50aWZpZXIo
aW5kZXgpOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7
CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgcmV0dXJu
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzW2luZGV4IC0gdW5saW5rZWRJ
ZGVudGlmaWVyc107CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkBAIC0yOTEyLDE4ICsy
OTU0LDE5IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9ucygpCiAgICAgdXBk
YXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkT3B0
aW1pemVOb3coKQorYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplVG9ERkdOb3coKQogewog
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNvbnNpZGVyaW5nIG9wdGlt
aXppbmcgIiwgKnRoaXMsICIuLi4iKTsKIAogICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlciA+PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgCi0gICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOworICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAg
YmFzZWxpbmVDb2RlQmxvY2stPnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKICAgICAKICAg
ICB1bnNpZ25lZCBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7CiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlczsKLSAgICB1cGRhdGVBbGxWYWx1ZVByb2Zp
bGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MobnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1
ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKKyAgICBiYXNlbGluZUNvZGVC
bG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyk7CiAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFM
b2dGKApAQCAtMjk0OCw3ICsyOTkxLDggQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXpl
Tm93KCkKICNpZiBFTkFCTEUoREZHX0pJVCkKIHZvaWQgQ29kZUJsb2NrOjp0YWxseUZyZXF1ZW50
RXhpdFNpdGVzKCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpOworICAgIC8vIE9PUFMKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpKSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0
ZXJuYXRpdmUoKTsKQEAgLTMwNTAsNiArMzA5NCw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJh
bWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpC
YXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgcmV0dXJuIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
QEAgLTMyMjYsMTQgKzMyNzEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5z
aWduZWQgbgogewogICAgIG1fbnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7CiAgICAg
QVNTRVJUKG1fbnVtQnJlYWtwb2ludHMpOwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdK
SVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQog
ICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb0RlYnVnZ2VyQnJlYWtwb2lu
dCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVw
cGluZ01vZGUgbW9kZSkKIHsKICAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7Ci0gICAgaWYgKG1v
ZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0
VHlwZSgpKSkKKyAgICBpZiAobW9kZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5nKTsKIH0KIApAQCAtMzI5Niw3ICszMzQxLDcgQEAgVW5h
cnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogCiBib29sIENvZGVCbG9jazo6
Y291bGRUYWtlU3BlY2lhbEFyaXRoRmFzdENhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQogewotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICBpZiAoIWhhc0Jh
c2VsaW5lT3JMT0xQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSA9IGJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgaWYgKCFwcm9maWxlKQpAQCAtMzQyMSw5ICszNDY2LDkg
QEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRlYwogewogICAgIE9wdGlv
bmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAgICAgSklUVHlwZSBqaXRUeXBlID0g
dGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09IEpJVFR5cGU6OkludGVycHJldGVy
VGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICBpZiAoSklUQ29k
ZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGppdFR5cGUpKQogICAgICAgICBieXRlY29k
ZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29kZUluZGV4KCk7Ci0gICAgZWxzZSBpZiAoaml0
VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQpIHsK
KyAgICBlbHNlIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CiAgICAgICAgIENvZGVPcmlnaW4gb3Jp
Z2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKQEAgLTM0NjYsNyArMzUxMSw3IEBAIGJv
b2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3AKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAg
ICAgLy8gY2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFu
ZGxlciBzYWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3Vu
dCBvZiBtX2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5oYXNJbnN0
YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMoKTsKICNlbHNlCkBAIC0zNDgwLDcgKzM1MjUsNyBAQCBi
b29sIENvZGVCbG9jazo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzCiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQog
ICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhh
bmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291
bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBjb21tb25EYXRhID0gKm1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CiAgICAgY29tbW9uRGF0YS5pbnN0YWxsVk1UcmFwQnJlYWtwb2ludHModGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBwdWJsaWM6CiAKICAgICBDb2RlQmxv
Y2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29kZUJsb2NrKiBsb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAgICAKICAgICAvLyBGSVhN
RTogR2V0IHJpZCBvZiB0aGlzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjM2NzcKQEAgLTM0Nyw3ICszNDgsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGxpa2VseVRvVGFrZVNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7
Ci0gICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgaWYgKCFo
YXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgdW5zaWdu
ZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBi
eXRlY29kZUluZGV4KTsKQEAgLTM1Niw3ICszNTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNv
dWxkVGFrZVNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAg
ICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgaWYgKCFoYXNCYXNl
bGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgdW5zaWduZWQgdmFs
dWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBieXRlY29k
ZUluZGV4KTsKQEAgLTQzNiw5ICs0MzcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAotICAgIGJvb2wgaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSBjb25zdAor
ICAgIGJvb2wgaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBKSVRU
eXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgICAgIHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6TE9MSklUOwogICAgIH0KICAgICAKICNpZiBF
TkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMyw3IEBAIHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2Zp
bGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3
ICs1NDIsNyBAQCBwdWJsaWM6CiAgICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRo
YXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5z
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKTsKKyAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAg
ICB9CiAgICAgICAgIAogICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGlu
ZGV4KQpAQCAtODAzLDcgKzgwNiw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkRG
R0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKLSAgICBib29sIHNob3VsZE9wdGlt
aXplTm93KCk7CisgICAgYm9vbCBzaG91bGRPcHRpbWl6ZVRvREZHTm93KCk7CiAgICAgdm9pZCB1
cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogICAgIHZvaWQgdXBkYXRlQWxsQXJy
YXlQcmVkaWN0aW9ucygpOwogICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMu
aAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBD
b2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRh
ZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCit9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNo
UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQor
eworICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAg
ICAgICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBA
QCBib29sIENvZGVPcmlnaW46OmlzQXBwcm94aW1hdGVseUVxdWFsVG8oCiAgICAgICAgIGlmICgh
YUhhc0lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAK
LSAgICAgICAgaWYgKGFJbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpICE9
IGJJbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQorICAgICAgICBpZiAo
YUlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSAhPSBiSW5saW5l
Q2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgYSA9IGFJbmxpbmVDYWxsRnJhbWUtPmRpcmVj
dENhbGxlcjsKQEAgLTk5LDcgKzk5LDcgQEAgdW5zaWduZWQgQ29kZU9yaWdpbjo6YXBwcm94aW1h
dGVIYXNoKElubAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lID09IHRlcm1pbmFsKQogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCi0gICAgICAgIHJlc3VsdCArPSBXVEY6
OlB0ckhhc2g8SlNDZWxsKj46Omhhc2goaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSk7CisgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2go
aW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAg
CiAgICAgICAgIGNvZGVPcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAg
ICB9CkBAIC0xMjEsNyArMTIxLDcgQEAgQ29kZUJsb2NrKiBDb2RlT3JpZ2luOjpjb2RlT3JpZ2lu
T3duZXIoKQogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IHRoaXMtPmlubGluZUNhbGxGcmFt
ZSgpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAg
ICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZy
YW1lKTsKIH0KIAogaW50IENvZGVPcmlnaW46OnN0YWNrT2Zmc2V0KCkgY29uc3QKQEAgLTE0NSw3
ICsxNDUsNyBAQCB2b2lkIENvZGVPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAgICAg
ICAgICAgICBvdXQucHJpbnQoIiAtLT4gIik7CiAgICAgICAgIAogICAgICAgICBpZiAoSW5saW5l
Q2FsbEZyYW1lKiBmcmFtZSA9IHN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAg
ICAgICBvdXQucHJpbnQoZnJhbWUtPmJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBS
YXdQb2ludGVyKGZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSksICI+ICIpOworICAgICAg
ICAgICAgb3V0LnByaW50KGZyYW1lLT5icmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8Iiwg
UmF3UG9pbnRlcihmcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSksICI+ICIpOwog
ICAgICAgICAgICAgaWYgKGZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgICAgIG91
dC5wcmludCgiKGNsb3N1cmUpICIpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhpdEZyb21Bbnl0aGluZzoKICAgICAgICAgb3V0
LnByaW50KCJGcm9tQW55dGhpbmciKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdEZy
b21MT0w6CisgICAgICAgIG91dC5wcmludCgiRnJvbUxPTCIpOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tREZHIik7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5n
SklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3Qgewog
ICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21MT0wsCiAgICAgRXhpdEZyb21ERkcs
CiAgICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2ICszOSw4IEBAIGVudW0gRXhpdGluZ0pJVFR5
cGUgOiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5nSklUVHlwZSBleGl0aW5nSklUVHlwZUZvcihK
SVRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKSVRUeXBlOjpM
T0xKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbUxPTDsKICAgICBjYXNlIEpJVFR5cGU6OkRG
R0pJVDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9tREZHOwogICAgIGNhc2UgSklUVHlwZTo6RlRM
SklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNyAr
NDUsMTcgQEAgSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVGb3JDYQogCiBDb2Rl
QmxvY2tIYXNoIElubGluZUNhbGxGcmFtZTo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJh
c2VsaW5lQ29kZUJsb2NrLT5oYXNoKCk7CisgICAgcmV0dXJuIGxvbE9yQmFzZWxpbmVDb2RlQmxv
Y2stPmhhc2goKTsKIH0KIAogQ1N0cmluZyBJbmxpbmVDYWxsRnJhbWU6Omhhc2hBc1N0cmluZ0lm
UG9zc2libGUoKSBjb25zdAogewotICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jay0+aGFzaEFz
U3RyaW5nSWZQb3NzaWJsZSgpOworICAgIHJldHVybiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5o
YXNoQXNTdHJpbmdJZlBvc3NpYmxlKCk7CiB9CiAKIENTdHJpbmcgSW5saW5lQ2FsbEZyYW1lOjpp
bmZlcnJlZE5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oYmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKS0+ZWNtYU5hbWUoKS51
dGY4KCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihsb2xPckJhc2Vs
aW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSktPmVjbWFOYW1lKCkudXRmOCgpOwogfQog
CiB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbihQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNjUsNyArNjUsNyBAQCB2b2lkIElubGluZUNhbGxGcmFt
ZTo6ZHVtcEJyaWVmRnVuY3Rpb25JCiAKIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewotICAg
IG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihi
YXNlbGluZUNvZGVCbG9jay5nZXQoKSkpOworICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5m
b3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihsb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgp
KSk7CiAgICAgaWYgKGlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgICAgIG91dC5wcmludCgiIChT
dHJpY3RNb2RlKSIpOwogICAgIG91dC5wcmludCgiLCAiLCBkaXJlY3RDYWxsZXIuYnl0ZWNvZGVJ
bmRleCgpLCAiLCAiLCBzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZy
YW1lIHsKICAgICB9CiAgICAgCiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3VtZW50c1dp
dGhGaXh1cDsgLy8gSW5jbHVkZXMgJ3RoaXMnIGFuZCBhcml0eSBmaXh1cHMuCi0gICAgV3JpdGVC
YXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVDb2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPENv
ZGVCbG9jaz4gbG9sT3JCYXNlbGluZUNvZGVCbG9jazsKICAgICBDb2RlT3JpZ2luIGRpcmVjdENh
bGxlcjsKIAogICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8v
IERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KQEAgLTIzMSwyMCArMjMxLDIxIEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6Y2FsbGVy
RnJhbWVPZmZzZXQoKTsgfQogICAgIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6cmV0dXJu
UENPZmZzZXQoKTsgfQogCi0gICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNJblN0cmljdENvbnRl
eHQoKTsgfQorICAgIGJvb2wgaXNJblN0cmljdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBsb2xP
ckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNJblN0cmljdENvbnRleHQo
KTsgfQogCiAgICAgdm9pZCBkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFt
JikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAogICAgIE1B
S0VfUFJJTlRfTUVUSE9EKElubGluZUNhbGxGcmFtZSwgZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1h
dGlvbiwgYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKTsKLQogfTsKIAogaW5saW5lIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lQ2FsbEZyYW1lKTsK
LSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAg
ICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxp
bmVDb2RlQmxvY2suZ2V0KCkpCisgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmJhc2VsaW5lQWx0
ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogaW5saW5lIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb25zdCBDb2Rl
T3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEzNCw3
ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9PSBzaXplb2YoCiAKIGVu
dW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlID0gZmFsc2U+CiBjbGFz
cyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9u
YWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0NCwyMyBAQCBwdWJsaWM6CiAK
ICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzKQorICAgIGV4
cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNp
emVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkKICAgICAgICAgOiBtX251bUFy
Z3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQor
ICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIHNp
emVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAg
c2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBu
dW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKICAg
ICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKICAg
ICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1w
cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBu
dW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVt
Q29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVu
dHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAg
ICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgewotICAgICAgICBtX3ZhbHVl
cy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOworICAgICAgICBtX3Zh
bHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRt
cHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUp
OwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQg
T3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0
IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5u
dW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9m
TG9jYWxzKCkpCisgICAgICAgICwgbV9udW1Db25zdGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFu
dHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAg
ICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcyLDMzICsxNzYsNTEgQEAgcHVi
bGljOgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX251bUxvY2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMo
KTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
Q29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0g
bnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0KIAorICAgIHRlbXBsYXRlIDxi
b29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tD
YWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAgc2l6ZV90IHRtcEluZGV4KHNp
emVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBz
KCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVt
YmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBh
cmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4
IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQotICAg
IAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgIHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3QgY29uc3RhbnRJbmRleChzaXpl
X3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3Rh
bnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1
cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVf
dCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCiAg
ICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVu
dEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KKworICAgIHRlbXBs
YXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYg
dHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyByZXR1cm4gbV92YWx1ZXMubGFz
dCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29uc3RSZWZUeXBlIGNhbGxlZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAgIAogICAgIFJlZlR5cGUgbG9j
YWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAg
IENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1ts
b2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUg
Y29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRl
eChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgog
ICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsyNzAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVy
T2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2Fs
bGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxz
KCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAg
IG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkwLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6
ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRy
YWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKIAogICAg
ICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5l
ZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUgQEAgcHVibGljOgogCiAgICAg
c2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7
Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7
CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNl
dCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNhbGxlZUluZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJndW1l
bnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50SW5kZXgob3Bl
cmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJh
bmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCArMzQ4LDE1IEBAIHB1YmxpYzoK
ICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAg
ewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkg
eworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZz
ZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChv
cGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXND
b25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50KG9wZXJhbmQudG9Db25zdGFu
dEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAg
IH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
b3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJlck9mQ29uc3RhbnRzKCk7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51
bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBj
b25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaW5k
ZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGlu
ZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgIGlm
IChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1
bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZM
b2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygp
KQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGluZGV4IC0g
bnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBpZiBjb25z
dGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2FsbGVlSW5k
ZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRl
eCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mQ29u
c3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKQEAgLTM5MywxMCAr
NDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3Zh
bHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQg
dGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1f
dmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIHRo
ZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1w
cy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsg
MCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVt
Q29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgaW5saW5lIHZvaWQgT3BlcmFu
ZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVy
KCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRy
YWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3Ig
KHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRl
eC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4
dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChjYWxsZWUoKSwgY29udGV4dCkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxl
ZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3Qg
YXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsK
QEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIs
IHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIg
KHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGNh
bGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBjb25zdCBSZWdpc3Rl
clNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc1RvUHJl
c2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUgPSBqaXQtPmNvZGVCbG9jaygpLT5qaXRD
b2RlKCktPmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRl
KGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4KTsKICAgICAgICAgbV9u
ZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uID0gbV9saXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5udW1iZXJPZlNldFJlZ2lzdGVycygpID4g
MDsKICAgICAgICAgaWYgKG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbikKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNv
ZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENv
ZGU6OmlzREZHT3JGVEwoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAg
bV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJl
c2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVy
cygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5leGNsdWRlKGNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CkBAIC03MTAsNyArNzEwLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQ
b2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAvLyBXZSBzZXQgdGhlc2UgdG8gaW5kaWNhdGUgdG8g
dGhlIHN0dWIgdG8gcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBDb2RlQmxvY2sncwogICAgICAgICAv
LyBleGNlcHRpb24gaGFuZGxlciB0YWJsZSB3aGVuIGl0IGlzIGRlYWxsb2NhdGVkLgogICAgICAg
ICBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzID0gY29kZUJsb2NrOwotICAgICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0
aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOworICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdP
ckZUTChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzLT5qaXRUeXBlKCkpKTsKICAg
ICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJ
bmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1
bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQz
Mk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3Bl
Y3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3Bl
Y0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9u
KFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYg
U3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgs
NiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2
ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5n
IHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIg
ewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAgZnJpZW5kIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJl
Z2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJndW1lbnQo
KSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lz
dGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFpc0NvbnN0YW50KCk7IH0KICAg
ICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAm
JiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQogICAg
IGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFT
U0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIp
OyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IG9wZXJhbmRU
b0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMg
aW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0YXRpYyBpbnQgYXJndW1lbnRU
b09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNvbnN0YW50VG9PcGVyYW5kKGlu
dCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNv
bnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdpc3RlcjsKIH07CkBAIC0xMzMs
NCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGbwogICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFu
ZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4KQoreworICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFudFRvT3BlcmFuZChjb25zdGFu
dEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXQK
ICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykK
ICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAg
ICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKLSAgICAs
IGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQ
YXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCAwLCBBYnN0
cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3Vu
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBA
QAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbkJ5SWRTdGF0dXMuaCIKICNpbmNsdWRl
ICJJbnN0YW5jZU9mU3RhdHVzLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpT
QXJyYXlJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0lt
bXV0YWJsZUJ1dHRlcmZseS5oIgpAQCAtOTA1LDcgKzkwNiw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gcHJlZGljdGlvbjsKICAgICAgICAgfTsKIAotICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxv
Y2tBbmRCeXRlY29kZU9mZnNldChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIENv
ZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKCkpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9y
Q29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCwgaW5s
aW5lQ2FsbEZyYW1lKCkpKTsKICAgICAgICAgaWYgKHByZWRpY3Rpb24gIT0gU3BlY05vbmUpCiAg
ICAgICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKIApAQCAtOTM5LDcgKzk0MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB3aGlsZSAoc3RhY2stPm1faW5saW5lQ2FsbEZyYW1lICE9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZSgpKQogICAgICAgICAgICAgICAgIHN0YWNrID0gc3RhY2st
Pm1fY2FsbGVyOwogCi0gICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlv
bkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChzdGFjay0+bV9wcm9maWxlZEJsb2Nr
LCAqY29kZU9yaWdpbik7CisgICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChzdGFjay0+bV9wcm9maWxlZEJs
b2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksICpjb2RlT3JpZ2luKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGRlZmF1bHQ6CkBAIC05ODIsOCArOTgzLDkgQEAgcHJpdmF0ZToKIAogICAgIEFycmF5
TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxlJiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFj
dGlvbikKICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jayk7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBwcm9maWxlLmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jayk7CiAgICAgICAgIGJvb2wg
bWFrZVNhZmUgPSBwcm9maWxlLm91dE9mQm91bmRzKGxvY2tlcik7CiAgICAgICAgIHJldHVybiBB
cnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIsICZwcm9maWxlLCBhY3Rpb24sIG1ha2VTYWZl
KTsKICAgICB9CkBAIC0xNjY4LDcgKzE2NzAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxp
bmVDYWxsKE5vZGUqIGNhCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIHNhdmVkQ3VycmVudEluc3Ry
dWN0aW9uID0gbV9jdXJyZW50SW5zdHJ1Y3Rpb247CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2lu
ZEZvcihraW5kKTsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbGVlLmZ1bmN0aW9u
RXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5s
b2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaW5zZXJ0
Q2hlY2tzKGNvZGVCbG9jayk7CiAKICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRz
IQpAQCAtNjg3Myw3ICs2ODc1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgSGFzaFNldDx1bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVuc2ln
bmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IHNlZW5B
cmd1bWVudHM7CiAKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5tX2xvY2spOwogCiAg
ICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKQEAgLTgzNDUsMjMgKzgzNDcsMjggQEAgQnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgIHsKICAgICAgICAgbV9l
eGl0UHJvZmlsZS5pbml0aWFsaXplKG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KSk7CiAKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7Ci0gICAgICAgIG1fbGF6eU9wZXJhbmRzLmluaXRpYWxpemUobG9ja2VyLCBtX3By
b2ZpbGVkQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcyhsb2NrZXIpKTsKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byogY29kZUJsb2NrID0gbV9wcm9maWxlZEJsb2NrLT5iYXNlbGlu
ZVZlcnNpb24oKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOworICAgICAgICAgICAgbV9sYXp5T3BlcmFuZHMuaW5pdGlhbGl6ZShsb2Nr
ZXIsIGNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKGxvY2tlcikpOworICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkbyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIGxv
Y2sgYmVjYXVzZSB3ZSB3YW50IHRvIGVuY291cmFnZSBTdHJ1Y3R1cmVTdHViSW5mbydzCiAgICAg
ICAgIC8vIHRvIGJlIHBvdGVudGlhbGx5IGFkZGVkIHRvIG9wZXJhdGlvbnMgYW5kIGJlY2F1c2Ug
dGhlIHByb2ZpbGVkIGJsb2NrIGNvdWxkIGJlIGluIHRoZQogICAgICAgICAvLyBtaWRkbGUgb2Yg
TExJbnQtPkpJVCB0aWVyLXVwIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgYmUgYWRkaW5nIHRoZSBp
bmZvJ3MgcmlnaHQgbm93LgotICAgICAgICBpZiAobV9wcm9maWxlZEJsb2NrLT5oYXNCYXNlbGlu
ZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgbV9wcm9maWxlZEJsb2NrLT5nZXRJQ1N0YXR1
c01hcChsb2NrZXIsIG1fYmFzZWxpbmVNYXApOworICAgICAgICBpZiAobV9wcm9maWxlZEJsb2Nr
LT5oYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxv
Y2stPmdldElDU3RhdHVzTWFwKG1fYmFzZWxpbmVNYXApOwogICAgIH0KICAgICAKLSAgICBDb2Rl
QmxvY2sqIG9wdGltaXplZEJsb2NrID0gbV9wcm9maWxlZEJsb2NrLT5yZXBsYWNlbWVudCgpOwot
ICAgIG1fb3B0aW1pemVkQ29udGV4dC5vcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRCbG9j
azsKLSAgICBpZiAoT3B0aW9uczo6dXNlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uKCkgJiYg
b3B0aW1pemVkQmxvY2spIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihvcHRp
bWl6ZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgb3B0aW1pemVkQmxvY2stPmdldElDU3RhdHVz
TWFwKGxvY2tlciwgbV9vcHRpbWl6ZWRDb250ZXh0Lm1hcCk7CisgICAgeworICAgICAgICBDb2Rl
QmxvY2sqIG9wdGltaXplZEJsb2NrID0gbV9wcm9maWxlZEJsb2NrLT5yZXBsYWNlbWVudCgpOwor
ICAgICAgICBtX29wdGltaXplZENvbnRleHQub3B0aW1pemVkQ29kZUJsb2NrID0gb3B0aW1pemVk
QmxvY2s7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VQb2x5dmFyaWFudERldmlydHVhbGl6YXRp
b24oKSAmJiBvcHRpbWl6ZWRCbG9jayAmJiBKU0M6OkpJVENvZGU6OmlzSGlnaGVyVGllcihvcHRp
bWl6ZWRCbG9jay0+aml0VHlwZSgpLCBtX3Byb2ZpbGVkQmxvY2stPmppdFR5cGUoKSkpIHsKKyAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIob3B0aW1pemVkQmxvY2stPm1fbG9j
ayk7CisgICAgICAgICAgICBvcHRpbWl6ZWRCbG9jay0+Z2V0SUNTdGF0dXNNYXAobG9ja2VyLCBt
X29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICAgICAgfQorICAgICAgICBieXRlQ29kZVBhcnNl
ci0+bV9pY0NvbnRleHRTdGFjay5hcHBlbmQoJm1fb3B0aW1pemVkQ29udGV4dCk7CiAgICAgfQot
ICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2ljQ29udGV4dFN0YWNrLmFwcGVuZCgmbV9vcHRpbWl6ZWRD
b250ZXh0KTsKICAgICAKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNXaXRoRml4
dXAgPSBzdGQ6Om1heDxpbnQ+KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSk7CiAKQEAgLTgzNzUsNyArODM4Miw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKIAogICAgICAgICAvLyBUaGUgb3duZXIgaXMgdGhl
IG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhh
dCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgotICAgICAgICBtX2lubGluZUNh
bGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmxvbE9y
QmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRlQmFycmllcihwcm9maWxlZEJsb2NrKTsg
Ly8gT09QUzogQXNzZXJ0IGl0J3MgYSBMT0wsIEJhc2VsaW5lLCBvciBMTEludCBDQi4KICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFRtcE9mZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2Fs
bEZyYW1lID8gbV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1f
Y2FsbGVyLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJh
bWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgQ29tbW9uRGF0YTo6
dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVy
ZW5jZXMuY2hlY2socmVjb3ZlcnkuY29uc3RhbnQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaW5s
aW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSkKKyAgICAgICAgICAgIGlmIChD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKQogICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNo
ZWNrKGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuaXNDb25zdGFudCgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc4
LDcgKzE2NzgsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRoCiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmlu
aXRlbHkgbm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCiAgICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50Tm9kZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSA9PSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jayA9IHByb2ZpbGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAmcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTE2ODYsMTIgKzE2ODYsMTIgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFw
aDo6bWV0aAogCiAgICAgICAgIC8vIGN1cnJlbnROb2RlIGlzIG51bGwgd2hlbiB3ZSdyZSBkb2lu
ZyBzcGVjdWxhdGlvbiBjaGVja3MgZm9yIGNoZWNrQXJndW1lbnRUeXBlcygpLgogICAgICAgICBp
ZiAoIWN1cnJlbnROb2RlIHx8IG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBjdXJyZW50Tm9kZS0+
b3JpZ2luLnNlbWFudGljIHx8ICFjdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sg
PSBwcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogCiAgICAgICAg
ICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPm9wZXJhbmQo
KSkpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE3MDAsNyArMTcwMCw3IEBAIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKICAgICAgICAgICAgIGlmIChub2RlLT5oYXNI
ZWFwUHJlZGljdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiAmcHJvZmlsZWRCbG9jay0+
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNv
ZGVJbmRleCgpKTsKIAotICAgICAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5l
SklUUHJvZmlsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT5oYXNCYXNl
bGluZU9yTE9MUHJvZmlsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoQmluYXJ5QXJpdGhQ
cm9maWxlKiByZXN1bHQgPSBwcm9maWxlZEJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRl
Y29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIGlmIChVbmFyeUFy
aXRoUHJvZmlsZSogcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
ODEsNyArNDgxLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAg
ICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgICAg
IAotICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCk7CisgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFz
ZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgIH0KICAgICAKICAgICBTY3Jp
cHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4p
CkBAIC00OTIsNyArNDkyLDcgQEAgcHVibGljOgogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxv
Y2s7CisgICAgICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0
aXZlKCk7CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFt
ZShpbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKQEAgLTUwMCw2ICs1MDAsMTMgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsKICAgICB9CisK
KyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4pCisgICAgeworICAgICAgICBpZiAoYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBpbmxpbmVDYWxs
RnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CisgICAgICAgIHJldHVybiBtX3By
b2ZpbGVkQmxvY2s7CisgICAgfQogICAgIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBPU1JFbnRyeURhdGE6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFyZU9TUkVudHJ5
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0RG
R09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NF
UlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBo
YW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZQogICAgICAgICAgICAgaml0LmJyYW5j
aFRlc3Q4KAogICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6Tm9uWmVybywKICAgICAg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygKLSAgICAgICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCktPmFkZHJlc3NPZkRpZFRyeVRvRW50ZXJJbkxvb3AoKSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+YWRkcmVzc09mRGlkVHJ5VG9FbnRlckluTG9vcCgpKSkpOwogICAgIH0KICAgICAK
ICAgICBqaXQubW92ZSgKQEAgLTM4NCw4ICszODQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rh
cmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAg
Zm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxsRnJhbWVz
KSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9j
a0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKICAgICAgICAgICAgIG9zcldyaXRlQmFycmllcih2bSwgaml0LCBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDQzLDcgKzIwNDMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uQ3JlYXRlCiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAg
aWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgY29kZUJsb2Nr
ID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwogICAgIGVs
c2UKICAgICAgICAgY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAKQEAg
LTM2MDUsNyArMzYwNSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ucmln
Z2UKICAgICAKICAgICBib29sIGRpZFRyeVRvRW50ZXJJbnRvSW5saW5lZExvb3BzID0gZmFsc2U7
CiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4aXQtPm1fY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJh
bWUgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewot
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkgeworICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5
VG9FbnRlckluTG9vcCgpKSB7CiAgICAgICAgICAgICBkaWRUcnlUb0VudGVySW50b0lubGluZWRM
b29wcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsOCAr
NjQ0LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0TgogICAgICAg
ICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChjb25zdGFudC5nZXQoKSk7CiAKICAgICAg
ICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1faW5saW5lQ2FsbEZyYW1lcykg
ewotICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrLmdldCgpKTsKLSAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQoaW5saW5l
Q2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGlubGluZUNhbGxGcmFtZS0+bG9sT3JC
YXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8v
IENoZWNrIHRoYXQgYW55IG90aGVyIHJlZmVyZW5jZXMgdGhhdCB3ZSBoYXZlIGFueXdoZXJlIGlu
IHRoZSBKSVRDb2RlIGFyZSBhbHNvCkBAIC02OTMsOCArNjkzLDggQEAgdm9pZCBQbGFuOjpjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogCiAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lcykg
ewogICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICptX2lubGluZUNhbGxGcmFt
ZXMpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrLmdldCgpKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoaW5saW5l
Q2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQo
aW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEdldEFyZ3VtZW50U3RhcgogTWFjcm9Bc3NlbWJsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRPU1JFeGl0RnV6ekNoZWNrKCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkV4aXRG
dXp6KCkKLSAgICAgICAgfHwgIWNhblVzZU9TUkV4aXRGdXp6aW5nKG1faml0LmdyYXBoKCkuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IobV9vcmlnaW4uc2VtYW50aWMpKQorICAgICAgICB8fCAhY2FuVXNl
T1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0ZvcihtX29yaWdp
bi5zZW1hbnRpYykpCiAgICAgICAgIHx8ICFkb09TUkV4aXRGdXp6aW5nKCkpCiAgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpOwogICAgIApAQCAtNDQyOCw5ICs0NDI4LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGJvb2wgbmVlZHNT
Y3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3Jh
cGgoKS5wcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29k
ZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFs
dWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlv
blZhbHVlQWRkOwpAQCAtNDUyMCw5ICs0NTIwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNl
bmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCku
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8g
cmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAgICBhdXRv
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwpAQCAtNTExMyw5ICs1
MTEzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluY09yRGVjKE5vZAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5vZGUpCiB7CiAgICAgLy8g
RklYTUU6IGFkZCBhIGZhc3QgcGF0aCwgYXQgbGVhc3QgZm9yIEJpZ0ludDMyLCBidXQgcHJvYmFi
bHkgYWxzbyBmb3IgSGVhcEJpZ0ludCBoZXJlLgotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkucHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9j
ay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhhcml0aFBy
b2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdh
dGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFy
aXRoTmVnYXRlOwpAQCAtNTM2OSw5ICs1MzY5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTXVsKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNl
bmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCku
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE11bElDKiBtdWxJQyA9
IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8g
cmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRv
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDYgQEAgdW5z
aWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAgIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsK
ICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVuc2lnbmVkIFZhcmlh
YmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFibGVzID0gY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBzID0gY29kZUJsb2Nr
LT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAgICB9IGVsc2Ugewor
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGlu
ZVZlcnNpb24oKTsKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51
bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICszNTMs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHko
Rmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjYg
KzUyLDE3IEBAIHZvaWQgQ2FsbEZyYW1lOjppbml0RGVwcmVjYXRlZENhbGxGcmFtZUYKIGJvb2wg
Q2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkp
IHsKLSAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgY2FzZSBKSVRUeXBl
OjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBKSVRUeXBlOjpO
b25lOgotICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gSklUQ29kZTo6Y2FsbFNp
dGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpOwogfQogCiBib29s
IENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUo
KSkgeworICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJVFR5
cGU6OkJhc2VsaW5lSklUOgorICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgY2FzZSBKSVRUeXBlOjpG
VExKSVQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzksOCArNzAsNiBAQCBib29sIENhbGxG
cmFtZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpCiAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2Fs
bFRodW5rOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwxMCArNDU2LDEwIEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIEhhbmRsZXJJbmZvKiBmaW5kRXgKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdmlz
aXRvci0+Y2FsbEZyYW1lKCk7CiAgICAgdW5zaWduZWQgZXhjZXB0aW9uSGFuZGxlckluZGV4Owot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQot
ICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgo
KS5iaXRzKCk7Ci0gICAgZWxzZQorICAgIGlmIChKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVCeXRj
b2RlSW5kZXgoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBleGNlcHRpb25IYW5kbGVy
SW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKKyAgICBlbHNlCisg
ICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgp
LmJpdHMoKTsKIAogICAgIHJldHVybiBjb2RlQmxvY2stPmhhbmRsZXJGb3JJbmRleChleGNlcHRp
b25IYW5kbGVySW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIFN0YWNrVmlzaXRv
cjo6cmVhZElubGluZWRGcmFtZShDYWxsCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXIpLnVuYm94ZWRJbnQzMigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2Nr
ID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAgICAgICAgbV9m
cmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9j
ay5nZXQoKTsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBFeGVjdXRhYmxlQmFzZSogQXNzZW1ibHlIZWxwZXJz
OjpleGVjdXRhCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CisgICAgcmV0dXJuIGlubGlu
ZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CiB9
CiAKIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmRmFzdFR5
cGVkQXJyYXkoR1BSUmVnIGJhc2VHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxOCBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAj
aW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVz
LmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5j
bHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRU
aHVua3MuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2lu
Y2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdp
bk1hcC5oIgpAQCAtNDksNiArNTUsOCBAQAogI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogbmFtZXNwYWNlIEpJVEludGVybmFs
IHsKIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CkBAIC02MCw2
ICs2OCw4OTEgQEAgU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZU
TERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGlsZVRpbWU7CiAKK3ZvaWQg
SklUOjpzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIHNldFR5cGUgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcsIFNwZWN1bGF0
ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChyZWcp
ID0gdHlwZTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlID0gWyZdIChhdXRvIGJ5dGVj
b2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9k
c3QsIHR5cGUpOworICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
ID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgIC8vc2V0RHN0VHlwZShieXRlY29kZSwg
cHJvZmlsZXMuZ2V0KCZieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlKSk7
CisgICAgICAgIC8vIFdlIHJhY2lseSByZWFkIHRoaXMsIHNpbmNlIGl0IHNob3VsZCBvbmx5IGdy
b3cgaW4gdGhlIHR5cGVzIGl0IHJlcHJlc2VudHMuCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9u
KTsKKyAgICB9OworCisgICAgYXV0byB0eXBlRm9yID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgLT4gU3BlY3VsYXRlZFR5cGUgeworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50
KCkpCisgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2st
PmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rp
b25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgfTsKKworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NhbGw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGw+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG9yPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYml0bm90OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BCaXRub3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdGFu
ZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Qml0YW5kPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1l
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXREaXJlY3RQbmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9kaXJl
Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NvbnN0cnVj
dDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q29uc3RydWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3RvX3RoaXM6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
KyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3QsIG1ldGFkYXRhLm1fcHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9pdGVyYXRvciwgbWV0
YWRhdGEubV9pdGVyYXRvclByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShi
eXRlY29kZS5tX25leHQsIG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZG9uZSwgbWV0YWRhdGEubV9kb25lUHJvZmlsZS5t
X3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fdmFsdWUsIG1ldGFkYXRh
Lm1fdmFsdWVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE1v
dj4oKSwgdHlwZUZvcihpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCkubV9zcmMpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcml2YXRlX25hbWU6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlX29mOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVP
Zj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRJ
bnRlcm5hbEZpZWxkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3Ro
aXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb09iamVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRz
OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tQXJndW1lbnRzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1l
cmljOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8
T3BUb051bWVyaWM+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfYWRkOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworCisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAg
ICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGF1dG8mIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKQorICAgICAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjRG91YmxlUmVh
bDsKKyAgICAgICAgICAgIGlmICghIShsZWZ0ICYgU3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJp
Z2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVj
RG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2Rl
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6
IEhhbmRsZSBCaWdJbnQzMiBiZXR0ZXIKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNTdHJpbmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKGxlZnQp
IHx8IGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY2FuIGRvIGJldHRlciBo
ZXJlCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9kaXY6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAg
YXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAg
ICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0ludDMyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUu
ZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2IHx8IGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX211bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNBbnlJbnRBc0RvdWJsZSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVEb3VibGU7CisgICAgICAgICAgICAgICAg
Ym9vbCBtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX2RpdjsKKyAgICAgICAgICAgICAgICBpZiAobWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gfHwg
ISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJl
TmFOKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOwor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29k
ZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNv
ZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gRklYTUU6IENhbiBwcm9iYWJseSBkbyBiZXR0ZXIgdy8gYmlnaW50MzIKKyAg
ICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3Vs
YXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgICAgIGlm
ICghIShsZWZ0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkgfHwgISEocmlnaHQgJiAoU3Bl
Y0JpZ0ludCB8IFNwZWNPYmplY3QpKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0Jp
Z0ludDsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3N1YikKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgICAgICBlbHNl
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICBoYW5k
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfZGl2KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9u
LT5hczxPcERpdj4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9t
b2Q6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsK
KyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOwor
CisgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0ludDMyU3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAvLyBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGlmIHdlIHBy
b2ZpbGUgZXhpdHMgb24gJSAwCisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
SW50MzJPbmx5IHwgU3BlY0RvdWJsZVB1cmVOYU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfdW5zaWduZWQ6CisgICAgICAgIC8vIE1heWJlIGJ1aWxkIGluIHNvbWUga2luZCBvZiBl
eGl0IHNpdGUgZmVlZGJhY2sgZm9yIHNwZWN1bGF0aW5nIGludDMyIHJlc3VsdAorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpLCBTcGVjSW50MzJPbmx5IHwg
U3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3Vyc2hp
ZnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVXJzaGlmdD4oKSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pbmM6CisgICAgY2Fz
ZSBvcF9kZWM6CisgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzcmMsIFVuYXJ5QXJpdGhQ
cm9maWxlJiBwcm9maWxlKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBpbnB1dCA9IHR5
cGVGb3Ioc3JjKTsKKyAgICAgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGlucHV0KSkgeworICAg
ICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkgPyBTcGVjQW55SW50QXNEb3VibGUgOiBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBT
cGVjRG91YmxlUmVhbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiBTcGVjRG91YmxlUHVy
ZU5hTikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOwor
ICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJT
cGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAg
ICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQmlnSW50IHwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfaW5jKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1f
c3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kZWMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X25lZ2F0ZSkgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cE5lZ2F0ZT4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9vcGVyYW5kLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUp
OworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9wb3c6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7Cisg
ICAgICAgIGlmICghKGxlZnQgICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDog
eworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAg
ICAgYXV0byBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBhdXRv
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBpZiAoIShsZWZ0
ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChp
c0Z1bGxOdW1iZXJPckJvb2xlYW5TcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Z1bGxOdW1iZXJPckJv
b2xlYW5TcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShieXRlY29kZSk7
CisgICAgICAgIH07CisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9s
c2hpZnQpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTHNoaWZ0PigpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFJzaGlm
dD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZl
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2
ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRlY29kZS5tX3NyYyk7CisKKyAg
ICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHR5cGUg
JiBTcGVjT2JqZWN0KSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjUHJp
bWl0aXZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfdG9fcHJvcGVydHlfa2V5OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICAgICAgYXV0byB0eXBlID0gdHlwZUZvcihieXRl
Y29kZS5tX3NyYyk7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoISh0eXBlICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNTdHJpbmcgfCBTcGVjU3lt
Ym9sKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9jYXRjaDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CisgICAgICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICBpZiAoIWJ1ZmZlcikgewor
ICAgICAgICAgICAgLy8gT09QUzogTWF5YmUgd2Ugc2hvdWxkIGRvIGEgdGhpbmcgd2hlcmUgd2Ug
ZG9uJ3QgbWVyZ2Ugdy8gYmxvY2tzIGFmdGVyIHRoaXMgaWYgd2UndmUgbmV2ZXIgZXhlY3V0ZWQg
c28gdGhleSBoYXZlIHByb3BlciBwcm9maWxpbmcuCisgICAgICAgICAgICBicmVhazsgLy8gVGhp
cyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3
aXRoIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgfQorICAgICAgICBidWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgIHNldFR5cGUocHJvZmlsZS5tX29wZXJhbmQsIHByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZW50ZXI6Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9j
b2RlQmxvY2stPm51bVZhcnMoKSk7ICsraSkKKyAgICAgICAgICAgIHNldFR5cGUodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSksIFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXJyYXk+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5X2J1ZmZlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eUJ1ZmZlcj4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfd2l0aF9zaXplOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5V2l0aFNpemU+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX3Jlc3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlUmVzdD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfd2l0aF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXJyYXlXaXRoU3ByZWFkPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpLCBTcGVjRmluYWxP
YmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAg
ICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBkbyBiZXR0ZXIgYmFzZWQgb24gcmVzb2x2ZWQg
dHlwZSBpZiB3ZSB3YW50CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVz
b2x2ZVNjb3BlPigpLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfdGhpczoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVU
aGlzPigpLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lu
X2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3Byb21p
c2U6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4o
KSwgU3BlY1Byb21pc2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3N0cmNh
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCksIFNwZWNT
dHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0Z1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jRXhw
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3lu
Y19mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVu
Yz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5
bmNfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5
bmNGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHVzaF93aXRo
X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2Nv
cGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3Jl
YXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCksIFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+
KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVt
ZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX3N0
cnVjdHVyZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigp
LCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1
Y3R1cmVfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvclN0cnVjdHVyZVBuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKSwgU3Bl
Y1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9faW5k
ZXhfc3RyaW5nOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhT
dHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9y
ZXN0X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0
TGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9y
ZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNs
SW5FdmFsPigpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29w
ZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVh
dGVfZGlyZWN0X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCksIFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKSwgU3Bl
Y1Njb3BlZEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlQ2xvbmVkQXJndW1lbnRzPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKSwgU3BlY0Nl
bGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X3Byb21pc2U6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKSwgU3BlY1Byb21p
c2VPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9hc3luY19nZW5l
cmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQXN5bmNH
ZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdHZW5lcmF0b3I+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfYXJndW1lbnRfY291bnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3Bfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFNwcmVhZD4oKSwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdSZWdleHA+KCksIFNwZWNSZWdFeHBPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmVxOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcFN0cmljdGVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbnN0cmljdGVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cE5zdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2xlc3M6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzcz4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdyZWF0ZXI+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR3JlYXRlcmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYmVsb3c6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvd2VxOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93ZXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19lbXB0eToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mX2lzX3VuZGVmaW5lZDoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgICAg
IHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19iaWdfaW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcElzQmlnSW50PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfdHlwZW9mX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19mdW5jdGlvbjoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc0Z1bmN0aW9uPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY29uc3RydWN0b3I6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3RvX3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmlu
Zz4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfbm90OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5vdD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSWRlbnRpdHlXaXRoUHJvZmls
ZT4oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxT
cGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0
PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBzcGVjdWxhdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19jZWxsX3dpdGhfdHlwZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2luX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
aXNfY2FsbGFibGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDYWxs
YWJsZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOgorICAg
IGNhc2Ugb3BfY2hlY2tfdGR6OgorICAgIGNhc2Ugb3BfcHV0X2ludGVybmFsX2ZpZWxkOgorICAg
IGNhc2Ugb3Bfbm9wOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbjoKKyAgICBjYXNl
IG9wX3N1cGVyX3NhbXBsZXJfZW5kOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3By
b2xvZ3VlOgorICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgY2FzZSBv
cF9jaGVja190cmFwczoKKyAgICBjYXNlIG9wX3VucmVhY2hhYmxlOgorICAgIGNhc2Ugb3BfdGhy
b3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoK
KyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3NldF9mdW5j
dGlvbl9uYW1lOgorICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9k
ZWZpbmVfZGF0YV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0
eToKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ugb3Bf
anRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBj
YXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2p1bmRlZmluZWRfb3JfbnVsbDoKKyAgICBj
YXNlIG9wX2pudW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qZXE6CisgICAgY2FzZSBv
cF9qc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbmVxOgorICAgIGNhc2Ugb3Bfam5zdHJpY3RlcToK
KyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pn
cmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAg
ICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bf
am5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qYmVsb3c6CisgICAgY2FzZSBvcF9qYmVsb3dlcToK
KyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNl
IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgorICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgorICAg
IGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9w
X3B1dF90b19hcmd1bWVudHM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfcHJp
dmF0ZV9uYW1lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfY3JlYXRlX2dlbmVyYXRv
cl9mcmFtZV9lbnZpcm9ubWVudDoKKyAgICBjYXNlIG9wX3lpZWxkOiAKKyAgICBjYXNlIG9wX3dp
ZGUxNjoKKyAgICBjYXNlIG9wX3dpZGUzMjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9n
dWVfbm9fdGxzOgorICAgIGNhc2UgbGxpbnRfZXZhbF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xv
Z3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CisgICAg
Y2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrOgorICAgIGNhc2Ug
bGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ6CisgICAgY2FzZSBsbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGNoZWNrcG9pbnRfb3Ny
X2V4aXRfdHJhbXBvbGluZToKKyAgICBjYXNlIGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29w
X2hpbnQ6CisgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2Nv
bnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19y
ZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV9p
ZF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9u
X3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIHdh
c21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Rfbm9fdGxzOgorICAgIGNhc2Ugbm9ybWFs
X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVy
bl92YWx1ZToKKyAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb246CisgICAg
Y2FzZSBvcF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3Jf
b3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9j
YXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX2V2
YWxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6
CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9u
ZXh0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3Rh
aWxfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rfc2xvdzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9jYWxsX2V2YWxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0
b3JfbmV4dF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuX3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNh
c2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbDoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93
YXNtX2NhbGxfbm9fdGxzOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9pbmRp
cmVjdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUOjpydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKQoreworICAgIG1fZ3JhcGggPSBX
VEY6Om1ha2VVbmlxdWU8Qnl0ZWNvZGVHcmFwaD4obV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKSk7CisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZC5yZXNpemUobV9ncmFwaC0+
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJlZGljdGlvbnNBdEhlYWQu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbaV0gPSBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCAwLCBTcGVjTm9uZSk7CisKKyAgICB7CisgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJu
YXRpdmUoKS0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hWYWx1ZVByb2Zp
bGUoWyZdIChWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIGJvb2wpIHsKKyAgICAgICAgICAgIHByb2Zp
bGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIH0pOworICAgICAg
ICBtX2NvZGVCbG9jay0+Zm9yRWFjaENhdGNoUHJvZmlsZShsb2NrZXIsIFsmXSAoVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyJiBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZl
ci5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7
CisgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVChtX2dyYXBoLT5hdCgwKS5pc0VudHJ5QmxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9ncmFwaC0+YXQoMCkuaW5kZXgoKSA9PSAwKTsKKworICAgIGNvbnN0ZXhwciBib29sIHZlcmJv
c2UgPSBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oKTsKKwor
ICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSYg
cHJvZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAg
ICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykgPSBwcm9maWxlLm1fcHJl
ZGljdGlvbjsKKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygi
YXJnIiwgYXJnLCAiID0gIik7CisgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRh
RmlsZSgpLCBtX3ByZWRpY3Rpb25zQXRIZWFkWzBdLmFyZ3VtZW50KGFyZykpOworICAgICAgICAg
ICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3ByZWRpY3Rpb25zQXRI
ZWFkWzBdLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworCisgICAgYm9vbCBjaGFuZ2VkOworICAg
IGJvb2wgY29tcHV0ZVVzZUNvdW50cyA9IHRydWU7CisgICAgbV91c2VDb3VudHMucmVzaXplKG1f
Z3JhcGgtPnNpemUoKSk7CisgICAgZG8geworICAgICAgICAvLyBPT1BTOiBBdCBsZWFzdCBkbyBE
RlMuIE1heWJlIHJldmVyc2UgcG9zdCBvcmRlci4KKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIg
aW1wYWN0IG9mIGhvdyB3ZSB0cmF2ZXJzZSBncmFwaCBvbiBhbGdvcml0aG0ncyByZXN1bHRzLgor
ICAgICAgICAvLyBJcyBhIHNpbXBsZSBERlMgZW5vdWdoIGZvciB0aGUgYnl0ZWNvZGVzIHRoYXQg
YXJlIGRlcGVuZGVudCBvbiB0aGVpciBpbnB1dCBvcGVyYW5kIHR5cGVzPworICAgICAgICAvLyBP
T1BTOiBIb3cgaXMgY2F0Y2ggdHJlYXRlZCBhcyBhIGJsb2NrIHRoYXQncyByZWFjaGFibGUgaWYg
d2UgZG8gREZTLi4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCeXRl
Y29kZUJhc2ljQmxvY2smIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG1fY3VycmVu
dFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtibG9jay5pbmRleCgpXTsKKworICAg
ICAgICAgICAgaWYgKGNvbXB1dGVVc2VDb3VudHMpCisgICAgICAgICAgICAgICAgbV91c2VDb3Vu
dHNbYmxvY2suaW5kZXgoKV0gPSBPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4obV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6ZSgpLCAwKTsKKworICAgICAgICAgICAgaWYgKCFibG9j
ay5pc0VudHJ5QmxvY2soKSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4IHsgaSArIGJsb2Nr
LmxlYWRlck9mZnNldCgpIH07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHV0
ZVVzZUNvdW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb3VudCA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3VzZUNvdW50c1tibG9jay5pbmRleCgpXS5vcGVyYW5kKG9wZXJhbmQpICs9IDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENoZWNr
cG9pbnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50
cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0
ZVVzZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNo
ZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2tw
b2ludCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaSArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNp
emUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgc3VjY2Vzc29yIDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgc3VjY2Vzc29yT3BlcmFuZHMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW3N1Y2Nl
c3Nvcl07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQ
cmVkaWN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVNwZWN1bGF0aW9uKHN1Y2Nlc3Nvck9wZXJhbmRzW2ldLCBtX2N1cnJlbnRQcmVkaWN0aW9u
c1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb21wdXRlVXNlQ291
bnRzID0gZmFsc2U7CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZ3JhcGgtPmR1bXAobV9jb2RlQmxvY2ssIG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZCk7Cit9CisKIHZv
aWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoCkBAIC02Nyw3ICs5NjAsMTMgQEAgdm9p
ZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVG
dW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCi1KSVQ6OkpJVChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCitib29sIEpJVDo6dXNlTE9MKCkKK3sKKyAgICBtX2NoZWNrZWRVc2VMT0wgPSB0
cnVlOworICAgIHJldHVybiBtX3VzZUxPTDsKK30KKworSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJs
b2NrKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxz
KGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKQEAgLTc1
LDYgKzk3NCw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAg
ICAsIG1fY2FuQmVPcHRpbWl6ZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmco
ZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKKyAgICAsIG1fdXNlTE9MKGNvbXBpbGVUeXBlID09IENvbXBpbGVUeXBlOjpM
T0wpCiB7CiB9CiAKQEAgLTEzNywxMSArMTAzNywxOSBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKICAgICAgICAgKyttX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsg
XAogICAgIE5FWFRfT1BDT0RFKG5hbWUpCiAKLSNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkg
XAorI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lLCBkc3QsIHR5cGUpIFwKICAgICBjYXNlIG9w
XyMjbmFtZTogeyBcCiAgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29k
ZUluZGV4KSB7IFwKLSAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAotICAgICAgICAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsgXAorICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1
ZTsgXAorICAgICAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FsbENhc2VzIikgJiYgYXRv
aShnZXRlbnYoInByaW50U2xvd0NhbGxDYXNlcyIpKSkgeyBcCisgICAgICAgICAgICAgICAgU3Ry
aW5nUHJpbnRTdHJlYW0gY2JOYW1lOyBcCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1
bXAoY2JOYW1lKTsgXAorICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBjYk5hbWUudG9TdHJp
bmcoKSArICIgYmMjIiArIFN0cmluZzo6bnVtYmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkg
KyAiICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCldOyBcCisg
ICAgICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpDb250ZXh0JikgeyBcCisgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYWxsQ2FzZVJhbihrZXkpOyBcCisgICAgICAgICAgICAgICAgfSk7IFwK
KyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgZW1pdFNsb3dPcChzbG93X3BhdGhfIyNuYW1l
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGRzdCwgdHlwZSk7IFwKICAgICAgICAgfSBcCiAgICAgICAg
IE5FWFRfT1BDT0RFX0lOX01BSU4ob3BfIyNuYW1lKTsgXAogICAgIH0KQEAgLTE1NiwyNiArMTA2
NCw0NiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBE
RUZJTkVfU0xPV0NBU0VfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGVt
aXRTbG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOyBcCisgICAgICAgIGVtaXRT
bG93XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlKTsgXAogICAgICAgICBORVhU
X09QQ09ERShuYW1lKTsgXAogICAgIH0KIAogI2RlZmluZSBERUZJTkVfU0xPV0NBU0VfU0xPV19P
UChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd0Nhc2VD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAg
ICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUp
OyBcCisgICAgICAgIGlmICh1c2VMT0woKSAmJiBzbG93Q2FzZS5yZXN1bHQpIHsgXAorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UucmVzdWx0LmlzR1BSKCkpOyBcCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG93Q2FzZS5kc3QuaXNWYWxpZCgpKTsgXAorICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzbG93Q2FzZS5kc3QsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG9wXyMjbmFtZSk7IFwK
ICAgICB9CiAKLXZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIs
IFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKK3ZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHN0dWIpOwogICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYWxsQ2FzZVJhbihTdHJpbmcga2V5
KQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2
NF90Pj4gc2xvd0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVj
dCgpOworICAgIH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVp
bnQ2NF90IHZhbHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlm
ICgodmFsdWUgJSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1
ZSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1f
Y29kZUJsb2NrLCAiXG4iKTsKICAgICAKQEAgLTIzMSwxNiArMTE1OSw4NSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2
aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUo
KTsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYg
c3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUg
cHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFj
aGFibGUuCi0gICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBp
dCdzIGV2ZXIgaGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09Q
UworCisgICAgICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wcmVkZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAo
YXV0byYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlC
bG9jaygpIHx8IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4
XS5jb250YWlucyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNl
c3NvcnNbc3VjY2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAg
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3Vu
dDsgKSB7CisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJl
bnRCbG9jayB8fCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gKG1fY3VycmVudEJsb2NrLT5s
ZWFkZXJPZmZzZXQoKSArIG1fY3VycmVudEJsb2NrLT50b3RhbExlbmd0aCgpKSkgeworICAgICAg
ICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
ZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGF0
IGVuZCBvZiBiYiMiLCBtX2N1cnJlbnRCbG9jay0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0g
PSBXVEZNb3ZlKG1fY3VycmVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IHsgfTsKKworICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrID0gbV9ncmFwaC0+ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1
cnJlbnRCbG9jay0+aXNFbnRyeUJsb2NrKCkgJiYgIW1fY3VycmVudEJsb2NrLT5pc0V4aXRCbG9j
aygpKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJl
ZGVjZXNzb3JzID0gbV9wcmVkZWNlc3NvcnNbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworICAg
ICAgICAgICAgICAgICAgICBib29sIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuc2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGFsbFByZWRlY2Vzc29yc1NldCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29yIDogcHJlZGVjZXNzb3JzKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgICghbV9zdGF0ZUF0RW5kW3ByZWRlY2Vz
c29yXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxQcmVkZWNlc3NvcnNT
ZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsUHJlZGVjZXNzb3JzU2V0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSB0cnVlOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSAqbV9zdGF0ZUF0RW5k
W3ByZWRlY2Vzc29ycy5maXJzdCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29y
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUubWVy
Z2UoKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGlmICghc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRp
Y3Rpb25zQXRIZWFkW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKworICAgICAgICAgICAgICAg
IG1fY3VycmVudFVzZUNvdW50cyA9IFdURk1vdmUobV91c2VDb3VudHNbbV9jdXJyZW50QmxvY2st
PmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICBtX3NwaWxsQ2FuZGlkYXRlcy5jbGVhcigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTbG93
Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOworICAgICAgICBpZiAobV9ieXRlY29kZUlu
ZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkg
PiAwKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGluc3RydWN0
aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KKyAgICAgICAgICAgIC8vIExldCdz
IGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCisgICAgICAgICAgICBi
cmVha3BvaW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRy
KCk7CiAgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKQEAgLTI3
OCw0NiArMTI3NSw0MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgIH0KICNlbmRpZgogCisKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIlJlZyBhbGxvYyBiZWZvcmUgYmMjIiwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsK
KyAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICBkYXRhTG9nTG4o
KTsKKyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoaW5fYnlfdmFsKQotICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0
ZXIpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdyZWF0ZXJlcSkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoaXNfY2FsbGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9y
KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KHR5cGVvZl9pc19vYmplY3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZl9pc19mdW5j
dGlvbikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0KQotICAgICAgICBERUZJTkVfU0xP
V19PUChwdXNoX3dpdGhfc2NvcGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9sZXhp
Y2FsX2Vudmlyb25tZW50KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfYnlfdmFsX3dpdGhf
dGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9T
TE9XX09QKHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19P
UCh1bnJlYWNoYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9y
KQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQpCi0gICAgICAg
IERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KHNwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAgICAgIERFRklORV9T
TE9XX09QKHRvX2luZGV4X3N0cmluZykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Rp
cmVjdF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJn
dW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHkpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0KQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X3Byb21pc2UpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19n
ZW5lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHBvdykKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoaW5fYnlfdmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKS5tX2Rz
dCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGlzX2NvbnN0cnVjdG9yLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDb25zdHJ1Y3Rvcj4oKS5tX2RzdCwgU3BlY0Jvb2xl
YW4pCisgICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFN0cmNhdD4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
cHVzaF93aXRoX3Njb3BlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERF
RklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hlYXBUb3ApCisgICAgICAgIERFRklO
RV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9u
ZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRoX3RoaXMsIFZpcnR1YWxS
ZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29w
ZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpLm1fZHN0LCBTcGVjSGVh
cFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHksIFZpcnR1
YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2Fj
Y2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERF
RklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisg
ICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvciwgVmlydHVhbFJlZ2lzdGVy
KCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJl
YWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCkubV9kc3Qs
IFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X2J1ZmZlciwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLm1fZHN0LCBTcGVjQXJyYXkp
CisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
aGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVt
ZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xP
V19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0NlbGwpCisgICAgICAgIERFRklORV9T
TE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhT
dHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0
QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1lbnRzKQorICAgICAgICBERUZJTkVf
U0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNPYmplY3RP
dGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHks
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCkubV9k
c3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9yZXN0LCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKS5tX2RzdCwgU3BlY0FycmF5KQor
ICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2Vu
ZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVB
c3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVf
U0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJh
dG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKHBv
dywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBE
RUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzOTIsMTEgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9i
ZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJfZW5kKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQpCiAgICAgICAgIERFRklORV9PUChv
cF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19PUChtb2QsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQp
CisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikKICAgICAgICAgREVGSU5FX09QKG9w
X211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkKQEAgLTQ3NCwxMCArMTQ3Miw4NCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChv
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAgICAgIERFRklORV9PUChvcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAgICBERUZJTkVfT1Aob3BfaXNfY2FsbGFibGUp
CisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfZnVuY3Rpb24pCisgICAgICAgIERFRklO
RV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBERUZJTkVfT1Aob3BfdHlwZW9mKQor
CisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQorICAgICAgICBERUZJTkVfT1Aob3BfbGVzc2Vx
KQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcikKKyAgICAgICAgREVGSU5FX09QKG9wX2dy
ZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQor
CisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKKwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29k
ZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tlZFVzZUxPTCkgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNr
X3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Rh
aWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIG9w
X3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFy
Z3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxl
X3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBj
YXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNo
ZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3Vy
cmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgYXV0byBjb3VudCA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCYgY291bnRlciA9
IG1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIC0t
Y291bnRlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWNvdW50ZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gT09QUzogRG8gdGhpcyBsYXppbHkgaW4gc2xvdyBwYXRoIGNyZWF0aW9uL3NwaWxs
Rm9yQ2FsbAorICAgICAgICAgICAgICAgICAgICAvL21fc3BpbGxDYW5kaWRhdGVzLmFwcGVuZChv
cGVyYW5kKTsKKworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJSZWcgZ3ByID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbG9iYmVyKGdwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckZvck9wZXJh
bmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnByICE9IEludmFsaWRG
UFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihmcHIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
Pm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAg
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0
aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JC
eXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQs
IGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0
LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTQ5OCw2ICsxNTcw
LDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkKICAgICBtX2ptcFRhYmxl
LmNsZWFyKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYXNlUmFuKFN0cmluZyBrZXkpCit7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+PiBz
bG93Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpj
YWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93Q2FzZXMuY29uc3RydWN0KCk7Cisg
ICAgfSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMuZ2V0KCk7CisgICAgdWludDY0X3Qg
dmFsdWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCh2YWx1
ZSAlIDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihrZXksICI6ICIsIHZhbHVlKTsKK30K
Kwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIHsKICAgICBtX2dldEJ5SWRJ
bmRleCA9IDA7CkBAIC01MTYsMTQgKzE2MDIsMjUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxS
YXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAg
ICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsg
aXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0g
aXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgewor
ICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAg
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8g
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7
CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAK
ICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworCisgICAgICAg
IGlmIChnZXRlbnYoInByaW50U2xvd0Nhc2VzIikgJiYgYXRvaShnZXRlbnYoInByaW50U2xvd0Nh
c2VzIikpKSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBuYW1lOworICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmR1bXAobmFtZSk7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gbmFt
ZS50b1N0cmluZygpICsgIiBiYyMiICsgU3RyaW5nOjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVzW2N1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KV07CisgICAgICAgICAgICBwcm9iZShbPV0oUHJvYmU6OkNvbnRleHQmKSB7CisgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VSYW4oa2V5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZSA9IG51bGxwdHI7
CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCkBAIC01ODAsNyArMTY3Nyw2IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9v
cF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTksNiArMTY5NSw5IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jf
bmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzEsMTkgKzE3MzAsMzQgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AocmVz
b2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoY2hlY2tfdGR6KQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0b19wcm9wZXJ0eV9rZXkpCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlzX2NhbGxhYmxlKQorICAgICAgICBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCisgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKHR5cGVvZikKKworICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChsZXNzKQorICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChsZXNzZXEpCisgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKGdyZWF0ZXIpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdy
ZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChjcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzog
IiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8u
b2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBp
biBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFu
eSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6
CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2Fz
ZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBl
bm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JF
TEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSkt
PnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2Vu
LiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVBy
b2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFscmVhZHkgZG8gdGhpcywgc28gd2Ugc2hvdWxk
bid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihz
bG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCks
IDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC02
ODgsNiArMTgwMiw4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQorCisgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsgLy8gT09QUzogaGVscGZ1
bCBmb3IgcnVubmluZyBMT0wgdy9vdXQgREZHLgogICAgIAogICAgIHN3aXRjaCAobV9jb2RlQmxv
Y2stPmNvZGVUeXBlKCkpIHsKICAgICBjYXNlIEdsb2JhbENvZGU6CkBAIC03NzgsNiArMTg5NCw4
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIGJvb2wgcHJpbnRFYWNoT1NSID0gZ2V0
ZW52KCJwcmludEVhY2hPU1IiKSAmJiAhIWF0b2koZ2V0ZW52KCJwcmludEVhY2hPU1IiKSk7CisK
KyAgICBpZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHkoKSkgeworICAgICAgICBKdW1wTGlzdCBleGl0
Q29tbW9uOworICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAg
ICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5maXJzdDsKKyAgICAgICAgICAgIGF1dG8g
anVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgICAgIGlmIChwcmludEVhY2hPU1IpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmlu
dFN0cmVhbSBwcmludFN0cmVhbTsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChw
cmludFN0cmVhbSk7CisgICAgICAgICAgICAgICAgQ1N0cmluZyBzdHIgPSBwcmludFN0cmVhbS50
b0NTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBzdHIuYnVmZmVyKCktPnJlZigpOyAvLyBsZWFr
IGl0LgorICAgICAgICAgICAgICAgIHByaW50KHN0ci5kYXRhKCksICIgLT4gZXhpdCBhdCBiYyMi
LCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgIlxuIik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBi
cmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVja3BvaW50IGV4aXRzLgorCisgICAgICAg
ICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgICAgICBleGl0Q29tbW9uLmFw
cGVuZChqdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKCFleGl0Q29tbW9uLmVt
cHR5KCkpOworICAgICAgICBleGl0Q29tbW9uLmxpbmsodGhpcyk7CisKKworICAgICAgICBzdGF0
aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6OnBjR1BSID09IHJlZ1Q0KTsKKyAgICAgICAgQVNT
RVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMobnVtYmVyVGFn
UmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVsb3cgcmVsaWVzIG9uIHRoaXMgYmVpbmcgYSBjYWxs
ZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJy
aWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAg
ICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBz
YXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBh
IHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9TUldyaXRl
QmFycmllcik+KG1fdm0sIG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgcHJl
cGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFn
Q0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIG5v
bkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7Cisg
ICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFn
UmVnaXN0ZXIpOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7
CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigpKSwgcmVnVDIpOworICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsKKyAgICAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpKTsKKworICAgICAg
ICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMiwgVHJ1c3RlZEltbTMy
KG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpKSk7Cisg
ICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIsIG51bWJlclRhZ1JlZ2lzdGVyKTsg
Ly8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5jZSB0aGUgTExJbnQgUEMgcmVnaXN0ZXIg
aXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Ucmln
Z2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPihtX2NvZGVCbG9jayk7CisgICAgICAgIHByZXBhcmVD
YWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5j
dGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5v
dykpLCBub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOworICAgICAgICBtb3ZlKG51bWJlclRhZ1JlZ2lzdGVyLCBMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIG51
bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgc2tpcEpldHRpc29uLmxpbmsodGhpcyk7CisgICAg
ICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihq
aXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgLy9Bc3Nl
bWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6ZU5vdyA9IGppdC5icmFuY2gzMigKKyAgICAgICAg
Ly8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgIC8vICAg
IEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4
aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6Om5vcm1hbE9TUkV4aXRUcmFtcG9saW5lVGh1
bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKTsKKyAgICAgICAgLy8gT09QUwor
ICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgLy8gICAg
ZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5j
b2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTElu
dDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgbW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPm1ldGFkYXRhVGFibGUoKSks
IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOworICAgICAgICBtb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRl
cigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAgICAgICBtb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BS
SW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRy
VGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6IAorICAgICAgICAvLyAxLiBTdG9yZSBMTEludCBj
b2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAgICAgICAvLyAyLiBqZXR0aXNvbiBpZiB3ZSBleGNj
ZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8gMy4gd3JpdGUgYmFycmllciBMTEludCBjb2RlIGJs
b2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIxNjUsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6Omxp
bmsoKQogICAgIAogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVf
Q09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNl
bGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2Vs
aW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2Nv
ZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2Rl
V29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVz
dWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIxNzYsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6
OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxv
Y2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwogICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0
SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0
aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOworICAgICAgICBhZG9wdFJlZigq
bmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgdXNlTE9MKCkgPyBKSVRU
eXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpKTsKIAogICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3Ig
JXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnko
KS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQo
KS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIsNiArMjI3MCw5NTEgQEAgU2Vjb25kcyBKSVQ6OnRv
dGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUg
KyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklU
OjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUg
RXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFz
dCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5k
KHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3Qo
KS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1Zl
Y3RvcjxSZWcsIDMyPiBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAgIC8vIE9PUFM6IGdldCBh
IGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9j
ayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9u
J3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlz
IHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFZlY3RvcjxSZWcsIDMyPiBhbGxvd2VkOwor
ICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBh
dXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmIChhbGxvd2VkQ2FsbGVl
U2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYXBwZW5kKHJlZyk7Cisg
ICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAg
ICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dl
ZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBW
ZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0
ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9y
ICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBu
ZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29y
dGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7
CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1
Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiBy
ZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRGUFJzKCkK
K3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0
ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUg
ZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhp
cworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3ll
ZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+
KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjph
c3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkg
dy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4g
TWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dD
YXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRl
Y29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRl
R1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmICho
aW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQ
UnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1
ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0
aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7
CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVl
KHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBj
bG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRl
RlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVw
bGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJz
KCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAg
ICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5p
c0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAg
ICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVn
VmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAg
ICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJl
Zy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVnKQoreworICAgIC8vIE9P
UFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMg
b2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJh
bmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3Qg
anVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1p
Z2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVP
cGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVP
cGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBz
b21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAg
ICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcg
aXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5k
KCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFu
IGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxS
ZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAg
IHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpz
cGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0g
KGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAg
IGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVy
SW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BS
cygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6
c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBm
YXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsm
XSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5k
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJl
ZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdWYWx1ZS5vcGVyYW5kKSkpOworICAg
IH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhcHBlbmRJ
Zk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAg
IGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTaWxlbnRT
cGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUsIEZQ
UlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZh
c3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxh
bjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfdHVw
bGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJhbmQpKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3Rl
cnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxs
b3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnLmZwcigpICE9IHRvSWdub3JlRlBSKQorICAg
ICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9CisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnLmdwcigpICE9IHRvSWdub3JlKQorICAg
ICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9CisKKyAgICByZXN1bHQuc3RhY2tT
aXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJz
VG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLCAwKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBT
aWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKnRoaXMsIHJlY29yZC5zcGlsbGVk
UmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JTcGlsbCwgMCk7CisgICAgcmVzdG9y
ZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCksIHJlY29yZC5zYXZlUGxhbik7
Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRDb3VudCh1aW50NjRfdCBjb3VudCkKK3sKKyAgICBz
dGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyICUgMTAw
MDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUnVudGltZSBsb2FkIGNvdW50OiAiLCBj
b3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyBy
ZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBs
YW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2NF90IGxvYWRDb3VudCA9IDA7CisgICAgZm9yIChh
dXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcgPSBzdGQ6OmdldDwwPih0
dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gc3RkOjpnZXQ8MT4odHVw
bGUpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5UeXBlID0gc3RkOjpnZXQ8Mj4odHVw
bGUpOworCisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25vcmUpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFuZFRvSWdub3JlKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BS
cygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goKnRoaXMpOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAgICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAgICAgICAgICAgICB1bmJv
eERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVn
cyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgICAgICAgICB1bmJv
eERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgICAgIGF1
dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkp
OworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgKytsb2FkQ291bnQ7CisgICAgfQorCisgICAgaWYgKGZhbHNlICYm
IGxvYWRDb3VudCkgeworICAgICAgICBwcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JikgeworICAg
ICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRDb3VudCk7CisgICAgICAgIH0pOworICAgIH0KK30K
Kwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihzbG93Q2FzZS5yZXN1bHQsIHNs
b3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lkIEpJVDo6c2V0SW50MzIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgLy8gT09QUzogQWRk
IGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3Mg
eyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Io
b3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBv
cGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0ludDMyT25seTsKK30KKwor
dm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBH
UFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisg
ICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7
CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihv
cGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3IgYnl0ZWNvZGVzICgvY2hlY2twb2lu
dHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgorICAgIGFzc2lnblJlZyhncHIsIG9w
ZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NG
b3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwg
b3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6
OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3Vu
dDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFsdWUub3BlcmFuZC5pc1Zh
bGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRl
bXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0KQoreworICAgIGlmICho
aW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJ
VDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQ
YXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0
LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5H
UFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklU
JiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZw
cigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZnByID0gbV9q
aXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIHJldHVybiBt
X2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30K
KworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50
MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOwor
fQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9
IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOwor
ICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOwor
ICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAg
bV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZSht
X29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpD
ZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BS
UmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+
Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
Z3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVl
KG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3Bl
cmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZO
b3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBl
KG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6
Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sK
KyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlm
IChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2Vs
bE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsK
K30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3By
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFz
c2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5k
KG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dw
ciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIp
OworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisg
ICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJh
bmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1f
aml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQu
ZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6
OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3By
KTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dw
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5h
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFu
ZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBt
X2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRl
R1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBt
X2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAg
IH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklU
OjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorewor
ICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpEb3VibGVP
cGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30K
KworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0g
SW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0
Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsK
KyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7
CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAg
dGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9j
YXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAg
IG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdz
IHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJh
ZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7
IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAgIG1faml0LnVuYm94RG91
YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9v
cGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpOdW1iZXJPcGVyYW5kOjpO
dW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBt
X2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBS
UmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpOdW1iZXJPcGVyYW5kOjp+TnVtYmVyT3Bl
cmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6TnVt
YmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisg
ICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQp
OworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnBy
ID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1
cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVy
YW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3Bl
cmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2pp
dC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVu
VHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUodmFs
dWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24o
bV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBt
X2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAg
bV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50
MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAg
ICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3Bl
cmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5j
aElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVU
YWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBH
UFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAg
IGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0K
KworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwor
ICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKyAgICByZXR1cm4gbV9mcHI7
Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6SW50MzJDb252ZXJ0aW5nT3BlcmFu
ZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6fkludDMyQ29udmVy
dGluZ09wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5v
U2xvd1BhdGgoKTsKKworICAgIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVJbnQzMihtX29wZXJh
bmQpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBvcCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAg
ICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAg
fSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVOdW1iZXIobV9vcGVyYW5kKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9n
cHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKwor
ICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAgICBGUFJSZWcgZnByID0g
dGVtcEZQUi5mcHIoKTsKKworICAgICAgICBhdXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZklu
dDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAg
IGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVy
YW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNo
SWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworCisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCBtX2dw
ciwgZnByKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAg
IGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0RvdWJsZVRvSW50MzJDb252ZXJzaW9u
VXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRE
b3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKGZwciwgbV9ncHIpOworICAgICAg
ICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYK
KyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoVHJ1bmNhdGVE
b3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1bmNhdGVTdWNjZXNzZnVsKSk7Cisg
ICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQuc2lsZW50U3BpbGxCZWZvcmVDYWxs
KG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRB
bmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91YmxlVG9JbnQoKSA/IG9wZXJhdGlvblRv
SW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMyLCBtX2dwciwgZnByKTsKKyAgICAg
ICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3BpbGxSZWNvcmQpOworICAgICAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlzSW50
MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCBtX2dwcik7CisK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZSht
X29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91
bGRTcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZh
bHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVH
UFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlQm9vbGVhbihtX29wZXJhbmQsIHZhbHVlR1BSKTsKKworICAgICAgICBtX2ppdC5hbmQzMihU
cnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5z
aG91bGRTcGVjdWxhdGVPdGhlcihtX29wZXJhbmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRl
R1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIG1faml0LnNwZWN1
bGF0ZU90aGVyKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2Nh
dGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAgRlBSVGVtcCB0
ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGUFIuZnByKCk7CisK
KyAgICAgICAgSnVtcExpc3QgZG9uZTsKKworICAgICAgICBhdXRvIGlzSW50MzIgPSBtX2ppdC5i
cmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7
CisgICAgICAgIGF1dG8gbm90RG91YmxlID0gbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5v
dEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAg
ICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1fZ3ByLCBmcHIpOworI2lmIENQVShB
Uk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9J
bnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAg
bV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBt
X2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9
IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5i
cmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1
Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRT
cGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgp
ID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3By
LCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29y
ZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisK
KyAgICAgICAgbm90RG91YmxlLmxpbmsoJm1faml0KTsKKyAgICAgICAgYXV0byBub3RPdGhlciA9
IG1faml0LmJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcik7
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAgICAgIGRv
bmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90T3RoZXIubGluaygmbV9qaXQp
OworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RCb29s
ZWFuKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIpKTsKKyAgICAgICAgbV9qaXQuYW5k
MzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwgbV9ncHIpOworICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAg
ICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQodmFsdWVHUFIsIG1fZ3ByKTsKKworICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwg
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3BlY0Jvb2xlYW4pOworICAgIH0KKwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRkSWZOZWVkZWVkID0gWyZd
IChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgcmVzdWx0
LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQor
ICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BS
cygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0
cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N0cmlu
ZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1ib2xTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
U3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24o
cHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7
CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkp
KSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAg
fQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOworfQorCit2b2lkIEpJVDo6
c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3QodmFsdWUpKTsKKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxh
dGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNr
KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsKK30KKwordm9pZCBKSVQ6
OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7
CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVj
SW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SW50MzIo
dmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9CisK
K3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVt
YmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1i
ZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3Rl
eHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0
ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJv
dmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVl
LCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNC
aWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
aXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAg
aXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNw
ZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAg
ICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5w
cm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29k
ZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRvcCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29u
c3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3Rh
bnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmly
dHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5U
eXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5j
b25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9jdXJyZW50U3RhdGUucmVn
aXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBvcGVyYW5kLCAiLCAiLCBsb2NrQ291
bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0ZSgpCit7CisgICAgZGF0
YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93
ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAg
ICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0g
IiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChhdXRvIHJlZyA6
IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQp
IHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVn
LCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xu
KCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0
U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUg
IlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRl
ICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNs
YXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2Nr
OworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAg
IGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDYs
MTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBz
dHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207
Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAgICAgICBTbG93Q2FzZUVu
dHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAg
IDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVj
dG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFsUmVnaXN0ZXIsIFNwZWN1bGF0ZWRUeXBlPj47CisK
KyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBTYXZlUGxhbiBzYXZlUGxh
bjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWdu
ZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG93Q2FzZSB7Cisg
ICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAg
IDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KKwor
ICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFZlY3RvcjxNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5
LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4g
b25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6
IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBh
dGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0Owor
ICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIg
YWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1
Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Niw3ICsyMTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xh
c3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAg
ICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7
CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7
CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWRE
ZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51
bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVk
IDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVz
cyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNo
ZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZh
dWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgotICAgICAgICBKSVQoVk0mLCBDb2RlQmxv
Y2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9
IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVUeXBlIHsKKyAg
ICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAgTE9MCisgICAgICAgIH07CisgICAgICAg
IAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRl
eCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAg
ICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2
bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29t
cGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFy
YXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29k
ZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBC
eXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBj
b2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAg
ICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBjb21waWxlVHlwZSwgYnl0ZWNvZGVPZmZz
ZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxv
Y2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkK
ICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIs
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6
QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9w
UHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1v
ZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1
dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21w
aWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhh
c0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAg
ICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxs
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAg
IHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2Fs
bEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7
CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcpOworCiAgICAgICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkgKzM1MywxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2
b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKIAotICAgICAgICB2b2lk
IGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBM
aXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnRO
b1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0
ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICB2b2lkIGFkZFNs
b3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1
bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50
KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzMzLDcgKzM2NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9p
ZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICB2b2lk
IGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBv
cF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBA
IC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxl
Q2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTM2MCw3ICszOTIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0
RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07
Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CisgICAgICAgIHZv
aWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1
bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1
ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01MDgsOCArNTQwLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElu
c3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtNTE3LDEyICs1
NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJh
dGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJh
dGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9u
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNp
emUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNl
Jik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwog
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAg
ICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9u
Kik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNTQ2LDkgKzU4Nyw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9m
aWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25z
dCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOwor
I2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjc4LDc4ICs3
MjEsMTAwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9u
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZW1pdElzQ2Fs
bGFibGVJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2lz
X2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90eXBl
b2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90
eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0
X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0Q29tcGFyZU9wSW1wbChjb25zdCBJbnN0cnVjdGlv
biosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQg
ZW1pdF9vcF9sZXNzKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dyZWF0ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9s
ZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfY3JlYXRl
X2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3Nl
cShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1
dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VD
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2ln
bmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsK
KyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
Uik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTc2NCw4ICs4
MjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVl
IGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNzc4LDM4ICs4NDEsMjEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24s
IE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAg
ICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwg
UmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nh
c2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBpdGVyLT5m
cm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAg
dm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7
Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJl
Z2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQot
ICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5
dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAg
IH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgICAgICB2b2lkIGVt
aXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1bGF0ZWRUeXBlIGRzdFR5cGUpOwog
Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xv
d0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
cyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNs
b3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAg
IFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJv
b2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dD
YXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC04OTEsNiArOTM3LDI2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAgICAgICAgICAgdXBk
YXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRvIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7
CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgIGF1dG8gY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVG
UFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAgICAgfQorCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQog
ICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdz
Li4uKTsKQEAgLTkwMiw2ICs5NjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIE5v
UHJvZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Cisg
ICAgICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBTbmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2b2lkIGVtaXRCaXRCaW5hcnlPcEZhc3RQYXRo
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGluZ1BvbGljeSBz
aG91bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5nUG9saWN5OjpOb1Byb2ZpbGluZyk7CiAKQEAg
LTk2MSw2ICsxMDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1
blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21w
aWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwog
ICAgICAgICAKQEAgLTk3MSw2ICsxMDQzLDI5MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBj
b3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNsYXNzIEdQUlRlbXAgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0g
SW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJU
ZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQ
UlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBH
UFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBi
aXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVn
IG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
b3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BS
UmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAg
ICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90
Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAg
ICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BS
UmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3BlcmFuZCgpOworICAgICAg
ICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAg
Y2xhc3MgTnVtYmVyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk51
bWJlck9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJ
bnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwor
ICAgICAgICB9OworCisgICAgICAgIC8vIFNwZWN1bGF0ZSBudW1iZXIrYm9vbGVhbitvdGhlciwg
YW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9yIGJpdG9wcy4KKyAgICAgICAgY2xhc3MgSW50
MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBJbnQz
MkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3By
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSYg
cHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJvdmVu
VHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5k
KSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVy
YW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisg
ICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5v
cGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBBbGxvY2Vk
UmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0
YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAg
c3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWdd
OworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVn
XTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3Jl
Z107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR1BSUmVnJiBn
cHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChncHIgIT0g
SW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJh
bmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAg
ICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcg
Z3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGdwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAg
ICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAgICAgICAgcmVnVmFsdWUo
Z3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAg
aWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGZwcikub3Bl
cmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
ZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFu
ZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMy
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlSW50MzJDb252ZXJ0aW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVy
YW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNOb3RDZWxsU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3BlY0Nl
bGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN0cmlu
ZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRpb24o
cHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0Jv
b2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7
CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
KTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VMT0woKTsKKworICAgICAg
ICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxh
dGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAg
IHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9yIHVw
ZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQg
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRlRlBSKCk7CisgICAgICAg
IHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIHNl
dERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0SlNWYWx1
ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2UgdGhpcyB0YWtlIHRoZSBy
ZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNldCBpdC4KKyAgICAgICAg
dm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7CisgICAgICAgIFNhdmVQ
bGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50U3BpbGxSZWNvcmQgc2lsZW50
U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSA9IEludmFsaWRHUFJSZWcsIEZQUlJlZyB0
b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOworICAgICAgICB2b2lkIHNpbGVudEZpbGxBZnRl
ckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJv
bVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCByZXN0b3Jl
RnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRUb0ln
bm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7
CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1fZmFyQ2FsbHM7CkBAIC05OTAsNyAr
MTM0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2pt
cFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwotICAgICAg
ICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZl
Y3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29w
aWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzODUsODcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAg
IC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisg
ICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQ
UlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52
YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcm
IG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIu
Z3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAg
ICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAgICAgICAgICBmcHIgPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHN0cnVj
dCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07Cisg
ICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNB
bGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1Zh
bHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCAh
PSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhl
ci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0geyB9OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAg
ICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAg
fTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxB
bGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxS
ZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUs
IHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2Nr
U3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChvcGVy
YW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXplKCkpOworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRv
UmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0g
b3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5w
cm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUo
KSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
cmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAg
ICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKworICAgICAgICB2b2lkIGR1bXBSZWdh
bGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1f
Z3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxs
cHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+IG1f
cHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVl
PiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPHVuc2lnbmVk
LCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAgIE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPiBt
X2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDE2PiBt
X3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBWZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsK
KworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOwor
ICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAg
ICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9M
IHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRlY29kZUluZGV4LCBKdW1w
TGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODggQEAKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgi
CiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclBy
aW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdy
ZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFu
QW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVh
dGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pu
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExl
c3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Smxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2Up
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVy
VGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0
cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRy
dWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5n
cmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVh
bE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVy
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0NiwzNyArMTQ4LDE2MSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjCiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdENvbXBhcmVP
cEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBncENvbXBhcmUsIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb21wYXJlKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworCisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBs
aHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUu
bV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMy
KHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNUZW1wLmdwcigpLCByaHNUZW1wLmdwcigp
LCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGRvdWJs
ZUNvbXBhcmUsIGxoc1RlbXAuZnByKCksIHJoc1RlbXAuZnByKCksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0gZWxzZSBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZU51bWJlcihyaHMpKSB8fCAhcHJlZGljdGlvbkZvcihsaHMpIHx8ICFwcmVkaWN0aW9uRm9y
KHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFyZSwgbGhzVGVtcC5mcHIoKSwgcmhz
VGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJl
ZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9y
ZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVy
ZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxBbmRPcmRlcmVkKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJv
eEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJUZW1wIHJlc3Vs
dFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAg
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1
dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlu
cHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Cisg
ICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworICAgIH0KIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNv
bmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRp
dGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xs
b3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8g
Y29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUK
IAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBs
aHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3VibGVDb25kaXRpb24sIGxo
cy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG9wMikpIHx8ICFwcmVkaWN0aW9uRm9yKG9wMSkgfHwgIXByZWRpY3Rp
b25Gb3Iob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCBy
aHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAg
IH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOwpAQCAtMjI5LDE3ICszNTUsNDMgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJn
ZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7
CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0g
WyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBn
ZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1Rl
bXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdw
cigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKwog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOwogICAgICAgICBpbnQz
Ml90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwotICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pKSwg
dGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKKyAgICAgICAgZ2V0UkhT
KCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwgSW1t
MzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShj
b25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEp
OwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwogICAgIH0K
IH0KIApAQCAtMjU1LDQzICs0MDcsODkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAg
R1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMg
PSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAg
ICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAg
IGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3AyaW1tKSwgcmVzdWx0R1BS
KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAg
ICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAg
ICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihvcDFpbW0pLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1t
MzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgY29tcGFyZTMy
KGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGdldExIUygpOworICAg
ICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNH
UFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFt
ZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xv
d09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xv
d09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9
IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24s
IG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVy
YXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3Bl
cmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBp
bnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24g
b3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5z
dHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9w
ZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICBhdXRvIGZh
bGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFs
bHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFdl
IGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93
IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGlt
bWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2lu
dCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2lu
dCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBAIC0zMDAsOCArNDk4LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAg
ICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICAg
ICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMyNiw4ICs1MjIsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAg
ICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUxLDEyICs1NDUsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQogICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBKdW1wIGZhaWwxID0gYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEp
OwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CkBAIC0zNjksOSArNTYy
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICBm
YWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwogICAgICAgICBmYWls
My5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8g
WmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTM4MSwxMSAr
NTc0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihz
cmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsgLy8gT09QUzogZW5z
dXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVlcyB3LyB0aGUgcHJlZGljdGlvbiBw
cm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOworICAgICAgICAgICAgICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGFkZERvdWJsZShBYnNv
bHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHNyY0Rz
dCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50
QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIo
MSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJs
ZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3Jj
RHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmNE
c3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9
OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1
dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnBy
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50
MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
ZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
QWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAg
IGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
c3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwor
ICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTMs
MTEgKzYyOCw2MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHRl
bXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOwor
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCByZXN1bHRGUFIp
OworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAg
ICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAg
ICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVtcEZQUiwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAg
ICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgaW5wdXRGUFIgPSBp
bnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgbG9h
ZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1YkRv
dWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOworICAgICAgICAgICAgc2V0RG91Ymxl
KHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51
bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRl
bXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUg
PSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBG
UFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7
CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMyLi4uCisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlu
cHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBU
cnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQ
UiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3Jj
RHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmln
SW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3Vi
MzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAt
NDA3LDU0ICs2OTMsMTEwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlv
bioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgfHwgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIo
KTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworCisgICAgICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigp
OworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hl
Y2soTWF0aDo6Zm1vZERvdWJsZSwgcmVzdWx0RlBSLCBsaHNGUFIsIHJoc0ZQUik7CisKKyAgICAg
ICAgICAgIHNldERvdWJsZShkc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0
IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lz
dGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8g
ZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVj
eDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsK
ICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVt
cDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQ
UjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjbG9iYmVyKGVheCk7CisgICAgICAg
IGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOworICAgICAgICBlYXhUZW1wLmVt
cGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsK
KyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisgICAgICAgIGVheFRlbXAt
PmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7
CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxh
Y2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAg
ICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLT5ncHIoKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogbmV3IG5h
bWUsIGxpa2Ugc3BpbGxFeHBlY3RpbmdTbG93UGF0aAorCisgICAgICAgIGVuc3VyZVNsb3dDYXNl
KGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihy
aHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgICAgICBt
b3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaHNHUFIgPSByZWdUNDsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNHUFIsIHJocywgZWN4KTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAg
ICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0gYnJhbmNoMzIo
Tm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkp
KTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAgICB4ODZDb252ZXJ0VG9E
b3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVtZXJhdG9yUG9z
aXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIo
MCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAg
ICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQpOwotfQorICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyBl
YXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQg
SklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBlYXgpOworICAgICAg
ICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0J5dGVj
b2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51
bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShs
aHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyks
IFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0JpZ0ludDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2Rl
TnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUoWDg2XzY0KQpAQCAtNDY0LDcg
KzgwNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNl
IC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5v
dEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAtNDc0LDYgKzgxNiw3IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENo
YXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAg
ICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjIsMTUgKzkwNSwxMyBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRp
dGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93
T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMs
IHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKQEAgLTcyNCwxMyArMTA2NSw2NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlv
bkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2Fz
dDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9u
KSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJh
dGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBl
bWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2Zp
bGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxP
cE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQ
cm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9w
PgorYm9vbCBKSVQ6OnRyeUVtaXRMT0xCaXRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKCF1c2VMT0wo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBhdXRvIGJpdE9w
ID0gWyZdIChHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRU
ZW1wLmdwcigpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJp
dGFuZD4pCisgICAgICAgICAgICBhbmQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJpdG9yPikKKyAg
ICAgICAgICAgIG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXR4b3I+KQorICAgICAgICAgICAg
eG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BMc2hpZnQ+KQorICAgICAgICAgICAgbHNoaWZ0MzIo
bGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChz
dGQ6OmlzX3NhbWVfdjxPcCwgT3BVcnNoaWZ0PikKKyAgICAgICAgICAgIHVyc2hpZnQzMihsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZV92PE9wLCBPcFJzaGlmdD4pCisgICAgICAgICAgICByc2hpZnQzMihsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBzZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUik7
CisgICAgfTsKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBv
cDEgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
R1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5n
cHIoKTsKKyAgICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKG9wMikpIHsKKyAgICAgICAgSW50MzJD
b252ZXJ0aW5nT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEludDMyQ29udmVy
dGluZ09wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAgICBi
aXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRp
ZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5h
bWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MSwxNyArMTEzNSw4IEBAIHZvaWQgSklUOjplbWl0
Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCisgICAgaWYgKHRy
eUVtaXRMT0xCaXRGYXN0UGF0aDxPcD4oY3VycmVudEluc3RydWN0aW9uKSkKKyAgICAgICAgcmV0
dXJuOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kOwpAQCAtNzYwLDMzICsxMTQ1LDEwNiBAQCB2b2lkIEpJVDo6ZW1pdEJp
dEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50
MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9w
ZXJhbmRDb25zdGFudEludChvcDIpKTsKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAgIC8vIE9PUFM6IGdldCBz
b21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxh
Y2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisK
KyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3Mp
OwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAotICAgIFNuaXBwZXRHZW5lcmF0
b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogCisgICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9w
ZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2Ny
YXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJU
KGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlz
KTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3Mu
Z3ByKCksIHJlc3VsdCk7CisKICAgICBpZiAocHJvZmlsaW5nUG9saWN5ID09IFByb2ZpbGluZ1Bv
bGljeTo6U2hvdWxkRW1pdFByb2ZpbGluZykKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MuZ3ByKCkpOwogCi0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBp
c1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikp
CisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5OworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwg
U3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0SXNJbnQzMiA9IGZhbHNlOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAgICAgICAgICAgcmVzdWx0
SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BS
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGFkZCBhIGNhc2UgZm9y
IEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihpbnB1
dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3VsdEdQUik7CisgICAgICAgIGJveElu
dDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAocmVzdWx0SXNJbnQzMikKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7IAorICAgICAgICBlbHNlCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsg
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vsc2UKQEAgLTgwMyw3ICsx
MjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aQogCiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdzKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRh
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0OSwxOSArMTMw
Nyw4IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxl
ZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0gICAgRlBSUmVnIHNjcmF0
Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSAgICBGUFJSZWcgc2Ny
YXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExPTEJpdEZhc3RQYXRo
PE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAKICAgICBTbmlwcGV0
T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBA
IC04NzMsMjEgKzEzMjAsNzcgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29u
c3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFsaWRGUFJSZWc7CisKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRl
bXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9w
MSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1
bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1w
RlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAg
ICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAg
ICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgc2Ny
YXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmlnaHRTaGlmdEdlbmVyYXRvciBnZW4o
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgc25pcHBldFNoaWZ0
VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIyLCBzbmlw
cGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAg
IEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3Mp
OworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3By
KCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1
YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUlu
dEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkg
PSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQs
IHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcnNoaWZ0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIsMTggKzE0MDUsNjYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRk
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAq
dGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIG1vdmUobGhzLmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6
T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkp
OworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBhZGREb3VibGUobGhz
LmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsg
KnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7Cisg
ICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAg
ICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9j
YXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxP
cEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxl
ZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9w
dGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxl
ZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxNDc1LDM1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhOZWdhdGUgYmVu
ZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KLSAgICAv
LyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcg
cmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIEpTVmFs
dWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc3JjVGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNyY1RlbXAuZW1wbGFjZSgq
dGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
VGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZp
dHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KKyAgICAgICAg
Ly8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5n
IHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc3JjUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3Jj
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0MSwxOSArMTUxMiwyMiBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAKICAgICBtYXRoSUMt
Pm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKLQogICAg
IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVj
dGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBib29sIGdlbmVyYXRl
ZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3Jj
UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2Fz
ZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtOTYz
LDcgKzE1MzcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAog
ICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVz
dWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0
LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJ
bnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rp
b24+CkBAIC05NzQsMzkgKzE1NTUsODIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJp
bmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25k
KCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRP
cGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVs
c2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5z
ZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
OworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0g
ZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJS
ZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0
aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOwogI2Vsc2UKICAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBS
ID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAot
ICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZp
cnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJh
bmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghR2Vu
ZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAg
ICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQp
KSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAg
ICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAg
ICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNl
dENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworICAgICAgICByZXN1bHRU
ZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBG
UC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBG
UC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2Ny
YXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICBy
aWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXND
b25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghR2Vu
ZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KIAot
ICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3Bl
cmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwg
c2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVy
YXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmln
aHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAg
CiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25z
dGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5l
U3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3ICsxNjM5LDM0IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0gICAgICAgIGlmIChsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQot
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAg
ICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAg
ICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgICAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICAgICAgZWxzZSBpZiAo
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAgICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0g
ICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtMTAzNSwxMSArMTY3Niwy
MCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgfSk7CiAj
ZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJl
Z3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVz
dWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1l
X3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNIZWFw
VG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVj
Qnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5j
dGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9u
IHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUg
PSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1
Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9
IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE2OTgsOCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVS
ZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpAQCAtMTA4NSw3ICsxNzM1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0
Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9u
KQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJl
bnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE3NDUsNiBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxz
ZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
LSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAogICAg
IFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0
KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE3NTUsMzYgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xl
ZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0
T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGVsc2UgaWYgKEdlbmVyYXRv
cjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVz
dWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUMyA6IHJlZ1QyIH07CisgICAgfSBl
bHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJh
bmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0UmVn
cy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07
CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNs
b3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xl
ZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1Jp
Z2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgaWYgKGFyaXRoUHJv
ZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBAIC0xMTU2LDIzICsxODE3LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5k
aWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
aXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotCiAgICAgU25pcHBl
dE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAg
ICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNl
Y29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTgzMiwyMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2
KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29u
c3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3Bl
cmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJS
ZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0
aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAg
IHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hU
ZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAg
ICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAg
ICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAg
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRG
UFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxl
ZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
Ci0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNo
RlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
CiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAgICAgICBnZW4uZW5kSnVtcExp
c3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwg
cmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCks
IHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5lbXB0eSgpKTsKICAgICAg
ICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CisgICAgICAgIHdpbGxEZWYocmVzdWx0KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
MiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkg
PSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CiAgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsK
KworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygp
IHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAg
ICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1w
IHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7
CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAg
ICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisgICAgICAgICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzR1BSLCBsaHNGUFIpOworICAgICAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQUiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAg
ICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAg
c2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShF
eGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihMZXNzVGhhbiwgbGhzR1BSLCBUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZl
WmVybywgYnJhbmNoMzIoTGVzc1RoYW4sIHJoc0dQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAg
ICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMg
eyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1
bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAg
ICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVy
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAgICAg
ICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1
bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNG
UFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklU
TXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0
aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4o
bXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXpl
KTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOwor
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5k
aWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNG
UFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigp
KTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCks
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1f
ZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNv
ZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5n
cHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQz
MihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAg
IERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5m
cHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsK
KyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMu
ZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xv
dzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAK
IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBP
UF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpA
QCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2Fs
bEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5p
dGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMg
Y2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29k
ZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5LDEx
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3Qo
Y29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdD4oY3VycmVudEluc3Ry
dWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxD
YWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nv
bnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENv
bnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
ICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0Pihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2lj
YWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBl
ciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biBy
ZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJl
Z2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0
aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFu
Y2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAg
KzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAg
Ly8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwotICAgIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hlY2tw
b2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgp
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50U2xvdy5hcHBlbmQoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2xv
d0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMsIHJlZ1QwIH07CisgICAg
ICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUo
Ynl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9u
ZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAgZmFzdENhc2UubGluayh0aGlz
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkp
OwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFd
LmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1w
TGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZv
ckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91
bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBj
aGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVt
cCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOwogCkBAIC00NzYsMzcgKzQ5
OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92
ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNo
ZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAgICBSZWdpc3RlclNldCBw
cmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwot
ICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAg
dXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25l
R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAg
ICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIHNsb3dD
YXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsKKworICAgICAgICB3aWxs
RGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAg
ICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAgSnVtcExpc3QgaXRlcmF0
aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAorICAgICAgICBKdW1w
TGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgdmFsdWVDaGVja3Bv
aW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNl
Lmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgd2lsbERlZihieXRlY29kZS5t
X3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVH
UFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZh
bHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CkBAIC01MTUsMTAg
KzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBm
YXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0
ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1NSw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVn
ID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1Qy
OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1
bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogICAgICAg
ICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAg
LTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25z
CiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAg
ICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRDb2RlOjp0eXBlTmFtZShKSVRUeXBlIGpp
CiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgor
ICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAg
IHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwOCw3ICsxMTAs
NyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29kZVJlZihDCiAKIEpJVENvZGVX
aXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZigpCiB7Ci0gICAgaWYgKChPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkgJiYgT3B0aW9u
czo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQorICAgIGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgKGlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNz
ZW1ibHkoKSkpCiAgICAgICAgICYmIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSkKICAgICAgICAg
ZGF0YUxvZygiRGVzdHJveWluZyBKSVQgY29kZSBhdCAiLCBwb2ludGVyRHVtcChtX3JlZi5leGVj
dXRhYmxlTWVtb3J5KCkpLCAiXG4iKTsKIH0KQEAgLTIzNyw2ICsyMzksMTEgQEAgTmF0aXZlRE9N
SklUQ29kZTo6TmF0aXZlRE9NSklUQ29kZShDb2RlUgogI2lmIEVOQUJMRShKSVQpCiBSZWdpc3Rl
clNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KQogeworICAgIC8vIEZvciBCYXNlbGlu
ZSBKSVQsIHRoaXMgaXMgdHJpdmlhbGx5IHRydWUuCisgICAgLy8gRm9yIExPTCBKSVQsIGV2ZXJ5
dGhpbmcgaXMgYWxyZWFkeSBzcGlsbGVkIHRvIHRoZSBzdGFjayBhdCBlYWNoIG9wY29kZSwgc28g
d2hlbiB3ZQorICAgIC8vIGdvIHRvIHRoZSBvcF9jYXRjaCwgdGhlIGxpdmUgc3RhdGUgbXVzdCBh
bHJlYWR5IGJlIGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUgc3RhY2suCisgICAgLy8gQWxzbywg
b3BfY2F0Y2ggaGFzIG5vIGluY29taW5nIHJlZ2lzdGVyL3R5cGUgcHJvb2Ygc3RhdGUsIHNvIGl0
J3MgdHJpdmlhbCB0byBjYXRjaAorICAgIC8vIGFuIGV4Y2VwdGlvbiBpbiBMT0wganVzdCBieSBq
dW1waW5nIHRvIG9wX2NhdGNoLgogICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYs
NyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90IHsKICAgICBIb3N0Q2FsbFRodW5rLAog
ICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxpbmVKSVQsCisgICAgTE9MSklULAogICAg
IERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02NywzNiArNjgsMjMgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJVFR5cGUpOwogCi0gICAgc3RhdGljIEpJ
VFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewotICAgICAgICByZXR1cm4gSklUVHlwZTo6QmFz
ZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBKSVRUeXBlIHRvcFRpZXJKSVQoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRUeXBlKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6REZHSklUOwotICAgICAgICBjYXNlIEpJVFR5
cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpGVExKSVQ7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAg
ICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0KEpJVFR5cGUgaml0VHlwZSkKICAgICB7
CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6
CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAg
ICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgorICAgICAg
ICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVu
azoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6
REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTExNiw2ICsxMDgsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpC
YXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIGNhc2Ug
SklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDYgKzExNywyNCBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoSklU
VHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgICAg
IGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpC
YXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNh
c2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBzdGF0aWMgYm9vbCBpc0xvd2VyVGllcihKSVRU
eXBlIGV4cGVjdGVkTG93ZXIsIEpJVFR5cGUgZXhwZWN0ZWRIaWdoZXIpCiAgICAgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpc0V4ZWN1dGFibGVTY3JpcHQoZXhwZWN0ZWRMb3dlcikpOwpAQCAt
MTQ1LDkgKzE1NiwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXNMb3dlck9y
U2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRIaWdoZXIpOwogICAgIH0KKworICAgIHN0
YXRpYyBib29sIHVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhKSVRUeXBlIGppdFR5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9
PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CisgICAgfQog
ICAgIAogICAgIHN0YXRpYyBib29sIGlzT3B0aW1pemluZ0pJVChKSVRUeXBlIGppdFR5cGUpCiAg
ICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlw
ZSA9PSBKSVRUeXBlOjpGVExKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNERkdPckZUTChKSVRUeXBlIGppdFR5cGUpCisgICAgewog
ICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBK
SVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3
ICs2NSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSogY2EKICAgICAg
ICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFjaGluZSBmcmFtZSBpcyB1
dHRlcmx5IG1lYW5pbmdsZXNzCiAgICAgICAgIC8vIGFuZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cu
IE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdldAogICAgICAgICAvLyBp
biB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoIUpJVENv
ZGU6OmlzREZHT3JGVEwoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkKICAgICAg
ICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlu
c3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CiAjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRk
cmVzcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhz
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE0NSw2ICsx
NDYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8g
T09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBk
b24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1
Nyw2ICsxNTksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxs
IHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKQEAgLTE2NywyNSArMTcwLDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAo
aXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpo
YXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNywyNyArMTkxLDM2IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwg
dGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVt
cCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3Vs
dCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAg
IAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRl
Y29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAg
bV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1bHQpOworICAgICAgICBt
X3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5s
YXN0KCkuZHN0ID0gZHN0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5k
KEp1bXBMaXN0IHsgfSk7CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBq
dW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwg
UmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAot
ICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1f
c2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOwor
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3Vs
dCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBK
dW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5
LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRl
Y29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQor
ICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC00
MDYsMTEgKzM5OSw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0
KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKQEAgLTcx
Nyw2ICs3MDUsMTggQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAog
ICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdGlvbj4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRTbG93T3AoRnVuY3Rpb24gZnVu
Y3Rpb24sIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QsIFNwZWN1bGF0ZWRUeXBlIGRzdFR5cGUpCit7CisgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIGZ1bmN0aW9uKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgIGlmIChtX3VzZUxP
TCAmJiBkc3QuaXNWYWxpZCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IGRzdFR5cGU7
CisgICAgICAgIHdpbGxEZWYoZHN0KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRN
YXRoSUMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgICAgICB9OwogCi0gICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpOworICAgICAgICBi
b29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2st
PmppdFR5cGUoKSk7CiAKICAgICAgICAgaWYgKG1fZ2VuZXJhdGVGYXN0UGF0aE9uUmVwYXRjaCkg
ewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAg
LTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0
YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2
LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
ICNpbmNsdWRlICJKU0Nhc3QuaCIKQEAgLTQxLDYgKzQyLDggQEAKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC01MSw2ICs1NCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAvLyBPT1BTOiBJZiB3ZSBjaGFuZ2UgcmVnYWxsb2Mgc3VjaCB0aGF0IHRo
ZXJlIGNhbiBiZSBOIHJlZ2lzdGVycyBwZXIgbG9jYWwsIHdlIGNhbiBtYWtlIHRoaXMgc3VjaCB0
aGF0IHdlIGRvbid0IG5lZWQgdHdvIHJlZ3MuCisgICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgp
ICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJl
cigpKQpAQCAtOTAsMzIgKzExNSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2Jq
ZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0
ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBy
ZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRUZW1w
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWcg
PSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVt
cC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJl
ZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYg
KCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0
cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9y
Ojpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Q
cm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0
LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTI1LDIzICsxNzEsNTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2Rl
Lm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBi
eXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3Bl
cmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsK
KyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUp
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNvbnN0cnVj
dG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBo
YXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAg
Y29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNl
R1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1i
b2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVl
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkp
KTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWws
IGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9y
R1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJv
dW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgY3VzdG9t
aGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjI0LDkzIEBAIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJv
dG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQg
dmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAg
Zm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdl
IGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVn
VDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11
c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJv
bC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZh
bHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQot
ICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
Ci0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVn
VDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
LSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAg
ICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
cHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAg
R1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNj
cmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHBy
b3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAg
ICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHBy
b3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dD
YXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcHJvdG9UZW1w
LmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXAtPmdwcigpOworCisg
ICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwor
ICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0Zv
clN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1
ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdw
cigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5k
cyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJz
LgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBk
b25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3Vs
dC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgICAgIAorICAgICAg
ICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAt
IHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2Uu
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKworICAgICAg
ICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1
ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAgICByZWdUMywgcmVnVDQp
OyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAg
ICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICAKICAgICBK
SVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZklu
ZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8o
KS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVj
dGlvbiopCkBAIC0xOTksMTEgKzMyNSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShj
b25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYg
KCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBh
cmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisK
KyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMjExLDI4ICszNTUsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENl
bGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAg
ICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8g
aXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdXRvIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIs
IHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQ
Uik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIo
RXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191
bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMjQxLDEzICs0MjksMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251
bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAo
IShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDAp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDYzLDM1IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0
ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
LCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BSLCByZXN1bHRHUFIpOwor
I2Vsc2UKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisj
ZW5kaWYKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY4LDExICs0OTks
MjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUp
ICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgdGVzdDY0KE5vblpl
cm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVn
VDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0yODIsMjEgKzUyOSw1NiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0lu
dFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
aWdJbnQzMlRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7
Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5r
KHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAg
ICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8g
aWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50
KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMxMywxOCArNTk1LDQ3IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAg
ICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwg
cmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTMzMywxOCArNjQ0LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0
cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09iamVjdCkpCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgaWYgKCEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkpCisgICAgICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAg
ICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKwor
ICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgY29t
cGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RD
ZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0
VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzU1LDcgKzcwOSwx
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBS
ZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CkBAIC0zNjksMTUgKzcyOCw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29u
c3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAg
ICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZl
KSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJv
dmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
c3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOworICAgICAg
ICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0gc3JjKQorICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0zODYsNTIgKzc3MSwyMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlf
a2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYg
fihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2
YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
c3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgbW92ZSh2
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNy
Yyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcg
PSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChT
cGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3Bl
Y1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVu
Y3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9u
YW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAg
ICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0
RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVj
dWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgewor
ICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAg
dGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUodmFsdWUpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAg
RlBSVGVtcCB0ZW1wRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyB2YWx1ZUZQUiA9
IHZhbHVlVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gdGVtcEZQ
Ui5mcHIoKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub25aZXJvID0gYnJhbmNoRG91Ymxl
Tm9uWmVybyh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbm9uWmVy
by5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcih2
YWx1ZSkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhpcyB9OworICAgICAgICAg
ICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWVUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZwcigpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5v
blplcm8gPSBicmFuY2hEb3VibGVOb25aZXJvKHZhbHVlRlBSLCBzY3JhdGNoRlBSKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBub25aZXJvLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2hHUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCB2
YWx1ZUZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhpcyB9
OworICAgICAgICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGludmVydCA9IHRydWU7
CisgICAgICAgICAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCptX3ZtLCBKU1ZhbHVlUmVn
cyB7IHZhbHVlVGVtcC5ncHIoKSB9LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIuZ3ByKCksIHZhbHVl
RlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW52ZXJ0KTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3
YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xl
YXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNl
IG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlw
IHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShm
YWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0
cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNo
IHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgor
ICAgICAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwg
YWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNv
bnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9
IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVh
bihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
Y29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BS
LCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9
OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2Ny
YXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5n
cHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVl
R1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBS
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KK30KIAotICAgIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3Rl
eHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29k
ZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0
aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlv
biB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhp
cywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVz
dGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
T09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gx
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsK
KyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAg
ICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0s
IHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAs
NDYgKzk5NCwxMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Ywog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNy
YywgaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAg
ICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0
Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2Fz
ZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgor
ICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3Jh
dGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBp
bW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKKworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5r
KHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAg
ICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAor
CisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30K
IAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFz
cXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFu
ZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAK
LQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhl
cihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0
Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmpl
Y3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAg
ICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2Fz
ZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAg
IAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgs
MTAgKzExMjUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxz
ZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUwMCwxMCArMTE1MywyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE4NCw0NDIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5p
c0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwo
KSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7
Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3Vs
YXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAgICAgICAgICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAg
ICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICAgICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVh
bCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIu
YXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorc3RhdGljIHZvaWQgY29tcGFyZVN0cmlu
Z3MoSklUJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgbm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1Bh
dGgsIEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIsIEdQUlJlZyBsaHNUZW1wR1BSLCBHUFJS
ZWcgcmhzVGVtcEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEdQUlJlZyBzY3JhdGNoMkdQUikKIHsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGxoc0dQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIGxoc1Rl
bXBHUFIpOworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc0dQUiwg
SlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJoc1RlbXBHUFIpOworCisgICAgc2xvd1BhdGgu
YXBwZW5kKGppdC5icmFuY2hJZlJvcGVTdHJpbmdJbXBsKGxoc1RlbXBHUFIpKTsKKyAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwocmhzVGVtcEdQUikpOworCisg
ICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNUZW1wR1BSLCBTdHJpbmdJ
bXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIAorICAgIG5vdEVx
dWFsLmFwcGVuZChqaXQuYnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3RyaW5nSW1w
bDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLAorICAgICAgICBzY3JhdGNoR1BSKSk7CisgICAgCisg
ICAgZXF1YWwuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNj
cmF0Y2hHUFIpKTsKKyAgICAKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMigK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsK
KyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIs
IFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKyAgICAKKyAgICBqaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpkYXRh
T2Zmc2V0KCkpLCBsaHNUZW1wR1BSKTsKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCByaHNUZW1wR1BS
KTsKKyAgICAKKyAgICBhdXRvIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAKKyAgICBqaXQuc3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CisKKyAgICB7
CisgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGxoc1RlbXBHUFIs
IHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHNjcmF0Y2gyR1BSKTsKKyAg
ICAgICAgYXV0byBtYWNyb1NjcmF0Y2ggPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAg
IERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmhzVGVtcEdQUiwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgbWFjcm9TY3JhdGNoKTsKKyAg
ICAgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHNjcmF0Y2gyR1BSLCBtYWNyb1NjcmF0Y2gpKTsKKyAgICB9CisgICAgCisgICAgaml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxv
b3AsICZqaXQpOworICAgIGVxdWFsLmFwcGVuZChqaXQuanVtcCgpKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCitzdGF0
aWMgdm9pZCBjb21wYXJlU3RyaWN0RXFDZWxscyhKSVQmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBub3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgR1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQ
UiwgR1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyByaHNUZW1wR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgR1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgZXF1YWwuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgbGhzR1BS
LCByaHNHUFIpKTsKKworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZIZWFwQmlnSW50
KGxoc0dQUikpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZIZWFwQmlnSW50KHJo
c0dQUikpOworCisgICAgYXV0byBsaHNJc1N0cmluZyA9IGppdC5icmFuY2hJZlN0cmluZyhsaHNH
UFIpOworICAgIG5vdEVxdWFsLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgIGxoc0lzU3RyaW5n
LmxpbmsoJmppdCk7CisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2hJZk5vdFN0cmluZyhy
aHNHUFIpKTsKKworICAgIGNvbXBhcmVTdHJpbmdzKGppdCwgZXF1YWwsIG5vdEVxdWFsLCBzbG93
UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXBHUFIsIHJoc1RlbXBHUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQg
SklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAg
IEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0
ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/
IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1
YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBl
KHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVG
YWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAg
ICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBDZWxsT3Bl
cmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhz
VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9i
amVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNv
bXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhz
R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAg
ICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIp
OworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAg
ICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVt
cCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsK
KworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBub3RF
cXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICBjb21w
YXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNH
UFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBk
c3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7
CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFy
ZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1Rl
bXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJl
LgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qg
c2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQ
UikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
IH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEFT
U0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9v
bCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYgKCFpc0VxKQorICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENl
bGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJo
cykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BS
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAg
ICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHJoc1Rl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAg
ICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAg
ICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgY29tcGFyZVN0cmluZ3Mo
KnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1w
LmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdw
cigpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAg
aWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGVxdWFsLCB0YXJnZXQpOworICAg
ICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGFkZEp1bXAobm90RXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BSKSk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICBEb3VibGVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnBy
KCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBhZGRK
dW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU51bWJlcihyaHMpKSB7CisgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFy
ZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9P
UFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1
ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0
aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7Cisg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAg
ICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAg
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRk
SnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhz
R1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJo
c0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7
CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7
CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVx
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVz
dGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVt
aXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGpl
cUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQorCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BS
UmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQor
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5j
aCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAg
IGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
eXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQ
UiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAg
ICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9v
cF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODks
NzQgKzE2MzUsMjQwIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5
dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5v
dEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9y
ZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3Zl
blR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1
ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxs
KHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BD
b21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAg
ICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworCisgICAgICAg
ICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1
YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgICAgICAg
ICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BS
LCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVl
IDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0
IGVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAg
ICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgICAg
IGNvbXBhcmVTdHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBs
aHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAu
Z3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVl
IDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1w
LmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAg
ICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1i
ZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1w
LmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhz
RlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
T09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSVGVtcCBsaHNT
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzU2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIGxoc1NjcmF0Y2hHUFIgPSBsaHNT
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc1NjcmF0Y2hHUFIgPSByaHNTY3Jh
dGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKIAogI2lmIFVTRShCSUdJ
TlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBi
ZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkK
LSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0g
ICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwg
fHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBkb25lOgotICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50
cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFu
Y2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2Ug
dXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRo
YXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxs
IG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYg
aXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhp
Z2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8
PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsK
LSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7
Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNv
dmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAg
Ly8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVy
ZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3Ro
IGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KGZhbHNlKTsKKyNlbHNlCiAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0g
ICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVn
VDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1Q1KTsKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgSnVt
cExpc3Qgbm90RXF1YWw7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxo
c0lzQ2VsbCA9IGJyYW5jaElmQ2VsbChsaHNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gYm90
aE5vdENlbGxzID0gYnJhbmNoSWZOb3RDZWxsKHJoc0dQUik7CisgICAgICAgICAgICAgICAgbm90
RXF1YWwuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBsaHNJc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJo
c0dQUikpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAg
ICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1Bh
dGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNTY3JhdGNoR1BSLCByaHNTY3JhdGNoR1BSLCB0ZW1wR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKwor
ICAgICAgICAgICAgICAgIGJvdGhOb3RDZWxscy5saW5rKHRoaXMpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0
ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAg
ICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAgIEp1bXAgbGVmdE9LID0g
YnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIobGhzR1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAg
ICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5s
aW5rKHRoaXMpOworCisgICAgICAgICAgICBpZiAoaXNFcSkKKyAgICAgICAgICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wTGlzdCBkb25lOworICAgICAgICAgICAg
ZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5k
KGp1bXAoKSk7CisKKyAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7
CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsK
KworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChh
c3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENl
bGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBkb25lOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1w
bGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmds
ZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQg
aWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0
cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkg
dG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAor
ICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwg
YmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVz
IGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAg
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qy
KTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKKworICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNl
bGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwg
cmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJl
Y2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUg
c2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBK
U1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cg
aWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJl
Z1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZD
ZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBG
aXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVz
dAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZklu
dDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAg
IGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVn
VDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRP
Sy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRv
IGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9y
NjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qy
KSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3Qg
dGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAg
ICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJ
ZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDAp
KTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNjc0LDY4ICsxODg2LDIwMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFK
dW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEp
OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVx
OworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNF
cSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERv
dWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAg
ICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJo
cykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAg
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNH
UFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1i
b2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkg
eworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdw
Q29tcGFyZSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAg
ICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsK
KyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgICAgIEdQ
UlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCByaHNUZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAg
ICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywgZXF1YWwsIG5vdEVxdWFs
LCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCks
IHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGlmIChpc0VxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAq
dGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsg
KnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAg
ICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0
aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVt
cCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAyIHsgKnRoaXMgfTsKKworICAg
ICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNTY3JhdGNo
R1BSID0gbGhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNTY3JhdGNoR1BS
ID0gcmhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAyLmdwcigpOwogI2lmIFVT
RShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERv
dWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAg
ICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQot
ICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAg
Ly8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBE
b3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQg
YmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1i
ZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRo
ZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwg
aGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVu
IDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5
IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAg
YWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1
KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJv
dmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2
NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0g
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUg
aXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdU
MSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVj
aXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBz
bG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAg
ICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbGVmdElzQ2VsbCA9IGJyYW5jaElm
Q2VsbChsaHNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gYm90aE5vdENlbGxzID0gYnJhbmNo
SWZOb3RDZWxsKHJoc0dQUik7CisgICAgICAgICAgICAgICAgbm90RXF1YWwuYXBwZW5kKGp1bXAo
KSk7CisKKyAgICAgICAgICAgICAgICBsZWZ0SXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgbm90RXF1YWwuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyaHNHUFIpKTsKKworICAgICAg
ICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJp
Y3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQ
UiwgbGhzU2NyYXRjaEdQUiwgcmhzU2NyYXRjaEdQUiwgdGVtcEdQUiwgdGVtcDJHUFIpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGJv
dGhOb3RDZWxscy5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBK
dW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50
ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAgICAgLy8gaWYgaXQn
cyBhIGRvdWJsZS4KKyAgICAgICAgICAgIGF1dG8gbGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNH
UFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7Cisg
ICAgICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHRPSyA9
IGJyYW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJoc0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChlcXVh
bCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVh
bCwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGFkZEp1bXAobm90
RXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewotICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0aGlzKTsKLSAgICB9Cisj
aWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3Vt
aW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlm
IChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOworICAgICAgICBpZiAobGVm
dCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7Cisg
ICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFn
bWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRo
IGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSBy
ZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAg
Ly8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGlu
ZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0
cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8
NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5
IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdU
NSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkp
OworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
KyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisKKyAgICAgICAgbW92ZShy
ZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEg
Y2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBw
cmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRo
ZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CiAjZWxzZSAvLyBp
ZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8g
Y292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEs
IHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8v
IEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBp
bnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRv
dWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0g
ICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYg
KHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVt
cChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7Cisg
ICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncyku
CisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAv
LyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4g
aW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdz
IGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0
T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAg
IHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsyMDk1LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5z
dHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJp
Y3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQ
UlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0K
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2Fz
ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVn
VDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
bnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0
R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51
bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNv
ZGVOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNy
YyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQot
ICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0g
anVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShz
cmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgeworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIo
c3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNy
YywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBl
bHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
I2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051bWJlciA9IGJyYW5jaElm
TnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Qmln
SW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAg
ICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgICAgICB9Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1
bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlz
QmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBk
c3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMp
KSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDAp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVn
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJl
ZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0g
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBt
b3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAg
ICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisgICAgcmVzZXRDdXJyZW50QmxvY2tT
dGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxs
b2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC04ODgsOSArMjM3NCwy
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAg
ZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJv
dmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxs
LgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9Owor
ICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVyOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC05MDUsOSArMjQwNSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
aW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBU
YWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBy
ZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBp
bnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsyNDMwLDE3IEBAIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQs
IFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJs
ZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0
aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hh
cldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC05MzgsOTMgKzI0NTQsMTQ3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9z
dHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFi
bGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAg
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIu
CiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdU
MCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVn
VDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0
cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lk
IEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3Nh
bWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1
YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAg
IENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1w
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21w
YXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwg
c2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOworICAgICAgICBKdW1wIHdh
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAg
ICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9w
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAg
IHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQor
fQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0
aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90
RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7
Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
cU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAgIC8vIE9PUFM6IGFzc2Vy
dCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBj
YW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRo
ZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBz
dGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8g
b2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBj
b3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVC
bG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBq
IDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikgewor
ICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAg
ICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUp
KTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJs
ZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9j
ayk7CiAKQEAgLTEwMzUsMjMgKzI2MDUsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3Bl
KGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1Qw
KTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBzY29wZSA9IHJl
Z1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBz
Y29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFk
YXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIGF1dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2Vj
bWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoaXNTdHJp
Y3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3Bl
Y09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0
cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5v
dENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2lu
Y2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShw
cm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkg
JiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAg
ICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0
byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAg
ICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAg
ICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiks
IHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4
KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisK
KyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAgICAgICAgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3Jj
RHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/Cisg
ICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxP
YmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBy
ZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFs
T2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTA1OSw2ICsyNjk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMo
Y29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxs
ZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRl
QmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRD
YWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklE
IHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI3MDksMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rp
b25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJU
ZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUp
OworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBn
cHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVy
YW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAg
ICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcg
PSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigp
OworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAg
cmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
Y2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBy
YXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0
YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2
NCArMjc1MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHoo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBj
YXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFs
UmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghIShwcm92ZW5UeXBl
KHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRo
ZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTExNjIsOCArMjc5NiwxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjpl
bWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CisgICAg
cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIg
d2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNG
b3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emlu
Z0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRl
IGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAgIHVpbnQ2NF90KiBwdHIg
PSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAg
IGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFu
Y2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21J
bmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjgyNCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRp
bWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVP
clJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1l
KTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9i
eXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI4NDEsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVk
RW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhp
cyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFS
QU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjg2Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50
KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOwogfQogCkBAIC0xMjQ1LDggKzI4NzcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9i
amVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1Jl
Z2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8
UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1p
dFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjg5OCw0MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmND
b21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
CisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3Bl
LmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNj
b3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBs
YWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+
Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsK
ICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRl
Y2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
c2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7
CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2Vu
ZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlv
bjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI5NjIsNDYgQEAgdm9pZCBKSVQ6OmVtaXROZXdG
dW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICBzY29w
ZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVzZXQoKTsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwg
ZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNl
IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVu
Y19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAg
ICB9CiB9CiAKQEAgLTEzNDksOSArMzAzMiwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJy
YXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAg
ICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZh
bHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAg
IEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5l
bXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdw
cigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
QXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICszMDUz
LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJ
bmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFyZ0dQUiA9PSByZXR1cm5WYWx1ZUdQUik7CisgICAgfQorCisgICAgLy8gT09QUzogSW5s
aW5lIHRoZSBhbGxvY2F0aW9uIHBhdGggaGVyZSwgaXQgbWF0dGVycyBmb3Igc3Vuc3BpZGVyLWNy
eXB0by1hZXMKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEu
bV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdU
MSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIGFyZ0dQUik7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRh
ZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwxNSArMzA4OSwzNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsg
KnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0
aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2Up
KQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BS
LCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1
cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0
MDksNiArMzEzOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgK
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQ
YXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzMxNjcsOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVt
ZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhl
cmU/CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMzE5NCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUo
cHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAg
YmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVz
IGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOwor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwogICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xv
d0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0x
NDc4LDEzICszMjExLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4
ZWQKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1f
Ynl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwor
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAs
MzcgKzMyNDQsODEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
ZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJh
c2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZh
bHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
LQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0g
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKIAotICAgIC8vIE90aGVyd2lzZSBpdCdz
IG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSks
IHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0
aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4g
aW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisg
ICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YjMyKEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihv
ZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAg
IAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMg
YSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAg
IC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihl
bnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIC8vIENvbXB1dGUg
dGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7
CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hl
ZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQor
ICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
IHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVnMzIocmVnVDEpOworICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBpbnQzMl90IG9m
ZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVy
Zmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAg
ICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEg
KzMzMjgsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAg
IFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1
Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5k
ZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3Bl
cmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5k
ZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1w
bGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4
R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0
b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOwor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAg
fQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAg
IHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAK
ICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSArMzM4Miw1MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JH
UFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBL
bm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRo
aXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVy
YXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5n
cHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSBy
ZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIg
PSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorCisgICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCBy
ZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGlu
ayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRj
aEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE1OTgsNiArMzQzNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlw
ZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2Rl
Lm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1w
TGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzM0OTgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNh
bGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9u
QXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHBy
b2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiAr
MzUxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlj
a2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUo
KTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAh
PSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2Vu
VGFpbD4oKTsKQEAgLTE2ODQsNiArMzUzMCwxOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaQogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3Zv
aWQgSklUOjplbWl0SXNDYWxsYWJsZUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOwor
ICAgICAgICBhdXRvIGlzRnVuY3Rpb24gPSBicmFuY2hJZkZ1bmN0aW9uKGlucHV0R1BSKTsKKyAg
ICAgICAgYXV0byBub3RPYmplY3QgPSBicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUik7CisgICAg
ICAgIAorICAgICAgICBhdXRvIHNsb3dQYXRoID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IE92ZXJyaWRlc0dldENhbGxEYXRhKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIAorICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNGdW5jdGlv
bi5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRy
dWUpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2FsbGFibGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0SXNDYWxsYWJsZUltcGw8
T3BJc0NhbGxhYmxlPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBlbWl0SXNDYWxsYWJsZUltcGw8T3BUeXBlb2ZJc0Z1bmN0aW9uPihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVjdD4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBh
dXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisgICAgICAgIAorICAgICAgICBh
dXRvIGlzTnVsbCA9IGJyYW5jaElmRXF1YWwoSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9LCBqc051
bGwoKSk7CisgICAgICAgIGF1dG8gaXNOb25OdWxsTm9uQ2VsbCA9IGp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGlzRnVuY3Rpb24gPSBi
cmFuY2hJZkZ1bmN0aW9uKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBub3RPYmplY3QgPSBicmFu
Y2hJZk5vdE9iamVjdChpbnB1dEdQUik7CisgICAgICAgIAorICAgICAgICBhdXRvIHNsb3dQYXRo
ID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IE92
ZXJyaWRlc0dldENhbGxEYXRhKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgIAorICAgICAgICBpc051bGwubGluayh0aGlzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNOb25OdWxsTm9u
Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBpc0Z1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAg
IG5vdE9iamVjdC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5
dGVjb2RlLm1fdmFsdWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAq
dGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25l
OworICAgICAgICBKdW1wIHNsb3dQYXRoOworICAgICAgICBlbWl0VHlwZU9mKAorICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9LCByZXN1bHRHUFIsCisgICAgICAgICAgICBbJl0g
KFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Rocm91Z2gpIHsKKyAgICAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV92bS0+c21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGlmICghZmFsbHNUaHJvdWdoKQorICAgICAgICAg
ICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIFsmXSAoSnVtcCB0aGVTbG93UGF0aCkgeworICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
dGhlU2xvd1BhdGg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNTdHJpbmc7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVu
Z3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGxv
YWQzMihBZGRyZXNzKGlucHV0R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRM
ZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNv
ZGUubV9zeW1ib2xUYWJsZSkpOworICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKTsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBpZiAoc3ltYm9sVGFibGUtPnNpbmdsZXRvbigpLmlzU3RpbGxWYWxp
ZCgpKSB7CisgICAgICAgICAgICBlbWl0U2xvd09wKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudCwgY3VycmVudEluc3RydWN0aW9uLCBkc3QsIFNwZWNPYmplY3RPdGhlcik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgc2Nv
cGVUZW1wIHsgKnRoaXMsIHNjb3BlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBzY29wZUdQ
UiA9IHNjb3BlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxVGVtcC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDJUZW1wLmdwcigpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3du
U2l6ZTxKU0xleGljYWxFbnZpcm9ubWVudD4oCisgICAgICAgICAgICAqbV92bSwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0
cnVjdHVyZSgpKSwgYnV0dGVyZmx5LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsCisgICAgICAg
ICAgICBzbG93UGF0aCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKHN5bWJv
bFRhYmxlKSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBEb24ndCBuZWVkIGEgbWVtb3J5IGJhcnJpZXJz
IHNpbmNlIHdlIGp1c3QgZmFzdC1jcmVhdGVkIHRoZSBhY3RpdmF0aW9uLCBzbyB0aGUKKyAgICAg
ICAgLy8gYWN0aXZhdGlvbiBtdXN0IGJlIHlvdW5nLgorICAgICAgICBzdG9yZVB0cihzY29wZUdQ
UiwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSk7CisgICAgICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc3ltYm9sVGFibGUpLCBBZGRyZXNzKHJlc3VsdEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mU3ltYm9sVGFibGUoKSkpOworICAgICAgICAg
ICAgCisgICAgICAgIC8vIE11c3QgaW5pdGlhbGl6ZSBhbGwgbWVtYmVycyB0byB1bmRlZmluZWQg
b3IgdGhlIFREWiBlbXB0eSB2YWx1ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsgKytpKQorICAgICAgICAgICAgc3RvcmVUcnVzdGVk
VmFsdWUoaW5pdGlhbFZhbHVlLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGUoU2NvcGVPZmZzZXQoaSkpKSk7CisgICAgICAgIAorICAgICAg
ICBtdXRhdG9yRmVuY2UoKm1fdm0pOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBl
bHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29u
dHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzAy
LDExICszNzM1LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50
Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdU
MCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFs
dWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJ
bnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MTQsMjkgKzM3NTYs
NDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVt
UGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgemVy
b0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFt
c1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisK
KyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1
bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1Q
YXJhbXNUb1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNl
dEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1Qw
KTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAg
emVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBh
cmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZWdU
MCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAj
ZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5r
KHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCks
IHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1Qx
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVn
VDEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9h
cmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0
OSArMzgwNSw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3Vt
ZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAg
IGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7Cisg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVn
VDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkp
LCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91
dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3Vs
dFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIp
OworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlVmFsdWUoanNV
bmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAj
ZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRj
aEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFs
dWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsK
LSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2
bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3Mp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDI0LDYgKzE0MjQsOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uQ29tcGFyCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAg
ICAvL2RhdGFMb2dMbigiY29tcGFyZUxlc3MsIGxoczogIiwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpLCAiIHJoczogIiwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKICAgICAKICAg
ICByZXR1cm4ganNMZXNzPHRydWU+KGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQpAQCAtMTQ5MSw2ICsxNDkz
LDggQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcgogICAgIEpTVmFs
dWUgc3JjMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIHNyYzIg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKKyAgICAvL2RhdGFMb2dMbigic3RyaWN0
ZXEsIGxoczogIiwgc3JjMSwgIiByaHM6ICIsIHNyYzIpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6
OnN0cmljdEVxdWFsKGdsb2JhbE9iamVjdCwgc3JjMSwgc3JjMik7CiB9CiAKQEAgLTE2OTEsNyAr
MTY5NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EZWJ1ZywKICNpZiBF
TkFCTEUoREZHX0pJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kT3B0aW1p
emVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBjb2RlQmxvY2stPnVw
ZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZl
KCktPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVy
V2FybVVwKCk7CiB9CiAKQEAgLTE3NDUsNyArMTc0OSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25PcHRpbWkKIAogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1p
emF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAiZGVsYXlPcHRpbWl6ZVRvREZHIiwgKCJjb3VudGVyID0gIiwgY29kZUJsb2Nr
LT5qaXRFeGVjdXRlQ291bnRlcigpKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJl
ZGljdGlvbnMoKTsKKyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVw
ZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldCwg
YmVjYXVzZSB0aGUgdGhyZXNob2xkIGhhc24ndCBiZWVuIHJlYWNoZWQuIik7CiAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQpAQCAtMTgxNCw3ICsx
ODE4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAg
ICAvLyBub3RoaW5nIGxlZnQgdG8gZG8uCiAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
ZGVCbG9jaywgImRlbGF5T3B0aW1pemVUb0RGRyIsICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsK
LSAgICAgICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9u
cygpOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29k
ZSBibG9jayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZl
IGFuIG9wdGltaXplZCByZXBsYWNlbWVudC4iKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KQEAgLTE4NDMsNyArMTg0Nyw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgeworICAg
ICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVUb0RGR05vdygpKSB7CiAgICAgICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0aW1pemVUb0RGRyIs
ICgiaW5zdWZmaWNpZW50IHByb2ZpbGluZyIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgICAgICAgICAiRGVsYXlpbmcgb3B0aW1pemF0
aW9uIGZvciAiLCAqY29kZUJsb2NrLApAQCAtMTg3OSw3ICsxODgzLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sq
IG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBBU1NF
UlQob3B0aW1pemVkQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sg
JiYgSklUQ29kZTo6aXNERkdPckZUTChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwog
ICAgIAogICAgIGlmICh2b2lkKiBkYXRhQnVmZmVyID0gREZHOjpwcmVwYXJlT1NSRW50cnkodm0s
IGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG9wdGltaXplZENvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJh
dCBiYyMiLCBieXRlY29kZUluZGV4KSk7CkBAIC0xOTcyLDcgKzE5NzYsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJ5T1NSCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpOworICAgIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgp
LT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCk7CiAgICAgYXV0byBieXRlY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQo
Ynl0ZWNvZGVJbmRleCktPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CkBAIC0zNDMz
LDYgKzM0MzcsNDIgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrSQog
ICAgIHJldHVybiAwOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJp
Z2dlckxPTFJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2sp
KQoreworICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hp
bGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkgYmUg
cHJvZml0YWJsZS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MobG9sQ29kZUJsb2NrLT52
bSgpLmhlYXApOworCisgICAgaWYgKGdldGVudigicHJpbnRFYWNoSmV0dGlzb24iKSAmJiAhIWF0
b2koZ2V0ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJqZXR0
aXNvbiwgZm9yY2luZyByZW9wdCBub3c6ICIsICpsb2xDb2RlQmxvY2spOworICAgIGxvbENvZGVC
bG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAg
IAorICAgIC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJvZmlsZXMgaGVyZSwgc2luY2Ugd2UncmUg
amV0dGlzb25pbmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0ZSB3LyB0aGluZ3Mgd2UgY2FyZSBhYm91
dC4KKworICAgIHNhbml0aXplU3RhY2tGb3JWTShsb2xDb2RlQmxvY2stPnZtKCkpOworCisgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbG9sQ29kZUJsb2NrLCAiOiBFbnRl
cmVkIHJlb3B0aW1pemUgZnJvbSBMT0wiKTsKKworICAgIENvZGVCbG9jayogbGxpbnRDb2RlQmxv
Y2sgPSBsb2xDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgLy8gV2UgbXVzdCBiZSBjYWxs
ZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBibG9jay4KKyAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUobGxpbnRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisgICAgQ29kZUJsb2Nr
KiByZXBsYWNlbWVudCA9IGxsaW50Q29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOworICAgIGlmICgh
cmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxpbnRDb2RlQmxvY2spIHsKKyAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbGxpbnRDb2RlQmxvY2ssICI6IE5v
dCByZW9wdGltaXppbmcgTE9MIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHRoZSByZXBs
YWNlbWVudCBtdXN0IGJlIG9wdGltaXplZCBjb2RlLiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0
eQorICAgIC8vIHRvIGNoZWNrIG91ciBsb2dpYy4KKyAgICBBU1NFUlQobGxpbnRDb2RlQmxvY2st
Pmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQobG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworCisgICAgLy8gT09QUzogZmln
dXJlIG91dCBzdHVjayBpbiBhIGxvb3AgbG9naWMKKyAgICBsb2xDb2RlQmxvY2stPmpldHRpc29u
KFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwgQ291bnRSZW9wdGltaXphdGlvbik7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxOSw2ICszMTksOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blZhbHVlCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJv
ZmlsZXJMb2csIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsKIAorSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQs
IChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjgxLDggKzI3Nyw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAg
ICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01NTgsNyArNTUy
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
ICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVy
IHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9u
IEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lk
KGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC02MzksOCArNjMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3NSw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzc4LDggKzc2Myw2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4ICs4MDIsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMTAwLDggKzEwODEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyNTcsOCArMTIzNiw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJ
bmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1
bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBA
QAogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1l
c3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01Miw1MSArNTQsMTE3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKwor
ICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFz
ZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAg
ICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVn
VDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVHUFIg
PSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0
aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRv
IG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAg
ICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
KworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIs
IHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7Cisg
ICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0
eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkg
fHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkg
fHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2sp
KQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhp
bmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncyk7CisgICAgICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0
eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3lt
Ym9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYgKCF1
c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRH
UFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlmICho
YXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0
QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRl
eDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1LDQxICsxNzMs
NzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHBy
b3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFz
ZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncyk7CisgICAgICAgIHVuYXZhaWxh
YmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZh
dGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3LDYgKzI1Nyw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAK
KyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwog
ICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMxOSw4ICs0MjEsMTEg
QEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9h
ZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1Qw
LCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lz
dGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1v
ZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0NCw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2U7CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21h
TW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5
dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAg
ICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzU1LDEz
ICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAg
IH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbElu
Zm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBEbyBi
ZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogCkBAIC0z
OTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0
CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
YnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQYXRoSm1wLCBkb25lLCBkb25lKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQg
PSBieXRlY29kZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAg
IExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRl
X25hbWUoYwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0
aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
YmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFj
Y2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nv
ci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGlu
dDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhp
cywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAg
ICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNw
aWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25z
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwg
cmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNl
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVy
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0
ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBpbnQzMl90
IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxs
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBn
ZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBhdHRy
aWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAg
IFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFj
Y2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQ
Uik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBw
cm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdw
cigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3Miwx
OCArNjMzLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNlR1BSOwor
ICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAg
ICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
IHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0
Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAg
ICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNl
IHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDkyLDI1ICs2ODcs
MjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVy
blZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUyMCwxOSAr
NzE3LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFz
ZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1
bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Q2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0
eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVn
aXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJh
cnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJz
IHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01NDEsMjIxICs3ODksMzY4IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVs
QnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BS
UmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBs
YWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1Qw
OworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNl
LCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVj
dCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHVi
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
IAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BS
UmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJh
c2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxl
bmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RBcnJheUxl
bmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1f
bW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0
QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5n
dGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFIgPSB1
c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVu
Z3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5t
X3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
KyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlz
VmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFs
dWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHRo
aXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUuZW1w
bGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNHUFIg
PSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3By
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0aGlz
R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVn
LCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikp
OworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgr
K107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3Zh
bHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3Qg
PSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBh
bmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1
c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdo
b3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUg
U3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0
aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1
ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBz
Y3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgq
dGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVl
VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BS
ID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNl
R1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAog
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BS
LCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6
IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2Rl
IHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
OTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOwor
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+
KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhp
cyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1
dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0K
KyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0g
cmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
IAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAg
IEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQg
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
VmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC04NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNv
bHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRo
OwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25z
dGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlw
ZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29w
ZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRT
Y29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC04
NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxDZWxsT3Bl
cmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAg
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgq
dGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVn
VDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5t
X2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3Qp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTg5NCw5ICsxMzMwLDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVz
b2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
LCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05MDksMjkgKzEzNDUsMjkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCBy
ZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC05NDAsMTUgKzEzNzYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVj
dDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7Cisg
ICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5k
LCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUxICsxNDEzLDg0IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwog
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVT
bG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1Qx
OwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRl
bXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAg
ICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZz
ZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNj
b3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3Qs
IHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3Bl
ZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBz
Y29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAg
ICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQp
OworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAgICAgICAg
ICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGlu
ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmly
c3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRP
ZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0
aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMy
KG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7
Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNl
dEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9mZnNldEdQ
Uik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNo
ZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFu
ZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAg
ICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAg
ICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgq
b3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1
bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTAzNiwxMCArMTUwNCwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJ
bmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
CkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BS
LCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsK
QEAgLTEwODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19
Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGly
ZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVn
VDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTExMjksMjEgKzE1NzksNDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAg
ICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVl
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
ewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0
dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOwor
ICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBP
cHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29w
ZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcg
YnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAg
ICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zm
c2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAg
ICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgog
ICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAg
ICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29w
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CisgICAgICAgICAgICBuZWdQ
dHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNlSW5kZXgo
YnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE1NCwyOCArMTYzMiw1
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAg
ICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAgICAgICAgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY3JhdGNoVmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhl
cmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVj
a3Mgc3RhdGljYWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIp
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9p
bnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25z
dGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKCZtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVtaXROb3Rp
ZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
c3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwor
ICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgp
IHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJl
VmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1
cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAg
ICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsK
KyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkwLDEyICsxNjk3LDIxIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZh
bHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0
Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBn
byBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJl
c29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0ds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBH
bG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFt
aWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5
LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Cisg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1
ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qg
d2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlz
IHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgs
IHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNo
MzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0
aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBAIC0xMjQyLDEwICsxNzY3
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dElu
Zm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVs
ZVZhcikgewpAQCAtMTI2MSw2MSArMTc4NCwxNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7
CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFs
dWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBh
cmd1bWVudHMpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
YXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BS
ID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRk
cmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQ
UiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9B
cmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1Zh
bHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcg
YXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAg
ICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQ
UiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVl
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAg
ICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRk
cmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9MKCkg
fHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1ha2UgaXQg
c28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlz
IG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8g
cmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkg
aXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGlt
ZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdl
IGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAg
IC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29u
ZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUo
dmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAm
IFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
ICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1w
PiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUp
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9y
T3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
R1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVl
R1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUt
PmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIH0KKwog
ICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBpZiAo
IXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAg
ICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQogCi0g
ICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xv
d1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFu
Y2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxs
UmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8g
Tm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAg
c2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3Bp
bGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25l
ck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2Vs
bC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8g
LSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0
IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhl
cndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0
IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5
cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxp
bmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsK
LSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAo
Z3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICB2
YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICB2
YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQog
CiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFs
dWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzMjcsMTEgKzE5NjcsMjYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRP
ZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAm
PSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChp
bmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5h
bF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM0MSwx
MCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIGVtaXRXcml0ZUJh
cnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAg
ICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBzdG9yZVB0cih2
YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9m
ZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihi
YXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNz
KHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVs
ZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMTQ0Nyw4ICsyMTE1
LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7Cisg
ICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAgT3B0aW9u
YWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAgICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzY3Jh
dGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50
U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29y
ZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxPTCgpKQor
ICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisKICAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0NjYsNiArMjE1
MSw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXMKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9
IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0
cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIApAQCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJp
dmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBBU1NFUlQoKHB1
dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJ
RCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBA
IHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAgICBBU1NF
UlRfVU5VU0VEKHByb2ZpbGVkREZHQ29kZUJsb2NrLCAhcHJvZmlsZWRERkdDb2RlQmxvY2spOwot
ICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7CiAgICAgCkBAIC01NSw3ICs1NSw3IEBAIHZv
aWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1
bHQgcmVzdWx0KQogewogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2Nr
LCAiIHJlc3VsdDogIiwgcmVzdWx0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMx
LDIyIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCiAKKyNpbmNs
dWRlIDx3dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpJVFdvcmtsaXN0
OjpQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFdvcmtsaXN0OjpQbGFuPiB7
CiBwdWJsaWM6Ci0gICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9j
aykKLSAgICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNv
bXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCisgICAgICAgIDogbV9sbGludENvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwg
bV9jb2RlQmxvY2tUb0NvbXBpbGUoY29tcGlsZVR5cGUgPT0gSklUOjpDb21waWxlVHlwZTo6TE9M
ID8gbV9sbGludENvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSA6IG1fbGxpbnRDb2RlQmxvY2sp
IAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLCBtX2NvZGVCbG9j
a1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAg
ewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsK
KyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBpbiBjb25jdXJyZW50IGdjCisgICAgICAgIGlm
IChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2NrKSB7CisgICAgICAgICAg
ICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnByb3RlY3QobV9jb2RlQmxvY2tUb0Nv
bXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFk
KCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgpCiAgICAg
ewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5saW5rKCk7CisKKyAg
ICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgICAgICBp
ZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9jaykKKyAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnVucHJvdGVjdChtX2NvZGVCbG9j
a1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CiAg
ICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgICAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWls
ZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fbGxpbnRDb2RlQmxvY2ss
ICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKICAgICAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24g
ZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigp
OwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1
ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwor
ICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24gPSB0
cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAg
ICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxvY2spOwotICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21w
aWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxvY2tUb0NvbXBpbGUp
OworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+aml0U29vbigpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0K
LSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsgfQorICAgIENvZGVCbG9j
ayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jazsgfQorICAgIFZNJiB2
bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2stPnZtKCk7IH0KICAgICAKICAgICBib29sIGlz
RmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTgwLDE1ICs5MywxNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBQbGFuIHBs
YW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgUGxhbiBw
bGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwog
ICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwogICAgICAgICBwbGFuLmZpbmFsaXplKCk7
CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAg
IENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
VG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAgICBMb2NrIG1fbG9jazsKICAgICBib29sIG1f
aXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07CkBAIC0yMzMsOSArMjQ3LDExIEBAIHZvaWQg
SklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAgICAgY29kZUJsb2NrLT5k
b250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEpJVDo6
Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRpb25zOjpmb3JjZUxPTCgpID8gSklUOjpDb21w
aWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmU7CiAgICAgCiAgICAgaWYg
KCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKLSAgICAgICAgUGxhbjo6Y29tcGlsZU5v
dyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBQbGFuOjpj
b21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjQ5LDcgKzI2NSw3IEBAIHZv
aWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAgICAgCiAgICAgICAg
IGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsKICAgICAgICAgICAgIG1fcGxhbm5lZC5hZGQo
Y29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3
IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAgICAgICAg
ICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgY29tcGls
ZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIG1fcGxhbnMu
YXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQocGxhbik7CiAgICAgICAg
ICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7CkBAIC0yNzMsMTQgKzI4OSwyNCBA
QCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAgICAgLy8gVGhpcyB3
b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNv
bnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBp
cyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMu
IE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29tZWRheS4KLSAgICBQbGFuOjpjb21waWxl
Tm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgUGxhbjo6Y29t
cGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBW
TSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
KQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZdIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBi
b29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIyLDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNv
bXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAgICAgCiAgICAgLy8gTm93IGl0IG1pZ2h0IGJl
IGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRl
cnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVk
LCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKLSAgICAvLyBiYXNlbGluZSBK
SVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKLSAgICAKLSAgICAvLyBPSywganVz
dCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworCisgICAgaWYg
KE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2sg
PSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwg
bG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25N
dXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxvbENvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGxvbENvZGVCbG9jayk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5
IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdpdGggdGhlCisgICAgICAg
IC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCisgICAgICAgIEpJVDo6Y29t
cGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAg
fQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFucyhQbGFucyYgbXlQbGFu
cykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5z
KFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFsaXplKCk7CiAgICAgICAgIAogICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFu
LT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxhbm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2Nr
S2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRX
b3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29y
a2xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVMYXRlcihDb2RlQmxvY2sq
LCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAgICAgc3Rh
dGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdCgpOwogICAgIHN0YXRpYyBKSVRX
b3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpOwpAQCAtNjYsNiArNjUsNyBA
QCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsKICAgICBmcmllbmQgY2xhc3MgVGhyZWFkOwog
ICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIHZvaWQgZmlu
YWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAgIFBsYW5zIG1fcXVldWU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1i
bGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkg
eyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAg
Y29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQs
IE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNH
bG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxs
LCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKICNl
bmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgIGlmIChpc1dlYkFzc2VtYmx5
IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVsQXRPZmZzZXQoMCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2Fs
bCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRv
IHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9y
Q2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKG1faml0
LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOCArMzYzLDEwIEBAIGlubGluZSBib29s
IHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHdl
IHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3Rp
Y3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKK2lubGluZSBDb2RlQmxvY2sqIGpp
dENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkp
CiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMgdy5yLnQgTE9MLgorCiAgICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJzIGRvbid0IHNldCB0b3Ag
Y2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQgYWxsLgogICAgIEFTU0VS
VChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBAIC0zNzMsMjkgKzM3NSw0NSBAQCBpbmxpbmUg
Ym9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgaWYgKCFjb2RlQmxvY2stPmNo
ZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVO
VChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwg
Y291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNo
b3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3Jr
bGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAgYXV0byBsb2xDb2RlQmxvY2sgPSBbJl0oKSAt
PiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBjb2Rl
QmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChyZXBsYWNl
bWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRUeXBlKCkpIHsKICAgICBj
YXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwogICAgICAg
ICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21waWxl
TGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKLSAgICAgICAgcmV0
dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOworICAgICAg
ICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZGF0YUxvZygiVW5leHBlY3Rl
ZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExM
SW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtp
bmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtp
bmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksCiAgICAg
ICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVy
ID0gIiwKQEAgLTQwNiwxOCArNDI0LDIxIEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50
cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsK
ICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgIGlmICghaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykpCisgICAgQ29kZUJsb2NrKiBjb21waWxl
ZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spOwor
ICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVs
bHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ss
ICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworCisgICAg
Y2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2spOwogICAgIAogICAgIGlm
IChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+
aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKKyAgICAgICAgTExJTlRf
UkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVz
cygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNoZWNrKTsKLSAgICBMTElO
VF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hl
Y2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CisgICAgTExJTlRfUkVUVVJO
X1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hl
Y2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiB9CiAjZWxzZSAvLyBFTkFC
TEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5
cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIq
LCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAg
ICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwpAQCAtNDI3LDMxICs0NDgsMzEg
QEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogTExJTlRfU0xPV19Q
QVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJu
IGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7
CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
ImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0
dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+
anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9m
b3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5j
b2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1
ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29u
c3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkt
PmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpT
RnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJs
b2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFBy
b2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4g
ZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4
ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9j
YWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZy
YW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0
YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxf
YXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrKQogewogICAgIFVOVVNFRF9Q
QVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hl
Y2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0
cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFy
aXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKQEAgLTQ4MCwx
OSArNTAxLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgICAgICBMTElO
VF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICAKLSAgICBpZiAoIWpp
dENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxvY2sgPSBqaXRDb21waWxl
QW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdP
KG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJs
b2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0
ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKIAotICAgIEFTU0VSVChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvbXBpbGVk
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29tcGlsZWRD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogCi0gICAgY29uc3QgSklU
Q29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpOworICAgIGNvbnN0IEpJ
VENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVCbG9jay0+aml0Q29kZU1hcCgpOwogICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAu
ZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUxvY2F0aW9u
KTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVC
bG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgTExJTlRfUkVUVVJOX1RXTyhqdW1w
VGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CiAjZWxzZSAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ck9yaWdpblN0YWNrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIE9yaWdpblN0YWNrOjpPcmlnaW5TdGFjayhEYXRhYmFzZSYgZGF0YWIKICAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc3RhY2suc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgYXBwZW5kKE9yaWdpbigKLSAgICAgICAgICAgIGRhdGFiYXNlLmVuc3VyZUJ5dGVjb2Rl
c0ZvcihzdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUoKS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkp
LAorICAgICAgICAgICAgZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKHN0YWNrW2ldLmlubGlu
ZUNhbGxGcmFtZSgpLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwKICAgICAgICAgICAg
IHN0YWNrW2ldLmJ5dGVjb2RlSW5kZXgoKSkpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMjAgQEAgRnVuY3Rpb25D
b2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxG
dW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZl
KCkpOwogfQogCitGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpsb2xPckJh
c2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlOworICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKQorICAgICAgICBlZGdlID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgIGVsc2Ug
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAg
ICAgICBlZGdlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgfQorICAgIGlm
ICghZWRnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmxvbE9yQmFzZWxpbmVBbHRl
cm5hdGl2ZSgpKTsKK30KKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMyArMTE0LDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29kZUJsb2NrRm9yQ29uc3RydWN0KCk7CiAgICAg
fQogCisgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGxvbE9yQmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICAKLSAgICBGdW5jdGlv
bkNvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwot
ICAgIH0KLQogICAgIFJlZlB0cjxUeXBlU2V0PiByZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCkgCiAg
ICAgewogICAgICAgICBSYXJlRGF0YSYgcmFyZURhdGEgPSBlbnN1cmVSYXJlRGF0YSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRP
cHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsK
KyAgICBPcHRpb25zOjp1c2VERkdKSVQoKSA9IDA7CisgICAgT3B0aW9uczo6Zm9yY2VMT0woKSA9
IDE7CisgICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IDE7CisKICNpZiAhZGVmaW5lZChOREVCVUcp
CiAgICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcgQEAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5V
c2VKSVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlUHVibGljU3Rh
dGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1
bmRlcnN0YW5kIHB1YmxpYyBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAog
ICAgIHYoQm9vbCwgdXNlUHJpdmF0ZVN0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJ
ZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwcml2YXRlIHN0YXRpYyBkYXRhIGZp
ZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCBmb3JjZUxPTCwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlv
biwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2
MCw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAg
ICAgIG9yaWdpbi53YWxrVXBJbmxpbmVTdGFjayhbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVP
cmlnaW4pIHsKICAgICAgICAgICAgICAgICBtYWNoaW5lT3JpZ2luID0gY29kZU9yaWdpbjsKICAg
ICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSgpOwotICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhpbmxpbmVDYWxsRnJh
bWUgPyBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpIDogbWFjaGluZUNv
ZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGFw
cGVuZENvZGVCbG9jayhpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFz
ZWxpbmVDb2RlQmxvY2suZ2V0KCkgOiBtYWNoaW5lQ29kZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OmNvbGxlY3RTYW1wbGluZ1Byb2ZpbGVyRGF0YUZvckpTQ1NoZWxsKCkpIHsKQEAgLTU5Myw3ICs1
OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAg
ICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGxsaW50X2hhbmRsZV91Y2F1Z2h0X2V4Y2Vw
dGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8v
IGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8
fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0b3BD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8
dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogICAgICAgICAgICAg
ICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2Rl
QmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
OCw3ICszOTgsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cExMSW50KENvZGVCbG9jayogY29kZUJsCiBz
dGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lm
IEVOQUJMRShKSVQpCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxl
KHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIC8vIE9PUFM6
IEZpZ3VyZSBvdXQgd2hhdCB3ZSB3YW50IHRvIGRvIHdpdGggdGhlIG5vIExMSW50IG9wdGlvbi4u
Li4KKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVC
bG9jaywgSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBAIEpTVmFsdWUgbnVtYmVyT2ZERkdDb21waWxl
cyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29sIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSBm
YWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgp
KQorICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7IC8vIE9PUFMKKwogICAgIGlmICghT3B0aW9u
czo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVzZUJhc2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6OnVz
ZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsKICNl
bHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUlu
c3RhbGxUcmFwQnJlYWtwb2ludHMoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Cisg
ICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
ICAgICAgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAgaWYg
KCFsb2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRy
eSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRh
dGVDb2RlQmxvY2tzT25TdGFjCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYg
KGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpKQorICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJs
b2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUt
PmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29t
cGFyZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRz
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkod29y
a2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw4IEBAIGRlZiBjb21wdXRlTXVsdGlwbGVIeXBvdGhl
c2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIG5hbWVMZW5n
dGggPSBsZW4oInN1YnRlc3QiKQotICAgIGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKLSAg
ICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pCisgICAgYUxlbmd0aCA9IGxlbihhW3VuaXRN
YXJrZXJdKSArIDMKKyAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMwogICAgIHJh
dGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIpCiAKICAgICBwVmFsdWVIZWFkZXIgPSAicFZhbHVlIChz
aWduaWZpY2FuY2UgdXNpbmcgRmFsc2UgRGlzY292ZXJ5IFJhdGUpIgpAQCAtMjEyLDcgKzIxMiw3
IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhhLCBiKToKICAgICBwTGVuZ3RoICs9IDIKIAogICAgIHN0
cmluZ3MgPSBbXQotICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpee25hbWVMZW5ndGh9fXx7YVNj
b3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7Y29tcGFyZTpee3JhdGlvTGVu
Z3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5PSJzdWJ0ZXN0IiwgYVNjb3Jl
PWFbdW5pdE1hcmtlcl0sIGJTY29yZT1iW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5n
dGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCBy
YXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExl
bmd0aCkpCisgICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6
XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9
fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9ImE6
ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2NvcmU9ImI6ICIgKyBiW3VuaXRNYXJrZXJdLCBuYW1lTGVu
Z3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFy
ZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIs
IHBMZW5ndGg9cExlbmd0aCkpCiAgICAgZm9yIGtleSBpbiBhLmtleXMoKToKICAgICAgICAgaWYg
a2V5ID09IHVuaXRNYXJrZXI6CiAgICAgICAgICAgICBjb250aW51ZQpJbmRleDogTGF5b3V0VGVz
dHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgTGF5b3V0
VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcg
KzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRlc3RSdW5uZXIgPSB7CiAgICAgbmV2
ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlvbiwKLSAgICBudW1iZXJPZkRGR0Nv
bXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51bWJlck9mREZHQ29tcGlsZXM6IChm
dW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAgICAgcmV0dXJuIChmKSA9PiB7Cisg
ICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51
bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAgICAgIC8vIEVtdWxhdGUgcnVubmluZyB0
aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0aWVyaW5nIGJlZm9yZSByZXR1cm5p
bmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAgICAgICAgIG1hcCA9IG5l
dyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50ID0gbWFwLmdldChmKSB8fCAwOworICAg
ICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIG1hcC5zZXQoZiwgY291bnQpOworICAg
ICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsKKyAgICAgICAgfTsKKyAgICB9KSgp
LAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4dE5ld0NvZGVCbG9jawogfTsKIApA
QCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBfYSwg
X2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKICAgCiAgIHRyeSB7Ci0g
ICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQorICAgIHdoaWxlICghZGZn
Q29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkp
OworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgIH0gY2F0Y2ggKGUpIHsKICAg
ICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBAIGZ1bmN0aW9uIGRmZ0luY3JlbWVu
dChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0cykKICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkpCisgICAgaWYg
KCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
biAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3RhcnQgOiAwOwogICAgIAogICAgIHJl
dHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418000</attachid>
            <date>2021-01-20 15:02:14 -0800</date>
            <delta_ts>2021-01-22 13:17:37 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>621256</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2dsb2JhbC1sZXhpY2FsLXZhcmlh
YmxlLXdpdGgtc3RhdGVtZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2dsb2Jh
bC1sZXhpY2FsLXZhcmlhYmxlLXdpdGgtc3RhdGVtZW50LmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9nbG9iYWwtbGV4aWNhbC12YXJpYWJsZS13aXRoLXN0YXRlbWVudC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjQsMTAgKzI0LDEzIEBAIG5vSW5saW5lKG1ha2VPYmopOwog
bGV0IGZvbyA9ICJmb28iOwogY29uc3QgYmFyID0gImJhciI7IAogCi1mb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgaSsrKSB7Ci0gICAgd2l0aCAobWFrZU9iaigpKSB7Ci0gICAgICAgIGFzc2VydChm
b28gPT09IDIwKTsKLSAgICAgICAgYXNzZXJ0KGJhciA9PT0gImJhciIpOwotICAgICAgICBzaG91
bGRUaHJvd0ludmFsaWRDb25zdEFzc2lnbm1lbnQoZnVuY3Rpb24oKSB7IGJhciA9IDIwOyB9KTsK
K2Z1bmN0aW9uIHJ1bigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7Cisg
ICAgICAgIHdpdGggKG1ha2VPYmooKSkgeworICAgICAgICAgICAgYXNzZXJ0KGZvbyA9PT0gMjAp
OworICAgICAgICAgICAgLy9hc3NlcnQoYmFyID09PSAiYmFyIik7CisgICAgICAgICAgICAvL3No
b3VsZFRocm93SW52YWxpZENvbnN0QXNzaWdubWVudChmdW5jdGlvbigpIHsgYmFyID0gMjA7IH0p
OworICAgICAgICB9CiAgICAgfQogfQorcnVuKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2
aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktYXJy
YXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAgZW5zdXJl
QXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsKLXNo
b3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAh
aXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGVuc3Vy
ZUFycmF5U3RvcmFnZShhcnJheSk7CkBAIC00Myw2ICs0Myw2IEBAIGVuc3VyZUFycmF5U3RvcmFn
ZShhcnJheTIpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAx
ZTU7ICsraSkKICAgICBzaG91bGRCZSh0ZXN0MihhcnJheTIpLCBmYWxzZSk7Ci1zaG91bGRCZShk
aWRGVExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJlKGRpZEZUTENvbXBpbGUgfHwgIWlzREZHRW5h
YmxlZCgpLCB0cnVlKTsKIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKIHNob3VsZEJl
KHRlc3QyKGFycmF5MSksIHRydWUpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQt
cHJvcGVydHktc2xvdy1wdXQtYXJyYXktc3RvcmFnZS1mdGwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQtYXJyYXktc3RvcmFnZS1m
dGwuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXBy
b3BlcnR5LXNsb3ctcHV0LWFycmF5LXN0b3JhZ2UtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw3IEBAIGVuc3VyZUFycmF5U3RvcmFnZShhcnJheSk7CiBkaWRGVExDb21waWxlID0g
ZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3Qx
KGFycmF5KSwgdHJ1ZSk7Ci1zaG91bGRCZShkaWRGVExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJl
KGRpZEZUTENvbXBpbGUgfHwgIWlzREZHRW5hYmxlZCgpLCB0cnVlKTsKIAogdmFyIGFycmF5ID0g
WzEsIDIsICwgNF07CiBhcnJheS5fX3Byb3RvX18gPSBvYmplY3Q7CkBAIC01Niw2ICs1Niw2IEBA
IGVuc3VyZUFycmF5U3RvcmFnZShhcnJheTIpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKICAgICBzaG91bGRCZSh0ZXN0MihhcnJheTIpLCBm
YWxzZSk7Ci1zaG91bGRCZShkaWRGVExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJlKGRpZEZUTENv
bXBpbGUgfHwgIWlzREZHRW5hYmxlZCgpLCB0cnVlKTsKIHNob3VsZEJlKHRlc3QyKGFycmF5Miks
IGZhbHNlKTsKIHNob3VsZEJlKHRlc3QyKGFycmF5MSksIHRydWUpOwpJbmRleDogSlNUZXN0cy9z
dHJlc3MvaW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL2ludDgtcmVwZWF0LWluLXRoZW4tb3V0LW9mLWJvdW5kcy5qcwkocmV2
aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaW50OC1yZXBlYXQtaW4tdGhlbi1vdXQt
b2YtYm91bmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw1ICsyMSw1IEBAIGlmIChyZW9wdGlt
aXphdGlvblJldHJ5Q291bnQoZm9vKSkKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kp
CiAgICAgZm9vKGFycmF5LCBmYWxzZSk7CiAKLWlmIChyZW9wdGltaXphdGlvblJldHJ5Q291bnQo
Zm9vKSAhPSAxKQoraWYgKGlzREZHRW5hYmxlZCgpICYmIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pICE9IDEpCiAgICAgdGhyb3cgIkVycm9yOiB1bmV4cGVjdGVkIHJldHJ5IGNvdW50OiAi
ICsgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9w
dXQtYnktaWQtZmxhZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHV0LWJ5LWlk
LWZsYWdzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQt
ZmxhZ3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTEzLDcgKzEzLDEzIEBAIHZhciB5ID0ge307CiBm
KHgsIDQyKTsKIGYoeSwge30pOwogCitsZXQgY291bnRlciA9IDA7CiB3aGlsZSAoIW51bWJlck9m
REZHQ29tcGlsZXMoZykpIHsKKyAgICArK2NvdW50ZXI7CisgICAgaWYgKCFpc0RGR0VuYWJsZWQo
KSkgeworICAgICAgICBpZiAoY291bnRlciA+IDEwMDApCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CiAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbihnKTsKICAgICBpZiAodHlwZW9mIGcoeCkg
IT09ICdudW1iZXInKQogICAgICAgICB0aHJvdyAnZmFpbGVkIHdhcm1pbmcgdXAnOwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2UtcHJvdG90
eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3R5cGVkYXJyYXktaW50cmluc2lj
LWdldHRlcnMtY2hhbmdlLXByb3RvdHlwZS5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0
cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2UtcHJvdG90eXBlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xOCwxMCArMTgsMTQgQEAKIAogICAgIGxldCBhcnJheSA9IG5l
dyBJbnQzMkFycmF5KDE1KTsKIAotICAgIHdoaWxlKG51bWJlck9mREZHQ29tcGlsZXMoZm9vKSA8
IDEpIHsKKyAgICBsZXQgY291bnRlciA9IDA7CisgICAgd2hpbGUgKG51bWJlck9mREZHQ29tcGls
ZXMoZm9vKSA8IDEpIHsKICAgICAgICAgZm9vKGFycmF5KTsKICAgICAgICAgYmFyKGFycmF5KTsK
ICAgICAgICAgYmF6KGFycmF5KTsKKyAgICAgICAgKytjb3VudGVyOworICAgICAgICBpZiAoY291
bnRlciA+IDEwMDAwMCkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIE9iamVjdC5z
ZXRQcm90b3R5cGVPZihhcnJheSwgbnVsbCk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDggQEAgaWYgKHR5cGVvZiB0ZXN0V29yc3RDYXNlQ291bnRNYXAgPT09ICJ1
bgogaWYgKHR5cGVvZiBkdW1wSlNPTlJlc3VsdHMgPT09ICJ1bmRlZmluZWQiKQogICAgIHZhciBk
dW1wSlNPTlJlc3VsdHMgPSBmYWxzZTsKIAordmFyIGR1bXBKU09OUmVzdWx0cyA9IHRydWU7CisK
IC8vIFVzZWQgZm9yIHRoZSBwcm9taXNlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBiZW5jaG1h
cmsgcnVuLgogdGhpcy5jdXJyZW50UmVzb2x2ZSA9IG51bGw7CiB0aGlzLmN1cnJlbnRSZWplY3Qg
PSBudWxsOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw4IEBAIGlmIChpc0Q4KQogaWYgKHR5cGVvZiB0ZXN0TGlzdCA9PT0gInVu
ZGVmaW5lZCIpCiAgICAgdGVzdExpc3QgPSB1bmRlZmluZWQ7CiAKKy8vdGVzdExpc3QgPSBbJ2Ny
eXB0by1hZXMtU1AnXTsKKwogaWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRl
ZmluZWQiKQogICAgIHRlc3RJdGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5j
aG1hcmstcnVubmVyLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsOCBAQAogLy8gRklYTUU6IFVzZSB0aGUgcmVhbCBwcm9taXNlIGlmIGF2YWlsYWJs
ZS4KIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSB3aXRo
IHRoZSByZWFsIFByb21pc2UuCisKK19fZGlzYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKKwogZnVu
Y3Rpb24gU2ltcGxlUHJvbWlzZSgpIHsKICAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG51bGw7
CiAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsOwpAQCAtMTI4LDE3ICsxMzEsMjEgQEAgQmVuY2ht
YXJrUnVubmVyLnByb3RvdHlwZS5fcnVuVGVzdCA9IGZ1bgogCiAgICAgc2VsZi5fd3JpdGVNYXJr
KHN1aXRlLm5hbWUgKyAnLicgKyB0ZXN0Lm5hbWUgKyAnLXN0YXJ0Jyk7CiAgICAgdmFyIHN0YXJ0
VGltZSA9IG5vdygpOworICAgIF9fZW5hYmxlU2FtcGxpbmdQcm9maWxlcigpOwogICAgIHRlc3Qu
cnVuKHByZXBhcmVSZXR1cm5WYWx1ZSwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KTsK
KyAgICBfX2Rpc2FibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgdmFyIGVuZFRpbWUgPSBub3co
KTsKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICct
c3luYy1lbmQnKTsKIAogICAgIHZhciBzeW5jVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7CiAK
ICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7CisgICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVy
KCk7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgIC8vIFNvbWUgYnJvd3Nl
cnMgZG9uJ3QgaW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBsYXlvdXQgZm9yIHBhaW50LgogICAgICAg
ICAvLyBGb3JjZSB0aGUgbGF5b3V0IGhlcmUgdG8gZW5zdXJlIHdlJ3JlIG1lYXN1cmluZyB0aGUg
bGF5b3V0IHRpbWUuCiAgICAgICAgIHZhciBoZWlnaHQgPSBzZWxmLl9mcmFtZS5jb250ZW50RG9j
dW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7CisgICAgICAgIF9fZGlz
YWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKICAg
ICAgICAgc2VsZi5fZnJhbWUuY29udGVudFdpbmRvdy5fdW51c2VkSGVpZ2h0VmFsdWUgPSBoZWln
aHQ7IC8vIFByZXZlbnQgZGVhZCBjb2RlIGVsaW1pbmF0aW9uLgogICAgICAgICBzZWxmLl93cml0
ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICctYXN5bmMtZW5kJyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAK
IHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsK
IApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAg
IGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFibGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDAp
OworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9w
QWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJz
T25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkpIHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0pKTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkK
K3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdK
SVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9j
a3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Ym9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5q
aXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgIGlmIChjb2Rl
QmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0
aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJl
dHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIK
ICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6
OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBj
b25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2Rl
QmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQ
cmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgs
IE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0
aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVz
TWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAt
MjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
CiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAg
ICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJl
ZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlv
bnMgPSBwcmVkaWN0aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBD
b21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9u
cy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
KSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9u
cy5sb2NhbChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIp
OworICAgICAgICB9CisKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRv
dGFsTGVuZ3RoKCk7ICkgewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBk
dW1wZXIuZHVtcEJ5dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8
Y2xhc3MgQmxvY2s+CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1Ymxp
YyBCeXRlY29kZUR1bXBlcjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBC
bG9jayhCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVt
cEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
UHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0g
SUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxs
b3B0LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01h
cCYgPSBJQ1N0YXR1c01hcCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAg
dm9pZCBkdW1wQ29uc3RhbnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgotICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIg
PSBXVEY6OmRhdGFGaWxlKCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9j
aywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmlu
dFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVC
bG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbnMsICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgog
ICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bf
am5lcV9wdHI6CiAgICAgY2FzZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAg
Y2FzZSBvcF9uZXdfb2JqZWN0OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNG
b3JCeXRlY29kZUluZGV4SW1wbChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAg
cmV0dXJuOwogCisgICAgVVNFUyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAg
ICBVU0VTKE9wVG9UaGlzLCBzcmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgVVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnBy
aW50KCIsICIsIGluc3RydWN0aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBp
ZiAoKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAg
ICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3du
ZXJFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZl
cklubGluZSkiKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3Rh
dHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5p
bnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6
ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOwor
ICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBp
bnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQog
CiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpA
QCAtMjk1LDYgKzI5NSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiAKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAs
IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQog
ICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAg
ICwgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9m
dW5jdGlvbkRlY2xzKQpAQCAtMzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7
CiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVy
cyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIu
bnVtUGFyYW1ldGVycygpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRo
aXMpOwogfQpAQCAtODUwLDcgKzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAg
Ly8gdG8gdGhlIENvZGVCbG9jay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVj
dGx5IHRvIHRoZSBDb2RlQmxvY2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBj
bGVhcmVkIHdoZW4gdGhlIENvZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSkKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBv
aW50cygpOwogI2VuZGlmCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7
CkBAIC0xMDM3LDcgKzEwMzksNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmds
eShjb25zCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRv
bid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVu
Y2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAgLy8g
c2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCi0g
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJ
VENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMDQ1LDcgKzEwNDcsNyBAQCBib29sIENvZGVCbG9jazo6c2hv
dWxkVmlzaXRTdHJvbmdseShjb25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1
ZVRvV2Vha1JlZmVyZW5jZShWTSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtlZCh0
aGlzKTsKIH0KQEAgLTEwNTgsNiArMTA2MCw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmUo
SklUVHlwZSBqaXRUeXAKICAgICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2FzZSBK
SVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAgICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAgICAg
ICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwNzQsNiArMTA3OCw4IEBAIHN0YXRpYyBTZWNv
bmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkgMTAg
YWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8gSW50
ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7Cisg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNhc2Ug
SklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDoKQEAgLTExNjksNyArMTE3NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJMRShE
RkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewor
ICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpD
b21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICAK
ICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwpAQCAtMTIxNyw3ICsxMjIzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNz
KGNvbnN0IAogICAgIC8vIEluIHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJlIGNh
bGxlZCBvbiBhIGJhc2VsaW5lIENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAgICAv
LyB0aGF0IHdlIG1pZ2h0IGRlY2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpldHRp
c29uZWQgZHVlIHRvIG9sZCBhZ2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRvZXNu
J3QgcHJvdGVjdCB1cy4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpOwpAQCAtMTUxOSw4ICsxNTI1LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmNv
dWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50
ZXJwcmV0ZWQoaml0VHlwZSgpKSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7Cisg
ICAgICAgIC8vIE9PUFM6IFNlcGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3duIGZ1
bmN0aW9uIGZvciBKSVQgSUNzLiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3QganVz
dCBmb3IgTExJbnQuCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB9
CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyArMTUz
Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRpZgog
CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewog
ICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9u
KCk7CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7CiAg
ICAgfQpAQCAtMTU0OCw2ICsxNTU2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KAogICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291
bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50ID0g
bV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgpAQCAtMTU5MCw3ICsxNTk5LDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQo
Q29kZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVyYXRv
ci0+dmFsdWUuYnlWYWxJbmZvID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
eworICAgICAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAg
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVz
ZXMuY2FsbHMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0YXR1
cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpAQCAt
MTc3NSw4ICsxNzg0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNv
bnMKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9u
KCk7CiAgICAgaWYgKGRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3Ig
KGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsK
LSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKTsK
LSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2spOworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyYW5zaXRpdmVseSBrZWVwIHRoZSBi
YXNlbGluZSBjb2RlIGJsb2NrIGFsaXZlLiBJdCdzIGVhc2llciB0byBub3Qgd29ycnkgdGhhdCB3
ZSdyZSByZWx5aW5nIG9uIHRoZSBMT0wgQ29kZUJsb2NrIHNvbWVob3cuCisgICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVC
bG9jay5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwogICAgICAgICB9CiAgICAgfQog
I2VuZGlmCkBAIC0xODEwLDEyICsxODIxLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZp
c2l0U3Ryb25nUmVmZXIKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6Omlz
REZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1v
biA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRT
dGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRPU1JFeGl0VGFy
Z2V0cyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIH0KICNlbmRpZgorCisgICAgaWYgKGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpMT0xKSVQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fYWx0ZXJuYXRp
dmUpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgyMyw3
ICsxODM3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgogICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICgh
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjpp
c0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNv
bW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xODU5LDYg
KzE4NzMsMjUgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdgogI2Vu
ZGlmCiB9CiAKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpsb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUo
KQoreworI2lmIEVOQUJMRShKSVQpCisgICAgQ29kZUJsb2NrKiByZXN1bHQgPSB0aGlzOworICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIGF1dG8gaml0VHlwZSA9IHJlc3VsdC0+aml0VHlwZSgp
OworICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUoaml0VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKK30KKwog
Q29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB7CiAjaWYgRU5BQkxFKEpJ
VCkKQEAgLTE4NjcsNyArMTkwMCw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZl
cnNpb24oKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJl
cGxhY2VtZW50KCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZXNS
ZXBsYWNlbWVudENvZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRoZSBy
ZXBsYWNlbWVudCBjYW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAgYW5k
IHRoZSBleGVjdXRhYmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRzIGNv
ZGVCbG9ja3MgKHNlZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNzLAog
ICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24gdGhl
IHN0YWNrLCBhbmQgYXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTk2NCw3IEBAIEhh
bmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxsU2l0
ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxT
aXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBSRUxF
QVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBBU1NF
UlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBDb2Rl
T3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKQEAg
LTE5NDksNiArMTk4Miw4IEBAIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVCbG9jazo6bmV3
RXgKIAogdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0
ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CisgICAgQVNTRVJUKGJh
c2VsaW5lQWx0ZXJuYXRpdmUoKSA9PSB0aGlzKTsKKwogICAgIGF1dG8mIGluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgT3BDYXRjaCBvcCA9IGluc3Ry
dWN0aW9uLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gb3AubWV0YWRhdGEo
dGhpcyk7CkBAIC0yMjMxLDUxICsyMjY2LDU1IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQ
cm9maWxlcjo6SmV0dGkKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CiAg
ICAgCiAgICAgLy8gV2Ugd2FudCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAv
LyAxKSBNYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmln
aHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAorICAgIC8vIDEpIElmIHdlJ3JlIERGRy9G
VEwsIG1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdo
dCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0CiAgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBl
eGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhl
IHJldHVybi4KICAgICAvLyAyKSBNYWtlIHN1cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBl
eGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4ndCBjYWxsIHRoaXMgQ29kZUJsb2NrLgogCiAjaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAg
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlm
IChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCkt
PmNvbXBpbGF0aW9uLmdldCgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQot
ICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWls
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMg
aXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5l
ZC4KLSAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsK
LSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1
cnJlbnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkp
KSk7Ci0gICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxl
cjo6SmV0dGlzb25EdWVUb09sZEFnZSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdl
dCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAg
ICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2Vz
IGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVu
ZWQuCisgICAgICAgICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUo
KSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4K
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwg
KHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVy
RXhlY3V0YWJsZSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1i
bHkoKSkKICAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4i
KTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVv
cHRpbWl6YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2Rl
ID09IENvdW50UmVvcHRpbWl6YXRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMg
c2hvdWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZl
KCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAg
aWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYK
ICAgICB9CiAgICAgCiAgICAgaWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAv
LyBUaGlzIG1lYW5zIHRoYXQgd2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4g
aGFwcGVuIGZvciBPU1IgZW50cnkgY29kZQogICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8v
IE9yLCB3ZSdyZSBhbiBMT0wgQ29kZUJsb2NrIGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAg
ICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29u
ICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb1ZNVHJhcHMpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSAmJiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29u
ICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcykKICAgICAgICAgdGFsbHlGcmVxdWVu
dEV4aXRTaXRlcygpOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgLy8gSmV0dGlz
b24gY2FuIGhhcHBlbiBkdXJpbmcgR0MuIFdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRv
IGEgZGVhZCBleGVjdXRhYmxlCiAgICAgLy8gYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQg
b2JqZWN0IHRvIHRoZSByZW1lbWJlcmVkIHNldC4KQEAgLTIzMDYsNyArMjM0NSw3IEBAIEpTR2xv
YmFsT2JqZWN0KiBDb2RlQmxvY2s6Omdsb2JhbE9iamVjdEYKICAgICBhdXRvKiBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lKQogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIHJldHVy
biBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
OwogfQogCiBjbGFzcyBSZWN1cnNpb25DaGVja0Z1bmN0b3IgewpAQCAtMjM2NSw3ICsyNDA0LDcg
QEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgIGlm
ICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoIURGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKSkKQEAgLTIzOTAsNyArMjQyOSw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEYKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNv
ZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxl
ckNvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmso
KSwgIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxsZXIgd2FzIGFscmVhZHkgb3B0aW1pemVk
LiIpOwogICAgICAgICByZXR1cm47CkBAIC0yNDgzLDEyICsyNTIyLDE0IEBAIHVuc2lnbmVkIENv
ZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAgaWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkg
eworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21waWxhdGlvbikKICAgICAgICAgICAgIHJl
dHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/
IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAgICAgfQogICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudCgpOwotICAgIHJldHVybiAoKHJl
cGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlw
ZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAgIHJldHVy
biAoKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5
cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKIH0KIAogaW50
MzJfdCBDb2RlQmxvY2s6OmNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0CkBAIC0y
NjQxLDcgKzI2ODIsNyBAQCBhdXRvIENvZGVCbG9jazo6dXBkYXRlT1NSRXhpdENvdW50ZXJBbmRD
CiAKICAgICBib29sIGRpZFRyeVRvRW50ZXJJbkxvb3AgPSBmYWxzZTsKICAgICBmb3IgKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZy
YW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlU
b0VudGVySW5Mb29wKCkpIHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNl
bGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkg
ewogICAgICAgICAgICAgZGlkVHJ5VG9FbnRlckluTG9vcCA9IHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMjcwOSw3ICsyNzUwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZv
cmNlT3B0aW1pemF0aW9uU2xvd1BhdAogdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQp
CiB7CiAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgpOwotICAgIGlmICh0eXBlICE9IEpJVFR5
cGU6OkJhc2VsaW5lSklUKSB7CisgICAgaWYgKHR5cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQg
JiYgdHlwZSAhPSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAgZGF0YUxvZ0xuKCp0aGlzLCAi
OiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNvZGUgYnV0IGhhdmUgIiwgdHlwZSk7CiAgICAg
ICAgIENSQVNIX1dJVEhfSU5GTyhiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihqaXRDb2RlKCkuZ2V0
KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBlKSk7CiAgICAgfQpAQCAtMjcyNyw3ICsyNzY4
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZAogICAgIAogICAg
IHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxh
Y2VtZW50ICYmIEpJVENvZGU6OmlzREZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOwog
ICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIENvbXBpbGF0aW9uRmFpbGVkOgpAQCAtMjc1Niw3ICsyNzk3LDggQEAgdm9pZCBDb2RlQmxv
Y2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZAogICAgIAogdWludDMyX3QgQ29kZUJsb2NrOjph
ZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogewot
ICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgLy9B
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOyAvLyBPT1BTOiBXZSBj
YWxsIHRoaXMgZnJvbSB0aGUgTE9MIGNvbXBpbGVyIHRocmVhZCBiZWZvcmUgaW5zdGFsbC4KKwog
ICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3YXkgc28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRo
aXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQogICAgIC8vIGVub3VnaCB0aGF0IHRoaXMgbG9vcCB3
b24ndCBodXJ0IHVzLgogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGRlc2lyZWRUaHJlc2hvbGQ7CkBA
IC0yODM2LDcgKzI4NzgsNyBAQCBERkc6OkNvZGVPcmlnaW5Qb29sJiBDb2RlQmxvY2s6OmNvZGVP
cmlnCiAKIHNpemVfdCBDb2RlQmxvY2s6Om51bWJlck9mREZHSWRlbnRpZmllcnMoKSBjb25zdAog
ewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYg
KCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IAogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVycy5zaXpl
KCk7CkBAIC0yODQ3LDcgKzI4ODksNyBAQCBjb25zdCBJZGVudGlmaWVyJiBDb2RlQmxvY2s6Omlk
ZW50aWZpZXIoCiAgICAgc2l6ZV90IHVubGlua2VkSWRlbnRpZmllcnMgPSBtX3VubGlua2VkQ29k
ZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aW5kZXgpIDwgdW5saW5rZWRJZGVudGlmaWVycykKICAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5pZGVudGlmaWVyKGluZGV4KTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUo
KSkpOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVyc1tp
bmRleCAtIHVubGlua2VkSWRlbnRpZmllcnNdOwogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpAQCAtMjkxMiwxOCArMjk1NCwxOSBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGlj
dGlvbnMoKQogICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKIH0KIAotYm9vbCBDb2Rl
QmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6
ZVRvREZHTm93KCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJD
b25zaWRlcmluZyBvcHRpbWl6aW5nICIsICp0aGlzLCAiLi4uIik7CiAKICAgICBpZiAobV9vcHRp
bWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkRlbGF5
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHVwZGF0ZUFsbEFycmF5UHJlZGlj
dGlvbnMoKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVBbHRl
cm5hdGl2ZSgpOworICAgIGJhc2VsaW5lQ29kZUJsb2NrLT51cGRhdGVBbGxBcnJheVByZWRpY3Rp
b25zKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzOwogICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXM7Ci0gICAgdXBk
YXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7Cisg
ICAgYmFzZWxpbmVDb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5k
Q291bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
ewogICAgICAgICBkYXRhTG9nRigKQEAgLTI5NDgsNyArMjk5MSw4IEBAIGJvb2wgQ29kZUJsb2Nr
OjpzaG91bGRPcHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9j
azo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAvLyBPT1BTCisgICAgQVNTRVJUKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUwLDYgKzMwOTQsNyBAQCB1bnNpZ25l
ZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAg
IGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CiAg
ICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCkBAIC0zMjI2LDE0ICszMjcxLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjph
ZGRCcmVha3BvaW50KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJyZWFrcG9pbnRzICs9IG51bUJy
ZWFrcG9pbnRzOwogICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzKTsKLSAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JG
VEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9E
ZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2Rl
KENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAgbV9zdGVwcGluZ01vZGUgPSBt
b2RlOwotICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5h
YmxlZCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGpldHRpc29u
KFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7CiB9CiAKQEAgLTMyOTYs
NyArMzM0MSw3IEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIAog
Ym9vbCBDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkp
CisgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUgPSBiaW5hcnlBcml0aFByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmICghcHJvZmlsZSkKQEAg
LTM0MjEsOSArMzQ2Niw5IEBAIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6Ynl0
ZWMKIHsKICAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJ
VFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
CisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChqaXRUeXBlKSkK
ICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGNhbGxTaXRlSW5kZXguYnl0ZWNvZGVJbmRleCgpOwot
ICAgIGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklU
VHlwZTo6RlRMSklUKSB7CisgICAgZWxzZSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAg
ICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7CkBAIC0zNDY2
LDcgKzM1MTEsNyBAQCBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwCiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4g
V2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBp
cyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVy
dHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5
cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdD
b21tb24oKS0+aGFzSW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9pbnRzKCk7CiAjZWxzZQpAQCAtMzQ4
MCw3ICszNTI1LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVha3BvaW50cwog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIu
IFdlIG5lZWQgdG8gYmUKICAgICAvLyBjYXJlZnVsIHRvIG5vdCBjYWxsIGFueXRoaW5nIHRoYXQg
aXMgbm90IHNpZ25hbCBoYW5kbGVyIHNhZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91bGQgbm90IHBl
cnR1cmIgdGhlIHJlZkNvdW50IG9mIG1faml0Q29kZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgY29tbW9uRGF0YSA9ICpt
X2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgIGNvbW1vbkRhdGEuaW5zdGFsbFZNVHJhcEJyZWFr
cG9pbnRzKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2LDcgQEAgcHVibGlj
OgogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAgIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogbG9sT3JCYXNlbGluZUFsdGVybmF0aXZlKCk7CiAg
ICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkBAIC0zNDcsNyArMzQ4LDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkp
CisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29k
ZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC0zNTYsNyArMzU3LDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAg
ICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAg
ICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZUluZGV4
KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC00MzYsOSArNDM3LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJv
ZmlsaW5nKCkgY29uc3QKKyAgICBib29sIGhhc0Jhc2VsaW5lT3JMT0xQcm9maWxpbmcoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDsKKyAgICAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgpOworICAgICAgICByZXR1cm4gdHlw
ZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0eXBlID09IEpJVFR5cGU6OkxPTEpJVDsKICAg
ICB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUxMSw2ICs1MTMsNyBAQCBwdWJsaWM6CiAg
ICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENhdGNoUHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBGdW5jdG9yJik7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlQcm9maWxlKGNvbnN0IEZ1
bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5j
dG9yJik7CkBAIC01MzksNyArNTQyLDcgQEAgcHVibGljOgogICAgIC8vIEhhdmluZyBjb2RlIG9y
aWdpbnMgaW1wbGllcyB0aGF0IHRoZXJlIGhhcyBiZWVuIHNvbWUgaW5saW5pbmcuCiAgICAgYm9v
bCBoYXNDb2RlT3JpZ2lucygpCiAgICAgewotICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSk7CisgICAgICAgIHJldHVybiBKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSk7CiAgICAgfQogICAgICAgICAKICAgICBib29sIGNhbkdldENvZGVPcmlnaW4o
Q2FsbFNpdGVJbmRleCBpbmRleCkKQEAgLTgwMyw3ICs4MDYsNyBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCi0gICAg
Ym9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworICAgIGJvb2wgc2hvdWxkT3B0aW1pemVUb0RGR05v
dygpOwogICAgIHZvaWQgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKICAgICB2
b2lkIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKICAgICB2b2lkIHVwZGF0ZUFsbFByZWRp
Y3Rpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAg
ICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7
CiAgICAgfSAgIAorfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxv
Y2s6OmZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3Qg
RnVuY3RvciYgZnVuYykKK3sKKyAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdl
dCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2Nh
dGNoUHJvZmlsZXMpCisgICAgICAgICAgICBmdW5jKCpwcm9maWxlQnVja2V0KTsKKyAgICB9CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBDb2RlT3JpZ2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRv
KAogICAgICAgICBpZiAoIWFIYXNJbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCi0gICAgICAgIGlmIChhSW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay5nZXQoKSAhPSBiSW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQo
KSkKKyAgICAgICAgaWYgKGFJbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCkgIT0gYklubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGEgPSBhSW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CkBAIC05OSw3ICs5OSw3IEBAIHVuc2lnbmVkIENvZGVP
cmlnaW46OmFwcHJveGltYXRlSGFzaChJbmwKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSA9
PSB0ZXJtaW5hbCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAotICAgICAg
ICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNo
PEpTQ2VsbCo+OjpoYXNoKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5n
ZXQoKSk7CiAgICAgICAgIAogICAgICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5k
aXJlY3RDYWxsZXI7CiAgICAgfQpAQCAtMTIxLDcgKzEyMSw3IEBAIENvZGVCbG9jayogQ29kZU9y
aWdpbjo6Y29kZU9yaWdpbk93bmVyKCkKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSB0aGlz
LT5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2suZ2V0KCk7CisgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZy
YW1lKGlubGluZUNhbGxGcmFtZSk7CiB9CiAKIGludCBDb2RlT3JpZ2luOjpzdGFja09mZnNldCgp
IGNvbnN0CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBDb2RlT3JpZ2luOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIAogICAgICAgICAgICAgb3V0LnByaW50KCIgLS0+ICIpOwogICAgICAgICAKICAg
ICAgICAgaWYgKElubGluZUNhbGxGcmFtZSogZnJhbWUgPSBzdGFja1tpXS5pbmxpbmVDYWxsRnJh
bWUoKSkgewotICAgICAgICAgICAgb3V0LnByaW50KGZyYW1lLT5icmllZkZ1bmN0aW9uSW5mb3Jt
YXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihmcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkp
LCAiPiAiKTsKKyAgICAgICAgICAgIG91dC5wcmludChmcmFtZS0+YnJpZWZGdW5jdGlvbkluZm9y
bWF0aW9uKCksICI6PCIsIFJhd1BvaW50ZXIoZnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCkpLCAiPiAiKTsKICAgICAgICAgICAgIGlmIChmcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIihjbG9zdXJlKSAiKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhp
dGluZ0pJVFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFeGkKICAgICBjYXNlIEV4aXRGcm9tQW55dGhp
bmc6CiAgICAgICAgIG91dC5wcmludCgiRnJvbUFueXRoaW5nIik7CiAgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEV4aXRGcm9tTE9MOgorICAgICAgICBvdXQucHJpbnQoIkZyb21MT0wiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdEZyb21ERkc6CiAgICAgICAgIG91dC5wcmludCgi
RnJvbURGRyIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gRXhpdGluZ0pJVFR5
cGUgOiB1aW50OF90IHsKICAgICBFeGl0RnJvbUFueXRoaW5nLAorICAgIEV4aXRGcm9tTE9MLAog
ICAgIEV4aXRGcm9tREZHLAogICAgIEV4aXRGcm9tRlRMCiB9OwpAQCAtMzgsNiArMzksOCBAQCBl
bnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiBpbmxpbmUgRXhpdGluZ0pJVFR5cGUgZXhp
dGluZ0pJVFR5cGVGb3IoSklUVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gRXhpdEZyb21MT0w7CiAgICAg
Y2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiBFeGl0RnJvbURGRzsKICAgICBj
YXNlIEpJVFR5cGU6OkZUTEpJVDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTcgKzQ1LDE3IEBAIEpTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2Fs
bGVlRm9yQ2EKIAogQ29kZUJsb2NrSGFzaCBJbmxpbmVDYWxsRnJhbWU6Omhhc2goKSBjb25zdAog
ewotICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jay0+aGFzaCgpOworICAgIHJldHVybiBsb2xP
ckJhc2VsaW5lQ29kZUJsb2NrLT5oYXNoKCk7CiB9CiAKIENTdHJpbmcgSW5saW5lQ2FsbEZyYW1l
OjpoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2stPmhhc2hBc1N0cmluZ0lmUG9zc2libGUoKTsKKyAgICByZXR1cm4gbG9sT3JCYXNl
bGluZUNvZGVCbG9jay0+aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpOwogfQogCiBDU3RyaW5nIElu
bGluZUNhbGxGcmFtZTo6aW5mZXJyZWROYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSktPmVjbWFOYW1lKCkudXRmOCgpOworICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4obG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLT5lY21hTmFt
ZSgpLnV0ZjgoKTsKIH0KIAogdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBCcmllZkZ1bmN0aW9u
SW5mb3JtYXRpb24oUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTY1LDcgKzY1LDcgQEAgdm9p
ZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBCcmllZkZ1bmN0aW9uSQogCiB2b2lkIElubGluZUNhbGxG
cmFtZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCksICI6
PCIsIFJhd1BvaW50ZXIoYmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpKTsKKyAgICBvdXQucHJpbnQo
YnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1BvaW50ZXIobG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay5nZXQoKSkpOwogICAgIGlmIChpc0luU3RyaWN0Q29udGV4dCgpKQogICAgICAg
ICBvdXQucHJpbnQoIiAoU3RyaWN0TW9kZSkiKTsKICAgICBvdXQucHJpbnQoIiwgIiwgZGlyZWN0
Q2FsbGVyLmJ5dGVjb2RlSW5kZXgoKSwgIiwgIiwgc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgc3Ry
dWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292
ZXJ5PiBhcmd1bWVudHNXaXRoRml4dXA7IC8vIEluY2x1ZGVzICd0aGlzJyBhbmQgYXJpdHkgZml4
dXBzLgotICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOworICAg
IFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGxvbE9yQmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgQ29k
ZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAKICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCkBAIC0yMzEsMjAgKzIzMSwy
MSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBwdHJkaWZmX3QgY2FsbGVyRnJhbWVP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCk7IH0KICAgICBwdHJkaWZmX3QgcmV0dXJuUENP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGFja09mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBD
YWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCk7IH0KIAotICAgIGJvb2wgaXNJblN0cmljdENvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBiYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkt
PmlzSW5TdHJpY3RDb250ZXh0KCk7IH0KKyAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlz
SW5TdHJpY3RDb250ZXh0KCk7IH0KIAogICAgIHZvaWQgZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1h
dGlvbihQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CiAKICAgICBNQUtFX1BSSU5UX01FVEhPRChJbmxpbmVDYWxsRnJhbWUsIGR1bXBCcmll
ZkZ1bmN0aW9uSW5mb3JtYXRpb24sIGJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbik7Ci0KIH07CiAK
IGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlu
bGluZUNhbGxGcmFtZSk7Ci0gICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2suZ2V0KCk7CisgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gaW5saW5lQ2FsbEZy
YW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQorICAgICAgICByZXR1cm4gY29kZUJs
b2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGlu
bGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSA8dHlwZV90
cmFpdHM+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkg
PT0gc2l6ZW9mKAogCiBlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxl
ZSA9IGZhbHNlPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgogICAgIHVzaW5nIFN0b3JhZ2Ug
PSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0
b3IsIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OwpAQCAtMTQzLDIxICsxNDQs
MjMgQEAgcHVibGljOgogCiAgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNp
dCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3Qg
bnVtVG1wcykKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXpl
X3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgc2l6ZV90IG51bUNvbnN0YW50cyA9IDApCiAg
ICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9j
YWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAg
ICAgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51
bVRtcHM7CisgICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsg
bnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWU7CiAgICAgICAgIG1fdmFsdWVz
Lmdyb3coc2l6ZSk7CiAgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5p
dGlhbGl6YXRpb24pCiAgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0g
ICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fs
cywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKKyAgICBleHBsaWNpdCBP
cGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVt
VG1wcywgc2l6ZV90IG51bUNvbnN0YW50cywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
KTsKKyAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1D
b25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZSk7CiAgICAgICAgIG1fdmFsdWVzLmZp
bGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCkBAIC0xNjUsNiArMTY4LDcgQEAgcHVibGlj
OgogICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8
VT4mIG90aGVyLCBjb25zdCBUJiBpbml0aWFsVmFsdWUgPSBUKCkpCiAgICAgICAgIDogbV9udW1B
cmd1bWVudHMob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgLCBtX251bUxvY2Fs
cyhvdGhlci5udW1iZXJPZkxvY2FscygpKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG90aGVy
Lm51bWJlck9mQ29uc3RhbnRzKCkpCiAgICAgewogICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVy
LnNpemUoKSk7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKQEAgLTE3Miwz
MyArMTc2LDUxIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAt
IG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZDb25zdGFudHMoKSBjb25z
dCB7IHJldHVybiBtX251bUNvbnN0YW50czsgfQorICAgIHNpemVfdCBudW1iZXJPZlRtcHMoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVt
YmVyT2ZMb2NhbHMoKSAtIG51bWJlck9mQ29uc3RhbnRzKCkgLSAhIXRyYWNrQ2FsbGVlOyB9CiAK
KyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lm
X3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBzaXplX3QgY2FsbGVlSW5kZXgoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIDE7CisgICAgfQogICAgIHNp
emVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlk
eCA8IG51bWJlck9mVG1wcygpKTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpOwogICAg
IH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4g
aWR4OwogICAgIH0KLSAgICAKICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mTG9jYWxzKCkpOwogICAgICAg
ICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIGlkeDsKICAgICB9CisgICAgc2l6ZV90IGNv
bnN0YW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHgg
PCBudW1iZXJPZkNvbnN0YW50cygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRz
KCkgKyBudW1iZXJPZkxvY2FscygpICsgaWR4OworICAgIH0KIAogICAgIFJlZlR5cGUgdG1wKHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RS
ZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChp
ZHgpXTsgfQogICAgIAogICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBhcmd1bWVu
dChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCld
OyB9CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5h
YmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBSZWZUeXBlIGNhbGxlZSgpIHsgcmV0
dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5
cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIENvbnN0
UmVmVHlwZSBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KICAgICAK
ICAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5k
ZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQorCisgICAgUmVmVHlwZSBjb25zdGFu
dChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCldOyB9Cisg
ICAgQ29uc3RSZWZUeXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2lu
ZCBvcGVyYW5kS2luZD4KICAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CkBAIC0yNDgsNyArMjcw
LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBudW1iZXJPZkNvbnN0YW50
cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIHNpemVfdCBvbGROdW1Mb2NhbHMg
PSBudW1iZXJPZkxvY2FscygpOwogICAgICAgICBzaXplX3Qgb2xkTnVtVG1wcyA9IG51bWJlck9m
VG1wcygpOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwpAQCAtMjY4LDcgKzI5MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdT
aXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkNv
bnN0YW50cygpICsgISF0cmFja0NhbGxlZSArIHNpemU7CiAgICAgICAgIG1fdmFsdWVzLmdyb3co
bmV3U2l6ZSk7CiAKICAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVj
dG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7CkBAIC0zMDUsOCArMzI3LDE1IEBA
IHB1YmxpYzoKIAogICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAg
ICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3RleHBy
ICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkg
JiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjYWxsZWVJbmRleCgpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9
CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBj
b25zdGFudEluZGV4KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4g
bG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIApAQCAtMzE5LDggKzM0
OCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhw
ciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigp
ICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY2FsbGVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICB9CisgICAgICAg
IGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudChv
cGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJhbmQu
dG9Mb2NhbCgpKTsKICAgICB9CiAKQEAgLTMzOCw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSkgPCBudW1iZXJP
ZkNvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5k
LnRvTG9jYWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICBib29sIGhhc09wZXJh
bmQoT3BlcmFuZCBvcCkgY29uc3QKQEAgLTM2NCw5ICs0MDIsMTUgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKICAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOwotICAg
ICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50
cygpKQorICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRl
eCAtIG51bWJlck9mQXJndW1lbnRzKCkpOwotICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGlu
ZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKSk7CisgICAgICAg
IGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVt
YmVyT2ZDb25zdGFudHMoKSkKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JD
b25zdGFudChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpKTsK
KyAgICAgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IGNhbGxlZUluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBP
cGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRz
KCkgKyBudW1iZXJPZkNvbnN0YW50cygpKSk7CiAgICAgfQogCiAgICAgdm9pZCBmaWxsKFQgdmFs
dWUpCkBAIC0zOTMsMTAgKzQzNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlyc3QgbV9udW1B
cmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMg
YXJlIGxvY2FscywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgorICAgIC8vIFRoZSBmaXJzdCBtX251
bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2Fs
cyBhcmUgbG9jYWxzLCB0aGUgbmV4dCBtX251bUNvbnN0YW50cyBhcmUgY29uc3RhbnRzLCBhbmQg
dGhlIHJlc3QgYXJlIHRtcHMuCiAgICAgU3RvcmFnZSBtX3ZhbHVlczsKICAgICB1bnNpZ25lZCBt
X251bUFyZ3VtZW50cyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bUxvY2FscyB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBtX251bUNvbnN0YW50cyB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lu
bGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGlu
bGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlcigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3Bl
cmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9p
ZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1h
KCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRz
KCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTU3LDEwICs1NywxMiBAQCB2b2lkIE9wZXJhbmRz
PFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0
bXBJbmRleCksIGNvbnRleHQpKTsKICAgICB9CisgICAgaWYgY29uc3RleHByICh0cmFja0NhbGxl
ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbGVlIiwgIjoiLCBpbkNvbnRleHQoY2Fs
bGVlKCksIGNvbnRleHQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgT3BlcmFu
ZHM8VD46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IGJvb2wgdHJhY2tDYWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwog
ICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1
bWVudEluZGV4LS07KSB7CkBAIC03OCw2ICs4MCw4IEBAIHZvaWQgT3BlcmFuZHM8VD46OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCB0bXAodG1wSW5kZXgpKTsKICAgICB9Cisg
ICAgaWYgY29uc3RleHByICh0cmFja0NhbGxlZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
Y2FsbGVlIiwgIjoiLCBjYWxsZWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcg
QEAgY29uc3QgUmVnaXN0ZXJTZXQmIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZQogICAgICAgICBtX2xp
dmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlID0gaml0LT5j
b2RlQmxvY2soKS0+aml0Q29kZSgpLT5saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9u
SGFuZGxpbmdDYWxsU2l0ZShqaXQtPmNvZGVCbG9jaygpLCBzdHViSW5mby0+Y2FsbFNpdGVJbmRl
eCk7CiAgICAgICAgIG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbiA9IG1fbGl2
ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUubnVtYmVyT2ZT
ZXRSZWdpc3RlcnMoKSA+IDA7CiAgICAgICAgIGlmIChtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJz
SWZFeGNlcHRpb24pCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUo
KSkpOwogCiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xp
dmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0
b3ItPnVzZWRSZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhj
bHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNzEwLDcgKzcxMCw3IEBAIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgLy8gV2Ugc2V0IHRoZXNl
IHRvIGluZGljYXRlIHRvIHRoZSBzdHViIHRvIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgQ29kZUJs
b2NrJ3MKICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgdGFibGUgd2hlbiBpdCBpcyBkZWFs
bG9jYXRlZC4KICAgICAgICAgY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycyA9IGNv
ZGVCbG9jazsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxv
Y2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJU
KEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5kbGVycy0+
aml0VHlwZSgpKSk7CiAgICAgICAgIGNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9
IHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZygpOwogICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVj
dWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIGlubGluZSBi
b29sIGlzSW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgJiYgISh2
YWx1ZSAmIH5TcGVjSW50MzJPbmx5KTsKIH0KIAoraW5saW5lIGJvb2wgaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAm
JiAhKHZhbHVlICYgflNwZWNCeXRlY29kZURvdWJsZSk7Cit9CisKIGlubGluZSBib29sIGlzTm90
SW50MzJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFs
dWUgJiYgISh2YWx1ZSAmIFNwZWNJbnQzMk9ubHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgsOCArMTE4LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMg
dGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0
IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rl
ci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3Mg
VmlydHVhbFJlZ2lzdGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50LCBpbnQpOworICAgIGZy
aWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50KTsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZm
ZmZmOwogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAh
PSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAg
Ym9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVu
dChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKSAmJiAhaXND
b25zdGFudCgpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciA+PSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCB0b0xv
Y2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1f
dmlydHVhbFJlZ2lzdGVyKTsgfQpAQCAtMTE3LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5k
OyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1
cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KICAgICBzdGF0
aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQg
KyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBjb25z
dGFudFRvT3BlcmFuZChpbnQgY29uc3RhbnRJbmRleCkgeyByZXR1cm4gZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4OyB9CiAKICAgICBpbnQgbV92aXJ0dWFsUmVnaXN0
ZXI7CiB9OwpAQCAtMTMzLDQgKzEzNSw5IEBAIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm8KICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KIAoraW5saW5lIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQgY29uc3RhbnRJbmRleCkK
K3sKKyAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6Y29uc3RhbnRU
b09wZXJhbmQoY29uc3RhbnRJbmRleCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5
dGVjb2RlSW5kZXggYnl0CiAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMsIG51bVRtcHMpCiAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMs
IG51bVRtcHMpCi0gICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKKyAgICAs
IGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcywgMCwgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwgZXhlY3V0aW9uQ291
bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW5CeUlkU3Rh
dHVzLmgiCiAjaW5jbHVkZSAiSW5zdGFuY2VPZlN0YXR1cy5oIgorI2luY2x1ZGUgIkpJVENvZGUu
aCIKICNpbmNsdWRlICJKU0FycmF5SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKQEAgLTkwNSw3ICs5MDYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Rpb247CiAgICAgICAgIH07CiAKLSAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFZhbHVlUHJvZmlsZVByZWRpY3Rp
b25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSgp
KSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmVkaWN0aW9u
ICE9IFNwZWNOb25lKQogICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Rpb247CiAKQEAgLTkzOSw3
ICs5NDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgd2hpbGUgKHN0YWNrLT5tX2lubGluZUNh
bGxGcmFtZSAhPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKSkKICAgICAgICAgICAgICAg
ICBzdGFjayA9IHN0YWNrLT5tX2NhbGxlcjsKIAotICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVl
UHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQoc3RhY2st
Pm1fcHJvZmlsZWRCbG9jaywgKmNvZGVPcmlnaW4pOworICAgICAgICAgICAgcmV0dXJuIGdldFZh
bHVlUHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQoc3Rh
Y2stPm1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCAqY29kZU9yaWdpbik7
CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgpAQCAtOTgyLDggKzk4Myw5IEBAIHByaXZh
dGU6CiAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlKEFycmF5UHJvZmlsZSYgcHJvZmlsZSwg
QXJyYXk6OkFjdGlvbiBhY3Rpb24pCiAgICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2spOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwor
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2sp
OwogICAgICAgICBib29sIG1ha2VTYWZlID0gcHJvZmlsZS5vdXRPZkJvdW5kcyhsb2NrZXIpOwog
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQobG9ja2VyLCAmcHJvZmlsZSwg
YWN0aW9uLCBtYWtlU2FmZSk7CiAgICAgfQpAQCAtMTY2OCw3ICsxNjcwLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYQogICAgIGNvbnN0IEluc3RydWN0aW9uKiBz
YXZlZEN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY3VycmVudEluc3RydWN0aW9uOwogICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpz
cGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxlZS5mdW5jdGlvbkV4ZWN1dGFibGUoKS0+YmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxlZS5mdW5jdGlv
bkV4ZWN1dGFibGUoKS0+bG9sT3JCYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktp
bmQpOwogICAgIGluc2VydENoZWNrcyhjb2RlQmxvY2spOwogCiAgICAgLy8gRklYTUU6IERvbid0
IGZsdXNoIGNvbnN0YW50cyEKQEAgLTY4NzMsNyArNjg3NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQsIFdU
Rjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dW5zaWduZWQ+PiBzZWVuQXJndW1lbnRzOwogCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUo
KS0+bV9sb2NrKTsKIAogICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CkBAIC04MzQ1LDIz
ICs4MzQ3LDI4IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAg
ICB7CiAgICAgICAgIG1fZXhpdFByb2ZpbGUuaW5pdGlhbGl6ZShtX3Byb2ZpbGVkQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCkpOwogCi0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFs
aXplKGxvY2tlciwgbV9wcm9maWxlZEJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9j
a2VyKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIGNvZGVCbG9jayA9IG1fcHJvZmls
ZWRCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIG1fbGF6eU9wZXJhbmRz
LmluaXRpYWxpemUobG9ja2VyLCBjb2RlQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcyhs
b2NrZXIpKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV2UgZG8gdGhpcyB3aGls
ZSBob2xkaW5nIHRoZSBsb2NrIGJlY2F1c2Ugd2Ugd2FudCB0byBlbmNvdXJhZ2UgU3RydWN0dXJl
U3R1YkluZm8ncwogICAgICAgICAvLyB0byBiZSBwb3RlbnRpYWxseSBhZGRlZCB0byBvcGVyYXRp
b25zIGFuZCBiZWNhdXNlIHRoZSBwcm9maWxlZCBibG9jayBjb3VsZCBiZSBpbiB0aGUKICAgICAg
ICAgLy8gbWlkZGxlIG9mIExMSW50LT5KSVQgdGllci11cCBpbiB3aGljaCBjYXNlIHdlIHdvdWxk
IGJlIGFkZGluZyB0aGUgaW5mbydzIHJpZ2h0IG5vdy4KLSAgICAgICAgaWYgKG1fcHJvZmlsZWRC
bG9jay0+aGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIG1fcHJvZmlsZWRC
bG9jay0+Z2V0SUNTdGF0dXNNYXAobG9ja2VyLCBtX2Jhc2VsaW5lTWFwKTsKKyAgICAgICAgaWYg
KG1fcHJvZmlsZWRCbG9jay0+aGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQorICAgICAgICAg
ICAgbV9wcm9maWxlZEJsb2NrLT5nZXRJQ1N0YXR1c01hcChtX2Jhc2VsaW5lTWFwKTsKICAgICB9
CiAgICAgCi0gICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRCbG9jayA9IG1fcHJvZmlsZWRCbG9jay0+
cmVwbGFjZW1lbnQoKTsKLSAgICBtX29wdGltaXplZENvbnRleHQub3B0aW1pemVkQ29kZUJsb2Nr
ID0gb3B0aW1pemVkQmxvY2s7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZVBvbHl2YXJpYW50RGV2aXJ0
dWFsaXphdGlvbigpICYmIG9wdGltaXplZEJsb2NrKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIob3B0aW1pemVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG9wdGltaXplZEJs
b2NrLT5nZXRJQ1N0YXR1c01hcChsb2NrZXIsIG1fb3B0aW1pemVkQ29udGV4dC5tYXApOworICAg
IHsKKyAgICAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRCbG9jayA9IG1fcHJvZmlsZWRCbG9jay0+
cmVwbGFjZW1lbnQoKTsKKyAgICAgICAgbV9vcHRpbWl6ZWRDb250ZXh0Lm9wdGltaXplZENvZGVC
bG9jayA9IG9wdGltaXplZEJsb2NrOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlUG9seXZhcmlh
bnREZXZpcnR1YWxpemF0aW9uKCkgJiYgb3B0aW1pemVkQmxvY2sgJiYgSlNDOjpKSVRDb2RlOjpp
c0hpZ2hlclRpZXIob3B0aW1pemVkQmxvY2stPmppdFR5cGUoKSwgbV9wcm9maWxlZEJsb2NrLT5q
aXRUeXBlKCkpKSB7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG9wdGlt
aXplZEJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgb3B0aW1pemVkQmxvY2stPmdldElDU3Rh
dHVzTWFwKGxvY2tlciwgbV9vcHRpbWl6ZWRDb250ZXh0Lm1hcCk7CisgICAgICAgIH0KKyAgICAg
ICAgYnl0ZUNvZGVQYXJzZXItPm1faWNDb250ZXh0U3RhY2suYXBwZW5kKCZtX29wdGltaXplZENv
bnRleHQpOwogICAgIH0KLSAgICBieXRlQ29kZVBhcnNlci0+bV9pY0NvbnRleHRTdGFjay5hcHBl
bmQoJm1fb3B0aW1pemVkQ29udGV4dCk7CiAgICAgCiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzV2l0aEZpeHVwID0gc3RkOjptYXg8aW50Pihhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogCkBAIC04Mzc1LDcgKzgzODIsNyBA
QCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAKICAgICAgICAgLy8g
VGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBhbHJlYWR5IGhhdmUg
YSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBmaW5pc2hlcy4KLSAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
cHJvZmlsZWRCbG9jayk7IC8vIE9PUFM6IEFzc2VydCBpdCdzIGEgTE9MLCBCYXNlbGluZSwgb3Ig
TExJbnQgQ0IuCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2Fs
bGVyLT5tX2lubGluZUNhbGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0IDogMCkgKyBtX2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAg
IG1faW5saW5lQ2FsbEZyYW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5v
ZmZzZXQoKSAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB2
b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zCiAgICAgICAgICAgICAgICAg
ICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKHJlY292ZXJ5LmNvbnN0YW50KCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisg
ICAgICAgICAgICBpZiAoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGlubGluZUNhbGxG
cmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSkKICAgICAgICAgICAgICAgICB0cmFj
a2VkUmVmZXJlbmNlcy5jaGVjayhiYXNlbGluZUNvZGVCbG9jayk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY3OCw3ICsxNjc4LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZSBHcmFwaDo6bWV0aAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2gg
U2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6
CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NTg0MQogICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudE5vZGUgJiYgbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gYXJndW1lbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkg
ewotICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGlu
ZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBwcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC0xNjg2LDEyICsxNjg2LDEyIEBAIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKIAogICAgICAgICAvLyBjdXJyZW50Tm9kZSBpcyBudWxs
IHdoZW4gd2UncmUgZG9pbmcgc3BlY3VsYXRpb24gY2hlY2tzIGZvciBjaGVja0FyZ3VtZW50VHlw
ZXMoKS4KICAgICAgICAgaWYgKCFjdXJyZW50Tm9kZSB8fCBub2RlLT5vcmlnaW4uc2VtYW50aWMg
IT0gY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyB8fCAhY3VycmVudE5vZGUtPmhhc1Jlc3Vs
dCgpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrID0gcHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3Bl
cmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
LCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzAwLDcgKzE3MDAs
NyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRoCiAgICAgICAgICAg
ICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
JnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CiAKLSAgICAgICAgICAgIGlmIChwcm9maWxlZEJs
b2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZWRCbG9jay0+aGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKEJpbmFyeUFyaXRoUHJvZmlsZSogcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
ICAgICBpZiAoVW5hcnlBcml0aFByb2ZpbGUqIHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPnVuYXJ5
QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNv
ZGVJbmRleCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtNDgxLDcgKzQ4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOworICAgICAgICByZXR1cm4gaW5saW5lQ2Fs
bEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICB9
CiAgICAgCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3Jp
Z2luJiBjb2RlT3JpZ2luKQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHB1YmxpYzoKICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KQogICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1
cm4gbV9wcm9maWxlZEJsb2NrOworICAgICAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jay0+
YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tG
b3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCkBAIC01MDAs
NiArNTAwLDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVC
bG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRC
bG9jayk7CiAgICAgfQorCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0Zvcihjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICBy
ZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAg
ICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOworICAgIH0KICAgICAKICAgICBib29sIG1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4pCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIHZvaWQg
T1NSRW50cnlEYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQKIFNVUFBSRVNTX0FTQU4KIHZvaWQq
IHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxP
TEpJVCk7CiAgICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJU
KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICAg
ICAgICAgIGppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJl
c3MoCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5hZGRyZXNzT2ZEaWRUcnlUb0VudGVySW5Mb29wKCkpKSk7
CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmFkZHJlc3NPZkRpZFRyeVRvRW50ZXJJbkxvb3AoKSkp
KTsKICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoCkBAIC0zODQsOCArMzg0LDcgQEAgdm9pZCBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIGlmIChpbmxpbmVDYWxsRnJh
bWVzKSB7CiAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAq
aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICAgICAgaml0Lm1vdmUoCi0gICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKAotICAgICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
YmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICBvc3JXcml0ZUJhcnJpZXIodm0sIGpp
dCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0Myw3ICsyMDQzLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNyZWF0ZQogICAgIAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrOwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Cisg
ICAgICAgIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9j
ay5nZXQoKTsKICAgICBlbHNlCiAgICAgICAgIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAgICAgCkBAIC0zNjA1LDcgKzM2MDUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uVHJpZ2dlCiAgICAgCiAgICAgYm9vbCBkaWRUcnlUb0VudGVySW50b0lubGlu
ZWRMb29wcyA9IGZhbHNlOwogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBleGl0LT5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFt
ZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5l
Q2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsKKyAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkgewogICAgICAgICAgICAgZGlkVHJ5VG9F
bnRlckludG9JbmxpbmVkTG9vcHMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjQ0LDggKzY0NCw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXpl
V2l0aG91dE4KICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQoY29uc3RhbnQu
Z2V0KCkpOwogCiAgICAgICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICptX2lu
bGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVy
ZW5jZXMuYWRkKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxv
Y2suZ2V0KCkpOworICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChpbmxpbmVD
YWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgd2Ug
aGF2ZSBhbnl3aGVyZSBpbiB0aGUgSklUQ29kZSBhcmUgYWxzbwpAQCAtNjkzLDggKzY5Myw4IEBA
IHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4KIAogICAgIGlmIChtX2lu
bGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAq
bV9pbmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOworICAg
ICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5n
ZXQoKSk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGlubGluZUNhbGxG
cmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRHZXRBcmd1bWVudFN0YXIKIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IFNwZWN1bGF0aXZlSklUOjplbWl0T1NSRXhpdEZ1enpDaGVjaygpCiB7CiAgICAgaWYgKCFPcHRp
b25zOjp1c2VPU1JFeGl0RnV6eigpCi0gICAgICAgIHx8ICFjYW5Vc2VPU1JFeGl0RnV6emluZyht
X2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fb3JpZ2luLnNlbWFudGljKSkKKyAg
ICAgICAgfHwgIWNhblVzZU9TUkV4aXRGdXp6aW5nKG1faml0LmdyYXBoKCkucHJvZmlsZWRDb2Rl
QmxvY2tGb3IobV9vcmlnaW4uc2VtYW50aWMpKQogICAgICAgICB8fCAhZG9PU1JFeGl0RnV6emlu
ZygpKQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXAoKTsKICAgICAKQEAgLTQ0
MjgsOSArNDQyOCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QK
ICAgICBib29sIG5lZWRzU2NyYXRjaEZQUlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVC
bG9jayA9IG1faml0LmdyYXBoKCkucHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBwcm9maWxlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KTsKICAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2so
KS0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlv
biA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVu
Y3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKQEAgLTQ1MjAsOSArNDUyMCw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAgICBib29sIG5lZWRzU2NyYXRjaEZQ
UlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sg
PSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IG1faml0LmdyYXBoKCkucHJv
ZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
OwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Cisg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+
YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBK
SVRTdWJJQyogc3ViSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9m
aWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0
aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1
YjsKQEAgLTUxMTMsOSArNTExMyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbmNP
ckRlYyhOb2QKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZShOb2RlKiBu
b2RlKQogewogICAgIC8vIEZJWE1FOiBhZGQgYSBmYXN0IHBhdGgsIGF0IGxlYXN0IGZvciBCaWdJ
bnQzMiwgYnV0IHByb2JhYmx5IGFsc28gZm9yIEhlYXBCaWdJbnQgaGVyZS4KLSAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxv
Y2sgPSBtX2ppdC5ncmFwaCgpLnByb2ZpbGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
cHJvZmlsZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KTsKICAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRk
SklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rp
b24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKQEAgLTUzNjksOSArNTM2OSw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bChOb2QKICAgICBib29sIG5lZWRzU2NyYXRjaEZQ
UlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sg
PSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IG1faml0LmdyYXBoKCkucHJv
ZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
OwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Cisg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+
YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9m
aWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0
aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11
bDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIx
LDcgKzEyMSw2IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKIHsK
ICAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25l
ZCBudW1WYXJpYWJsZXM7CiAgICAgdW5zaWduZWQgbnVtVG1wczsKQEAgLTE1NSw2ICsxNTQsNyBA
QCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiAgICAgICAgIG51bVZh
cmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIo
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKICAgICAgICAgbnVt
VG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7
CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKICAgICAgICAgbnVtVG1wcyA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5udW1UbXBzKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTMsNyArMzUzLDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBDaGVjayBBcmd1
bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOworICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCksIDAsIDAsIDApOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGF2
YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDI2ICs1MiwxNyBAQCB2b2lkIENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRD
YWxsRnJhbWVGCiBib29sIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQo
KSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7Ci0gICAgc3dpdGNoIChjb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgot
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGNhc2UgSklUVHlwZTo6Tm9uZToKLSAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2soKS0+aml0VHlw
ZSgpKTsKIH0KIAogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRl
eCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKICAgICBzd2l0Y2ggKGNvZGVC
bG9jaygpLT5qaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6
CisgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJ
VDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAg
IGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5LDggKzcw
LDYgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaQogICAgIGNhc2Ug
SklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsMTAgKzQ1NiwxMCBAQCBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBIYW5kbGVySW5mbyogZmluZEV4CiAKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwogICAgIHVuc2lnbmVkIGV4Y2VwdGlv
bkhhbmRsZXJJbmRleDsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9j
ay0+aml0VHlwZSgpKSkKLSAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1l
LT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwotICAgIGVsc2UKKyAgICBpZiAoSklUQ29kZTo6Y2Fs
bFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkub2Zmc2V0
KCk7CisgICAgZWxzZQorICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUt
PmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiAKICAgICByZXR1cm4gY29kZUJsb2NrLT5oYW5kbGVy
Rm9ySW5kZXgoZXhjZXB0aW9uSGFuZGxlckluZGV4LCByZXF1aXJlZEhhbmRsZXIpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRv
ci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDcgQEAg
dm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogICAgICAgICAgICAgbV9m
cmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIoKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICAgICAgbV9m
cmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0
KCk7CisgICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmxvbE9y
QmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CiAgICAgICAgIG1fZnJhbWUubV9ieXRlY29kZUluZGV4
ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIEpTRnVuY3Rpb24qIGNh
bGxlZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlRm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgRXhlY3V0YWJsZUJhc2Uq
IEFzc2VtYmx5SGVscGVyczo6ZXhlY3V0YQogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7Ci0gICAgcmV0dXJu
IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwor
ICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpOwogfQogCiBBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJz
OjpicmFuY2hJZkZhc3RUeXBlZEFycmF5KEdQUlJlZyBiYXNlR1BSKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTggQEAKICNpbmNs
dWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
a0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUg
IkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgor
I2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5LDYgKzU1LDggQEAKICNpbmNsdWRlIDx3dGYv
R3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVz
cGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwpAQCAtNjAsNiArNjgsODkxIEBAIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsK
IFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBp
bGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rp
b25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9
IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERz
dFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBp
dCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9m
aWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0
Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6
CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdl
dEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxF
dmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Cisg
ICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAg
ICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RU
eXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGlu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRh
ZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2Rl
Lm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7Cisg
ICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1f
cHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0
b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRl
cmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRh
Lm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5t
X3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1f
c3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3Rh
aWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9p
ZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlw
ZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9p
bnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dl
dF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
QWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29k
ZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29k
ZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0
aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3Zl
cmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50
QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUo
Ynl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQ
dXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5
dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0Jp
Z0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RT
cGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdl
IGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3Ry
aW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3Bf
bXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAg
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5t
X3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0g
bWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
ICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
QW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOwor
ICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VO
YU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQg
JiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVj
RG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1
bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVt
YmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVy
IHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAm
JiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5
cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVjdCkpIHx8
ICEhKHJpZ2h0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkpCisgICAgICAgICAgICAgICAg
cmVzdWx0IHw9IFNwZWNCaWdJbnQ7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBy
ZXN1bHQpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSA9PSBvcF9zdWIpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
KTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQor
ICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgICAgIGVs
c2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdikKKyAgICAgICAgICAgIGhh
bmRsZShpbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5
dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5
dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJ
bnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRv
IGJldHRlciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9uICUgMAorICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY0ludDMyT25seSB8IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgICAgICAvLyBNYXliZSBidWlsZCBp
biBzb21lIGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRiYWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiBy
ZXN1bHQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwg
U3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBvcF91cnNoaWZ0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFVyc2hpZnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
b3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
c3JjLCBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSkgeworICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgaW5wdXQgPSB0eXBlRm9yKHNyYyk7CisgICAgICAgICAgICBpZiAoIWlucHV0KQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNl
cnZlSW50MzJPdmVyZmxvdygpID8gU3BlY0FueUludEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0
ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVj
RG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1
dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRz
dCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAg
ICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhh
bmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVj
b2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUu
bV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0
ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Jp
Z0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0lu
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAg
Y2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNv
ZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAg
ICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9w
Y29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5h
czxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVj
dGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNv
ZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlw
ZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1i
b2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
U3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
b3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENh
dGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1
ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAg
aWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBh
IHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3Zl
IG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAg
ICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxv
YWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAg
YnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9m
aWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1f
cHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBz
ZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVj
dD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNv
bHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJh
c2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
U3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
ZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVj
RnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVu
YzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5j
PigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3Bl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigp
LCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRF
bnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5Pigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1
Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFz
T3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3Bl
cnR5RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5l
cmljUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2
YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9y
SG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJn
dW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3Vt
ZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRB
cmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0
ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21p
c2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
cToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9s
ZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxv
d2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1w
dHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmlu
ZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmlu
ZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRl
ZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1Vu
ZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNf
bnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRo
X3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElk
ZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9u
ID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwg
MzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxl
KTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNl
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2Vv
ZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0
b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3Rv
bT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJp
bmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
X3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRl
cm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJf
YmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19z
aGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90
YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToK
KyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAg
IGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAg
Y2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFs
OgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVf
YWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2pt
cDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3Bf
amVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVk
X29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bf
amVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNl
IG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6
CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2Fz
ZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRl
cjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNh
c2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0
Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3Ry
aW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9f
c2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3By
b2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92
YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRl
cl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAg
IGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDog
CisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNt
X2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6
CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2Fy
aXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9j
aGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93
X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFt
cG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAg
IGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2Ug
bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBj
aGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2Fz
ZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJu
X2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2Fs
bF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9n
dWU6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0X25vX3RsczoK
KyAgICBjYXNlIG5vcm1hbF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfZ2V0
X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6CisgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRf
ZXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9p
dGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAg
IGNhc2Ugb3BfY2FsbF9ldmFsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2UganNfdHJh
bXBvbGluZV9vcF9jYWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfaXRlcmF0b3JfbmV4dDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jf
b3BlbjoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF90YWlsX2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
Y29uc3RydWN0X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnc19z
bG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfdmFyYXJnc19zbG93Ogor
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xv
dzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdzoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9ldmFsX3Nsb3c6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2l0ZXJhdG9yX25leHRfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
aXRlcmF0b3Jfb3Blbl9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9hcml0eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxp
bnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3VudGFnOgorICAg
IGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2No
ZWNrX3RhZzoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGw6CisgICAgY2FzZSB3
YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX25vX3RsczoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGlu
ZV93YXNtX2NhbGxfaW5kaXJlY3Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sK
KyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2Nr
LCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQu
cmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3By
ZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFk
W2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUp
OworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5iYXNlbGluZUFsdGVybmF0aXZlKCktPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5m
b3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7Cisg
ICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAg
ICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2Vy
LCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7Cisg
ICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAg
ICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJn
dW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcp
ID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1
bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChh
cmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAg
bV9wcmVkaWN0aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJv
b2wgY2hhbmdlZDsKKyAgICBib29sIGNvbXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNl
Q291bnRzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09Q
UzogQXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8v
IE9PUFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3Jp
dGhtJ3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhl
IGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBl
cz8KKyAgICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0
J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAg
ICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2su
aW5kZXgoKV07CisKKyAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAg
ICAgICAgIG1fdXNlQ291bnRzW2Jsb2NrLmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRy
dWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAg
ICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxM
ZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCB7IGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBz
dGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbXB1dGVVc2VDb3VudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gY291bnQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV91c2VDb3VudHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5k
KSArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51
bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVu
dEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0
aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9j
dXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgY29tcHV0ZVVzZUNvdW50cyA9IGZhbHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisg
ICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1w
KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNB
dEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2Fs
bGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcs
NyArOTYwLDEzIEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAg
ICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0K
IAotSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorYm9vbCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9j
aGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFj
ZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIp
CiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKSA6IDApCkBAIC03NSw2ICs5NzQsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCCiAgICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91
bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9
PSBDb21waWxlVHlwZTo6TE9MKQogewogfQogCkBAIC0xMzcsMTEgKzEwMzcsMTkgQEAgdm9pZCBK
SVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50
SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklO
RV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBl
KSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4
ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCi0gICAgICAgICAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7
IFwKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7IFwKKyAgICAgICAgICAgIG1fY2hl
Y2tlZFVzZUxPTCA9IHRydWU7IFwKKyAgICAgICAgICAgIGlmIChnZXRlbnYoInByaW50U2xvd0Nh
bGxDYXNlcyIpICYmIGF0b2koZ2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSkpIHsgXAorICAg
ICAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIGNiTmFtZTsgXAorICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5kdW1wKGNiTmFtZSk7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5
ID0gY2JOYW1lLnRvU3RyaW5nKCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpICsgIiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5v
cGNvZGVJRCgpXTsgXAorICAgICAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYp
IHsgXAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FsbENhc2VSYW4oa2V5KTsgXAorICAgICAg
ICAgICAgICAgIH0pOyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgIGVtaXRTbG93T3Ao
c2xvd19wYXRoXyMjbmFtZSwgY3VycmVudEluc3RydWN0aW9uLCBkc3QsIHR5cGUpOyBcCiAgICAg
ICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7IFwKICAgICB9
CkBAIC0xNTYsMjYgKzEwNjQsNDYgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6
IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsg
XAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7
IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAg
ICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8j
I25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVz
dWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQ
UigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQo
KSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBz
bG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09E
RShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0
aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHVi
KTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCitzdGF0aWMgdm9pZCBzbG93Q2FsbENh
c2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hN
YXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNs
b3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNl
cy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xu
KGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRp
b24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygi
Q29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCkBAIC0yMzEsMTYgKzExNTks
ODUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIH0KIAogICAgIG1f
Ynl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKLSAgICBmb3IgKG1fYnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0
aW9uQ291bnQ7ICkgewotICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBt
X3Nsb3dDYXNlcy5zaXplKCk7Ci0gICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRC
eXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKLSAgICAg
ICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGls
IGhlcmUgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQg
YnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KLSAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7
CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBtX3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgt
PnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNzb3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkp
OworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogKm1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlm
IChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDog
YmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29y
c1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxvY2suaW5kZXgoKSkpCisgICAgICAgICAgICAg
ICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgo
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKG1fZGlz
YXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFp
blBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKKyAgICBmb3IgKG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8
IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
ICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID49ICht
X2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5n
dGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIlJlZyBhbGxvYyBhdCBlbmQgb2YgYmIjIiwgbV9jdXJyZW50QmxvY2stPmluZGV4KCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9j
ay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRC
bG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2Nr
LT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJs
b2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6
IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIW1fc3Rh
dGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29y
c1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxv
Y2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRl
ID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmlyc3QoKV07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNz
b3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVBy
aW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0
ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFByZWRp
Y3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisK
KyAgICAgICAgICAgICAgICBtX2N1cnJlbnRVc2VDb3VudHMgPSBXVEZNb3ZlKG1fdXNlQ291bnRz
W21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAgICAgICAgICAgICAgbV9zcGlsbENhbmRp
ZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKKyAgICAgICAg
aWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29k
ZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBi
eXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCisgICAg
ICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0
LgorICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1f
ZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2Rl
TWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKICAgICAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChtX2J5
dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOwogCkBAIC0yNzgsNDYgKzEyNzUsNDMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgewor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAg
ICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlE
KSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19P
UChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAg
ICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19P
UCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Z2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93
aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2Rl
Y2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRo
cm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhf
c3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVt
ZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJv
cGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQot
ICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNf
YnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5l
d19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChp
c19jb25zdHJ1Y3RvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCku
bV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAg
IERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1c2hXaXRoU2NvcGU+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lz
dGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zv
cl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJl
c29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9w
KQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJl
Z2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNz
b3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwg
U3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3Bl
Y0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3By
ZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChoYXNf
ZW51bWVyYWJsZV9wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFi
bGVQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09Q
KGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJv
cGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmlu
Zz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Rp
cmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1
bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVy
KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwg
U3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERF
RklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJv
bWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0
b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5j
R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9X
X09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+
KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIg
fCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklO
RV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTM5MiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2lu
KQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklO
RV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9wX21v
ZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNl
bmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVs
KQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc0LDEwICsxNDcyLDg0IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFk
b3dfY2hpY2tlbl90YWlsKQogCisgICAgICAgIERFRklORV9PUChvcF9pc19jYWxsYWJsZSkKKyAg
ICAgICAgREVGSU5FX09QKG9wX3R5cGVvZl9pc19mdW5jdGlvbikKKyAgICAgICAgREVGSU5FX09Q
KG9wX3R5cGVvZl9pc19vYmplY3QpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2YpCisKKyAg
ICAgICAgREVGSU5FX09QKG9wX2xlc3MpCisgICAgICAgIERFRklORV9PUChvcF9sZXNzZXEpCisg
ICAgICAgIERFRklORV9PUChvcF9ncmVhdGVyKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRl
cmVxKQorCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisKKyAg
ICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQorCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9jaGVja2VkVXNlTE9MKSB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdHJh
cHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90aHJvdzoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2ptcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9j
YWxsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0
X3ByaXZhdGVfbmFtZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2lu
ZGV4ZWRfcHJvcGVydHk6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX25vcDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2lk
ZW50aXR5X3dpdGhfcHJvZmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlw
ZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2RlYnVnOgorICAgICAgICAgICAgICAgIGNhc2Ug
b3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxl
X2NvbnRyb2xfZmxvdzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sg
TE9MOiAiLCBvcGNvZGVJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkJiBjb3VudGVyID0gbV9j
dXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgLS1jb3Vu
dGVyOworICAgICAgICAgICAgICAgIGlmICghY291bnRlcikgeworICAgICAgICAgICAgICAgICAg
ICAvLyBPT1BTOiBEbyB0aGlzIGxhemlseSBpbiBzbG93IHBhdGggY3JlYXRpb24vc3BpbGxGb3JD
YWxsCisgICAgICAgICAgICAgICAgICAgIC8vbV9zcGlsbENhbmRpZGF0ZXMuYXBwZW5kKG9wZXJh
bmQpOworCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UlJlZyBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsb2JiZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByRm9yT3BlcmFuZChv
cGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJl
ZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGZwcik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVt
YmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICAgICAgY29t
cHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291
bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6
ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNDk4LDYgKzE1NzAsMjAg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogICAgIG1fam1wVGFibGUuY2xl
YXIoKTsKIH0KIAorc3RhdGljIHZvaWQgc2xvd0Nhc2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dD
YXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9
KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1
ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUg
MTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogewogICAgIG1fZ2V0QnlJZEluZGV4
ID0gMDsKQEAgLTUxNiwxNCArMTYwMiwyNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVD
YXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVu
c2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVy
ICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVy
LT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAg
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNlLmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMF0ubGluayh0aGlzKTsKKwor
ICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisKKyAgICAgICAgaWYg
KGdldGVudigicHJpbnRTbG93Q2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93Q2FzZXMi
KSkpIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG5hbWU7CisgICAgICAgICAgICBt
X2NvZGVCbG9jay0+ZHVtcChuYW1lKTsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBuYW1lLnRv
U3RyaW5nKCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpICsgIiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsK
KyAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZVJhbihrZXkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlID0gbnVsbHB0cjsKICAg
ICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKQEAgLTU4MCw3ICsxNjc3LDYgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2puc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hp
bnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190cmFwcykKLSAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X211bCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX25lcSkKQEAgLTU5OSw2ICsxNjk1LDkgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0
ZXJhdG9yX29wZW4pCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0
KQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9k
KQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKGRlYykKQEAgLTYzMSwxOSArMTczMCwzNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZl
X3Njb3BlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChjaGVja190ZHopCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHRvX3Byb3BlcnR5X2tleSkKKyAgICAgICAgREVG
SU5FX1NMT1dDQVNFX1NMT1dfT1AoaXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AodHlwZW9mX2lzX29iamVjdCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
dHlwZW9mKQorCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGxlc3MpCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGxlc3NlcSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoZ3JlYXRlcikKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ3JlYXRl
cmVxKQorCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vu
dmlyb25tZW50KQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBp
dGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZz
ZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNs
b3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
Zmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1
bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAg
ICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5l
bmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3Vn
aCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8u
b2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmls
ZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFkeSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3Qg
cmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dD
YXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7
CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOwogICAgIH0KQEAgLTY4OCw2
ICsxODAyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9
CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOyAvLyBPT1BTOiBoZWxwZnVsIGZv
ciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAgCiAgICAgc3dpdGNoIChtX2NvZGVCbG9jay0+
Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKQEAgLTc3OCw2ICsxODk0LDg4IEBA
IHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAgYm9vbCBwcmludEVhY2hPU1IgPSBnZXRlbnYo
InByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRlbnYoInByaW50RWFjaE9TUiIpKTsKKworICAg
IGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEp1bXBMaXN0IGV4aXRDb21t
b247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IG1fZXhpdEp1bXBzKSB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZpcnN0OworICAgICAgICAgICAgYXV0byBqdW1w
cyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAganVtcHMubGluayh0aGlzKTsKKworICAgICAg
ICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAgICAgICAgICAgICAgIFN0cmluZ1ByaW50U3Ry
ZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKHByaW50
U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3RyaW5nIHN0ciA9IHByaW50U3RyZWFtLnRvQ1N0
cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5idWZmZXIoKS0+cmVmKCk7IC8vIGxlYWsgaXQu
CisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRhdGEoKSwgIiAtPiBleGl0IGF0IGJjIyIsICBi
eXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgICAgIGJyZWFr
cG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNrcG9pbnQgZXhpdHMuCisKKyAgICAgICAgICAg
IG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSks
IExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgICAgIGV4aXRDb21tb24uYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWV4aXRDb21tb24uZW1wdHko
KSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0aGlzKTsKKworCisgICAgICAgIHN0YXRpY19h
c3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0gcmVnVDQpOworICAgICAgICBBU1NFUlQo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhudW1iZXJUYWdSZWdp
c3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcyBiZWluZyBhIGNhbGxlZSBz
YXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBt
b3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUg
dGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExMSW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVt
cC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJy
aWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAgICBwcmVwYXJl
Q2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVu
Y3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJn
R1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAg
ICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBudW1iZXJUYWdSZWdp
c3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpLCBy
ZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCByZWdUMik7CisgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSkpOworCisgICAgICAgIGF1
dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9j
b2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkpKTsKKyAgICAg
ICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBz
YXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBh
IHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRyaWdnZXJM
T0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJlcGFyZUNhbGxP
cGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9u
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93KSks
IG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BS
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVy
VGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlzb24ubGluayh0aGlzKTsKKyAgICAgICAg
CisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5i
YXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAvL0Fzc2VtYmx5
SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0LmJyYW5jaDMyKAorICAgICAgICAvLyAg
ICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgLy8gICAgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0
clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygp
LmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpOworICAgICAgICAvLyBPT1BTCisgICAg
ICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAvLyAgICBkZXN0
aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUo
KTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpu
b3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29kZSgpOworICAgICAgICBtb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkp
LCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcp
OworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAgIC8vIDEuIFN0b3JlIExMSW50IGNvZGVi
bG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIuIGpldHRpc29uIGlmIHdlIGV4Y2NlZWQg
ZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBiYXJyaWVyIExMSW50IGNvZGUgYmxvY2sK
KyAgICB9CisKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCkBAIC05NjcsNyArMjE2NSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygp
CiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RF
KAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5l
IEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUg
SklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJs
b2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3Jk
Rm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQu
c2l6ZSgpKSAvCkBAIC05NzgsNyArMjE3Niw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGlu
aygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6
U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRD
b2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJp
dHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcg
RGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5cGU6
OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOwogCiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjcwLDk1MSBAQCBTZWNvbmRzIEpJVDo6dG90YWxD
b21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRv
dGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNw
ZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQoreworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0
S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNpemUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCku
Zmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAgICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBt
X2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNl
Y29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYW5rPgorVmVjdG9y
PFJlZywgMzI+IGNvbXB1dGVBbGxvd2VkUmVncygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0
dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZv
ciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBu
ZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29y
dGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgVmVjdG9yPFJlZywgMzI+IGFsbG93ZWQ7CisgICAg
UmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8g
cmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKGFsbG93ZWRDYWxsZWVTYXZl
cy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyAr
K2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5rOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBp
ZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFw
cGVuZChyZWcpOworICAgIH0KKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworc3RhdGljIFZlY3Rv
cjxSZWcsIDMyPiYgYWxsb3dlZEdQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBz
dG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRo
aXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBo
b2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChj
b21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3Vs
dC5nZXQoKTsKK30KKworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxsb3dlZEZQUnMoKQorewor
ICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEg
ZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1
cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisg
ICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZl
Y3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsK
KyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2Vy
dE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6IHRoaXMgYnJlYWtzIGN1cnJlbnRseSB3LyB3
cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2VlbXMgbGlrZSBhIG5pY2UgYXNzZXJ0LiBNYXli
ZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQuLi4KKworICAgIC8vaWYgKG1fc2xvd0Nhc2Vz
LnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2Rl
SW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30KKworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIo
R1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKGhpbnQg
IT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygp
KSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigpICE9IGhpbnQpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJl
Zyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChS
ZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMt
PnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAg
ICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVn
KTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2Ji
ZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIo
KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNh
dGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkg
eworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAg
IGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1
dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1
ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAg
ICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmZw
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBsKFJlZyByZWcpCit7CisgICAgLy8gT09QUzog
YWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlvbiBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0
aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIGFs
bG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCku
ZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBjYW4ndCBqdXN0
IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291bnQgdmFsdWVzIGJlY2F1c2Ugd2UgbWlnaHQK
KyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9lczoKKyAgICAgICAgLy8gLSBWYWx1ZU9wZXJh
bmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2FsbAorICAgICAgICAvLyAtIH5WYWx1ZU9wZXJh
bmQoKQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgd2hlbiB3ZSBkZWFsbG9jYXRlIHNvbWV0
aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdlIHdpbGwgZW5kIHVwIGZ1bGx5CisgICAgICAg
IC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIsIGVzc2VudGlhbGx5IGRlZ3JhZGluZyBpdCBp
bnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIH5WYWx1ZU9wZXJhbmQoKSBy
dW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBlbmQgdXAgaW4KKyAgICAgICAgLy8gYW4gaW5j
b25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdWYWx1ZS5vcGVyYW5kID0gVmlydHVhbFJlZ2lz
dGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KQorICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICB9CisKK30KKwordm9pZCBKSVQ6OnNwaWxs
Rm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0
byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJlZyA6IHNldCkgeworICAgICAgICAgICAgaWYg
KCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBs
KHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkp
OworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygpKTsKK30KKworU2F2ZVBsYW4gSklUOjpzbG93
UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3Rl
cgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsK
KyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCBy
ZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgfTsK
KworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVl
ZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBw
ZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxs
UmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSwgRlBSUmVn
IHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVy
CisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOwor
ICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYg
cmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBsYW4uYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShy
ZWcsIHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUub3BlcmFuZCkpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycy5h
ZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2Vk
RlBScygpKSB7CisgICAgICAgIGlmIChyZWcuZnByKCkgIT0gdG9JZ25vcmVGUFIpCisgICAgICAg
ICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gdG9JZ25vcmUpCisgICAgICAg
ICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIH0KKworICAgIHJlc3VsdC5zdGFja1NpemVG
b3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVu
dFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpy
ZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdp
c3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZvclNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJv
bVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgcmVjb3JkLnNhdmVQbGFuKTsKK30K
Kworc3RhdGljIHZvaWQgYWRkTG9hZENvdW50KHVpbnQ2NF90IGNvdW50KQoreworICAgIHN0YXRp
YyB1aW50NjRfdCBjb3VudGVyOworICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgaWYgKGNvdW50ZXIgJSAxMDAwMCA9
PSAwKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJSdW50aW1lIGxvYWQgY291bnQ6ICIsIGNvdW50
ZXIpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1Rv
SWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYg
c2F2ZVBsYW4pCit7CisgICAgdWludDY0X3QgbG9hZENvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8m
IHR1cGxlIDogc2F2ZVBsYW4pIHsKKyAgICAgICAgUmVnIHJlZyA9IHN0ZDo6Z2V0PDA+KHR1cGxl
KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBzdGQ6OmdldDwxPih0dXBsZSk7
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUgPSBzdGQ6OmdldDwyPih0dXBsZSk7
CisKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVyYW5kVG9JZ25vcmUpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5ncHIoKSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCku
Y29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaCgqdGhpcyk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gpOworICAgICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUpKQorICAgICAgICAgICAgICAgIHVuYm94RG91
YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBicmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsg
c2NyYXRjaCB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIHVuYm94RG91
YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICAgICAgYXV0byBk
b25lID0ganVtcCgpOworCisgICAgICAgICAgICAgICAgaXNJbnQzMi5saW5rKHRoaXMpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisK
KyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICArK2xvYWRDb3VudDsKKyAgICB9CisKKyAgICBpZiAoZmFsc2UgJiYgbG9h
ZENvdW50KSB7CisgICAgICAgIHByb2JlKFs9XSAoUHJvYmU6OkNvbnRleHQmKSB7CisgICAgICAg
ICAgICBhZGRMb2FkQ291bnQobG9hZENvdW50KTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2
b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93
Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nh
c2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVi
dWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAorCisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFs
dWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVy
YW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJh
bmQpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lk
IEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBGUFJSZWcgZnByKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZwcikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRl
bXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVnIGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBi
b3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAg
ICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJh
bmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZvciBieXRlY29kZXMgKC9jaGVja3BvaW50cz8p
IHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQuCisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFu
ZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFuZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQorCit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0Zvcihv
cGVyYW5kKSk7CisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVy
YW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVnIHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1
ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNB
bGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9ja0NvdW50OworfQorCit2b2lkIEpJVDo6dW5s
b2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOworICAgIC0tcmVnVmFsdWUubG9ja0NvdW50Owor
ICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYmICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQo
KSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChK
SVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBtX2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKGhpbnQpOworfQorCitHUFJSZWcgSklUOjpH
UFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoaGludCk7CisgICAgbV9qaXQubG9j
ayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRl
bXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpOworICAg
IG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJVDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGpp
dCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKworRlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkK
K3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnBy
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5h
bGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgcmV0dXJuIG1fZnBy
OworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitK
SVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorewor
ICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMk9w
ZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisK
K0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVn
OworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAg
ICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAg
ICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2pp
dC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3Zl
blR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3Bl
cmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxP
cGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcg
cmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxs
T3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6
Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKwor
ICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYg
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsK
KyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5ncHJG
b3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsKKyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9n
cHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENl
bGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90
Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpOb3RDZWxsT3Bl
cmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQor
CitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0
Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9v
cGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0g
cmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7Cisg
ICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7Cisg
ICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmIChtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkg
JiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQu
YnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0
ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30K
KworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
K3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFs
dWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOwor
fQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1f
b3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3By
ID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIo
KTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3By
KTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQor
CisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRv
dWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAg
RlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVn
ICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJh
bmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitG
UFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZh
bGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Ns
b3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAg
ICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1w
IHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0gdmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVG
UFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmICghaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9q
aXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBn
cHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlw
ZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3By
IH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJh
bmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgfQorCisgICAgbV9qaXQudW5ib3hEb3VibGUo
Z3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJh
bmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6Ok51bWJl
ck9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQo
aml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0
LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcp
CisgICAgICAgIGZwcigpOworfQorCitKSVQ6Ok51bWJlck9wZXJhbmQ6On5OdW1iZXJPcGVyYW5k
KCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpOdW1iZXJP
cGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7
CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7Cisg
ICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSBy
ZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQg
eyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5k
LmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0Lmxv
Y2sobV9mcHIpOworCisgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBl
KG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQ
UiwgbV9mcHIpOworICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2pp
dC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0
IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgICAgICBtX2pp
dC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihK
U1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworCisgICAgICAgIGlm
ICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZO
b3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1Jl
Z2lzdGVycykpOworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwg
bV9mcHIpOworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgaXNJ
bnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZh
bHVlR1BSLCBtX2Zwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfQorCisg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAg
bV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworICAgIHJldHVybiBtX2ZwcjsKK30K
KworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kOjp+SW50MzJDb252ZXJ0aW5n
T3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6
SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93
UGF0aCgpOworCisgICAgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZUludDMyKG1fb3BlcmFuZCkp
IHsKKyAgICAgICAgSW50MzJPcGVyYW5kIG9wIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAg
ICBtX2dwciA9IG9wLmdwcigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKyAgICB9IGVs
c2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX29wZXJhbmQpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9
IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAg
ICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0IH07CisgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1w
RlBSLmZwcigpOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIo
SlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgaWYg
KCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQp
KSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5v
dERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVn
aXN0ZXJzKSk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1fZ3ByLCBm
cHIpOworICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYg
KE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2lu
Z0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJs
ZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAg
ICAgICB7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJs
ZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAg
ICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9n
cHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5v
RXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQz
MlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAg
ICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBk
b25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgaXNJbnQzMi5s
aW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIG1fZ3ByKTsKKworICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3Bl
cmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNw
ZWN1bGF0ZUJvb2xlYW4obV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVP
cGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigp
OworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5zcGVjdWxhdGVC
b29sZWFuKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAgIG1faml0LmFuZDMyKFRydXN0
ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3Vs
ZFNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVl
T3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIo
KTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRl
T3RoZXIobV9vcGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoMCksIG1fZ3ByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQ
UigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBG
UFIgeyBtX2ppdCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAg
ICAgICBKdW1wTGlzdCBkb25lOworCisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1faml0LmJyYW5j
aElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAg
ICAgICAgYXV0byBub3REb3VibGUgPSBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50
MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAg
ICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7CisjaWYgQ1BVKEFSTTY0
KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJBUk02NDo6c3VwcG9ydHNEb3VibGVUb0ludDMy
Q29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNlbWFudGljcygpKSB7CisgICAgICAgICAgICBtX2pp
dC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2YVNjcmlwdFNlbWFudGljcyhmcHIsIG1fZ3By
KTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxz
ZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5j
aFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIG1fZ3ByLCBCcmFuY2hJZlRydW5jYXRlU3VjY2Vz
c2Z1bCkpOworICAgICAgICAgICAgYXV0byBzcGlsbFJlY29yZCA9IG1faml0LnNpbGVudFNwaWxs
QmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LmNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkgPyBv
cGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93IDogb3BlcmF0aW9uVG9JbnQzMiwgbV9ncHIsIGZw
cik7CisgICAgICAgICAgICBtX2ppdC5zaWxlbnRGaWxsQWZ0ZXJDYWxsKHNwaWxsUmVjb3JkKTsK
KyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBub3REb3VibGUubGluaygmbV9qaXQpOworICAgICAgICBhdXRvIG5vdE90aGVyID0gbV9q
aXQuYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIG1fZ3ByKTsKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsKKyAgICAgICAgZG9uZS5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RPdGhlci5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEJvb2xlYW4o
SlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcikpOworICAgICAgICBtX2ppdC5hbmQzMihU
cnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1f
aml0Lnplcm9FeHRlbmQzMlRvV29yZCh2YWx1ZUdQUiwgbV9ncHIpOworCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7CisgICAgfQorCisgICAg
cmV0dXJuIG1fZ3ByOworfQorCitSZWdpc3RlclNldCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgYXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJl
ZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOwor
ICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0
KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAg
ICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
CisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVn
IHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5n
KHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOwor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYgKCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RT
eW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1i
b2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92
ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xlYW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAg
ICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBK
SVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUp
Cit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsK
KyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9Cisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjT3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVj
dWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE9iamVjdCh2YWx1ZSkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNl
bGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQor
ICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2VsbENoZWNrOworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAg
ICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNJbnQz
Mk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1
ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0ludDMyT25seTsKK30KKwordm9p
ZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIo
dmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCeXRlY29kZU51bWJlcjsK
K30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKHByb3ZlblR5
cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
Y29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0cnVlOworI2Vsc2UKKyAgICBjb25zdGV4cHIg
Ym9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50MzIpIHsKKyAgICAgICAgc3BlY3VsYXRlQ2Vs
bChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlmICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJbnQpKQorICAgICAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50OworICAgICAgICByZXR1cm47CisgICAgfQor
CisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICghZG9uZSkgeworICAgICAgICBHUFJUZW1wIHNj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihvcGVyYW5kKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90QmlnSW50MzIodmFsdWUsIHNj
cmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0lu
dDMyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpc0Jp
Z0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0ludCh2YWx1ZSkpOworICAgICAgICBpc0Jp
Z0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jp
Z0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKQoreworICAgIGlm
ICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFN0YXRlLnByb3Zl
blR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxv
Y2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFu
dHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFudChp
KSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFs
UmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVz
LmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAgIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1Jl
ZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0
YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3Rl
cnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIG9wZXJhbmQsICIsICIsIGxvY2tDb3VudCwg
IikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdhbGxvY1N0YXRlKCkKK3sKKyAgICBkYXRhTG9n
TG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEdQ
UnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAg
ICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCBy
ZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGF1dG8gcmVnIDogYWxs
b3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgewor
ICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIg
PSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkYXRhTG9nTG4oIl0i
KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVu
dXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3Mg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7Cisg
ICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBjbGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xh
c3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTEwNiwxNSAr
MTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVj
dCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAg
ICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnko
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQotICAgICAgICAgICAgOiBm
cm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisgICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8
c3RkOjp0dXBsZTxSZWcsIFZpcnR1YWxSZWdpc3RlciwgU3BlY3VsYXRlZFR5cGU+PjsKKworICAg
IHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7CisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOwor
ICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVnaXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBz
dGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAg
ICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBi
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgfQorCisgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8vIFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1
dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMsIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUg
c2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5
YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBmb3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMu
CisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAg
ICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8gU29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxv
Y2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBT
d2l0Y2hSZWNvcmQgewpAQCAtMTk2LDcgKzIxMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
dm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBK
SVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNs
YXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKKyAg
ICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApA
QCAtMjA0LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
OwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1
bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVy
IC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJp
dCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgotICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRo
ZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBv
ZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVChWTSYsIENvZGVCbG9jayog
PSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0
ZWNvZGVJbmRleCgwKSk7CisgICAgICAgIGVudW0gY2xhc3MgQ29tcGlsZVR5cGUgeworICAgICAg
ICAgICAgQmFzZWxpbmUsCisgICAgICAgICAgICBMT0wKKyAgICAgICAgfTsKKyAgICAgICAgCisg
ICAgICAgIEpJVChWTSYsIENvZGVCbG9jayosIENvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5K
SVQoKTsKIAogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7
IH0KQEAgLTIyMCwyMiArMjM2LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlv
bkJlZm9yZUNvbXBpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJl
c3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5k
ZXgoMCkpCisKKyAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVj
b2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVC
bG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAg
ICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBieXRlY29kZU9mZnNldCku
cHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAg
ICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9j
ayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNl
bGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRC
eVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7
CiAgICAgICAgIH0KQEAgLTI0MywyMSArMjU5LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2lu
ZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29k
ZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewotICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9p
ZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVU
eXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAg
ICAgfQpAQCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1w
bCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihSZWcgcmVnKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAg
ICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJbXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRk
IGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAg
ICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMsOSArMzUzLDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRk
U2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3Qm
KTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgpOworICAgICAgICB2b2lkIGFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYgZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwg
VmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAgIHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwog
ICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVtcExpc3QmLCBpbnQpOwogICAgICAgICB2b2lk
IGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CkBAIC0zMzMsNyArMzY1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIHZvaWQgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2Nh
bGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTM1
MCw3ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjb21waWxlVGFpbENh
bGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxs
RXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAg
ICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApAQCAtMzYwLDcgKzM5Miw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21w
aWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5
cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAg
ICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBj
b21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRh
cmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAgLTUwOCw4ICs1NDAsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3Vi
bGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVs
YXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC01MTcsMTIgKzU0OSwy
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9u
PgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
KiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9u
LCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xv
d09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJv
b2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwg
RG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsK
ICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJ
bnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAg
dm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVsbEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC01NDYsOSArNTg3LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVt
aXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC02MTAsNyArNjUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2JlZ2luKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYg
Q1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiop
OworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NzgsNzggKzcyMSwx
MDAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2No
aWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWls
X2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRl
cihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3Vi
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0SXNDYWxsYWJs
ZUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfaXNfY2Fs
bGFibGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZl9p
c19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVv
Zl9pc19mdW5jdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3Bf
dHlwZW9mKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgorICAgICAgICB2b2lkIGVtaXRDb21wYXJlT3BJbXBsKGNvbnN0IEluc3RydWN0aW9uKiwg
UmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0
X29wX2xlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2xlc3Nl
cShjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ3JlYXRlcihjb25z
dCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ3JlYXRlcmVxKGNvbnN0IElu
c3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0
aChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2Fz
ZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3Rf
dmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xv
d0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
Z3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3Rv
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xv
d1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdo
dFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlm
dFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQp
OwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdG
dW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlv
biopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBW
aXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWcpOworI2Vs
c2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihK
U1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwpAQCAtNzY0LDggKzgyOSw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0
Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NzgsMzggKzg0MSwyMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9u
UHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFt
ZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZv
aWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0
cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBh
dGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBl
bWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rp
b24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGl0ZXItPmZyb20u
bGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lk
IGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAg
ICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0
ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAotICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAg
ICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNv
ZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgfQor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgICAgIHZvaWQgZW1pdFNs
b3dPcChGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCwgU3BlY3VsYXRlZFR5cGUgZHN0VHlwZSk7CiAKLSAg
ICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2Fz
ZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNs
b3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nh
c2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgVU5V
U0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgYm9vbCBi
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAgICAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2Vz
LCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTg5MSw2ICs5MzcsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0
dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVU
b3BDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uKTsKKyAgICAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gY2FsbDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRp
b25UeXBlIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7
CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAg
ICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgICAgICAgICAgYXV0byBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUZQUiwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsOworICAgICAgICB9CisKKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4p
OwpAQCAtOTAyLDYgKzk2OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTm9Qcm9m
aWxpbmcKICAgICAgICAgfTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAg
ICAgYm9vbCB0cnlFbWl0TE9MQml0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNu
aXBwZXRHZW5lcmF0b3I+CiAgICAgICAgIHZvaWQgZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHNob3Vs
ZEVtaXRQcm9maWxpbmcgPSBQcm9maWxpbmdQb2xpY3k6Ok5vUHJvZmlsaW5nKTsKIApAQCAtOTYx
LDYgKzEwMzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJl
ZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihj
b25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVU
aW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAg
ICAgIApAQCAtOTcxLDYgKzEwNDMsMjkyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGll
ZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAgICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRlbXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJUZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEZQUlRlbXAgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJVCYpOworICAgICAgICAgICAgfkZQUlRlbXAo
KTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVn
IH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRzIGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMg
Y2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdnZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9n
cHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVy
YW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAg
ICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOb3RDZWxs
T3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJ
VCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFu
ZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5Eb3VibGVPcGVyYW5kKCk7CisgICAgICAgICAg
ICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0
OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFz
cyBOdW1iZXJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+TnVtYmVy
T3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFs
aWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgLy8gU3BlY3VsYXRlIG51bWJlcitib29sZWFuK290aGVyLCBhbmQg
Y29udmVydCB0byBpMzIuIFVzZWZ1bCBmb3IgYml0b3BzLgorICAgICAgICBjbGFzcyBJbnQzMkNv
bnZlcnRpbmdPcGVyYW5kIHsgCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyQ29u
dmVydGluZ09wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAg
ICAgfkludDMyQ29udmVydGluZ09wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBH
UFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92
ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
U3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQp
OworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnJiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZ3ByOworICAgICAgICB9CisKKyAgICAg
ICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJh
bmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7
CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRSZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUu
b3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1
Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgd2lsbERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9
IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9
IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcmIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAg
ICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghcmVnVmFsdWUoZ3ByKS5vcGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAg
IGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7CisgICAgICAgICAgICByZWdWYWx1ZShncHIp
Lm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAo
IW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnVmFsdWUoZnByKS5vcGVyYW5k
LmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGZwckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7
CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9w
ZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0lu
dDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJ
bnQzMkNvbnZlcnRpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQp
LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBTcGVjQm9vbGVhbik7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlvbkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENo
ZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNT
dHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVk
aWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVh
blNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
Rm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
QW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOwor
ICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBib29sIHVzZUxPTCgpOworCisgICAgICAgIHZv
aWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BS
UmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3lt
Ym9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAg
ICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU51
bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9p
ZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2FudCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRp
bmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihHUFJSZWcgaGludCA9IElu
dmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcgYWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9p
ZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91
YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsKKyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZp
cnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09QUzogTWFrZSB0aGlzIHRha2UgdGhlIHJlc3Vs
dCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3JnZXQgdG8gc2V0IGl0LgorICAgICAgICB2b2lk
IGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxvY2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4g
c2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBTaWxlbnRTcGlsbFJlY29yZCBzaWxlbnRTcGls
bEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlID0gSW52YWxpZEdQUlJlZywgRlBSUmVnIHRvSWdu
b3JlRlBSID0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2Fs
bChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIHJlc3RvcmVGcm9t
U2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3Jl
LCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lz
dGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIAog
ICAgICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4gbV9mYXJDYWxsczsKQEAgLTk5MCw3ICsxMzQ4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFi
bGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9y
PFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9z
d2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRH
ZXRQdXRJbmZvczsKQEAgLTEwMjcsNiArMTM4NSw4NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxk
RW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWcgeworICAgICAgICAgICAgLy8g
Rm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVkIGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAg
ICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVn
IGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlk
RlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3Ro
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIp
CisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAg
ICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAgICAgICAgICAgICAgICAgIGZwciA9IEludmFs
aWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFJl
Z1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAg
ICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9OworICAgICAgICAgICAgYm9vbCBpc0FsbG9j
YXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUm
IG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90
aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxv
Y2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0Fs
bG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSB7IH07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9
OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICB9Owor
CisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsKKyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9j
ZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1Zh
bHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1
ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0
ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRU
b1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRvUmVnLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tpXS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdb
aV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJUKHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhl
ci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHByb3Zl
blR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMocHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3Zl
blR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09
IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZWdp
c3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1fY3VycmVudFN0YXRlOworCisgICAgICAgIHZv
aWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworCisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9j
U3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFw
aDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIg
fTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVk
aWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1f
Y3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8dW5zaWduZWQsIHRy
dWU+PiBtX3VzZUNvdW50czsKKyAgICAgICAgT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+IG1fY3Vy
cmVudFVzZUNvdW50czsKKyAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMTY+IG1fc3Bp
bGxDYW5kaWRhdGVzOworCisgICAgICAgIFZlY3RvcjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisK
KyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2NrU3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAg
ICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBtX3ByZWRlY2Vzc29yczsKKworICAgICAgICBi
b29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBm
YWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0
Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDg2ICs0Miw4OCBAQAogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNp
bmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRl
ci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91Ymxl
TGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVz
c1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRl
cj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRP
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1Ro
YW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVy
YXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVh
bEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFu
QW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNl
LCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpn
cmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5k
T3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUs
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwg
aXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
TGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8
T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQ2LDM3ICsxNDgsMTYxIEBAIHZv
aWQgSklUOjplbWl0X29wX2piZWxvd2VxKGNvbnN0IEluc3RydWMKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0Q29tcGFyZU9wSW1w
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGdwQ29tcGFyZSwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbXBhcmUpCit7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9
IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3Jo
czsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhz
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhz
VGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29t
cGFyZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
fSBlbHNlIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKHJocykpIHx8ICFwcmVkaWN0aW9uRm9yKGxocykgfHwgIXByZWRpY3Rpb25Gb3Iocmhz
KSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAg
ICAgICAgY29tcGFyZURvdWJsZShkb3VibGVDb21wYXJlLCBsaHNUZW1wLmZwcigpLCByaHNUZW1w
LmZwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisK
KyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICB9CisKKyAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJl
ZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVu
dEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bEFuZE9yZGVyZWQpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50
MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVt
cCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKG9wMSkpCisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlu
cHV0R1BSKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRH
UFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAg
ICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9u
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRp
dGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2lu
ZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25z
dGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGlu
dCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
ICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRo
aXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5n
cHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZw
cigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVOdW1iZXIob3AyKSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AxKSB8fCAhcHJlZGljdGlvbkZv
cihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsK
KyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5m
cHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQor
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihj
b25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CkBAIC0yMjksMTcgKzM1NSw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRB
bmRKdW1wKGNvCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAg
ICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0g
eworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgq
dGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJI
UyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5l
bXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qg
b3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJn
ZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMoKTsK
ICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihv
cDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRp
dGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0g
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQogfQog
CkBAIC0yNTUsNDMgKzQwNyw4OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29u
c3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJS
ZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywg
b3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAg
cHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsm
XSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7
CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAg
aW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29t
cGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAg
Y29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwog
ICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAgICAg
ICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAg
Y29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1Qw
KTsKKyAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihv
cDFpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIoY29u
ZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAg
IGdldFJIUygpOworICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKICAgICB9Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNs
b3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3Bl
cmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3Bl
cmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3Bl
cmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlv
biwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRp
b24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVy
YXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVj
dGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0
aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRo
cm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhy
b3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0
aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRp
YXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51
bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51
bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0OTgsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAg
ICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzUyMiw2IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAg
SnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0
KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBAIC0zNTEsMTIgKzU0NSwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYg
KHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJl
cihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAg
ICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZh
aWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lz
dGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAg
ICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs1NjIsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwx
LmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxp
bmsodGhpcyk7CisgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJv
IDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1NzQs
NTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0Rz
dCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
aWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1cmUg
Zm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHByb3Bh
Z2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRl
QWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBm
cHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0Rv
dWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4
aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
aW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUo
c3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91YmxlKEFi
c29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3Qs
IGZwcik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkp
IHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFk
ZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4u
LgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1
cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQz
MihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94
SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNE
c3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAg
ICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSAr
NjI4LDYyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihz
cmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0
ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5m
cHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAg
ICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAg
ICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAg
ICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAg
cHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAg
ICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBS
VGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91
YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91Ymxl
KGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3Jj
RHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
RHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQ
UiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEu
MDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7
CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRH
UFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRH
UFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0
ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBK
U1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3Qs
IGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQg
fCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihP
dmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QpOworICAgIH0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcs
NTQgKzY5MywxMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgog
dm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSB8fCBzaG91bGRTcGVj
dWxhdGVEb3VibGUocmhzKSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisKKyAgICAgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhN
YXRoOjpmbW9kRG91YmxlLCByZXN1bHRGUFIsIGxoc0ZQUiwgcmhzRlBSKTsKKworICAgICAgICAg
ICAgc2V0RG91YmxlKGRzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9y
IHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJz
OjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHgg
PSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4Owor
ICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAg
IEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3Ax
LCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xv
YmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFj
ZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAg
ICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3By
KCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgq
dGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAg
ICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAtPmdwcigpOworCisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFtZSwg
bGlrZSBzcGlsbEV4cGVjdGluZ1Nsb3dQYXRoCisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4
LCBkc3QpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAg
ICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywg
cmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUo
cmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0K
IAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RF
cXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwog
ICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJs
ZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2
ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7
CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVh
bCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Qz
MihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJv
eEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCk7Ci19CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9
KTsKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6
OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJl
cikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVy
OworICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyks
IFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3Bl
Y0JpZ0ludCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArODA2
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8g
VVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24s
IERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50
MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CkBAIC00NzQsNiArODE2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFj
dGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTU2MiwxNSArOTA1LDEzIEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9u
LCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVy
YXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3Jo
czsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBl
bWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVn
VDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwpAQCAtNzI0LDEzICsxMDY1LDY2IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJp
dGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJ
VE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
ICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9u
VmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRN
YXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQs
IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVn
YXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2Zp
bGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRo
TmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+Citi
b29sIEpJVDo6dHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoIXVzZUxPTCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKworICAgIGF1dG8gYml0T3AgPSBb
Jl0gKEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAu
Z3ByKCk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0YW5k
PikKKyAgICAgICAgICAgIGFuZDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0b3I+KQorICAgICAg
ICAgICAgb3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJpdHhvcj4pCisgICAgICAgICAgICB4b3Iz
MihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfc2FtZV92PE9wLCBPcExzaGlmdD4pCisgICAgICAgICAgICBsc2hpZnQzMihsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZV92PE9wLCBPcFVyc2hpZnQ+KQorICAgICAgICAgICAgdXJzaGlmdDMyKGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8T3AsIE9wUnNoaWZ0PikKKyAgICAgICAgICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAg
ICB9OworCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlSW50MzIob3AyKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigp
OworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AyKSkgeworICAgICAgICBJbnQzMkNvbnZl
cnRpbmdPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5n
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9w
KGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBT
bmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQxLDE3ICsxMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRC
aW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1p
dExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47
CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQ7CkBAIC03NjAsMzMgKzExNDUsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0Qmlu
YXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUg
aTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
ZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgq
dGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAg
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBn
ZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFu
ZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNo
R1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2Vu
LmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwor
CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIo
KSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5
OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQ
cm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxl
ZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVj
QmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
b3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmln
SW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BS
KSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIo
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzEyNjEs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDE5ICsxMzA3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQ
UiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKLSNlbmRpZgorICAgIGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+
KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAgICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVy
YW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTg3
MywyMSArMTMyMCw3NyBAQCB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJ
CiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7
CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdo
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQ
UjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsK
KyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFIt
PmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAg
ICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0
T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAot
ICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBl
KTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRT
aGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNT
RVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0
aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Cisg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwg
cmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNE
b3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVz
dWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwMiwxOCArMTQwNSw2NiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9
IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
bGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJP
dmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIo
KSk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3Bl
Y0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVy
ZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUo
b3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAg
IEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnBy
KCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVj
dWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhp
cywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAg
ICAgICAgIGFkZERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8
SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikp
OwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1p
emUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVu
Y3Rpb24+CkBAIC05MjQsMTUgKzE0NzUsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0
cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNp
bmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdp
c3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlz
LCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
c2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1w
LT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBm
cm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBT
aW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVn
aXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxNTEyLDIyIEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0
aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
KTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyAr
MTUzNywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAg
fSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4K
QEAgLTk3NCwzOSArMTU1NSw4MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NF
UlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJl
Z1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyBy
aWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1w
RlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0
OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBm
cFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3Qo
KSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5
cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAg
ICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsK
KyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0K
IAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFu
ZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29u
c3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAg
ICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBS
ID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5m
cHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0
RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0
KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6
aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0
b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAg
bWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5k
LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9y
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAg
ICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVy
YW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJh
bmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0
YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxl
ZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50
KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFy
dCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTUsMTcgKzE2MzksMzQgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVD
b2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRl
KTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7
CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAg
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAg
ICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9
IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNjc2LDIwIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRp
ZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5n
cHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSks
IFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShv
cDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxP
cCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9u
Pgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
IHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlv
biktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFi
ZWwoKTsKQEAgLTEwNDgsOCArMTY5OCw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5h
cmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mg
c3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE3MzUsNyBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1
bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0
aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmls
ZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0
YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudElu
c3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwxNiArMTc0NSw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElD
U2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7
CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LnNlY29uZCgpKTsKIApAQCAtMTExNSwxNSArMTc1NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjpp
c1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChs
ZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7
IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2Ug
aWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
IHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdw
cigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
KyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE4MTcsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgot
ICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25k
KCkpOwogCkBAIC0xMTg4LDYyICsxODMyLDIzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3Ay
KSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFu
dERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5k
LmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyBy
aWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1w
RlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmln
aHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBG
UC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAg
cmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBs
ZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAg
IGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7
CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVn
VDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9
IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9w
ZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAg
ICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIs
IGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAg
ICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgp
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1
bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVz
dWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBB
U1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKKyAgICAgICAgd2lsbERlZihyZXN1bHQpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShy
ZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKICAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHMuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisg
ICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwg
YXJpdGhQcm9maWxlLmRpZE9ic2VydmVOZWdaZXJvRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhz
VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
ICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0VGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHNHUFIsIGxoc0ZQUik7CisgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUocmhzR1BSLCByaHNGUFIpOworICAgICAgICAgICAgICAgIG11
bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXRE
b3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRL
aW5kOjpOZWdhdGl2ZVplcm8sIGJyYW5jaDMyKExlc3NUaGFuLCBsaHNHUFIsIFRydXN0ZWRJbW0z
MigwKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJv
LCBicmFuY2gzMihMZXNzVGhhbiwgcmhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAg
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAm
JiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhz
RlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5m
cHIoKTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVO
dW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAg
TnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVy
YW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQ
UiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJ
QyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMu
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOwor
ICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
U3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQg
cmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAg
ICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOwor
ICAgICAgICAgICAgICAgIHN1YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVz
dWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5t
X2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigp
LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZw
cigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAg
ICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
c3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9u
VG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0
aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3Vi
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01V
TCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSku
dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgd2lsbERlZihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0x
NDUsMTAgKzE0OSw4IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxF
dmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBAIC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFs
aXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxs
RnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQg
IT0gb3BfY2FsbF9ldmFsKQogICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29k
ZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAKQEAgLTMzNCw0NCArMzM3LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8
T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWls
Q2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
b25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3Ry
dWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAg
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQpAQCAtMzg2LDYgKzM4OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5
LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5
dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3Vs
dCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyKCkpOworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxs
b2MgdGhlIHJlc3VsdCBoZXJlPworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24p
OwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1
LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBj
YWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50
U2xvdzsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2Fz
ZS5qdW1wcy5hcHBlbmQobmV4dENoZWNrcG9pbnRTbG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAg
R1BSUmVnIHNob3VsZEJlUmVnVDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChzaG91bGRCZVJlZ1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRl
Y29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAK
LQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGlu
ayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0
IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2Fs
bCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBo
YXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNr
cG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdl
bmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZh
bHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2tw
b2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNl
cnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAg
ICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2Vk
UmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBw
cmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIp
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBk
b25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2Uu
anVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYo
Ynl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
b25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9
CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25E
b25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0
IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRT
bG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVt
cHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFs
dWUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7
CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVH
UFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RD
YXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2Fz
ZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBi
eXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNb
MV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5v
dE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4
LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAg
ICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAg
IHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw2ICs1Myw4IEBAIGNvbnN0IGNoYXIqIEpJVENvZGU6OnR5cGVOYW1lKEpJVFR5cGUgamkKICAg
ICAgICAgcmV0dXJuICJMTEludCI7CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAg
ICAgICAgcmV0dXJuICJCYXNlbGluZSI7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAg
ICAgIHJldHVybiAiTE9MIjsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0
dXJuICJERkciOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA4LDcgKzExMCw3IEBA
IEpJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKEMKIAogSklUQ29kZVdpdGhD
b2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKCkKIHsKLSAgICBpZiAoKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpIHx8IChpc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpk
dW1wREZHRGlzYXNzZW1ibHkoKSkpCisgICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSB8fCAoaXNERkdPckZUTChqaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJs
eSgpKSkKICAgICAgICAgJiYgbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpKQogICAgICAgICBkYXRh
TG9nKCJEZXN0cm95aW5nIEpJVCBjb2RlIGF0ICIsIHBvaW50ZXJEdW1wKG1fcmVmLmV4ZWN1dGFi
bGVNZW1vcnkoKSksICJcbiIpOwogfQpAQCAtMjM3LDYgKzIzOSwxMSBAQCBOYXRpdmVET01KSVRD
b2RlOjpOYXRpdmVET01KSVRDb2RlKENvZGVSCiAjaWYgRU5BQkxFKEpJVCkKIFJlZ2lzdGVyU2V0
IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxT
aXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpCiB7CisgICAgLy8gRm9yIEJhc2VsaW5lIEpJ
VCwgdGhpcyBpcyB0cml2aWFsbHkgdHJ1ZS4KKyAgICAvLyBGb3IgTE9MIEpJVCwgZXZlcnl0aGlu
ZyBpcyBhbHJlYWR5IHNwaWxsZWQgdG8gdGhlIHN0YWNrIGF0IGVhY2ggb3Bjb2RlLCBzbyB3aGVu
IHdlCisgICAgLy8gZ28gdG8gdGhlIG9wX2NhdGNoLCB0aGUgbGl2ZSBzdGF0ZSBtdXN0IGFscmVh
ZHkgYmUgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRoZSBzdGFjay4KKyAgICAvLyBBbHNvLCBvcF9j
YXRjaCBoYXMgbm8gaW5jb21pbmcgcmVnaXN0ZXIvdHlwZSBwcm9vZiBzdGF0ZSwgc28gaXQncyB0
cml2aWFsIHRvIGNhdGNoCisgICAgLy8gYW4gZXhjZXB0aW9uIGluIExPTCBqdXN0IGJ5IGp1bXBp
bmcgdG8gb3BfY2F0Y2guCiAgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBA
IGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3QgewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAg
SW50ZXJwcmV0ZXJUaHVuaywKICAgICBCYXNlbGluZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZH
SklULAogICAgIEZUTEpJVAogfTsKQEAgLTY3LDM2ICs2OCwyMyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgY29uc3QgY2hhciogdHlwZU5hbWUoSklUVHlwZSk7CiAKLSAgICBzdGF0aWMgSklUVHlw
ZSBib3R0b21UaWVySklUKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKSVRUeXBlOjpCYXNlbGlu
ZUpJVDsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCiAgICAg
ewogICAgICAgICByZXR1cm4gSklUVHlwZTo6RlRMSklUOwogICAgIH0KICAgICAKLSAgICBzdGF0
aWMgSklUVHlwZSBuZXh0VGllckpJVChKSVRUeXBlIGppdFR5cGUpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGppdFR5cGUpIHsKLSAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAg
ICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpERkdKSVQ7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6
REZHSklUOgotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gSklUVHlwZTo6Tm9uZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBz
dGF0aWMgYm9vbCBpc0V4ZWN1dGFibGVTY3JpcHQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKICAg
ICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAg
ICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBkZWZhdWx0OgorCisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAg
ICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTA3LDcgKzk1LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklU
OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgor
ICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdK
SVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE2LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2Vs
aW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgY2FzZSBKSVRU
eXBlOjpERkdKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMjQsNiArMTE3LDI0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KIAorICAgIHN0YXRpYyBib29sIGNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChKSVRUeXBl
IGppdFR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2Vs
aW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBK
SVRUeXBlOjpOb25lOgorICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKwogICAgIHN0YXRpYyBib29sIGlzTG93ZXJUaWVyKEpJVFR5cGUg
ZXhwZWN0ZWRMb3dlciwgSklUVHlwZSBleHBlY3RlZEhpZ2hlcikKICAgICB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzRXhlY3V0YWJsZVNjcmlwdChleHBlY3RlZExvd2VyKSk7CkBAIC0xNDUs
OSArMTU2LDE5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBpc0xvd2VyT3JTYW1l
VGllcihleHBlY3RlZExvd2VyLCBleHBlY3RlZEhpZ2hlcik7CiAgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgdXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVCB8fCBqaXRUeXBlID09IEpJ
VFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKKyAgICB9CiAgICAg
CiAgICAgc3RhdGljIGJvb2wgaXNPcHRpbWl6aW5nSklUKEpJVFR5cGUgaml0VHlwZSkKICAgICB7
CisgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09
IEpJVFR5cGU6OkZUTEpJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVDsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBpc0RGR09yRlRMKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CiAgICAg
ICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5
cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1
LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYQogICAgICAgICAv
LyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVy
bHkgbWVhbmluZ2xlc3MKICAgICAgICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NS
IGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+dGFyZ2V0CiAgICAgICAgIC8vIGluIHRo
ZSBwcm9wZXIgZnJhbWUuCi0gICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCisgICAgICAgIGlmICghSklUQ29kZTo6
aXNERkdPckZUTChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQogICAgICAgICAg
ICAgY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1
Y3Rpb25zKCkuYXQoaGFuZGxlci0+dGFyZ2V0KS5wdHIoKTsKICNpZiBFTkFCTEUoSklUKQogICAg
ICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIlNsb3dQYXRoQ2FsbC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ1LDYgKzE0Niw3
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BT
OiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0
IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3LDYg
KzE1OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgogQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhp
cyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwpAQCAtMTY3LDI1ICsxNzAsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVy
ICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0Fu
eVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQot
ewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29k
ZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlu
bGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldCIpOwpAQCAtMjA3LDI3ICsxOTEsMzYgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlz
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQor
QUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2Vu
ZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisg
ICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2Rl
SW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZCht
X2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtX3Ns
b3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xv
d0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3Qo
KS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVt
cExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBM
aXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcg
cmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAg
Zm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAg
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2Vu
ZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAg
ZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0g
ICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2Rl
SW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBk
c3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAg
ICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTQwNiwx
MSArMzk5LDYgQEAgQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAg
IHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17
Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsK
LX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpAQCAtNzE3LDYg
KzcwNSwxOCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAg
cmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
aW9uPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFNsb3dPcChGdW5jdGlvbiBmdW5jdGlv
biwgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IGRzdCwgU3BlY3VsYXRlZFR5cGUgZHN0VHlwZSkKK3sKKyAgICBzcGlsbEZvckNhbGwoKTsKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
ZnVuY3Rpb24pOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgaWYgKG1fdXNlTE9MICYm
IGRzdC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gZHN0VHlwZTsKKyAg
ICAgICAgd2lsbERlZihkc3QpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRN
YXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJ
Qy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1h
dGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogI2VuZGlm
CiAgICAgICAgIH07CiAKLSAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSk7CisgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0
VHlwZSgpKTsKIAogICAgICAgICBpZiAobV9nZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoKSB7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgy
LDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNl
b2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCAr
NzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQ2FzdC5oIgpAQCAtNDEsNiArNDIsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKQEAgLTUxLDYgKzU0LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVj
dGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUg
Y2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQg
d2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYg
Z3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKwor
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
CkBAIC05MCwzMiArMTE1LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxv
Y2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+
KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlz
dHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklE
IGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1Qy
OworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBH
UFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
c2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJl
c3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5n
cHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0g
cmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFs
bG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsK
ICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNv
bnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMs
IHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAg
ICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRy
dXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9v
dmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMjUsMjMgKzE3MSw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFz
X2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9j
b25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVn
IGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5k
CisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAg
ICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JH
UFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0lu
c3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25z
dHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIp
OworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5o
YXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwor
ICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5z
dGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5j
dGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIp
OwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJ
bnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQg
ZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5j
ZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJ
bnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xl
YW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjQsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1
ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3Ig
YmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2Fu
IHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7
Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBi
ZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhh
c0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAg
SklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAg
ICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBy
ZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwg
Ly8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAg
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9w
dGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90
b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gy
VGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8p
KSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9H
UFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2Uo
cmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZh
bHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1w
bGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+
Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAg
ICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAg
ICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1
YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BS
LAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCks
IHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChi
YXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisg
ICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUg
d2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0Lgor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8v
IENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhp
cyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisg
ICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8v
IHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBt
X2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgr
K107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5i
YXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KikKQEAgLTE5OSwxMSArMzI1LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0
IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92
ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShw
cm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0yMTEsMjggKzM1NSw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5k
ZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
eXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAg
SnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1
bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFy
ZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAg
ICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0Nl
bGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVt
cEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsK
KworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1w
IGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwor
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGlu
ayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVm
aW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0y
NDEsMTMgKzQyOSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChj
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51
bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjMsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Ym9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhv
cjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2
NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNC
b29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxz
ZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRp
ZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OSwyNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lz
dGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywg
aW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwg
bnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI5LDU2IEBAIHZv
aWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlw
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAg
ICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0lu
dDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAg
ICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhp
cyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBh
bmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAh
VVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1OTUsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29t
cGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBj
b21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworCisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05v
dENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMz
LDE4ICs2NDQsNjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRy
ZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisK
KyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAg
ICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAg
ICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJl
OChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBl
KSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA5LDEyIEBA
IHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVy
biB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVH
UFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAg
LTM2OSwxNSArNzI4LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJ
bnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlz
SW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMp
KSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAg
ICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlz
SW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTM4Niw1MiArNzcxLDIyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXko
Y29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNw
ZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVl
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxk
U3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMs
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJy
YW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAg
ICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNT
dHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
YXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3Ry
aW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBK
dW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlv
biB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUg
fTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5j
dGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0
MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBGUFJU
ZW1wIHRlbXBGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFs
dWVUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZw
cigpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vblplcm8gPSBicmFuY2hEb3VibGVOb25a
ZXJvKHZhbHVlRlBSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBub25aZXJvLmxp
bmsodGhpcyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHZhbHVl
KSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBG
UFJSZWcgdmFsdWVGUFIgPSB2YWx1ZVRlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2Ny
YXRjaEZQUiA9IHRlbXBGUFIuZnByKCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm9uWmVy
byA9IGJyYW5jaERvdWJsZU5vblplcm8odmFsdWVGUFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIG5vblplcm8ubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaEdQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIHZhbHVl
RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOworICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaW52ZXJ0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKm1fdm0sIEpTVmFsdWVSZWdzIHsg
dmFsdWVUZW1wLmdwcigpIH0sIHJlc3VsdEdQUiwgc2NyYXRjaEdQUi5ncHIoKSwgdmFsdWVGUFIu
ZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbnZlcnQpOworICAgICAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAK
LSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0
YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBv
dGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3Ig
dHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpT
VmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhl
IGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29w
ZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNl
KTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdp
bGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2ls
bCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAg
ICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQg
dGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3Rl
eHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0
ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNv
bmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25k
aXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRy
dXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBS
VGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNo
MS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigp
OworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAg
ICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElm
RmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZh
bHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1f
Y29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24p
KSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJ
bW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1
ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAg
ICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBm
cFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2Ny
YXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
dGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiAr
OTk0LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBp
bnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIu
Z3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAt
IGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAg
ICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gy
R1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVk
aWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhp
cyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAg
IEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAg
ICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0g
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUg
dGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0g
ICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNy
YywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwo
c3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJH
UFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhp
bnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJH
UFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRp
YXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVk
aWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAt
IHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1
bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
Z1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAK
LSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCAr
MTEyNSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090
aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlm
ICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTUzLDI2IEBAIHZv
aWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBk
by4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsxMTg0LDQ0MiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2Vs
bCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQ
dHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7
Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlv
bkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlu
cHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAg
ICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAg
ICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0Nl
bGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNK
dW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCitzdGF0aWMgdm9pZCBjb21wYXJlU3RyaW5ncyhK
SVQmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBub3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwg
R1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQUiwgR1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyBy
aHNUZW1wR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgR1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MobGhzR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgbGhzVGVtcEdQ
Uik7CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzR1BSLCBKU1N0
cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmhzVGVtcEdQUik7CisKKyAgICBzbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwobGhzVGVtcEdQUikpOworICAgIHNsb3dQYXRo
LmFwcGVuZChqaXQuYnJhbmNoSWZSb3BlU3RyaW5nSW1wbChyaHNUZW1wR1BSKSk7CisKKyAgICBq
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6
Omxlbmd0aE1lbW9yeU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgCisgICAgbm90RXF1YWwu
YXBwZW5kKGppdC5icmFuY2gzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjps
ZW5ndGhNZW1vcnlPZmZzZXQoKSksCisgICAgICAgIHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBl
cXVhbC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRj
aEdQUikpOworICAgIAorICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobGhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOworICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3Ry
aW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOworICAgIAorICAgIGppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmRhdGFPZmZz
ZXQoKSksIGxoc1RlbXBHUFIpOworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHJoc1RlbXBHUFIpOwor
ICAgIAorICAgIGF1dG8gbG9vcCA9IGppdC5sYWJlbCgpOworICAgIAorICAgIGppdC5zdWIzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKworICAgIHsKKyAg
ICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobGhzVGVtcEdQUiwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICBhdXRvIG1hY3JvU2NyYXRjaCA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgRGlz
YWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyaHNUZW1wR1BSLCBzY3Jh
dGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpLCBtYWNyb1NjcmF0Y2gpOworICAgICAg
ICBub3RFcXVhbC5hcHBlbmQoaml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
c2NyYXRjaDJHUFIsIG1hY3JvU2NyYXRjaCkpOworICAgIH0KKyAgICAKKyAgICBqaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwg
JmppdCk7CisgICAgZXF1YWwuYXBwZW5kKGppdC5qdW1wKCkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3N0YXRpYyB2
b2lkIGNvbXBhcmVTdHJpY3RFcUNlbGxzKEpJVCYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIGVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIHNsb3dQYXRoLCBHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSLCBH
UFJSZWcgbGhzVGVtcEdQUiwgR1BSUmVnIHJoc1RlbXBHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBH
UFJSZWcgc2NyYXRjaDJHUFIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBl
cXVhbC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBsaHNHUFIsIHJo
c0dQUikpOworCisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZkhlYXBCaWdJbnQobGhz
R1BSKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZkhlYXBCaWdJbnQocmhzR1BS
KSk7CisKKyAgICBhdXRvIGxoc0lzU3RyaW5nID0gaml0LmJyYW5jaElmU3RyaW5nKGxoc0dQUik7
CisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgbGhzSXNTdHJpbmcubGlu
aygmaml0KTsKKyAgICBub3RFcXVhbC5hcHBlbmQoaml0LmJyYW5jaElmTm90U3RyaW5nKHJoc0dQ
UikpOworCisgICAgY29tcGFyZVN0cmluZ3Moaml0LCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRo
LCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcEdQUiwgcmhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6
OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgQVNT
RVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjpp
c19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1
YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFu
ZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhz
KSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNl
IDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAg
IENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5k
IHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAg
ICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFy
ZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIp
OworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAg
IGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICBH
UFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworCisg
ICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFs
OworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgICAgIGNvbXBhcmVT
dHJpbmdzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwg
bGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwor
CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAg
ICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAg
ICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykp
IHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBs
aHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5m
cHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCBy
ZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAm
JiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkgeworICAgICAgICBOdW1iZXJPcGVyYW5kIGxo
c1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91Ymxl
KGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisK
KyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7
CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNs
b3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAg
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNv
bXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQor
CisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQVNTRVJU
KHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlz
RXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0
byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1
YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUo
bGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wo
cmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVT
dHJpbmcocmhzKSkgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChyaHNHUFIpOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAg
R1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAg
SnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAg
ICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhp
cywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3By
KCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICBpZiAo
aXNFcSkgeworICAgICAgICAgICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAg
ICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50
MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsK
KyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9
OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBs
aHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzog
Q291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOwor
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFy
ZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BS
KTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAg
ICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0u
Z3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAg
ICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1w
bDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcg
bGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7Cisg
ICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIC8vIE9PUFM6IFdlIGNhbiBtYWtlIHRoaXMgYSBzaW5nbGUgYnJhbmNoIGlm
IHRoZSByZXN0b3JlIGRvZXNuJ3QgY2xvYmJlciByZXR1cm5WYWx1ZUdQUi4KKyAgICAgICAgYXV0
byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
K3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0g
cmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX3Ro
cm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCAr
MTYzNSwyNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1
YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJl
ZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlw
ZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpW
YWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhz
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAg
ICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAg
ICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsK
KyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgICAgIGNv
bXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJo
c0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9
IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJl
U2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1
YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICAgICAg
SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICAgICAgY29t
cGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQ
UiwgcmhzR1BSLCBsaHNUZW1wLmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIo
KSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9
IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAg
ICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJl
ZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
c1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgbGhzU2NyYXRjaEdQUiA9IGxoc1NjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzU2NyYXRjaEdQUiA9IHJoc1NjcmF0Y2gu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgICAg
ICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwogCiAjaWYgVVNFKEJJR0lOVDMy
KQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0
cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAg
ICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCBy
aWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBp
bnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2Vk
IGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBp
cyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBi
aXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQot
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25l
ID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1Qy
KTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIg
c3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBG
SVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlz
IGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJl
IHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoZmFsc2UpOworI2Vsc2UKIAotICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAg
ICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwg
SlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDUpOworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICBKdW1wTGlz
dCBub3RFcXVhbDsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbGhzSXND
ZWxsID0gYnJhbmNoSWZDZWxsKGxoc0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBib3RoTm90
Q2VsbHMgPSBicmFuY2hJZk5vdENlbGwocmhzR1BSKTsKKyAgICAgICAgICAgICAgICBub3RFcXVh
bC5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgICAgIGxoc0lzQ2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmhzR1BS
KSk7CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgICAg
ICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwg
bGhzR1BSLCByaHNHUFIsIGxoc1NjcmF0Y2hHUFIsIHJoc1NjcmF0Y2hHUFIsIHRlbXBHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAg
ICAgICAgICAgICAgYm90aE5vdENlbGxzLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3Qg
aWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAg
ICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFu
Y2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAg
SnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxpbmso
dGhpcyk7CisKKyAgICAgICAgICAgIGlmIChpc0VxKQorICAgICAgICAgICAgICAgIGNvbXBhcmU2
NChFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICBkb25l
LmFwcGVuZChqdW1wKCkpOworCisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVt
cCgpKTsKKworICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyNl
bmRpZgorICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisj
aWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3Vt
aW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8
fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAg
ICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkK
KyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1l
bnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJy
YW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3
ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNr
IGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBp
dCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBp
dHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJv
dmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAg
bW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpM
b3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwor
ICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAo
dG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNl
OiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93
IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNl
bGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQo
VHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFs
dWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBi
b3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIp
OwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwo
cmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0
IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0g
ICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIo
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVm
dE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxp
bmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292
ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChy
ZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsK
KworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAg
ICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50
MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwor
ICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC02NzQsNjggKzE4ODYsMjAzIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdp
c3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7Cisg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8g
RXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91Ymxl
RXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBp
ZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkp
IHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7
ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21w
YXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAg
IEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAg
ICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAgR1BSVGVt
cCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAg
ICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNs
b3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2Ny
YXRjaFRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkSnVtcChlcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBhZGRKdW1wKG5vdEVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAg
ICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUg
Y2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgbGhzU2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJUZW1wIHJoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcDIgeyAqdGhpcyB9OworCisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIGxoc1NjcmF0Y2hHUFIg
PSBsaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc1NjcmF0Y2hHUFIgPSBy
aHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHRlbXAyR1BSID0gdGVtcDIuZ3ByKCk7CiAjaWYgVVNFKEJJ
R0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRv
IGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAg
Z290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAg
ICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBU
aGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJs
ZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBu
YWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgot
ICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBh
ZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdo
IGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8
NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91
YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAg
bW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2Vz
dE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2
NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwot
ICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9y
RXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVx
dWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBh
IGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCBy
ZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6
IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cg
cGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJl
Z1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGZhbHNlKTsKKyNlbHNlCisgICAgICAg
ICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAg
ICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsZWZ0SXNDZWxsID0gYnJhbmNoSWZDZWxs
KGxoc0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5v
dENlbGwocmhzR1BSKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsK
KworICAgICAgICAgICAgICAgIGxlZnRJc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBub3RFcXVhbC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJoc0dQUikpOworCisgICAgICAgICAg
ICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVx
Q2VsbHMoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBs
aHNTY3JhdGNoR1BSLCByaHNTY3JhdGNoR1BSLCB0ZW1wR1BSLCB0ZW1wMkdQUik7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgYm90aE5v
dENlbGxzLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEg
ZG91YmxlLgorICAgICAgICAgICAgYXV0byBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgYXV0byByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBpZiAoaXNFcSkgeworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGVxdWFsLCB0
YXJnZXQpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICB9IGVsc2UgeyAKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVh
bCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09
IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcg
J3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxl
ZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlz
IENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAg
ICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50
IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBz
aW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVp
cmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBU
aGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8
PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0
IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3
aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91
YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwor
ICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisK
KyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAg
ICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxs
ICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3Zl
ciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVt
cCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVn
ZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91Ymxl
LgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBK
dW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlw
ZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAg
ICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1
bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRl
Z2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBk
b3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmln
aHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEs
IHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzIwOTUsMjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmlj
dGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVn
IGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
ICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1i
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVO
dW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51
bWJlcjsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9
IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAg
SnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1w
KCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVt
cCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyks
IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMp
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBp
bnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2Ug
eworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5k
aWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNp
ZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1i
ZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQz
MihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlz
TnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAg
ICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBp
c0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJ
bnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsK
KyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBy
ZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBp
ZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5w
dXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAg
IH0KKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChy
ZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRl
KCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBv
ciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMzc0LDIzIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0
U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5U
eXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisK
KyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAg
ICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTkwNSw5ICsyNDA1LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxl
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRl
KSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0
R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0
Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTIyLDkgKzI0MzAsMTcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7
Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTkzOCw5MyArMjQ1NCwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1
dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1
Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAg
ICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsK
ICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGlu
dD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxp
bmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklU
OjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxP
cCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90
Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAg
ICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQ
dHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBj
b21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBy
ZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0K
LSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
LQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAg
Y29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2Fz
Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAK
K3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1t
ZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQot
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVs
bEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdl
IGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBt
YWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwg
d2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxl
IHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmpl
Y3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50
ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBj
b3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAg
ICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAg
c3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOwor
ICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9
IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsK
IApAQCAtMTAzNSwyMyArMjYwNSw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29u
c3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwor
ICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7
CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNP
YmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3Bl
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5t
X3NyY0RzdDsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEu
bV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc3JjRHN0LCByZWdUMSk7CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1v
ZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkK
KyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2Jq
ZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0
ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2Vs
bE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3
ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3Zl
blR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNw
ZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAg
ICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVw
ZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBK
dW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAg
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAg
ICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVu
VHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAg
ICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVj
dFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3Vs
dEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEp
OworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmpl
Y3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMDU5LDYgKzI2OTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyArMjcwOSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJl
ZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAx
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7Cisg
ICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRl
bXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQt
PmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAg
IHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdw
clRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7Cisg
ICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1
bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxs
ZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVE
YXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVn
LCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsy
NzUxLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBs
b2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2Vz
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdp
c3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3Jj
KSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNs
b3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsyNzk2LDExIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNl
dEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRo
b3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVy
ZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZt
KCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9h
ZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0
KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEzICsyODI0LDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXph
dGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwog
CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVj
b2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwxMSArMjg0MSwxMCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRy
eS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNh
biBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShp
dGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEwICsyODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJz
b2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CiB9CiAKQEAgLTEyNDUsOCArMjg3NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhw
KGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganND
YXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0
OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdF
eHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CkBAIC0xMjU2LDIzICsyODk4LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1v
bihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAg
ICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1w
bGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUt
PmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2Uo
KnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIo
KTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vs
c2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZt
KCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29w
ZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAg
ICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0
b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBz
Y29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwog
ICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjk2Miw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNF
eHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BS
ID0gc2NvcGUtPmdwcigpOworICAgICAgICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZv
ckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
dGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9u
KTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2Ugewog
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4
cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQ
UiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0K
IH0KIApAQCAtMTM0OSw5ICszMDMyLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGlu
dCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVz
U3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BS
UmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxh
Y2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7
CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJh
eTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzMwNTMsMjkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4
ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YXJnR1BSID09IHJldHVyblZhbHVlR1BSKTsKKyAgICB9CisKKyAgICAvLyBPT1BTOiBJbmxpbmUg
dGhlIGFsbG9jYXRpb24gcGF0aCBoZXJlLCBpdCBtYXR0ZXJzIGZvciBzdW5zcGlkZXItY3J5cHRv
LWFlcworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNp
emVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Cisg
ICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
Z1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBAIC0xMzgxLDE1ICszMDg5LDM2IEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhp
cywgZW51bWVyYXRvciB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMs
IGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2
ICszMTM4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNo
YWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiArMzE2Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFi
bGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8K
KwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CkBAIC0xNDYxLDE1ICszMTk0LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVt
ZXJhYmxlX2luZGV4ZWQKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2sp
LCByZWdUMik7CiAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9m
aWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlr
ZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRM
b2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0
aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2Fz
ZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0Nzgs
MTMgKzMyMTEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAog
CiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRl
Y29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUs
IG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAo
KSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJh
YmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyAr
MzI0NCw4MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVt
ZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQg
aW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZh
bHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0g
ICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidz
IGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBK
dW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdU
MSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdU
MCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0
IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBz
dWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVn
VDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAg
ICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBp
bnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNl
dEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNI
ZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNl
bGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8g
Q2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUg
b2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAg
ICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlu
bGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91
dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAg
ICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3Vi
MzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzMy
OCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRl
bXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRl
bXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNl
KCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIg
PSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRl
bXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9Cisg
ICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAg
IGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTc0LDIxICszMzgyLDUxIEBAIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEp
OwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZz
ZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3du
SW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywg
aW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9y
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigp
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRz
ID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1Qw
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVz
dWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEs
IHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0
b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIs
IHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5
OCw2ICszNDM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwog
ICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9j
YXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90
YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0
IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzQ5OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2Zp
bGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgp
OworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdH
UFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxl
bXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszNTE1
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4o
KSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwog
ICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJl
Z1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWls
PigpOwpAQCAtMTY4NCw2ICszNTMwLDE5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpCiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBK
SVQ6OmVtaXRJc0NhbGxhYmxlSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAg
ICAgIGF1dG8gaXNGdW5jdGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAg
ICBhdXRvIG5vdE9iamVjdCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAg
CisgICAgICAgIGF1dG8gc2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlu
cHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgCisgICAgICAgIG5v
dENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
ICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0Z1bmN0aW9uLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19jYWxsYWJsZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxhYmxlSW1wbDxPcElz
Q2FsbGFibGU+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc19mdW5jdGlvbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGVtaXRJc0NhbGxhYmxlSW1wbDxPcFR5cGVvZklzRnVuY3Rpb24+KGN1cnJlbnRJbnN0
cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2JqZWN0PigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8g
aXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
aXNOdWxsID0gYnJhbmNoSWZFcXVhbChKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0sIGpzTnVsbCgp
KTsKKyAgICAgICAgYXV0byBpc05vbk51bGxOb25DZWxsID0ganVtcCgpOworICAgICAgICAKKyAg
ICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gaXNGdW5jdGlvbiA9IGJyYW5j
aElmRnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAgICBhdXRvIG5vdE9iamVjdCA9IGJyYW5jaElm
Tm90T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gc2xvd1BhdGggPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgT3ZlcnJp
ZGVzR2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgCisgICAgICAgIGlzTnVsbC5saW5rKHRoaXMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAg
ICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc05vbk51bGxOb25DZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgbm90
T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNv
ZGUubV92YWx1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IGRvbmU7Cisg
ICAgICAgIEp1bXAgc2xvd1BhdGg7CisgICAgICAgIGVtaXRUeXBlT2YoCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyB7IGlucHV0R1BSIH0sIHJlc3VsdEdQUiwKKyAgICAgICAgICAgIFsmXSAoVHlw
ZW9mVHlwZSB0eXBlLCBib29sIGZhbGxzVGhyb3VnaCkgeworICAgICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX3ZtLT5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0eXBlKSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgaWYgKCFmYWxsc1Rocm91Z2gpCisgICAgICAgICAgICAg
ICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
WyZdIChKdW1wIHRoZVNsb3dQYXRoKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGggPSB0aGVT
bG93UGF0aDsKKyAgICAgICAgICAgIH0pOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y1N0cmluZzsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgLy8gT09QUworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMy
KEFkZHJlc3MoaW5wdXRHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0
aE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIp
OworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5t
X3N5bWJvbFRhYmxlKSk7CisgICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmIChzeW1ib2xUYWJsZS0+c2luZ2xldG9uKCkuaXNTdGlsbFZhbGlkKCkp
IHsKKyAgICAgICAgICAgIGVtaXRTbG93T3Aoc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGRzdCwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBzY29wZVRl
bXAgeyAqdGhpcywgc2NvcGUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0g
c2NvcGVUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDFUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAg
ICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZElt
bVB0cihudWxscHRyKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXpl
PEpTTGV4aWNhbEVudmlyb25tZW50PigKKyAgICAgICAgICAgICptX3ZtLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0
dXJlKCkpLCBidXR0ZXJmbHksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwKKyAgICAgICAgICAg
IHNsb3dQYXRoLCBKU0xleGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUoc3ltYm9sVGFi
bGUpKTsKKworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgCisgICAgICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkgYmFycmllcnMgc2lu
Y2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQorICAgICAgICAv
LyBhY3RpdmF0aW9uIG11c3QgYmUgeW91bmcuCisgICAgICAgIHN0b3JlUHRyKHNjb3BlR1BSLCBB
ZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihzeW1ib2xUYWJsZSksIEFkZHJlc3MocmVzdWx0R1BSLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZTeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgLy8gTXVzdCBpbml0aWFsaXplIGFsbCBtZW1iZXJzIHRvIHVuZGVmaW5lZCBvciB0
aGUgVERaIGVtcHR5IHZhbHVlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3lt
Ym9sVGFibGUtPnNjb3BlU2l6ZSgpOyArK2kpCisgICAgICAgICAgICBzdG9yZVRydXN0ZWRWYWx1
ZShpbml0aWFsVmFsdWUsIEFkZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZShTY29wZU9mZnNldChpKSkpKTsKKyAgICAgICAgCisgICAgICAgIG11
dGF0b3JGZW5jZSgqbV92bSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MDIsMTEg
KzM3MzUsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3Vu
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMy
KHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzc1Niw0OCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJh
bXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVu
Z3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9T
a2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3Vs
dEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAg
ICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQ
UiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFt
c1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAg
ICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50
MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwor
ICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJv
TGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1z
VG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRp
ZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwog
Ci0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhp
cyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAj
ZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICsz
ODA1LDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRP
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJn
dW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9
IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7
Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJl
c3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZC
b3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVn
cyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Cisg
ICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVh
bCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgp
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBh
cmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVm
aW5lZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJl
Z3MpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZh
bHVlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9
CisKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAg
ICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNl
Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDE7Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BS
KTsKICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
dmFsdWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVS
ZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJl
Z3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNl
cyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MjQsNiArMTQyNCw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Db21wYXIKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlv
blByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIC8v
ZGF0YUxvZ0xuKCJjb21wYXJlTGVzcywgbGhzOiAiLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSksICIgcmhzOiAiLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogICAgIAogICAgIHJl
dHVybiBqc0xlc3M8dHJ1ZT4oZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CkBAIC0xNDkxLDYgKzE0OTMsOCBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGFyCiAgICAgSlNWYWx1ZSBz
cmMxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgc3JjMiA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAorICAgIC8vZGF0YUxvZ0xuKCJzdHJpY3RlcSwg
bGhzOiAiLCBzcmMxLCAiIHJoczogIiwgc3JjMik7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6c3Ry
aWN0RXF1YWwoZ2xvYmFsT2JqZWN0LCBzcmMxLCBzcmMyKTsKIH0KIApAQCAtMTY5MSw3ICsxNjk1
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRlYnVnLAogI2lmIEVOQUJM
RShERkdfSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRPcHRpbWl6ZUFm
dGVyV2FybVVwKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGNvZGVCbG9jay0+dXBkYXRl
QWxsUHJlZGljdGlvbnMoKTsKKyAgICBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+
dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKIH0KIApAQCAtMTc0NSw3ICsxNzQ5LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbk9wdGltaQogCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZPcHRpbWl6YXRp
b25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2Rl
QmxvY2ssICJkZWxheU9wdGltaXplVG9ERkciLCAoImNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmpp
dEV4ZWN1dGVDb3VudGVyKCkpKTsKLSAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0
aW9ucygpOworICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+dXBkYXRl
QWxsUHJlZGljdGlvbnMoKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAiQ2hvb3Npbmcgbm90IHRvIG9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LCBiZWNh
dXNlIHRoZSB0aHJlc2hvbGQgaGFzbid0IGJlZW4gcmVhY2hlZC4iKTsKICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICB9CkBAIC0xODE0LDcgKzE4MTgs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgICAgIC8v
IG5vdGhpbmcgbGVmdCB0byBkby4KICAgICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc09wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJs
b2NrLCAiZGVsYXlPcHRpbWl6ZVRvREZHIiwgKCJjb21waWxlZCBhbmQgZmFpbGVkIikpOwotICAg
ICAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgICAgICAgICAg
Y29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7
CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDb2RlIGJs
b2NrICIsICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4g
b3B0aW1pemVkIHJlcGxhY2VtZW50LiIpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dChudWxscHRyLCBudWxscHRyKTsKICAgICAgICAgfQpAQCAtMTg0Myw3ICsxODQ3LDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CisgICAgICAg
IGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZVRvREZHTm93KCkpIHsKICAgICAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlPcHRpbWl6ZVRvREZHIiwgKCJp
bnN1ZmZpY2llbnQgcHJvZmlsaW5nIikpOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLAogICAgICAgICAgICAgICAgICJEZWxheWluZyBvcHRpbWl6YXRpb24g
Zm9yICIsICpjb2RlQmxvY2ssCkBAIC0xODc5LDcgKzE4ODMsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0
aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VSVChv
cHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAmJiBK
SVRDb2RlOjppc0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAg
CiAgICAgaWYgKHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2Fs
bEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIENP
REVCTE9DS19MT0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0IGJj
IyIsIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTE5NzIsNyArMTk3Niw3IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25UcnlPU1IKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
Y29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7CisgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPmVu
c3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRl
Y29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKQEAgLTM0MzMsNiAr
MzQzNyw0MiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2hlY2tJCiAgICAg
cmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2Vy
TE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpCit7
CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBp
biBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAorICAgIC8vIHJlYWxseSBiZSBwcm9m
aXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xDb2RlQmxvY2stPnZtKCku
aGVhcCk7CisKKyAgICBpZiAoZ2V0ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpICYmICEhYXRvaShn
ZXRlbnYoInByaW50RWFjaEpldHRpc29uIikpKQorICAgICAgICBkYXRhTG9nTG4oImpldHRpc29u
LCBmb3JjaW5nIHJlb3B0IG5vdzogIiwgKmxvbENvZGVCbG9jayk7CisgICAgbG9sQ29kZUJsb2Nr
LT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgCisg
ICAgLy8gT09QUzogcHJvY2VzcyB2YWx1ZSBwcm9maWxlcyBoZXJlLCBzaW5jZSB3ZSdyZSBqZXR0
aXNvbmluZywgaG9wZWZ1bGx5IHRoZXkgdXBkYXRlIHcvIHRoaW5ncyB3ZSBjYXJlIGFib3V0Lgor
CisgICAgc2FuaXRpemVTdGFja0ZvclZNKGxvbENvZGVCbG9jay0+dm0oKSk7CisKKyAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpsb2xDb2RlQmxvY2ssICI6IEVudGVyZWQg
cmVvcHRpbWl6ZSBmcm9tIExPTCIpOworCisgICAgQ29kZUJsb2NrKiBsbGludENvZGVCbG9jayA9
IGxvbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3
aXRoIHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrLgorICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShsbGludENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKyAgICBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50ID0gbGxpbnRDb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CisgICAgaWYgKCFyZXBs
YWNlbWVudCB8fCByZXBsYWNlbWVudCA9PSBsbGludENvZGVCbG9jaykgeworICAgICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpsbGludENvZGVCbG9jaywgIjogTm90IHJl
b3B0aW1pemluZyBMT0wgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGJlZW4gamV0dGlzb25lZC4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlcGxhY2Vt
ZW50IG11c3QgYmUgb3B0aW1pemVkIGNvZGUuIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5Cisg
ICAgLy8gdG8gY2hlY2sgb3VyIGxvZ2ljLgorICAgIEFTU0VSVChsbGludENvZGVCbG9jay0+aGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChsb2xDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisKKyAgICAvLyBPT1BTOiBmaWd1cmUg
b3V0IHN0dWNrIGluIGEgbG9vcCBsb2dpYworICAgIGxvbENvZGVCbG9jay0+amV0dGlzb24oUHJv
ZmlsZXI6OkpldHRpc29uRHVlVG9PU1JFeGl0LCBDb3VudFJlb3B0aW1pemF0aW9uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE5LDYgKzMxOSw4IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVmFs
dWUKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxl
ckxvZywgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
cm9jZXNzU2hhZG93Q2hpY2tlbkxvZywgdm9pZCwgKFZNKikpOwogCitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENv
ZGVCbG9jayogbG9sQ29kZUJsb2NrKSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yODEsOCArMjc3LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKytt
X2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAg
IExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2Vs
ZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJN
LgpAQCAtNTk4LDggKzU5MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29u
c3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKQEAgLTYzOSw4ICs2MzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC02ODYsOCArNjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CkBAIC03MjksOCArNzE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtODE5LDggKzgwMiw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKQEAgLTExMDAsOCArMTA4MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTI1Nyw4ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9T
Y29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8o
Ynl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAj
aW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0
cmVhbS5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFj
ZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKQEAgLTUyLDUxICs1NCwxMTcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1
bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSOworCisgICAg
aWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsK
KyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAg
IHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFs
dWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOwor
ICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVzdWx0R1BSOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJl
Z1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
fQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25z
OjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVt
cCBub3RDZWxsOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOworICAgICAgICBp
ZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworCisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBtb3ZlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7
CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgfQogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBz
aG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAh
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5
cGVHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwg
U3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wp
KQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxP
TCgpKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiAgICAgfQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4Owor
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3MyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BS
UmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHBy
b3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
YmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVy
dHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5
R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxk
U3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgdW5hdmFpbGFibGVS
ZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5h
bWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0K
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nh
c2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1sxXS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2Uu
cmVzdWx0LmdwcigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTcsNiArMjU3LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAg
IHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1l
SXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAg
aWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBK
SVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRo
ZSByZWdpc3RlcnMuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZh
bHVlLCByZWdUMSk7CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Lm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShi
eXRlY29kZSksIHB1dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCkBAIC0zMzksNyArNDQ0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZTsKQEAgLTM0Nyw3ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNv
ZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2
MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsK
IAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5i
eVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwpAQCAtMzgxLDYgKzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyht
X2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IERvIGJldHRl
ciBpZiB3ZSBjYW4hCisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5NCwx
MyArNTAwLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZh
bEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgZmFzdFBhdGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwogICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5
dGVjb2RlLm1fcHV0S2luZDsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFi
ZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKQEAg
LTQyMCw0OSArNTI1LDEwNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNl
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNz
b3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdw
cigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJf
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0
ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBi
eXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdU
MSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJl
Z1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAq
dGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAq
dGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7
ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0
cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRl
ckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0
ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9w
ZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFs
dWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNz
b3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRT
ZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRl
cywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFz
ZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3Bl
cnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7
CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAg
ICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2
MzMsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAg
R1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBy
ZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlz
KTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQ
Uik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC00OTIsMjUgKzY4NywyNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERl
bEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAg
IEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFs
dWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcs
NzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7Cisg
ICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
IHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZh
bHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNo
R1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQ
UiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsK
KyAgICB9CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZWdUMik7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmll
ciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVn
aXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU0MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZh
bHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEs
IFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNl
TE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJh
c2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwor
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJh
c2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkp
CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKwogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3Ro
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3Ro
TW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlk
TW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1v
ZGUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxP
TCgpID8gcmVzdWx0R1BSIDogcmVnVDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0
YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhN
b2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
c3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
cmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAg
IAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQ
UjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNl
KCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRo
aXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIg
PSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xv
d0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRo
aXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJz
Rm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7Cisg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
dGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5
dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAg
Ly8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0
aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBh
ZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBh
dGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1
Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMu
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJl
ZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0
Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlz
LCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
YmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1
ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSBy
ZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVj
bWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0
S2luZDo6Tm90RGlyZWN0KTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CkBAIC03NjUsNzcgKzExNjAsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6
ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1
Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsK
LSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJ
ZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdw
cigpOworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsK
IAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0g
cmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdU
MDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0K
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAg
ICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBK
SVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAg
IEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklU
SW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRW
YXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6
OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4
KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJ
bmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTg0NywxNyArMTI2MCwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3Bl
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTg2Nywy
MSArMTI4OCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1
cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNj
b3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4
aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
Lm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZl
VHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJl
c3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3Vs
dEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTk0MCwxNSArMTM3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQ
UlJlZyByZWcpCkBAIC05NjIsMTIgKzE0MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21J
bmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CkBAIC05NzgsNTEgKzE0MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3Qp
OyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3Qg
Y2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0
aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVj
dGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0g
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4g
b2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBH
UFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAg
b2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9
IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKwor
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2Nv
cGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3Bl
R1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAg
ICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Cisg
ICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBp
ZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91
dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNl
dElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zm
c2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1
bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BS
KTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsK
KyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2su
Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xv
dCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2Nv
cGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVy
YW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQ
UiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZh
cjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xMDM2LDEwICsxNTA0LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAg
LTEwNTIsMjcgKzE1MjAsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1
ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRz
dCk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAt
MTA4Miw0MCArMTU1MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUo
SlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBz
ZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVt
aXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09m
T3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RX
YXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXRO
b3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7
Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEs
IEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTEyOSwyMSArMTU3OSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQ
UlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVT
bG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAg
ICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlv
bmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BS
OworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0
ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBz
Y29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigp
OworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAg
ICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BS
ID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBu
ZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdU
MCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAg
ICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihv
ZmZzZXRHUFIpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0
ZXJmbHlHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAg
ICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSByZWdUMDsKKwogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8u
aW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBi
ZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBz
dGF0aWNhbGx5LgogICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+
KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50
U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdy
aXRlKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpT
VmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9y
ZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAg
ICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
ISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZh
cihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsK
KworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAg
ICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAg
ICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAgLTExOTAsMTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1
ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUu
cmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2Rl
IGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRv
d24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2
ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywg
aXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5p
dGlhbGl6ZWQgY29uc3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKQEAgLTEyMDksMjMgKzE3MjUsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5n
cHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50
IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2Ft
ZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ug
d29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNj
cmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Nj
b3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhi
eXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KSB7CkBAIC0xMjYxLDYxICsxNzg0LDE3OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAg
ICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsK
KyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3Vt
ZW50cyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1
bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSBy
ZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNz
KHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBE
aXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3Vt
ZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1
bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1
bWVudHNHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2
YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0g
YXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAg
ICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgIH0KKyAgICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNz
KGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAh
IShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmll
cihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0
aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Ig
bm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdh
bGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAor
ICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNv
ZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJh
bmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8g
dmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRp
b25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1
ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2UpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUob3duZXIpICYgU3Bl
Y0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBl
KHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZh
bHVlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVy
YW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIg
PSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIp
OworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3du
ZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3By
KCk7CisKKyAgICAgICAgaWYgKGdwckZvck9wZXJhbmQob3duZXIpICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBvd25lckdQUiA9IGdwckZvck9wZXJhbmQob3duZXIpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG93bmVyVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAg
ICBvd25lckdQUiA9IG93bmVyVmFsdWUtPmdwcigpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihvd25lciwgb3duZXJHUFIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAg
SnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNl
TE9MKCkgfHwgISEocHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAg
b3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhp
cyk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNv
cmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBu
ZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxl
bnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJl
Y29yZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90
Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlz
U2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtu
b3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJh
bmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lz
ZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9w
dWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4
ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBj
b2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
KSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVn
IHZhbHVlR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChncHJG
b3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIHZhbHVl
R1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHZhbHVl
R1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
dXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAg
ICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMTMyNywxMSArMTk2NywyNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50
ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAv
LyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNw
ZWNDZWxsOworCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4
KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2Zp
ZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsx
OTk2LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmll
cihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
VGVtcC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAg
ICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZhbHVl
R1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0
T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGlu
ZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUsMjUg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW47CisgICAgeworICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hH
UFIpOworICAgIH0KKworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGls
bFJlY29yZDsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0g
c2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUxLDgg
QEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFs
c2U7CisKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
CkBAIC0xNTY3LDYgKzIyNTQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRl
TmFtZVdpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2lu
ZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGly
ZWN0KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09
IG9wX3B1dF9ieV92YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9p
ZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrKQogewogICAgIEFTU0VSVF9V
TlVTRUQocHJvZmlsZWRERkdDb2RlQmxvY2ssICFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxv
Y2ssICIgZGlkIGJlY29tZSByZWFkeS4iKTsKICAgICAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBK
SVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQpCiB7CiAgICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIg
cmVzdWx0OiAiLCByZXN1bHQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMjIg
QEAKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKIAorI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUV29ya2xpc3Q6OlBs
YW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsKIHB1
YmxpYzoKLSAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQot
ICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQorICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGls
ZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkKKyAgICAgICAgOiBtX2xsaW50Q29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX2Nv
ZGVCbG9ja1RvQ29tcGlsZShjb21waWxlVHlwZSA9PSBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgPyBt
X2xsaW50Q29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpIDogbV9sbGludENvZGVCbG9jaykgCisg
ICAgICAgICwgbV9qaXQobV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCksIG1fY29kZUJsb2NrVG9D
b21waWxlLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7CiAg
ICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOworICAg
ICAgICAvLyBPT1BTOiB2aXNpdCB0aGlzIGluIGNvbmN1cnJlbnQgZ2MKKyAgICAgICAgaWYgKG1f
Y29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRDb2RlQmxvY2spIHsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAucHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGls
ZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoKQpA
QCAtNTMsMTcgKzYwLDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKCkKICAgICB7CiAg
ICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmxpbmsoKTsKKworICAgICAg
ICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgICAgIGlmICht
X2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2NrKQorICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAudW5wcm90ZWN0KG1fY29kZUJsb2NrVG9D
b21waWxlKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZF
TlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIp
KTsKKyAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9sbGludENvZGVCbG9jaywgImRl
bGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwogICAgICAgICAgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBmYWls
ZWQuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7Ci0g
ICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOwor
ICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CisgICAg
ICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVs
OgogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJ
VCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+aml0U29vbigpOworICAgICAgICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUt
Pm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShtX2NvZGVCbG9ja1RvQ29tcGlsZSk7Cisg
ICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5qaXRTb29uKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtNzEsOCArODQsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2tLZXkoKSB7IHJldHVybiBtX2xsaW50Q29kZUJsb2NrOyB9CisgICAgVk0mIHZtKCkg
eyByZXR1cm4gbV9sbGludENvZGVCbG9jay0+dm0oKTsgfQogICAgIAogICAgIGJvb2wgaXNGaW5p
c2hlZENvbXBpbGluZygpCiAgICAgewpAQCAtODAsMTUgKzkzLDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faXNGaW5pc2hlZENvbXBpbGluZzsKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5k
ZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIFBsYW4gcGxhbihj
b2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBQbGFuIHBsYW4o
Y29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAg
ICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7CiAgICAgICAgIHBsYW4uZmluYWxpemUoKTsKICAg
ICB9CiAgICAgCiBwcml2YXRlOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29k
ZUJsb2NrKiBtX2xsaW50Q29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2tUb0Nv
bXBpbGU7CiAgICAgSklUIG1faml0OwogICAgIExvY2sgbV9sb2NrOwogICAgIGJvb2wgbV9pc0Zp
bmlzaGVkQ29tcGlsaW5nIHsgZmFsc2UgfTsKQEAgLTIzMyw5ICsyNDcsMTEgQEAgdm9pZCBKSVRX
b3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgICAgICBjb2RlQmxvY2stPmRvbnRK
SVRBbnl0aW1lU29vbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgSklUOjpDb21w
aWxlVHlwZSBjb21waWxlVHlwZSA9IE9wdGlvbnM6OmZvcmNlTE9MKCkgPyBKSVQ6OkNvbXBpbGVU
eXBlOjpMT0wgOiBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZTsKICAgICAKICAgICBpZiAoIU9w
dGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgewotICAgICAgICBQbGFuOjpjb21waWxlTm93KGNv
ZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFBsYW46OmNvbXBp
bGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNDksNyArMjY1LDcgQEAgdm9pZCBK
SVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgICAgICAKICAgICAgICAgaWYg
KG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewogICAgICAgICAgICAgbV9wbGFubmVkLmFkZChjb2Rl
QmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxh
bihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlw
ZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgbV9wbGFucy5hcHBl
bmQocGxhbik7CiAgICAgICAgICAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAg
IG1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKQEAgLTI3MywxNCArMjg5LDI0IEBAIHZv
aWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAvLyBUaGlzIHdvcmtz
IGFyb3VuZCB0aGUgaXNzdWUuIElmIHRoZSBjb25jdXJyZW50IEpJVCB0aHJlYWQgaXMgY29udm95
ZWQsIHdlIHJldmVydCB0byBtYWluCiAgICAgLy8gdGhyZWFkIGNvbXBpbGVzLiBUaGlzIGlzIHBy
b2JhYmx5IG5vdCBhcyBnb29kIGFzIGlmIHdlIGhhZCBtdWx0aXBsZSBKSVQgdGhyZWFkcy4gTWF5
YmUgd2UKICAgICAvLyBjYW4gZG8gdGhhdCBzb21lZGF5LgotICAgIFBsYW46OmNvbXBpbGVOb3co
Y29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBQbGFuOjpjb21waWxl
Tm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwog
fQogCisvKgogdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewogICAgIFZNJiB2
bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisK
KyAgICBhdXRvIGlzQ29tcGlsZWQgPSBbJl0geworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Owor
CisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJvb2wg
aXNQbGFubmVkOwpAQCAtMjk2LDE3ICszMjIsMjQgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGls
ZU5vdyhDb2RlQmxvY2sqIAogICAgIH0KICAgICAKICAgICAvLyBOb3cgaXQgbWlnaHQgYmUgY29t
cGlsZWQhCi0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bmspCisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFu
ZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRoIHRoZQotICAgIC8vIGJhc2VsaW5lIEpJVC4K
LSAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0YSgpOwotICAgIAotICAgIC8vIE9LLCBqdXN0IGNv
bXBpbGUgaXQuCi0gICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
TXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisKKyAgICBpZiAoT3B0
aW9uczo6Zm9yY2VMT0woKSkgeworICAgICAgICBDb2RlQmxvY2sqIGxvbENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAgICAgICAgSklUOjpjb21waWxlKHZtLCBsb2xD
b2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgbG9sQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobG9sQ29kZUJsb2NrKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0
ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKKyAgICAgICAgLy8g
YmFzZWxpbmUgSklULgorICAgICAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0YSgpOworICAgICAg
ICAKKyAgICAgICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KKyAgICAgICAgSklUOjpjb21waWxl
KHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICB9CiB9
CisqLwogCiB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBteVBsYW5zKQog
ewpAQCAtMzE0LDcgKzM0Nyw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxh
bnMmIG0KICAgICAgICAgcGxhbi0+ZmluYWxpemUoKTsKICAgICAgICAgCiAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNv
ZGVCbG9jaygpKTsKKyAgICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2tLZXko
KSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdv
cmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAgcHVibGljOgogICAgIHZv
aWQgcG9sbChWTSYpOwogICAgIAogICAgIHZvaWQgY29tcGlsZUxhdGVyKENvZGVCbG9jayosIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkp
OwotICAgIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAKICAgICBzdGF0aWMg
SklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0KCk7CiAgICAgc3RhdGljIEpJVFdvcmts
aXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxsKCk7CkBAIC02Niw2ICs2NSw3IEBAIHBy
aXZhdGU6CiAgICAgY2xhc3MgVGhyZWFkOwogICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7CiAgICAg
CisgICAgLy92b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgdm9pZCBmaW5hbGl6
ZVBsYW5zKFBsYW5zJik7CiAgICAgCiAgICAgUGxhbnMgbV9xdWV1ZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6
OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJl
dHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25z
dCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFj
cm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2Jh
bE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1
bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOwogI2VuZGlm
CiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwg
SklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigp
LmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkK
ICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhp
cyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxs
KCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9qaXQtPm1f
Ynl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4ICszNjMsMTAgQEAgaW5saW5lIGJvb2wgc2hv
dWxkSklUKENvZGVCbG9jayogY29kZUJsbwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hv
dWxkIHRyeSB0byBPU1IuCi1pbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKQoraW5saW5lIENvZGVCbG9jayogaml0Q29t
cGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
ZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsK
KyAgICAvLyBPT1BTOiBJbXBsZW1lbnQgdGhpcyB3LnIudCBMT0wuCisKICAgICBEZWZlckdDRm9y
QVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxs
ZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9w
dGlvbnM6OnVzZUpJVCgpKTsKICAgICAKQEAgLTM3MywyOSArMzc1LDQ1IEBAIGlubGluZSBib29s
IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJ
ZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
ZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3Vu
dGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxk
IGJlIGxpZnRlZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCiAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0
KCkucG9sbCh2bSk7Ci0gICAgCisKKyAgICBhdXRvIGxvbENvZGVCbG9jayA9IFsmXSgpIC0+IENv
ZGVCbG9jayogeworICAgICAgICBpZiAoQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGNvZGVCbG9j
ay0+b3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXBsYWNlbWVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Owor
CisgICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9jaygpKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCiAgICAgc3dpdGNoIChjb2RlQmxvY2stPmppdFR5cGUoKSkgewogICAgIGNhc2Ug
SklUVHlwZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuIik7CiAgICAgICAgIGNv
ZGVCbG9jay0+aml0U29vbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IGNvZGVCbG9jazsKICAgICB9CiAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOiB7
CiAgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRl
cihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICByZXR1cm4g
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIGlm
IChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkKKyAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNv
ZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KKyAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6
ICIsICpjb2RlQmxvY2ssICJcbiIpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50
cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBr
aW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBr
aW5kKQogewogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAg
KmNvZGVCbG9jaywgIjogRW50ZXJlZCAiLCBuYW1lLCAiIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAi
LApAQCAtNDA2LDE4ICs0MjQsMjEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9T
UihDb2RlQgogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAg
IH0KICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgaWYgKCFqaXRDb21waWxlQW5k
U2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29k
ZUJsb2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jayk7CisgICAg
aWYgKCFjb21waWxlZENvZGVCbG9jaykKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRy
LCBudWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIk9T
UiBlbnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7CisgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21w
aWxlZENvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7CisKKyAgICBjYWxs
RnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKGtp
bmQgPT0gUHJvbG9ndWUpCi0gICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRD
b2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgICAgICBMTElOVF9SRVRV
Uk5fVFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCks
IG51bGxwdHIpOwogICAgIEFTU0VSVChraW5kID09IEFyaXR5Q2hlY2spOwotICAgIExMSU5UX1JF
VFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0Fy
aXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKKyAgICBMTElOVF9SRVRVUk5fVFdP
KGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0Fy
aXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKIH0KICNlbHNlIC8vIEVOQUJMRShK
SVQpCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBl
bnRyeU9TUihDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVu
dHJ5S2luZCkKIHsKICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgIExM
SU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CkBAIC00MjcsMzEgKzQ0OCwzMSBAQCBz
dGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCCiBMTElOVF9TTE9XX1BBVEhf
REVDTChlbnRyeV9vc3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50
cnlPU1IoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKKyAg
ICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50
cnlfb3NyIiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NhbGwpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4g
ZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4
ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9j
YWxsIiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVC
bG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsK
IH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29k
ZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIs
IFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9n
dWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2Nh
bGxfYXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRy
eU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0
YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxf
YXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUs
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxl
KCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0
eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUt
PmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJl
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7
CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0
KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlD
aGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQpAQCAtNDgwLDE5ICs1
MDEsMjIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgIExMSU5UX1JF
VFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogICAgIAotICAgIGlmICghaml0Q29t
cGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkpCisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRT
ZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwor
ICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVs
bHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ss
ICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgIENP
REVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29tcGlsZWRDb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb21waWxlZENvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAKLSAgICBjb25zdCBKSVRDb2Rl
TWFwJiBjb2RlTWFwID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CisgICAgY29uc3QgSklUQ29k
ZU1hcCYgY29kZU1hcCA9IGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5k
KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwog
CiAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
OwogICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2Nr
KGNvbXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJn
ZXQsIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKICNlbHNlIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luU3RhY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcg
KzUxLDcgQEAgT3JpZ2luU3RhY2s6Ok9yaWdpblN0YWNrKERhdGFiYXNlJiBkYXRhYgogICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzdGFjay5zaXplKCk7ICsraSkgewogICAgICAg
ICBhcHBlbmQoT3JpZ2luKAotICAgICAgICAgICAgZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9y
KHN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSgpLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSksCisg
ICAgICAgICAgICBkYXRhYmFzZS5lbnN1cmVCeXRlY29kZXNGb3Ioc3RhY2tbaV0uaW5saW5lQ2Fs
bEZyYW1lKCktPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLAogICAgICAgICAgICAgc3Rh
Y2tbaV0uYnl0ZWNvZGVJbmRleCgpKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywyMCBAQCBGdW5jdGlvbkNvZGVC
bG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0
aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7
CiB9CiAKK0Z1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmxvbE9yQmFzZWxp
bmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2U7CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwp
CisgICAgICAgIGVkZ2UgPSBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAg
IGVkZ2UgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKCFl
ZGdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+bG9sT3JCYXNlbGluZUFsdGVybmF0
aXZlKCkpOworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDEzICsxMTQsOSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKTsKICAgICB9CiAK
KyAgICBGdW5jdGlvbkNvZGVCbG9jayogbG9sT3JCYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgIAotICAgIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7Ci0gICAg
fQotCiAgICAgUmVmUHRyPFR5cGVTZXQ+IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKSAKICAgICB7
CiAgICAgICAgIFJhcmVEYXRhJiByYXJlRGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwMyw2ICs0MDMsMTAgQEAgc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlv
bnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAg
IE9wdGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAgICBPcHRpb25zOjpmb3JjZUxPTCgpID0gMTsK
KyAgICBPcHRpb25zOjp1c2VMTEludCgpID0gMTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAg
ICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNyw2ICs1MjcsNyBAQCBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KEJvb2wsIHVzZUpJVENhZ2UsIGNhblVzZUpJ
VENhZ2UoKSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VQdWJsaWNTdGF0aWND
bGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVy
c3RhbmQgcHVibGljIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCiAgICAg
dihCb29sLCB1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRy
dWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHByaXZhdGUgc3RhdGljIGRhdGEgZmllbGRz
IGluc2lkZSBjbGFzc2VzLiIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKQogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNyArNTYwLDcg
QEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAg
b3JpZ2luLndhbGtVcElubGluZVN0YWNrKFsmXSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdp
bikgewogICAgICAgICAgICAgICAgIG1hY2hpbmVPcmlnaW4gPSBjb2RlT3JpZ2luOwogICAgICAg
ICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKCk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGlubGluZUNhbGxGcmFtZSA/
IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgOiBtYWNoaW5lQ29kZUJs
b2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5k
Q29kZUJsb2NrKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay5nZXQoKSA6IG1hY2hpbmVDb2RlQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6Y29s
bGVjdFNhbXBsaW5nUHJvZmlsZXJEYXRhRm9ySlNDU2hlbGwoKSkgewpAQCAtNTkzLDcgKzU5Myw3
IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAg
ICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgbGxpbnRfaGFuZGxlX3VjYXVnaHRfZXhjZXB0aW9u
LiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gYnkg
aWdub3JpbmcgaXQuCiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAgICAgICAgIGlmICh0
b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IHRv
cENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRvcENvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9j
ayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njcmlw
dEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcg
KzM5OCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwTExJbnQoQ29kZUJsb2NrKiBjb2RlQmwKIHN0YXRp
YyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYgRU5B
QkxFKEpJVCkKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0s
IGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgLy8gT09QUzogRmln
dXJlIG91dCB3aGF0IHdlIHdhbnQgdG8gZG8gd2l0aCB0aGUgbm8gTExJbnQgb3B0aW9uLi4uLgor
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2Nr
LCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVzKEpT
VmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNl
OwogI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisg
ICAgICAgIHJldHVybiBqc051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYgKCFPcHRpb25zOjp1
c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNlREZH
SklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vsc2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFs
bFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICBp
ZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3VuZENvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAg
ICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKCptX2xvY2spOwogICAgICAgICBpZiAoIWxv
Y2tlcikKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFn
YWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNv
ZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoY29k
ZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkp
CisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQpJbmRleDogVG9vbHMvU2NyaXB0cy9jb21wYXJl
LXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCSh3b3JraW5n
IGNvcHkpCkBAIC0xODIsOCArMTgyLDggQEAgZGVmIGNvbXB1dGVNdWx0aXBsZUh5cG90aGVzZXNT
aWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFrZG93bnMoYSwgYik6CiAgICAgbmFtZUxlbmd0aCA9
IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKQotICAgIGJM
ZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKKyAgICBhTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtl
cl0pICsgMworICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkgKyAzCiAgICAgcmF0aW9M
ZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAgIHBWYWx1ZUhlYWRlciA9ICJwVmFsdWUgKHNpZ25p
ZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZSkiCkBAIC0yMTIsNyArMjEyLDcgQEAg
ZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIHBMZW5ndGggKz0gMgogCiAgICAgc3RyaW5n
cyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6
XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9
fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9YVt1
bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0aCwg
YUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJhdGlv
TGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVuZ3Ro
KSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtrZXk6XntuYW1lTGVuZ3RofX18e2FTY29yZTpee2FM
ZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9fSB8e2NvbXBhcmU6XntyYXRpb0xlbmd0aH19fHtw
TWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0KGtleT0ic3VidGVzdCIsIGFTY29yZT0iYTogIiAr
IGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjogIiArIGJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9
bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJi
IC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExl
bmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5IGluIGEua2V5cygpOgogICAgICAgICBpZiBrZXkg
PT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAgIGNvbnRpbnVlCkluZGV4OiBMYXlvdXRUZXN0cy9y
ZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcmVz
b3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBMYXlvdXRUZXN0
cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCwy
MSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1bm5lciA9IHsKICAgICBuZXZlcklu
bGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAotICAgIG51bWJlck9mREZHQ29tcGls
ZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVyT2ZERkdDb21waWxlczogKGZ1bmN0
aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICByZXR1cm4gKGYpID0+IHsKKyAgICAg
ICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVy
T2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8gRW11bGF0ZSBydW5uaW5nIHRoaXMg
ZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJpbmcgYmVmb3JlIHJldHVybmluZyB0
cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAgbWFwID0gbmV3IFdl
YWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAuZ2V0KGYpIHx8IDA7CisgICAgICAg
ICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNldChmLCBjb3VudCk7CisgICAgICAg
ICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAgICAgICB9OworICAgIH0pKCksCiAg
ICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3Q29kZUJsb2NrCiB9OwogCkBAIC0x
NDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUodGhlRnVuY3Rpb24sIF9hLCBfYgog
ICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOwogICAKICAgdHJ5IHsKLSAgICB3
aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpCisgICAgd2hpbGUgKCFkZmdDb21w
aWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7Cisg
ICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAgfSBjYXRjaCAoZSkgewogICAgIGV4
Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVuY3Rpb24gZGZnSW5jcmVtZW50KGFy
Z3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAgICAgICByZXR1cm4gYXJndW1l
bnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSkKKyAgICBpZiAoIWRm
Z0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuICJz
dGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6IDA7CiAgICAgCiAgICAgcmV0dXJu
IGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418175</attachid>
            <date>2021-01-22 13:17:37 -0800</date>
            <delta_ts>2021-01-22 18:05:52 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>631234</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2dsb2JhbC1sZXhpY2FsLXZhcmlh
YmxlLXdpdGgtc3RhdGVtZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2dsb2Jh
bC1sZXhpY2FsLXZhcmlhYmxlLXdpdGgtc3RhdGVtZW50LmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9nbG9iYWwtbGV4aWNhbC12YXJpYWJsZS13aXRoLXN0YXRlbWVudC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjQsMTAgKzI0LDEzIEBAIG5vSW5saW5lKG1ha2VPYmopOwog
bGV0IGZvbyA9ICJmb28iOwogY29uc3QgYmFyID0gImJhciI7IAogCi1mb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgaSsrKSB7Ci0gICAgd2l0aCAobWFrZU9iaigpKSB7Ci0gICAgICAgIGFzc2VydChm
b28gPT09IDIwKTsKLSAgICAgICAgYXNzZXJ0KGJhciA9PT0gImJhciIpOwotICAgICAgICBzaG91
bGRUaHJvd0ludmFsaWRDb25zdEFzc2lnbm1lbnQoZnVuY3Rpb24oKSB7IGJhciA9IDIwOyB9KTsK
K2Z1bmN0aW9uIHJ1bigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7Cisg
ICAgICAgIHdpdGggKG1ha2VPYmooKSkgeworICAgICAgICAgICAgYXNzZXJ0KGZvbyA9PT0gMjAp
OworICAgICAgICAgICAgLy9hc3NlcnQoYmFyID09PSAiYmFyIik7CisgICAgICAgICAgICAvL3No
b3VsZFRocm93SW52YWxpZENvbnN0QXNzaWdubWVudChmdW5jdGlvbigpIHsgYmFyID0gMjA7IH0p
OworICAgICAgICB9CiAgICAgfQogfQorcnVuKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2
aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktYXJy
YXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAgZW5zdXJl
QXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsKLXNo
b3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAh
aXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGVuc3Vy
ZUFycmF5U3RvcmFnZShhcnJheSk7CkBAIC00Myw2ICs0Myw2IEBAIGVuc3VyZUFycmF5U3RvcmFn
ZShhcnJheTIpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAx
ZTU7ICsraSkKICAgICBzaG91bGRCZSh0ZXN0MihhcnJheTIpLCBmYWxzZSk7Ci1zaG91bGRCZShk
aWRGVExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJlKGRpZEZUTENvbXBpbGUgfHwgIWlzREZHRW5h
YmxlZCgpLCB0cnVlKTsKIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKIHNob3VsZEJl
KHRlc3QyKGFycmF5MSksIHRydWUpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQt
cHJvcGVydHktc2xvdy1wdXQtYXJyYXktc3RvcmFnZS1mdGwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQtYXJyYXktc3RvcmFnZS1m
dGwuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXBy
b3BlcnR5LXNsb3ctcHV0LWFycmF5LXN0b3JhZ2UtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw3IEBAIGVuc3VyZUFycmF5U3RvcmFnZShhcnJheSk7CiBkaWRGVExDb21waWxlID0g
ZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3Qx
KGFycmF5KSwgdHJ1ZSk7Ci1zaG91bGRCZShkaWRGVExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJl
KGRpZEZUTENvbXBpbGUgfHwgIWlzREZHRW5hYmxlZCgpLCB0cnVlKTsKIAogdmFyIGFycmF5ID0g
WzEsIDIsICwgNF07CiBhcnJheS5fX3Byb3RvX18gPSBvYmplY3Q7CkBAIC01Niw2ICs1Niw2IEBA
IGVuc3VyZUFycmF5U3RvcmFnZShhcnJheTIpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKICAgICBzaG91bGRCZSh0ZXN0MihhcnJheTIpLCBm
YWxzZSk7Ci1zaG91bGRCZShkaWRGVExDb21waWxlLCB0cnVlKTsKK3Nob3VsZEJlKGRpZEZUTENv
bXBpbGUgfHwgIWlzREZHRW5hYmxlZCgpLCB0cnVlKTsKIHNob3VsZEJlKHRlc3QyKGFycmF5Miks
IGZhbHNlKTsKIHNob3VsZEJlKHRlc3QyKGFycmF5MSksIHRydWUpOwpJbmRleDogSlNUZXN0cy9z
dHJlc3MvaW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL2ludDgtcmVwZWF0LWluLXRoZW4tb3V0LW9mLWJvdW5kcy5qcwkocmV2
aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaW50OC1yZXBlYXQtaW4tdGhlbi1vdXQt
b2YtYm91bmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw1ICsyMSw1IEBAIGlmIChyZW9wdGlt
aXphdGlvblJldHJ5Q291bnQoZm9vKSkKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kp
CiAgICAgZm9vKGFycmF5LCBmYWxzZSk7CiAKLWlmIChyZW9wdGltaXphdGlvblJldHJ5Q291bnQo
Zm9vKSAhPSAxKQoraWYgKGlzREZHRW5hYmxlZCgpICYmIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pICE9IDEpCiAgICAgdGhyb3cgIkVycm9yOiB1bmV4cGVjdGVkIHJldHJ5IGNvdW50OiAi
ICsgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9w
dXQtYnktaWQtZmxhZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcHV0LWJ5LWlk
LWZsYWdzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQt
ZmxhZ3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTEzLDcgKzEzLDEzIEBAIHZhciB5ID0ge307CiBm
KHgsIDQyKTsKIGYoeSwge30pOwogCitsZXQgY291bnRlciA9IDA7CiB3aGlsZSAoIW51bWJlck9m
REZHQ29tcGlsZXMoZykpIHsKKyAgICArK2NvdW50ZXI7CisgICAgaWYgKCFpc0RGR0VuYWJsZWQo
KSkgeworICAgICAgICBpZiAoY291bnRlciA+IDEwMDApCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CiAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbihnKTsKICAgICBpZiAodHlwZW9mIGcoeCkg
IT09ICdudW1iZXInKQogICAgICAgICB0aHJvdyAnZmFpbGVkIHdhcm1pbmcgdXAnOwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2UtcHJvdG90
eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3R5cGVkYXJyYXktaW50cmluc2lj
LWdldHRlcnMtY2hhbmdlLXByb3RvdHlwZS5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0
cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2UtcHJvdG90eXBlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xOCwxMCArMTgsMTQgQEAKIAogICAgIGxldCBhcnJheSA9IG5l
dyBJbnQzMkFycmF5KDE1KTsKIAotICAgIHdoaWxlKG51bWJlck9mREZHQ29tcGlsZXMoZm9vKSA8
IDEpIHsKKyAgICBsZXQgY291bnRlciA9IDA7CisgICAgd2hpbGUgKG51bWJlck9mREZHQ29tcGls
ZXMoZm9vKSA8IDEpIHsKICAgICAgICAgZm9vKGFycmF5KTsKICAgICAgICAgYmFyKGFycmF5KTsK
ICAgICAgICAgYmF6KGFycmF5KTsKKyAgICAgICAgKytjb3VudGVyOworICAgICAgICBpZiAoY291
bnRlciA+IDEwMDAwMCkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIE9iamVjdC5z
ZXRQcm90b3R5cGVPZihhcnJheSwgbnVsbCk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDggQEAgaWYgKHR5cGVvZiB0ZXN0V29yc3RDYXNlQ291bnRNYXAgPT09ICJ1
bgogaWYgKHR5cGVvZiBkdW1wSlNPTlJlc3VsdHMgPT09ICJ1bmRlZmluZWQiKQogICAgIHZhciBk
dW1wSlNPTlJlc3VsdHMgPSBmYWxzZTsKIAordmFyIGR1bXBKU09OUmVzdWx0cyA9IHRydWU7CisK
IC8vIFVzZWQgZm9yIHRoZSBwcm9taXNlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBiZW5jaG1h
cmsgcnVuLgogdGhpcy5jdXJyZW50UmVzb2x2ZSA9IG51bGw7CiB0aGlzLmN1cnJlbnRSZWplY3Qg
PSBudWxsOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw4IEBAIGlmIChpc0Q4KQogaWYgKHR5cGVvZiB0ZXN0TGlzdCA9PT0gInVu
ZGVmaW5lZCIpCiAgICAgdGVzdExpc3QgPSB1bmRlZmluZWQ7CiAKKy8vdGVzdExpc3QgPSBbJ2Ny
eXB0by1hZXMtU1AnXTsKKwogaWYgKHR5cGVvZiB0ZXN0SXRlcmF0aW9uQ291bnQgPT09ICJ1bmRl
ZmluZWQiKQogICAgIHRlc3RJdGVyYXRpb25Db3VudCA9IHVuZGVmaW5lZDsKIApJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5j
aG1hcmstcnVubmVyLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsOCBAQAogLy8gRklYTUU6IFVzZSB0aGUgcmVhbCBwcm9taXNlIGlmIGF2YWlsYWJs
ZS4KIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSB3aXRo
IHRoZSByZWFsIFByb21pc2UuCisKK19fZGlzYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKKwogZnVu
Y3Rpb24gU2ltcGxlUHJvbWlzZSgpIHsKICAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG51bGw7
CiAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsOwpAQCAtMTI4LDE3ICsxMzEsMjEgQEAgQmVuY2ht
YXJrUnVubmVyLnByb3RvdHlwZS5fcnVuVGVzdCA9IGZ1bgogCiAgICAgc2VsZi5fd3JpdGVNYXJr
KHN1aXRlLm5hbWUgKyAnLicgKyB0ZXN0Lm5hbWUgKyAnLXN0YXJ0Jyk7CiAgICAgdmFyIHN0YXJ0
VGltZSA9IG5vdygpOworICAgIF9fZW5hYmxlU2FtcGxpbmdQcm9maWxlcigpOwogICAgIHRlc3Qu
cnVuKHByZXBhcmVSZXR1cm5WYWx1ZSwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KTsK
KyAgICBfX2Rpc2FibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgdmFyIGVuZFRpbWUgPSBub3co
KTsKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICct
c3luYy1lbmQnKTsKIAogICAgIHZhciBzeW5jVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7CiAK
ICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7CisgICAgX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVy
KCk7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgIC8vIFNvbWUgYnJvd3Nl
cnMgZG9uJ3QgaW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBsYXlvdXQgZm9yIHBhaW50LgogICAgICAg
ICAvLyBGb3JjZSB0aGUgbGF5b3V0IGhlcmUgdG8gZW5zdXJlIHdlJ3JlIG1lYXN1cmluZyB0aGUg
bGF5b3V0IHRpbWUuCiAgICAgICAgIHZhciBoZWlnaHQgPSBzZWxmLl9mcmFtZS5jb250ZW50RG9j
dW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7CisgICAgICAgIF9fZGlz
YWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICAgICAgdmFyIGVuZFRpbWUgPSBub3coKTsKICAg
ICAgICAgc2VsZi5fZnJhbWUuY29udGVudFdpbmRvdy5fdW51c2VkSGVpZ2h0VmFsdWUgPSBoZWln
aHQ7IC8vIFByZXZlbnQgZGVhZCBjb2RlIGVsaW1pbmF0aW9uLgogICAgICAgICBzZWxmLl93cml0
ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICctYXN5bmMtZW5kJyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvCiAKIHN0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2spOwogc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsZU51bWJlcik7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxlZCk7CiAK
IHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRHJvcEFsbExvY2tzKTsK
IApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIsIDEpOwogCisgICAgICAg
IGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFibGVkIiwgZnVuY3Rpb25Jc0RGR0VuYWJsZWQsIDAp
OworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHJvcEFsbExvY2tzIiwgZnVuY3Rpb25Ecm9w
QWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJz
T25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkpIHsKQEAgLTI2NTMsNiArMjY1NiwxMSBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0pKTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSkK
K3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VERkdK
SVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ecm9wQWxsTG9j
a3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKIHsKICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Ym9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5q
aXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgIGlmIChjb2Rl
QmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0
aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJl
dHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIK
ICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6
OnByaW50TG9jYXRpb25BbmRPcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBj
b25zdCBjaGFyKiBvcCkKQEAgLTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2Rl
RHVtcGVyPEJsb2NrPjo6ZHVtCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2Rl
QmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQ
cmludFN0cmVhbSYgb3V0LCBjb25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENv
ZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgs
IE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0
aW9uc0F0SGVhZCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVz
TWFwKQogewogICAgIGR1bXBIZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAt
MjgzLDYgKzI4NSwyMyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
CiAKICAgICAgICAgb3V0LnByaW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAg
ICAgICBpZiAocHJlZGljdGlvbnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJl
ZGljdGlvbnMgYXQgaGVhZDogWyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlv
bnMgPSBwcmVkaWN0aW9uc0F0SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBD
b21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAg
ICAgIGR1bXBTcGVjdWxhdGlvbihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9u
cy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEpOworICAgICAgICAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
KSwgIj0iKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9u
cy5sb2NhbChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIp
OworICAgICAgICB9CisKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRv
dGFsTGVuZ3RoKCk7ICkgewogICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zLmF0KGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBk
dW1wZXIuZHVtcEJ5dGVjb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8
Y2xhc3MgQmxvY2s+CiBjbGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1Ymxp
YyBCeXRlY29kZUR1bXBlcjxCbG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBC
bG9jayhCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVt
cEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
UHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0g
SUNTdGF0dXNNYXAoKSk7CisgICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxs
b3B0LCBQcmludFN0cmVhbSYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01h
cCYgPSBJQ1N0YXR1c01hcCgpKTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAg
dm9pZCBkdW1wQ29uc3RhbnRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgotICAgIHZvaWQgZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZT4+PiBzcGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIg
PSBXVEY6OmRhdGFGaWxlKCkpCisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9j
aywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9y
PE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmlu
dFN0cmVhbSYgcHJpbnRlciA9IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVC
bG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbnMsICp0aGlzLCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgog
ICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bf
am5lcV9wdHI6CiAgICAgY2FzZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAg
Y2FzZSBvcF9uZXdfb2JqZWN0OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNG
b3JCeXRlY29kZUluZGV4SW1wbChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAg
cmV0dXJuOwogCisgICAgVVNFUyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAg
ICBVU0VTKE9wVG9UaGlzLCBzcmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgVVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnBy
aW50KCIsICIsIGluc3RydWN0aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBp
ZiAoKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAg
ICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3du
ZXJFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZl
cklubGluZSkiKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtCiAgICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3Rh
dHVzTWFwKHN0YXR1c01hcCk7CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5p
bnN0cnVjdGlvbnMoKSk7Ci0gICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6
ZHVtcEdyYXBoKHRoaXMsIGluc3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOwor
ICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBp
bnN0cnVjdGlvbnMoKSwgZ3JhcGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQog
CiB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpA
QCAtMjk1LDYgKzI5NSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiAKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAs
IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQog
ICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAg
ICwgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9m
dW5jdGlvbkRlY2xzKQpAQCAtMzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7
CiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVy
cyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIu
bnVtUGFyYW1ldGVycygpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRo
aXMpOwogfQpAQCAtODUwLDcgKzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAg
Ly8gdG8gdGhlIENvZGVCbG9jay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVj
dGx5IHRvIHRoZSBDb2RlQmxvY2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBj
bGVhcmVkIHdoZW4gdGhlIENvZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwo
aml0VHlwZSgpKSkKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBv
aW50cygpOwogI2VuZGlmCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7
CkBAIC05NjQsNiArOTY2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldEFsdGVybmF0aXZlKFZNJiB2
bSwgQwogewogICAgIFJFTEVBU0VfQVNTRVJUKGFsdGVybmF0aXZlKTsKICAgICBSRUxFQVNFX0FT
U0VSVChhbHRlcm5hdGl2ZS0+aml0Q29kZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhbHRlcm5h
dGl2ZS0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZlKCkgPT0gYWx0ZXJuYXRpdmUpOwogICAgIG1f
YWx0ZXJuYXRpdmUuc2V0KHZtLCB0aGlzLCBhbHRlcm5hdGl2ZSk7CiB9CiAKQEAgLTEwMzcsNyAr
MTA0MCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKICAgICAv
LyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBi
ZSBqZXR0aXNvbmVkIHdoZW4KICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUu
IFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKICAgICAvLyBzY2FubmVkLCB3ZSBj
YW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdP
ckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEwNDUsNyArMTA0OCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9u
Z2x5KGNvbnMKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJl
bmNlKFZNJiB2bSkKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwogfQpAQCAt
MTA1OCw2ICsxMDYxLDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5
cAogICAgICAgICAgICAgcmV0dXJuIDEwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2Vs
aW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIDMwX21zOworICAgICAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiAzNV9tczsKICAgICAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6CiAgICAgICAgICAgICByZXR1cm4gNDBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgpAQCAtMTA3NCw2ICsxMDc5LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2
ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNl
Y29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAogICAgICAgICAvLyBJbnRlcnByZXRlclRodW5r
IHNoYXJlIGEgQ29kZUJsb2NrLgogICAgICAgICByZXR1cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5
cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIDE4X3M7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdK
SVQ6CiAgICAgICAgIHJldHVybiAyMF9zOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAt
MTE2OSw3ICsxMTc2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNv
bgogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENv
ZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRm
Z0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAogICAgICAgICBkZmdD
b21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMjE3LDcg
KzEyMjQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAg
Ly8gSW4gcmFyZSBhbmQgd2VpcmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFz
ZWxpbmUgQ29kZUJsb2NrLiBPbmUgdGhhdCBJIGZvdW5kIHdhcwogICAgIC8vIHRoYXQgd2UgbWln
aHQgZGVjaWRlIHRoYXQgdGhlIENvZGVCbG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBkdWUgdG8g
b2xkIGFnZSwgc28gdGhlCiAgICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9lc24ndCBwcm90ZWN0IHVz
LgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYg
KCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CkBAIC0xNTE5LDggKzE1MjYsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRp
b25hbGx5KAogCiAjZW5kaWYKICAgICAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJl
dGVkKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRU
eXBlKCkpIHx8IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKKyAgICAgICAgLy8gT09Q
UzogU2VwYXJhdGUgcGFydCBvZiB0aGlzIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJ
VCBJQ3MuIFNpbmNlIHNvbWUgb2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBqdXN0IGZvciBMTEludC4K
ICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAgIH0KIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTUyOCw3ICsxNTM3LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsK
KyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAg
ZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsKICAgICB9CkBAIC0xNTQ4
LDYgKzE1NTcsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAg
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6TE9MSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVD
b3VudGVyLmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6CkBAIC0xNTkwLDcgKzE2MDAsNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0
dXNNYXAoY29uc3QgQ29uCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZh
bEluZm8gPSBieVZhbEluZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAg
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGlm
IChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAg
IGZvciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5jYWxscykKICAg
ICAgICAgICAgICAgICByZXN1bHQuYWRkKHBhaXIuZmlyc3QsIElDU3RhdHVzKCkpLml0ZXJhdG9y
LT52YWx1ZS5jYWxsU3RhdHVzID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBAIC0xNzc1LDggKzE3ODUs
MTAgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICBpZiAo
ZGZnQ29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byogaW5saW5l
Q2FsbEZyYW1lIDogKmRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAg
QVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAg
ICAgICAgICAvLyBUaGlzIHdpbGwgdHJhbnNpdGl2ZWx5IGtlZXAgdGhlIGJhc2VsaW5lIGNvZGUg
YmxvY2sgYWxpdmUuIEl0J3MgZWFzaWVyIHRvIG5vdCB3b3JyeSB0aGF0IHdlJ3JlIHJlbHlpbmcg
b24gdGhlIExPTCBDb2RlQmxvY2sgc29tZWhvdy4KKyAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwor
ICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKGNvZGVCbG9jayk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTE4
MTAsMTIgKzE4MjIsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZl
cgogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2Rl
LT5kZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwg
dmlzaXRvcik7CiAgICAgfQogI2VuZGlmCisKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6
OkxPTEpJVCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQobV9hbHRlcm5hdGl2ZSk7CiB9CiAKIHZv
aWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODIzLDcgKzE4MzgsNyBAQCB2
b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAgICAgVU5VU0VEX1BBUkFN
KHZpc2l0b3IpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKCFKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0
VHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZn
Q29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE4NTksNiArMTg3NCwyNSBAQCBD
b2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVBbHRlcm5hdGl2CiAjZW5kaWYKIH0KIAorQ29k
ZUJsb2NrKiBDb2RlQmxvY2s6OmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpCit7CisjaWYgRU5B
QkxFKEpJVCkKKyAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHRoaXM7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgYXV0byBqaXRUeXBlID0gcmVzdWx0LT5qaXRUeXBlKCk7CisgICAgICAgIGlm
IChqaXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVCB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShq
aXRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IHJl
c3VsdC0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxs
cHRyOworI2Vsc2UKKyAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCiBDb2RlQmxvY2sqIENv
ZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtMTg2Nyw3
ICsxOTAxLDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAg
ICAgIHJldHVybiB0aGlzOwogICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsK
ICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KHNlbGZKSVRUeXBlKSkgeworICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29k
ZUJsb2NrKHNlbGZKSVRUeXBlKSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNh
biBiZSBudWxsIGlmIHdlJ3ZlIGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFi
bGUKICAgICAgICAgICAgIC8vIGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2Vl
IEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAv
LyB0aGUgY3VycmVudCBjb2RlQmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBh
cyBhbiBvcHRpbWl6aW5nIEpJVApAQCAtMTkzMSw3ICsxOTY1LDcgQEAgSGFuZGxlckluZm8qIENv
ZGVCbG9jazo6aGFuZGxlckZvckluZGV4KAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJs
b2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmln
aW5hbENhbGxTaXRlKQogewogI2lmIEVOQUJMRShERkdfSklUKQotICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNh
bkdldENvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSkpOwogICAgIEFTU0VSVCghIWhhbmRsZXJG
b3JJbmRleChvcmlnaW5hbENhbGxTaXRlLmJpdHMoKSkpOwogICAgIENvZGVPcmlnaW4gb3JpZ2lu
YWxPcmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpOwpAQCAtMTk0OSw2ICsxOTgz
LDggQEAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeAogCiB2b2lkIENv
ZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKKyAgICBBU1NFUlQoYmFzZWxpbmVBbHRlcm5h
dGl2ZSgpID09IHRoaXMpOworCiAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4KTsKICAgICBPcENhdGNoIG9wID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBvcC5tZXRhZGF0YSh0aGlzKTsKQEAgLTIx
MzAsOSArMjE2Niw5IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmEK
ICAgICBtX2luY29taW5nTExJbnRDYWxscy5wdXNoKGluY29taW5nKTsKIH0KIAotQ29kZUJsb2Nr
KiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdS
ZXBsYWNlbWVudChDb2RlQmxvY2sqIGFsdGVybmF0aXZlKQogewotICAgIHJldHVybiBvd25lckV4
ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5k
KCkpOworICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxv
Y2tGb3IoYWx0ZXJuYXRpdmUsIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAogI2lmIEVOQUJM
RShKSVQpCkBAIC0yMjMxLDUxICsyMjY3LDU1IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQ
cm9maWxlcjo6SmV0dGkKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CiAg
ICAgCiAgICAgLy8gV2Ugd2FudCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAv
LyAxKSBNYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmln
aHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAorICAgIC8vIDEpIElmIHdlJ3JlIERGRy9G
VEwsIG1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdo
dCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0CiAgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBl
eGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhl
IHJldHVybi4KICAgICAvLyAyKSBNYWtlIHN1cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBl
eGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4ndCBjYWxsIHRoaXMgQ29kZUJsb2NrLgogCiAjaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAg
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlm
IChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCkt
PmNvbXBpbGF0aW9uLmdldCgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQot
ICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWls
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMg
aXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5l
ZC4KLSAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsK
LSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1
cnJlbnRUaHJlYWRCdXN5KCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkp
KSk7Ci0gICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxl
cjo6SmV0dGlzb25EdWVUb09sZEFnZSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdl
dCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAg
ICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2Vz
IGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVu
ZWQuCisgICAgICAgICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUo
KSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4K
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwg
KHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVy
RXhlY3V0YWJsZSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1i
bHkoKSkKICAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4i
KTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVv
cHRpbWl6YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2Rl
ID09IENvdW50UmVvcHRpbWl6YXRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMg
c2hvdWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZl
KCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAg
aWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYK
ICAgICB9CiAgICAgCiAgICAgaWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAv
LyBUaGlzIG1lYW5zIHRoYXQgd2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4g
aGFwcGVuIGZvciBPU1IgZW50cnkgY29kZQogICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8v
IE9yLCB3ZSdyZSBhbiBMT0wgQ29kZUJsb2NrIGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAg
ICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29u
ICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb1ZNVHJhcHMpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSAmJiByZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29u
ICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcykKICAgICAgICAgdGFsbHlGcmVxdWVu
dEV4aXRTaXRlcygpOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgLy8gSmV0dGlz
b24gY2FuIGhhcHBlbiBkdXJpbmcgR0MuIFdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRv
IGEgZGVhZCBleGVjdXRhYmxlCiAgICAgLy8gYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQg
b2JqZWN0IHRvIHRoZSByZW1lbWJlcmVkIHNldC4KQEAgLTIzMDYsNyArMjM0Niw3IEBAIEpTR2xv
YmFsT2JqZWN0KiBDb2RlQmxvY2s6Omdsb2JhbE9iamVjdEYKICAgICBhdXRvKiBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lKQogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIHJldHVy
biBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
OwogfQogCiBjbGFzcyBSZWN1cnNpb25DaGVja0Z1bmN0b3IgewpAQCAtMjM2NSw3ICsyNDA1LDcg
QEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgIGlm
ICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoIURGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKSkKQEAgLTIzOTAsNyArMjQzMCw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEYKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNv
ZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxl
ckNvZGVCbG9jay0+aml0VHlwZSgpKSkgewogICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmso
KSwgIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxsZXIgd2FzIGFscmVhZHkgb3B0aW1pemVk
LiIpOwogICAgICAgICByZXR1cm47CkBAIC0yNDgzLDEyICsyNTIzLDE0IEBAIHVuc2lnbmVkIENv
ZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CiAgICAgaWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkg
eworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21waWxhdGlvbikKICAgICAgICAgICAgIHJl
dHVybiAxMDAwMDAwOwogICAgICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/
IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAgICAgfQogICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudCgpOwotICAgIHJldHVybiAoKHJl
cGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlw
ZSgpKSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAgIHJldHVy
biAoKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5
cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKIH0KIAogaW50
MzJfdCBDb2RlQmxvY2s6OmNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0CkBAIC0y
NjQxLDcgKzI2ODMsNyBAQCBhdXRvIENvZGVCbG9jazo6dXBkYXRlT1NSRXhpdENvdW50ZXJBbmRD
CiAKICAgICBib29sIGRpZFRyeVRvRW50ZXJJbkxvb3AgPSBmYWxzZTsKICAgICBmb3IgKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZy
YW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlU
b0VudGVySW5Mb29wKCkpIHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNl
bGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkg
ewogICAgICAgICAgICAgZGlkVHJ5VG9FbnRlckluTG9vcCA9IHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMjcwOSwyNSArMjc1MSwzNCBAQCB2b2lkIENvZGVCbG9jazo6
Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCkKIHsKICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7Ci0gICAgaWYgKHR5cGUgIT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiB0eXBlICE9IEpJVFR5cGU6OkxPTEpJVCkgewogICAgICAgICBkYXRhTG9nTG4oKnRoaXMs
ICI6IGV4cGVjdGVkIHRvIGhhdmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlKTsKICAg
ICAgICAgQ1JBU0hfV0lUSF9JTkZPKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGppdENvZGUoKS5n
ZXQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpKTsKICAgICB9CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgYm9vbCBoYXNS
ZXBsYWNlbWVudCA9IChyZXBsYWNlbWVudCAmJiByZXBsYWNlbWVudCAhPSB0aGlzKTsKKyAgICBi
b29sIGhhc1JlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQgJiYgcmVwbGFjZW1lbnQgIT0gdGhpczsK
KyAgICBib29sIHJlcGxhY2VtZW50SXNIaWdoZXJUaWVyID0gZmFsc2U7CisgICAgaWYgKGhhc1Jl
cGxhY2VtZW50KSB7CisgICAgICAgIHJlcGxhY2VtZW50SXNIaWdoZXJUaWVyID0gSklUQ29kZTo6
aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50LT5qaXRUeXBlKCksIGppdFR5cGUoKSk7CisgICAgICAg
IGhhc1JlcGxhY2VtZW50ICY9IHJlcGxhY2VtZW50SXNIaWdoZXJUaWVyOworICAgIH0KICAgICBp
ZiAoKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpICE9IGhhc1JlcGxhY2VtZW50KSB7
CiAgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IHdlIGhhdmUgcmVzdWx0ID0gIiwgcmVzdWx0LCAi
IGJ1dCAiKTsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IHRoaXMpCiAgICAgICAgICAgICBk
YXRhTG9nKCJ3ZSBhcmUgb3VyIG93biByZXBsYWNlbWVudC5cbiIpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBkYXRhTG9nKCJvdXIgcmVwbGFjZW1lbnQgaXMgIiwgcG9pbnRlckR1bXAocmVw
bGFjZW1lbnQpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZ0xuKCJVczogIiwgUmF3UG9pbnRlcih0
aGlzKSwgIiByZXBsYWNlbWVudDogIiwgUmF3UG9pbnRlcihyZXBsYWNlbWVudCkpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICAKKworICAgIGlmICho
YXNSZXBsYWNlbWVudCAmJiAhcmVwbGFjZW1lbnRJc0hpZ2hlclRpZXIpCisgICAgICAgIHJldHVy
bjsKKwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3Nm
dWw6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlcGxhY2VtZW50ICYmIEpJVENvZGU6OmlzREZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5
cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgpAQCAtMjc1Niw3ICsyODA3LDggQEAgdm9p
ZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZAogICAgIAogdWludDMyX3QgQ29k
ZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNo
b2xkKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7
CisgICAgLy9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOyAvLyBP
T1BTOiBXZSBjYWxsIHRoaXMgZnJvbSB0aGUgTE9MIGNvbXBpbGVyIHRocmVhZCBiZWZvcmUgaW5z
dGFsbC4KKwogICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3YXkgc28gd2UgZG9uJ3Qgc2F0
dXJhdGUuIFRoaXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQogICAgIC8vIGVub3VnaCB0aGF0IHRo
aXMgbG9vcCB3b24ndCBodXJ0IHVzLgogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGRlc2lyZWRUaHJl
c2hvbGQ7CkBAIC0yODM2LDcgKzI4ODgsNyBAQCBERkc6OkNvZGVPcmlnaW5Qb29sJiBDb2RlQmxv
Y2s6OmNvZGVPcmlnCiAKIHNpemVfdCBDb2RlQmxvY2s6Om51bWJlck9mREZHSWRlbnRpZmllcnMo
KSBjb25zdAogewotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkp
CisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIAogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlm
aWVycy5zaXplKCk7CkBAIC0yODQ3LDcgKzI4OTksNyBAQCBjb25zdCBJZGVudGlmaWVyJiBDb2Rl
QmxvY2s6OmlkZW50aWZpZXIoCiAgICAgc2l6ZV90IHVubGlua2VkSWRlbnRpZmllcnMgPSBtX3Vu
bGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVudGlmaWVycykKICAgICAgICAgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkpOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVu
dGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRpZmllcnNdOwogfQogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpAQCAtMjkxMiwxOCArMjk2NCwxOSBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRl
QWxsUHJlZGljdGlvbnMoKQogICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKIH0KIAot
Ym9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKK2Jvb2wgQ29kZUJsb2NrOjpzaG91
bGRPcHRpbWl6ZVRvREZHTm93KCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICJDb25zaWRlcmluZyBvcHRpbWl6aW5nICIsICp0aGlzLCAiLi4uIik7CiAKICAgICBp
ZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGltaXph
dGlvbkRlbGF5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHVwZGF0ZUFsbEFy
cmF5UHJlZGljdGlvbnMoKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIGJhc2VsaW5lQ29kZUJsb2NrLT51cGRhdGVBbGxBcnJh
eVByZWRpY3Rpb25zKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMaXZlTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzOwogICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXM7
Ci0gICAgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyk7CisgICAgYmFzZWxpbmVDb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRp
Y3Rpb25zQW5kQ291bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMsIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nRigKQEAgLTI5NDgsNyArMzAwMSw4IEBAIGJvb2wg
Q29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lk
IENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAvLyBPT1BTCisgICAgQVNTRVJU
KEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6Omlz
QmFzZWxpbmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOwogICAgIAogICAgIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CkBAIC0zMDUwLDYgKzMxMDQsNyBA
QCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUo
SklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpM
T0xKSVQ6CiAgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0zMjI2LDE0ICszMjgxLDE0IEBAIHZvaWQgQ29k
ZUJsb2NrOjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJyZWFrcG9pbnRz
ICs9IG51bUJyZWFrcG9pbnRzOwogICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzKTsKLSAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2V0U3Rl
cHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAgbV9zdGVwcGlu
Z01vZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUgPT0gU3RlcHBp
bmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAg
IGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7CiB9CiAK
QEAgLTMyOTYsNyArMzM1MSw3IEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5
QXJpdGgKIAogYm9vbCBDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJv
ZmlsaW5nKCkpCisgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUgPSBiaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmICghcHJv
ZmlsZSkKQEAgLTM0MjEsOSArMzQ3Niw5IEBAIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVC
bG9jazo6Ynl0ZWMKIHsKICAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4
OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlw
ZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChq
aXRUeXBlKSkKICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGNhbGxTaXRlSW5kZXguYnl0ZWNvZGVJ
bmRleCgpOwotICAgIGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5
cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7CisgICAgZWxzZSB7CiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkp
OwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7
CkBAIC0zNDY2LDcgKzM1MjEsNyBAQCBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFw
QnJlYWtwCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwg
aGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhp
bmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3Vs
ZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09y
RlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9qaXRD
b2RlLT5kZmdDb21tb24oKS0+aGFzSW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9pbnRzKCk7CiAjZWxz
ZQpAQCAtMzQ4MCw3ICszNTM1LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omluc3RhbGxWTVRyYXBCcmVh
a3BvaW50cwogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFs
IGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAgICAvLyBjYXJlZnVsIHRvIG5vdCBjYWxsIGFueXRo
aW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5kbGVyIHNhZmUsIGUuZy4KICAgICAvLyB3ZSBzaG91
bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50IG9mIG1faml0Q29kZS4KLSAgICBpZiAoIUpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdP
ckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgY29tbW9u
RGF0YSA9ICptX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgIGNvbW1vbkRhdGEuaW5zdGFsbFZN
VHJhcEJyZWFrcG9pbnRzKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2LDcg
QEAgcHVibGljOgogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogbG9sT3JCYXNlbGluZUFsdGVybmF0
aXZlKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkBAIC0zNDcsNyArMzQ4
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJv
ZmlsaW5nKCkpCisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRG
b3JCeXRlY29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC0zNTYsNyArMzU3LDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5n
KCkpCisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRl
Y29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC00MTIsOCArNDEzLDggQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0
cnVjdGlvbnMoKS5zaXplKCk7IH0KICAgICB1bnNpZ25lZCBieXRlY29kZUNvc3QoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVjb2RlQ29zdDsgfQogCi0gICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRv
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9y
KGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCi0gICAgQ29kZUJsb2NrKiBuZXdSZXBs
YWNlbWVudCgpOworICAgIC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihhbHRlcm5hdGl2ZSwgY29k
ZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSkKKyAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2Vt
ZW50KENvZGVCbG9jayogYWx0ZXJuYXRpdmUpOwogICAgIAogICAgIHZvaWQgc2V0SklUQ29kZShS
ZWY8SklUQ29kZT4mJiBjb2RlKQogICAgIHsKQEAgLTQzNiw5ICs0MzcsMTAgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGJvb2wgaGFzQmFzZWxpbmVKSVRQ
cm9maWxpbmcoKSBjb25zdAorICAgIGJvb2wgaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUOworICAgICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgICAgIHJldHVybiB0
eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6TE9MSklUOwog
ICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMyw3IEBAIHB1YmxpYzoK
ICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRl
eChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5j
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2F0Y2hQ
cm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3Qg
RnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFy
cmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1
bmN0b3ImKTsKQEAgLTUzOSw3ICs1NDIsNyBAQCBwdWJsaWM6CiAgICAgLy8gSGF2aW5nIGNvZGUg
b3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KICAgICBi
b29sIGhhc0NvZGVPcmlnaW5zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzREZHT3JG
VEwoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdp
bihDYWxsU2l0ZUluZGV4IGluZGV4KQpAQCAtODAzLDcgKzgwNiw3IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKLSAg
ICBib29sIHNob3VsZE9wdGltaXplTm93KCk7CisgICAgYm9vbCBzaG91bGRPcHRpbWl6ZVRvREZH
Tm93KCk7CiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogICAg
IHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogICAgIHZvaWQgdXBkYXRlQWxsUHJl
ZGljdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAg
ICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9
KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVC
bG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25z
dCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1fcmFyZURhdGEu
Z2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFyZURhdGEtPm1f
Y2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQpOworICAgIH0K
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNyArNzEsNyBAQCBib29sIENvZGVPcmlnaW46OmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oCiAgICAgICAgIGlmICghYUhhc0lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKGFJbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpICE9IGJJbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdl
dCgpKQorICAgICAgICBpZiAoYUlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSAhPSBiSW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgYSA9IGFJbmxp
bmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKQEAgLTk5LDcgKzk5LDcgQEAgdW5zaWduZWQgQ29k
ZU9yaWdpbjo6YXBwcm94aW1hdGVIYXNoKElubAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
ID09IHRlcm1pbmFsKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCi0gICAg
ICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2goaW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhh
c2g8SlNDZWxsKj46Omhhc2goaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpKTsKICAgICAgICAgCiAgICAgICAgIGNvZGVPcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlcjsKICAgICB9CkBAIC0xMjEsNyArMTIxLDcgQEAgQ29kZUJsb2NrKiBDb2Rl
T3JpZ2luOjpjb2RlT3JpZ2luT3duZXIoKQogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IHRo
aXMtPmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay5nZXQoKTsKKyAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKIH0KIAogaW50IENvZGVPcmlnaW46OnN0YWNrT2Zmc2V0
KCkgY29uc3QKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIENvZGVPcmlnaW46OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAtLT4gIik7CiAgICAgICAgIAog
ICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lKiBmcmFtZSA9IHN0YWNrW2ldLmlubGluZUNhbGxG
cmFtZSgpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoZnJhbWUtPmJyaWVmRnVuY3Rpb25JbmZv
cm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQo
KSksICI+ICIpOworICAgICAgICAgICAgb3V0LnByaW50KGZyYW1lLT5icmllZkZ1bmN0aW9uSW5m
b3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihmcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSksICI+ICIpOwogICAgICAgICAgICAgaWYgKGZyYW1lLT5pc0Nsb3N1cmVDYWxsKQog
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiKGNsb3N1cmUpICIpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0aW5nSklUVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhpdEZyb21Bbnl0
aGluZzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tQW55dGhpbmciKTsKICAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRXhpdEZyb21MT0w6CisgICAgICAgIG91dC5wcmludCgiRnJvbUxPTCIpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAgb3V0LnByaW50
KCJGcm9tREZHIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBFeGl0aW5nSklU
VHlwZSA6IHVpbnQ4X3QgewogICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21MT0ws
CiAgICAgRXhpdEZyb21ERkcsCiAgICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2ICszOSw4IEBA
IGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5nSklUVHlwZSBl
eGl0aW5nSklUVHlwZUZvcihKSVRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbUxPTDsKICAg
ICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9tREZHOwogICAg
IGNhc2UgSklUVHlwZTo6RlRMSklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxNyArNDUsMTcgQEAgSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZyYW1lOjpj
YWxsZWVGb3JDYQogCiBDb2RlQmxvY2tIYXNoIElubGluZUNhbGxGcmFtZTo6aGFzaCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5oYXNoKCk7CisgICAgcmV0dXJuIGxv
bE9yQmFzZWxpbmVDb2RlQmxvY2stPmhhc2goKTsKIH0KIAogQ1N0cmluZyBJbmxpbmVDYWxsRnJh
bWU6Omhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdAogewotICAgIHJldHVybiBiYXNlbGlu
ZUNvZGVCbG9jay0+aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpOworICAgIHJldHVybiBsb2xPckJh
c2VsaW5lQ29kZUJsb2NrLT5oYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCk7CiB9CiAKIENTdHJpbmcg
SW5saW5lQ2FsbEZyYW1lOjppbmZlcnJlZE5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oYmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpKS0+ZWNtYU5hbWUoKS51dGY4KCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSktPmVjbWFO
YW1lKCkudXRmOCgpOwogfQogCiB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEJyaWVmRnVuY3Rp
b25JbmZvcm1hdGlvbihQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNjUsNyArNjUsNyBAQCB2
b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEJyaWVmRnVuY3Rpb25JCiAKIHZvaWQgSW5saW5lQ2Fs
bEZyYW1lOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogewotICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oKSwg
Ijo8IiwgUmF3UG9pbnRlcihiYXNlbGluZUNvZGVCbG9jay5nZXQoKSkpOworICAgIG91dC5wcmlu
dChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihsb2xPckJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKSk7CiAgICAgaWYgKGlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAg
ICAgIG91dC5wcmludCgiIChTdHJpY3RNb2RlKSIpOwogICAgIG91dC5wcmludCgiLCAiLCBkaXJl
Y3RDYWxsZXIuYnl0ZWNvZGVJbmRleCgpLCAiLCAiLCBzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBz
dHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICB9CiAgICAgCiAgICAgVmVjdG9yPFZhbHVlUmVj
b3Zlcnk+IGFyZ3VtZW50c1dpdGhGaXh1cDsgLy8gSW5jbHVkZXMgJ3RoaXMnIGFuZCBhcml0eSBm
aXh1cHMuCi0gICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVDb2RlQmxvY2s7Cisg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbG9sT3JCYXNlbGluZUNvZGVCbG9jazsKICAgICBD
b2RlT3JpZ2luIGRpcmVjdENhbGxlcjsKIAogICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIDogMjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KQEAgLTIzMSwyMCArMjMx
LDIxIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFt
ZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKTsgfQogICAgIHB0cmRpZmZfdCByZXR1cm5Q
Q09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKTsgfQogCi0gICAgYm9vbCBpc0luU3RyaWN0Q29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KS0+aXNJblN0cmljdENvbnRleHQoKTsgfQorICAgIGJvb2wgaXNJblN0cmljdENvbnRleHQoKSBj
b25zdCB7IHJldHVybiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
aXNJblN0cmljdENvbnRleHQoKTsgfQogCiAgICAgdm9pZCBkdW1wQnJpZWZGdW5jdGlvbkluZm9y
bWF0aW9uKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQq
KSBjb25zdDsKIAogICAgIE1BS0VfUFJJTlRfTUVUSE9EKElubGluZUNhbGxGcmFtZSwgZHVtcEJy
aWVmRnVuY3Rpb25JbmZvcm1hdGlvbiwgYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKTsKLQogfTsK
IAogaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
aW5saW5lQ2FsbEZyYW1lKTsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay5nZXQoKTsKKyAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbmxpbmVDYWxs
RnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisgICAgICAgIHJldHVybiBjb2Rl
QmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
aW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5k
KSA9PSBzaXplb2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2Fs
bGVlID0gZmFsc2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNpbmcgU3RvcmFn
ZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZl
Y3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0xNDMsMjEgKzE0
NCwyMyBAQCBwdWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAotICAgIGV4cGxp
Y2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVf
dCBudW1UbXBzKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNp
emVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzID0gMCkK
ICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1M
b2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykK
ICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsg
bnVtVG1wczsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMg
KyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAgICAgICAgbV92YWx1
ZXMuZ3JvdyhzaXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJ
bml0aWFsaXphdGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAK
LSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9j
YWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0
IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBu
dW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCiAgICAg
ICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtTG9jYWxz
KG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAg
ewotICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRt
cHMpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51
bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAgbV92YWx1ZXMu
ZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgsNyBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5k
czxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAgICAgOiBtX251
bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAsIG1fbnVtTG9j
YWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1Db25zdGFudHMob3Ro
ZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cob3Ro
ZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwpAQCAtMTcy
LDMzICsxNzYsNTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZMb2Nh
bHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAgIHNpemVfdCBudW1iZXJPZlRt
cHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygp
IC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0YW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJlck9mVG1wcygp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBu
dW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tDYWxsZWU7IH0K
IAorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAgICB9CiAgICAg
c2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1
bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHggKyBudW1iZXJP
ZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCk7CiAg
ICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVy
biBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAg
ICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAgICBzaXplX3Qg
Y29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlk
eCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVmVHlwZSB0bXAo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICBDb25z
dFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4
KGlkeCldOyB9CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KKworICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3RkOjpl
bmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2FsbGVlKCkgeyBy
ZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgQ29u
c3RSZWZUeXBlIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQogICAg
IAogICAgIFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJ
bmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZUeXBlIGNvbnN0
YW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgoaWR4KV07IH0K
KyAgICBDb25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRL
aW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAgLTI0OCw3ICsy
NzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9jYWxzKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6
ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9sZE51bUxvY2Fs
cyA9IG51bWJlck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBzID0gbnVtYmVy
T2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0yNjgsNyArMjkw
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNpemVfdCBvbGRT
aXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9m
QXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9m
Q29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3Jv
dyhuZXdTaXplKTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpW
ZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4ICszMjcsMTUg
QEAgcHVibGljOgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIo
KSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGNvbnN0YW50SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVy
biBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBAIC0zMTksOCAr
MzQ4LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgaWYgY29uc3Rl
eHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVy
KCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50
KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9jYWwob3BlcmFu
ZC50b0xvY2FsKCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKSA8IG51bWJl
ck9mQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJh
bmQudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJvb2wgaGFzT3Bl
cmFuZChPcGVyYW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCk7Ci0g
ICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1l
bnRzKCkpCisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFy
Z3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGlu
ZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAo
aW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKKyAgICAg
ICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBu
dW1iZXJPZkNvbnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZv
ckNvbnN0YW50KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICBpZiAo
aW5kZXggPT0gY2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIGZpbGwoVCB2
YWx1ZSkKQEAgLTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251
bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBtX251bUxvY2Fs
cyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhlIGZpcnN0IG1f
bnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9j
YWxzIGFyZSBsb2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25zdGFudHMsIGFu
ZCB0aGUgcmVzdCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAgIHVuc2lnbmVk
IG1fbnVtQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9Owor
ICAgIHVuc2lnbmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
SW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAg
aW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAgICBvdXQucHJp
bnQodmlydHVhbFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBP
cGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWU+Cit2
b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29t
bWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVu
dHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZvaWQgT3BlcmFu
ZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNvbnRleHQodG1w
KHRtcEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2Fs
bGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGluQ29udGV4dChj
YWxsZWUoKSwgY29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBPcGVy
YW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7
CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFy
Z3VtZW50SW5kZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOwogICAgIH0K
KyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJjYWxsZWUiLCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQs
NyBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgIG1f
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUgPSBqaXQt
PmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlKGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLT5jYWxsU2l0ZUlu
ZGV4KTsKICAgICAgICAgbV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uID0gbV9s
aXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZS5udW1iZXJP
ZlNldFJlZ2lzdGVycygpID4gMDsKICAgICAgICAgaWYgKG1fbmVlZHNUb1Jlc3RvcmVSZWdpc3Rl
cnNJZkV4Y2VwdGlvbikKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0LT5jb2RlQmxvY2soKS0+aml0VHlw
ZSgpKSk7CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1f
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9j
YXRvci0+dXNlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5l
eGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC03MTAsNyArNzEwLDcgQEAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAvLyBXZSBzZXQgdGhl
c2UgdG8gaW5kaWNhdGUgdG8gdGhlIHN0dWIgdG8gcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBDb2Rl
QmxvY2sncwogICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciB0YWJsZSB3aGVuIGl0IGlzIGRl
YWxsb2NhdGVkLgogICAgICAgICBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJzID0g
Y29kZUJsb2NrOwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVC
bG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOworICAgICAgICBBU1NF
UlQoSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhhbmRsZXJz
LT5qaXRUeXBlKCkpKTsKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
ID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
aAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEgQEAgaW5saW5l
IGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSAmJiAh
KHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVl
ICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5lIGJvb2wgaXNO
b3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiB2
YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJu
cyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRo
YXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lz
dGVyLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFz
cyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGludCk7CisgICAg
ZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpbnQpOwog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2Zm
ZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVy
ICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2FsKCkgY29uc3Qg
eyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpICYmICFp
c0NvbnN0YW50KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0
dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRv
TG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwo
bV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJh
bmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJl
dHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQogICAgIHN0
YXRpYyBpbnQgYXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVu
dCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGNv
bnN0YW50VG9PcGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3ZpcnR1YWxSZWdp
c3RlcjsKIH07CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
Ojphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitpbmxpbmUgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25zdGFudEluZGV4
KQoreworICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpjb25zdGFu
dFRvT3BlcmFuZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJhc2ljQmxvY2so
Qnl0ZWNvZGVJbmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51
bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAg
ICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzLCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25D
b3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbkJ5SWRT
dGF0dXMuaCIKICNpbmNsdWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCisjaW5jbHVkZSAiSklUQ29k
ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIgpAQCAtOTA1LDcgKzkwNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKICAgICAgICAgfTsKIAot
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2ssIENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1l
KCkpKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFZhbHVlUHJvZmls
ZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIENvZGVPcmlnaW4o
Ynl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKCkpKTsKICAgICAgICAgaWYgKHByZWRpY3Rp
b24gIT0gU3BlY05vbmUpCiAgICAgICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKIApAQCAtOTM5
LDcgKzk0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB3aGlsZSAoc3RhY2stPm1faW5saW5l
Q2FsbEZyYW1lICE9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpKQogICAgICAgICAgICAg
ICAgIHN0YWNrID0gc3RhY2stPm1fY2FsbGVyOwogCi0gICAgICAgICAgICByZXR1cm4gZ2V0VmFs
dWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChzdGFj
ay0+bV9wcm9maWxlZEJsb2NrLCAqY29kZU9yaWdpbik7CisgICAgICAgICAgICByZXR1cm4gZ2V0
VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChz
dGFjay0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksICpjb2RlT3JpZ2lu
KTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CkBAIC05ODIsOCArOTgzLDkgQEAgcHJp
dmF0ZToKIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxlJiBwcm9maWxl
LCBBcnJheTo6QWN0aW9uIGFjdGlvbikKICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jayk7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7
CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwor
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9j
ayk7CiAgICAgICAgIGJvb2wgbWFrZVNhZmUgPSBwcm9maWxlLm91dE9mQm91bmRzKGxvY2tlcik7
CiAgICAgICAgIHJldHVybiBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIsICZwcm9maWxl
LCBhY3Rpb24sIG1ha2VTYWZlKTsKICAgICB9CkBAIC0xNjY4LDcgKzE2NzAsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IHNhdmVkQ3VycmVudEluc3RydWN0aW9uID0gbV9jdXJyZW50SW5zdHJ1Y3Rpb247CiAgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6
OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbGVlLmZ1bmN0
aW9uRXhlY3V0YWJsZSgpLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9u
S2luZCk7CiAgICAgaW5zZXJ0Q2hlY2tzKGNvZGVCbG9jayk7CiAKICAgICAvLyBGSVhNRTogRG9u
J3QgZmx1c2ggY29uc3RhbnRzIQpAQCAtNjg3Myw3ICs2ODc1LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgSGFzaFNldDx1bnNpZ25lZCwg
V1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1bnNpZ25lZD4+IHNlZW5Bcmd1bWVudHM7CiAKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2
ZSgpLT5tX2xvY2spOwogCiAgICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKQEAgLTgzNDUs
MjMgKzgzNDcsMjggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQog
ICAgIHsKICAgICAgICAgbV9leGl0UHJvZmlsZS5pbml0aWFsaXplKG1fcHJvZmlsZWRCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKSk7CiAKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fbGF6eU9wZXJhbmRzLmluaXRp
YWxpemUobG9ja2VyLCBtX3Byb2ZpbGVkQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcyhs
b2NrZXIpKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogY29kZUJsb2NrID0gbV9wcm9m
aWxlZEJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgbV9sYXp5T3BlcmFu
ZHMuaW5pdGlhbGl6ZShsb2NrZXIsIGNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVz
KGxvY2tlcikpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkbyB0aGlzIHdo
aWxlIGhvbGRpbmcgdGhlIGxvY2sgYmVjYXVzZSB3ZSB3YW50IHRvIGVuY291cmFnZSBTdHJ1Y3R1
cmVTdHViSW5mbydzCiAgICAgICAgIC8vIHRvIGJlIHBvdGVudGlhbGx5IGFkZGVkIHRvIG9wZXJh
dGlvbnMgYW5kIGJlY2F1c2UgdGhlIHByb2ZpbGVkIGJsb2NrIGNvdWxkIGJlIGluIHRoZQogICAg
ICAgICAvLyBtaWRkbGUgb2YgTExJbnQtPkpJVCB0aWVyLXVwIGluIHdoaWNoIGNhc2Ugd2Ugd291
bGQgYmUgYWRkaW5nIHRoZSBpbmZvJ3MgcmlnaHQgbm93LgotICAgICAgICBpZiAobV9wcm9maWxl
ZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgbV9wcm9maWxl
ZEJsb2NrLT5nZXRJQ1N0YXR1c01hcChsb2NrZXIsIG1fYmFzZWxpbmVNYXApOworICAgICAgICBp
ZiAobV9wcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCisgICAgICAg
ICAgICBtX3Byb2ZpbGVkQmxvY2stPmdldElDU3RhdHVzTWFwKG1fYmFzZWxpbmVNYXApOwogICAg
IH0KICAgICAKLSAgICBDb2RlQmxvY2sqIG9wdGltaXplZEJsb2NrID0gbV9wcm9maWxlZEJsb2Nr
LT5yZXBsYWNlbWVudCgpOwotICAgIG1fb3B0aW1pemVkQ29udGV4dC5vcHRpbWl6ZWRDb2RlQmxv
Y2sgPSBvcHRpbWl6ZWRCbG9jazsKLSAgICBpZiAoT3B0aW9uczo6dXNlUG9seXZhcmlhbnREZXZp
cnR1YWxpemF0aW9uKCkgJiYgb3B0aW1pemVkQmxvY2spIHsKLSAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihvcHRpbWl6ZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgb3B0aW1pemVk
QmxvY2stPmdldElDU3RhdHVzTWFwKGxvY2tlciwgbV9vcHRpbWl6ZWRDb250ZXh0Lm1hcCk7Cisg
ICAgeworICAgICAgICBDb2RlQmxvY2sqIG9wdGltaXplZEJsb2NrID0gbV9wcm9maWxlZEJsb2Nr
LT5yZXBsYWNlbWVudCgpOworICAgICAgICBtX29wdGltaXplZENvbnRleHQub3B0aW1pemVkQ29k
ZUJsb2NrID0gb3B0aW1pemVkQmxvY2s7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VQb2x5dmFy
aWFudERldmlydHVhbGl6YXRpb24oKSAmJiBvcHRpbWl6ZWRCbG9jayAmJiBKU0M6OkpJVENvZGU6
OmlzSGlnaGVyVGllcihvcHRpbWl6ZWRCbG9jay0+aml0VHlwZSgpLCBtX3Byb2ZpbGVkQmxvY2st
PmppdFR5cGUoKSkpIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIob3B0
aW1pemVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBvcHRpbWl6ZWRCbG9jay0+Z2V0SUNT
dGF0dXNNYXAobG9ja2VyLCBtX29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICAgICAgfQorICAg
ICAgICBieXRlQ29kZVBhcnNlci0+bV9pY0NvbnRleHRTdGFjay5hcHBlbmQoJm1fb3B0aW1pemVk
Q29udGV4dCk7CiAgICAgfQotICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2ljQ29udGV4dFN0YWNrLmFw
cGVuZCgmbV9vcHRpbWl6ZWRDb250ZXh0KTsKICAgICAKICAgICBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXNXaXRoRml4dXAgPSBzdGQ6Om1heDxpbnQ+KGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAKQEAgLTgzNzUsNyArODM4Miw3
IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKIAogICAgICAgICAv
LyBUaGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2
ZSBhIGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgot
ICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdy
aXRlQmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgbV9pbmxp
bmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRlQmFycmll
cihwcm9maWxlZEJsb2NrKTsgLy8gT09QUzogQXNzZXJ0IGl0J3MgYSBMT0wsIEJhc2VsaW5lLCBv
ciBMTEludCBDQi4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFRtcE9mZnNldCgobV9j
YWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lLT50
bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpKTsKICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZVN0YXJ0
Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgICAgICBt
X2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBA
IHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgICAgICAg
ICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2socmVjb3ZlcnkuY29uc3RhbnQoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSkK
KyAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaW5saW5lQ2Fs
bEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQogICAgICAgICAgICAgICAgIHRy
YWNrZWRSZWZlcmVuY2VzLmNoZWNrKGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuaXNDb25zdGFu
dCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlSW1wbCgKICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkp
IHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJ
VCk7CiAgICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayB8fCBwcm9maWxlZERGR0NvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CiAgICAgCiAgICAgaWYgKGxvZ0Nv
bXBpbGF0aW9uQ2hhbmdlcyhtb2RlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3OCw3ICsxNjc4LDcgQEAgTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aAogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVy
IGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQogICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudE5vZGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gYXJndW1lbnROb2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkgewotICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBwcm9maWxl
ZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNjg2LDEyICsxNjg2LDEy
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKIAogICAgICAgICAv
LyBjdXJyZW50Tm9kZSBpcyBudWxsIHdoZW4gd2UncmUgZG9pbmcgc3BlY3VsYXRpb24gY2hlY2tz
IGZvciBjaGVja0FyZ3VtZW50VHlwZXMoKS4KICAgICAgICAgaWYgKCFjdXJyZW50Tm9kZSB8fCBu
b2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyB8fCAh
Y3VycmVudE5vZGUtPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gcHJvZmlsZWRDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vz
c2VzU3RhY2soKnRoaXMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0
TG9jYWwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Zp
bGVkQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLT5iYXNlbGlu
ZUFsdGVybmF0aXZlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUtleSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0xNzAwLDcgKzE3MDAsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdy
YXBoOjptZXRoCiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CiAKLSAgICAg
ICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKSB7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZWRCbG9jay0+aGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKEJpbmFyeUFyaXRoUHJvZmlsZSogcmVzdWx0ID0gcHJv
ZmlsZWRCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgICAgICAgICBpZiAoVW5hcnlBcml0aFByb2ZpbGUqIHJlc3VsdCA9
IHByb2ZpbGVkQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDgxLDcgKzQ4MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gbV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGlu
bGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOworICAg
ICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKTsKICAgICB9CiAgICAgCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0
YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQpAQCAtNDkyLDEzICs0OTIsMjAg
QEAgcHVibGljOgogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CiAgICAgICAgIHJl
dHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUp
OwogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0
IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2Zp
bGVkQmxvY2spOworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0
ZXJuYXRpdmUoKSk7CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0Zv
cihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8q
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAg
ICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgp
OworICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOwogICAgIH0KICAgICAKICAgICBib29s
IG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgdm9pZCBP
U1JFbnRyeURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNBTgogdm9pZCog
cHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VS
VChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9M
SklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdm9pZCBPU1JFeGl0QmFzZTo6Y29u
c2lkZXJBZGRpbmdBc0ZyZXF1ZQogewogICAgIENvZGVCbG9jayogc291cmNlUHJvZmlsZWRDb2Rl
QmxvY2sgPQogICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29k
ZUJsb2NrKAotICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVk
Q29kZUJsb2NrKTsKKyAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBwcm9m
aWxlZENvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAoc291cmNlUHJv
ZmlsZWRDb2RlQmxvY2spIHsKICAgICAgICAgRXhpdGluZ0lubGluZUtpbmQgaW5saW5lS2luZDsK
ICAgICAgICAgaWYgKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmlubGluZUNhbGxGcmFtZSgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw3ICs3OSw3IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUK
ICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0
ZUFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVD
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5hZGRyZXNzT2ZEaWRUcnlUb0VudGVySW5Mb29w
KCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmFkZHJlc3NPZkRpZFRyeVRvRW50ZXJJbkxv
b3AoKSkpKTsKICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoCkBAIC0zODQsOCArMzg0LDcgQEAg
dm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIGlmIChpbmxpbmVD
YWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgOiAqaW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICAgICAgaml0Lm1vdmUoCi0gICAgICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKAotICAgICAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1l
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICBvc3JXcml0ZUJhcnJpZXIo
dm0sIGppdCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0Myw3ICsyMDQzLDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNyZWF0ZQogICAgIAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrOwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNv
ZGVCbG9jay5nZXQoKTsKICAgICBlbHNlCiAgICAgICAgIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgCkBAIC0zNjA1LDcgKzM2MDUsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlCiAgICAgCiAgICAgYm9vbCBkaWRUcnlUb0VudGVySW50
b0lubGluZWRMb29wcyA9IGZhbHNlOwogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBleGl0LT5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNh
bGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIu
aW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsK
KyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkgewogICAgICAgICAgICAgZGlk
VHJ5VG9FbnRlckludG9JbmxpbmVkTG9vcHMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTM2OTAsNyArMzY5MCw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBs
YWNlbWVudENvbXBpbGUKICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdn
ZXJGVExSZXBsYWNlbWVudCIsICgpKTsKICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNv
ZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQo
KSwgY29kZUJsb2NrLCBGVExNb2RlLCBCeXRlY29kZUluZGV4KCksCisgICAgICAgIHZtLCBjb2Rl
QmxvY2stPm5ld1JlcGxhY2VtZW50KGNvZGVCbG9jay0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZl
KCkpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIEJ5dGVjb2RlSW5kZXgoKSwKICAgICAgICAgT3BlcmFu
ZHM8T3B0aW9uYWw8SlNWYWx1ZT4+KCksIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
OjpjcmVhdGUoKSk7CiAKICAgICAvLyBJZiB3ZSByZWFjaGVkIGhlcmUsIHRoZSBjb3VudGVyIGhh
cyBub3QgYmUgcmVzZXQuIERvIHRoYXQgbm93LgpAQCAtMzkyOCw3ICszOTI4LDcgQEAgc3RhdGlj
IGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcgogICAgIE9wZXJhbmRzPE9wdGlvbmFs
PEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzOwogICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4ID0g
aml0Q29kZS0+Ynl0ZWNvZGVJbmRleFRvU3RyZWFtSW5kZXguZ2V0KG9yaWdpbkJ5dGVjb2RlSW5k
ZXgpOwogICAgIGppdENvZGUtPnJlY29uc3RydWN0KGNhbGxGcmFtZSwgY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG9yaWdpbkJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhhbmRsZVZhbHVl
cyk7Ci0gICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3
UmVwbGFjZW1lbnQoKTsKKyAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29k
ZUJsb2NrLT5uZXdSZXBsYWNlbWVudChjb2RlQmxvY2stPmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2
ZSgpKTsKIAogICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAidHJpZ2dlckZUTE9T
UiIsICgpKTsKICAgICBDb21waWxhdGlvblJlc3VsdCBmb3JFbnRyeVJlc3VsdCA9IGNvbXBpbGUo
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0NCw4ICs2NDQsOCBAQCBDb21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdp
dGhvdXROCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGNvbnN0YW50Lmdl
dCgpKTsKIAogICAgICAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqbV9pbmxp
bmVDYWxsRnJhbWVzKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVu
Y2VzLmFkZChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpKTsKKyAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQoaW5saW5lQ2Fs
bEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbnkgb3RoZXIgcmVmZXJlbmNlcyB0aGF0IHdlIGhh
dmUgYW55d2hlcmUgaW4gdGhlIEpJVENvZGUgYXJlIGFsc28KQEAgLTY5Myw4ICs2OTMsOCBAQCB2
b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAKICAgICBpZiAobV9pbmxp
bmVDYWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1f
aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0
KCkpOworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChpbmxpbmVDYWxsRnJh
bWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0R2V0QXJndW1lbnRTdGFyCiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE9TUkV4aXRGdXp6Q2hlY2soKQogewogICAgIGlmICghT3B0aW9u
czo6dXNlT1NSRXhpdEZ1enooKQotICAgICAgICB8fCAhY2FuVXNlT1NSRXhpdEZ1enppbmcobV9q
aXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX29yaWdpbi5zZW1hbnRpYykpCisgICAg
ICAgIHx8ICFjYW5Vc2VPU1JFeGl0RnV6emluZyhtX2ppdC5ncmFwaCgpLnByb2ZpbGVkQ29kZUJs
b2NrRm9yKG1fb3JpZ2luLnNlbWFudGljKSkKICAgICAgICAgfHwgIWRvT1NSRXhpdEZ1enppbmco
KSkKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wKCk7CiAgICAgCkBAIC00NDI4
LDkgKzQ0MjgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAg
ICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxv
Y2sgPSBtX2ppdC5ncmFwaCgpLnByb2ZpbGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gcHJvZmlsZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7CiAgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24g
PSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CkBAIC00NTIwLDkgKzQ1MjAsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJS
ZWcgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLnByb2Zp
bGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmJp
bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklU
U3ViSUMqIHN1YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmls
ZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGlt
aXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWI7
CkBAIC01MTEzLDkgKzUxMTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5jT3JE
ZWMoTm9kCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVOZWdhdGUoTm9kZSogbm9k
ZSkKIHsKICAgICAvLyBGSVhNRTogYWRkIGEgZmFzdCBwYXRoLCBhdCBsZWFzdCBmb3IgQmlnSW50
MzIsIGJ1dCBwcm9iYWJseSBhbHNvIGZvciBIZWFwQmlnSW50IGhlcmUuCi0gICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2Nr
ID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHBy
b2ZpbGVkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7CiAgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CkBAIC01MzY5LDkgKzUzNjksOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJS
ZWcgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLnByb2Zp
bGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPmJp
bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklU
TXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmls
ZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bE9wdGlt
aXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3
ICsxMjEsNiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjCiB7CiAg
ICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIEFTU0VSVChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOwogCiAgICAgdW5zaWduZWQg
bnVtVmFyaWFibGVzOwogICAgIHVuc2lnbmVkIG51bVRtcHM7CkBAIC0xNTUsNiArMTU0LDcgQEAg
dW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogICAgICAgICBudW1WYXJp
YWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSArIDE7CiAgICAgICAgIG51bVRt
cHMgPSBjb2RlQmxvY2stPm51bVRtcHMoKSArIGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0Owog
ICAgIH0gZWxzZSB7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOwogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CiAgICAgICAgIG51bVRtcHMgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+bnVtVG1wcygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUzLDcgKzM1Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1l
bnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAgICAgICAgICAgICAg
IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjcsNyArNTY3LDcgQEAgdm9pZCBIZWFwOjpw
cm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90ZWN0KEpTVmFsdWUgaykKIHsKICAg
ICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKG1fdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxv
Y2soKSk7CisgICAgLy9BU1NFUlQobV92bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygp
KTsgLy8gT09QUwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI2ICs1MiwxNyBAQCB2b2lk
IENhbGxGcmFtZTo6aW5pdERlcHJlY2F0ZWRDYWxsRnJhbWVGCiBib29sIENhbGxGcmFtZTo6Y2Fs
bFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxv
Y2soKSk7Ci0gICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgotICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKLSAgICBjYXNl
IEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNv
ZGVJbmRleChjb2RlQmxvY2soKS0+aml0VHlwZSgpKTsKIH0KIAogYm9vbCBDYWxsRnJhbWU6OmNh
bGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVC
bG9jaygpKTsKICAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKKyAgICBjYXNl
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDoKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTc5LDggKzcwLDYgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRl
Qml0c0FyZUNvZGVPcmlnaQogICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTYsMTAgKzQ1NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBIYW5kbGVySW5m
byogZmluZEV4CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFt
ZSgpOwogICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleDsKLSAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgZXhjZXB0
aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwotICAg
IGVsc2UKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGNvZGVC
bG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZy
YW1lLT5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCk7CisgICAgZWxzZQorICAgICAgICBleGNlcHRp
b25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiAKICAg
ICByZXR1cm4gY29kZUJsb2NrLT5oYW5kbGVyRm9ySW5kZXgoZXhjZXB0aW9uSGFuZGxlckluZGV4
LCByZXF1aXJlZEhhbmRsZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVk
RnJhbWUoQ2FsbAogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
KS51bmJveGVkSW50MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2Fy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczsKLSAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxG
cmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CisgICAgICAgIG1fZnJhbWUubV9jb2RlQmxv
Y2sgPSBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CiAgICAg
ICAgIG1fZnJhbWUubV9ieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
OwogCiAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVl
Rm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDcgQEAgRXhlY3V0YWJsZUJhc2UqIEFzc2VtYmx5SGVscGVyczo6ZXhlY3V0YQogICAg
IGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCk7Ci0gICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOworICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmxv
bE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogfQogCiBBc3NlbWJseUhl
bHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkZhc3RUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlR1BSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwxMiArMzAsMTggQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkJ5dGVj
b2RlR3JhcGguaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJCeXRlY29kZVVz
ZURlZi5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUg
IkRpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkpTQXN5bmNH
ZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGlu
ZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5j
bHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTQ5
LDYgKzU1LDggQEAKICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KICNpbmNsdWRl
IDx3dGYvU2ltcGxlU3RhdHMuaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5o
IgorCiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBKSVRJbnRlcm5hbCB7CiBzdGF0aWMgY29u
c3RleHByIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtNjAsNiArNjgsODkxIEBAIFNl
Y29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGlt
ZTsKIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCit2b2lkIEpJVDo6c3RlcE92ZXJJ
bnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBz
ZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7
CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQocmVnKSA9IHR5cGU7CisgICAg
fTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAoYXV0byBieXRlY29kZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAg
ICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZSA9IFsmXSAoYXV0byBi
eXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUoYnl0ZWNvZGUsIHByb2ZpbGVzLmdldCgm
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZSkpOworICAgICAgICAvLyBX
ZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91bGQgb25seSBncm93IGluIHRoZSB0eXBl
cyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgfTsKKwor
ICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1
bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChv
cGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7
CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQ
cm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5h
czxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0aFRoaXM+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmls
ZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG5vdDoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0
bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdGFuZD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90b190aGlzOiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CisgICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRU
eXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5tX3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7
CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRlcmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0
b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0
LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlw
ZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsK
KyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVlLCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21v
djoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCksIHR5cGVGb3Io
aW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90YWlsX2Nh
bGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJv
ZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21W
YWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBzZXRE
c3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX29iamVjdDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICAgICAgc2V0RHN0
VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgc2V0
RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50
cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fbnVtZXJpYzoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2FkZDogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVm
dCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBhdXRvJiBwcm9maWxl
ID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgaWYg
KHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBzZXRE
c3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJs
ZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkp
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAg
ICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFOKSB8fCAhIShyaWdodCAmIFNwZWNEb3Vi
bGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50
MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQmln
SW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxhdGlvbihsZWZ0KSB8fCBpc1N0cmluZ09y
U3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaGVyZQorICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfZGl2OgorICAg
IGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0g
WyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgICAgIGlmICghKGxl
ZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0
aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisg
ICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVE
b3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRl
Y29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAgICAgICAgICAgIGJvb2wgbWF5UHJvZHVj
ZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9kaXY7CisgICAg
ICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9tTm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVj
RG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5hTikpCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJpZ2ludDMyCisgICAgICAgICAgICBpZiAo
aXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkg
eworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIChT
cGVjQmlnSW50IHwgU3BlY09iamVjdCkpIHx8ICEhKHJpZ2h0ICYgKFNwZWNCaWdJbnQgfCBTcGVj
T2JqZWN0KSkpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNCaWdJbnQ7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOworICAgICAgICB9OworCisgICAgICAg
IGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9zdWIpCisgICAgICAgICAgICBoYW5k
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9u
LT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKworICAgICAgICBpZiAo
IShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRlciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9u
ICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSB8IFNw
ZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlciB8IFNw
ZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVk
OgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21lIGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRi
YWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0ludDMyT25seSB8IFNwZWNBbnlJbnRBc0Rv
dWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCksIFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAg
IGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmls
ZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgaW5wdXQgPSB0eXBlRm9yKHNyYyk7Cisg
ICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpID8gU3BlY0FueUlu
dEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7
CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3BlY0RvdWJsZVB1cmVOYU4pCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICAgICAgICAgICAg
ICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24oaW5w
dXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBl
KGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29kZU51
bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
ID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNv
ZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGVj
KSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tX3NyY0Rz
dCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCk7Cisg
ICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfcG93OiB7CisgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCk7CisKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICBpZiAoIShs
ZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNCaWdJ
bnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
CisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0
byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgICAgIGF1dG8gbGVmdCA9
IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgYXV0byByaWdodCA9IHR5cGVG
b3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyT3JC
b29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRp
b24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoYnl0ZWNvZGUpOworICAgICAgICB9Owor
ICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbHNoaWZ0KQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExzaGlmdD4oKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BSc2hpZnQ+KCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAg
IGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworCisgICAgICAgIGlmICghdHlw
ZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0eXBlICYgU3BlY09iamVjdCkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5
X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9Qcmlt
aXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9zcmMpOwor
ICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCEodHlw
ZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkgeworICAgICAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOworICAgICAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5nIHdoZXJlIHdlIGRvbid0IG1lcmdlIHcv
IGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVyIGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBw
cm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJlYWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHll
dCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0
aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAgICBzZXRUeXBlKHBy
b2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAgIH0pOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1W
YXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBlKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfbmV3X2FycmF5
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpLCBTcGVj
QXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCksIFNw
ZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3By
ZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNw
cmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgICAgICAvLyBGSVhNRTog
TWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9uIHJlc29sdmVkIHR5cGUgaWYgd2Ugd2Fu
dAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKSwg
U3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0Zp
bmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV92YWw6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9wcm9taXNlOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCksIFNwZWNQcm9taXNl
T2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLCBTcGVjU3RyaW5nKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKSwg
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2Vu
ZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5
bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rp
b24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vu
dmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxl
eGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpLCBTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1
cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51
bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVy
dHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2hhc19l
bnVtZXJhYmxlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKSwgU3BlY0NlbGwpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
bmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpLCBTcGVj
U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKSwgU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9m
b3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKSwgU3Bl
Y0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfc2NvcGU6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCksIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1
bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0
QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCksIFNwZWNTY29wZWRBcmd1bWVu
dHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRz
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3Vt
ZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9j
cmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+KCksIFNwZWNDZWxsT3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXN5bmNfZ2VuZXJhdG9yOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBT
cGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5l
cmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJh
dG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2Vu
ZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEFy
Z3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+
KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19yZWdl
eHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpLCBT
cGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJp
Y3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25zdHJp
Y3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExlc3M+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJl
cT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93Ogor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEJlbG93PigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYmVsb3dlcToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRfb3JfbnVsbDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5
cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlw
ZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25l
cV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19zdHJpbmc6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCksIFNwZWNTdHJp
bmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25vdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5V2l0aFByb2ZpbGU+KCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+
KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBzdGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlw
ZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5t
X3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBv
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJ
ZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2RlbF9ieV92
YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2lzX2NhbGxhYmxlOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ2FsbGFibGU+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3Ro
aXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhfdGhpczoKKyAgICBjYXNlIG9wX2NoZWNr
X3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9maWVsZDoKKyAgICBjYXNlIG9wX25vcDoK
KyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46CisgICAgY2FzZSBvcF9zdXBlcl9zYW1w
bGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICBj
YXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6
CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ug
b3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9l
bmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZToKKyAg
ICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJv
cGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6CisgICAgY2FzZSBv
cF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNh
c2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251
bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251bGw6CisgICAgY2FzZSBvcF9qbnVuZGVm
aW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgorICAgIGNhc2Ugb3BfanN0cmljdGVxOgor
ICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2puc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9q
bGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBj
YXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxl
c3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgor
ICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3BfamJlbG93ZXE6CisgICAgY2FzZSBvcF9s
b29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2No
YXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9k
aXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wcm9maWxlX2Nv
bnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1l
bnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0
ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDoKKyAgICBjYXNl
IG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJv
bm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAgY2FzZSBvcF93aWRlMTY6CisgICAgY2Fz
ZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAg
ICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9tb2R1bGVfcHJvZ3Jh
bV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgor
ICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgorICAgIGNhc2UgbGxpbnRfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2dlbmVyaWNf
cmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5l
ZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50OgorICAgIGNh
c2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5
X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25l
eHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAg
ICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVf
d2FzbV9jYWxsX2luZGlyZWN0X25vX3RsczoKKyAgICBjYXNlIG5vcm1hbF9vc3JfZXhpdF90cmFt
cG9saW5lOgorICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6CisgICAg
Y2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9z
bG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9z
bG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdz
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9ldmFsX3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsOgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0
cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dDoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVf
b3BfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfc2xvdzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3Nsb3c6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF90YWlsX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9l
dmFsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHRfc2xvdzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3Blbl9zbG93OgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVja191bnRhZzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hl
Y2tfdGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3Ry
dWN0X2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3RhZzoKKyAgICBjYXNlIHdhc21fdHJhbXBv
bGluZV93YXNtX2NhbGw6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX25vX3Rs
czoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGxfaW5kaXJlY3Q6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cnVu
UHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBtX2dyYXBoID0gV1RGOjptYWtlVW5pcXVl
PEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkp
OworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rpb25zQXRIZWFkLnNpemUoKTsgKytpKQor
ICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUs
IHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxs
ZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPm1fbG9j
ayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNoVmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQ
cm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jb2RlQmxvY2st
PmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAgICAgICBidWZmZXIuZm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAg
ICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+
YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDAp
LmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCk7CisKKyAgICBmb3IgKHNpemVf
dCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2Nv
ZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgbV9wcmVkaWN0
aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJvZmlsZS5tX3ByZWRpY3Rpb247CisKKyAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coImFyZyIsIGFyZywgIiA9
ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVk
aWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigp
OworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5jYWxsZWUo
KSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBib29sIGNvbXB1dGVV
c2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkp
OworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQgbGVhc3QgZG8gREZTLiBNYXliZSByZXZl
cnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGltcGFjdCBvZiBob3cg
d2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3MgcmVzdWx0cy4KKyAgICAgICAgLy8gSXMg
YSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVjb2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQg
b24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAgICAgICAgLy8gT09QUzogSG93IGlzIGNh
dGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVhY2hhYmxlIGlmIHdlIGRvIERGUy4uLgor
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2Nr
JiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9
IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgoKV07CisKKyAgICAgICAgICAgIGlmIChj
b21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2NrLmluZGV4
KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0
YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNFbnRyeUJsb2Nr
KCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgoKTsgKSB7CisgICAgICAgICAgICAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7IGkgKyBibG9jay5sZWFkZXJPZmZzZXQo
KSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0
cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGN1cnJlbnRJbnN0
cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXB1dGVVc2VDb3VudHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291bnQgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91c2VDb3VudHNbYmxv
Y2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9p
bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2lu
dC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3Vu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUlu
ZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHN1
Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtzdWNjZXNzb3JdOworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJlZGljdGlvbnMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlv
bihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50UHJlZGljdGlvbnNbaV0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29tcHV0ZVVzZUNvdW50cyA9IGZhbHNlOwor
ICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQpOworfQorCiB2b2lkIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKApAQCAtNjcsNyArOTYwLDEzIEBAIHZvaWQgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdn
ZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorYm9v
bCBKSVQ6OnVzZUxPTCgpCit7CisgICAgbV9jaGVja2VkVXNlTE9MID0gdHJ1ZTsKKyAgICByZXR1
cm4gbV91c2VMT0w7Cit9CisKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1f
aW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCkBAIC03NSw2ICs5NzQsNyBAQCBK
SVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX2NhbkJlT3B0
aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisg
ICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21waWxlVHlwZTo6TE9MKQogewogfQogCkBA
IC0xMzcsMTEgKzEwMzcsMTkgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgp
CiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7IFwKICAgICBORVhUX09Q
Q09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9XX09QKG5hbWUpIFwKKyNkZWZpbmUgREVG
SU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAog
ICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCi0g
ICAgICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7IFwKKyAgICAgICAgICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7IFwKKyAgICAgICAg
ICAgIGlmIChnZXRlbnYoInByaW50U2xvd0NhbGxDYXNlcyIpICYmIGF0b2koZ2V0ZW52KCJwcmlu
dFNsb3dDYWxsQ2FzZXMiKSkpIHsgXAorICAgICAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFt
IGNiTmFtZTsgXAorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKGNiTmFtZSk7IFwK
KyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gY2JOYW1lLnRvU3RyaW5nKCkgKyAiIGJjIyIg
KyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsgIiAiICsgb3Bjb2Rl
TmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsgXAorICAgICAgICAgICAgICAg
IHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsgXAorICAgICAgICAgICAgICAgICAgICBzbG93
Q2FsbENhc2VSYW4oa2V5KTsgXAorICAgICAgICAgICAgICAgIH0pOyBcCisgICAgICAgICAgICB9
IFwKKyAgICAgICAgICAgIGVtaXRTbG93T3Aoc2xvd19wYXRoXyMjbmFtZSwgY3VycmVudEluc3Ry
dWN0aW9uLCBkc3QsIHR5cGUpOyBcCiAgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERV9J
Tl9NQUlOKG9wXyMjbmFtZSk7IFwKICAgICB9CkBAIC0xNTYsMjYgKzEwNjQsNDYgQEAgdm9pZCBK
SVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNF
X09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAgICBlbWl0U2xvd18jI25hbWUo
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBlbWl0U2xvd18jI25hbWUoY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAgTkVYVF9PUENPREUobmFtZSk7
IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobmFtZSkgXAogICAg
IGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dDYXNlQ2FsbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisgICAgICAgIGVtaXRTbG93Q2Fz
ZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBp
ZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOyBcCisgICAg
ICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUpOyBcCiAgICAgfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBTbG93UGF0aEZ1bmN0
aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
fQogCitzdGF0aWMgdm9pZCBzbG93Q2FsbENhc2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dDYXNl
czsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsK
KworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9
ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAw
MCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBydW5QcmVkaWN0aW9uUHJvcGFnYXRpb24oKTsKKwogICAgIGlmIChKSVRJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxu
Iik7CiAgICAgCkBAIC0yMzEsMTYgKzExNTksODUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0g
MDsKLSAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICB1bnNpZ25l
ZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNlcy5zaXplKCk7Ci0gICAgICAgIGlm
IChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0
ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgotICAgICAg
ICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4K
LSAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgICAgIC8vIE9PUFMKKworICAgICAgICBt
X3N0YXRlQXRFbmQucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIG1fcHJlZGVjZXNz
b3JzLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDog
Km1fZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmIChibG9jay5pc0VudHJ5QmxvY2soKSB8fCBibG9j
ay5pc0V4aXRCbG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Zm9yIChhdXRvIHN1Y2Nlc3NvckluZGV4IDogYmxvY2suc3VjY2Vzc29ycygpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0uY29udGFpbnMoYmxv
Y2suaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3Nv
ckluZGV4XS5hcHBlbmQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
KyAgICB9CiAKLSAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
LCBsYWJlbCgpKTsKKyAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgeworICAgICAg
ICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2sgfHwgbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpID49IChtX2N1cnJlbnRCbG9jay0+bGVhZGVyT2Zmc2V0KCkg
KyBtX2N1cnJlbnRCbG9jay0+dG90YWxMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBhdCBlbmQgb2YgYmIjIiwg
bV9jdXJyZW50QmxvY2stPmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFJl
Z2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fc3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1
cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3Jh
cGgtPmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlz
RW50cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1f
cHJlZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMu
Zmlyc3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRF
bmRbcHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFtt
X2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRVc2VD
b3VudHMgPSBXVEZNb3ZlKG1fdXNlQ291bnRzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7Cisg
ICAgICAgICAgICAgICAgbV9zcGlsbENhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1f
c2xvd0Nhc2VzLnNpemUoKTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5
dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAgICAg
ICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwg
aGVyZSBhcmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBi
eSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9k
aXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpLCBsYWJlbCgpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICBB
U1NFUlQoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOwogCkBAIC0yNzgsNDYgKzEyNzUsNDMg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAjZW5kaWYK
IAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxs
b2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgICAgICAgICBk
dW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0K
KwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIERFRklORV9TTE9XX09QKGlu
X2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAgICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxh
YmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2Jq
ZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAg
IERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRo
X3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVu
dCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9X
X09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZl
X3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRlZmlu
ZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQotICAgICAgICBERUZJTkVfU0xPV19P
UChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRl
eF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRz
KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2Up
Ci0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlKQotICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5
bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3Zh
bCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFu
KQorICAgICAgICBERUZJTkVfU0xPV19PUChpc19jb25zdHJ1Y3RvciwgY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChzdHJjYXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCku
bV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29w
ZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1c2hXaXRoU2NvcGU+KCkubV9kc3QsIFNwZWNP
YmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVj
SGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmly
dHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlf
dmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJ
TkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZp
bmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHksIFZpcnR1YWxSZWdpc3Rlcigp
LCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxS
ZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGlj
X2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9X
X09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19P
UChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZm
ZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xl
YW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVj
Q2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVudHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1
bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBT
cGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVk
X2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50
cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFy
Z3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0
PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9t
aXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3Bl
Y1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmpl
Y3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikK
KyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvciwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0
T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAg
ICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93Pigp
Lm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50KQogCiAgICAgICAgIERFRklO
RV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTM5
MiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklO
RV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQogICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJf
c2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82
NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkKKyNlbHNlCisgICAgICAgIERFRklORV9TTE9X
X09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92
KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRl
KQpAQCAtNDc0LDEwICsxNDcyLDg0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSkKICAg
ICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQogCisgICAgICAgIERF
RklORV9PUChvcF9pc19jYWxsYWJsZSkKKyAgICAgICAgREVGSU5FX09QKG9wX3R5cGVvZl9pc19m
dW5jdGlvbikKKyAgICAgICAgREVGSU5FX09QKG9wX3R5cGVvZl9pc19vYmplY3QpCisgICAgICAg
IERFRklORV9PUChvcF90eXBlb2YpCisKKyAgICAgICAgREVGSU5FX09QKG9wX2xlc3MpCisgICAg
ICAgIERFRklORV9PUChvcF9sZXNzZXEpCisgICAgICAgIERFRklORV9PUChvcF9ncmVhdGVyKQor
ICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcmVxKQorCisgICAgICAgIERFRklORV9PUChvcF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGgpCisKKyAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9sZXhp
Y2FsX2Vudmlyb25tZW50KQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fYnl0ZWNv
ZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9jaGVj
a2VkVXNlTE9MKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90
aHJvdzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2ptcDoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW5kOgorICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0Ogor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6CisgICAgICAgICAgICAg
ICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX25vcDoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZToKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2Rl
YnVnOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3Vl
OgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJEaWRuJ3QgY2hlY2sgTE9MOiAiLCBvcGNvZGVJRCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICBh
dXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkJiBjb3VudGVyID0gbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgLS1jb3VudGVyOworICAgICAgICAgICAgICAgIGlmICghY291
bnRlcikgeworICAgICAgICAgICAgICAgICAgICAvLyBPT1BTOiBEbyB0aGlzIGxhemlseSBpbiBz
bG93IHBhdGggY3JlYXRpb24vc3BpbGxGb3JDYWxsCisgICAgICAgICAgICAgICAgICAgIC8vbV9z
cGlsbENhbmRpZGF0ZXMuYXBwZW5kKG9wZXJhbmQpOworCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZ3ByKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBG
UFJSZWcgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbG9iYmVyKGZwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2lu
dCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50
LS07KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KG1fY29k
ZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAg
ICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxv
ZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7
CiAgICAgfQpAQCAtNDk4LDYgKzE1NzAsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlu
a1Bhc3MoKQogICAgIG1fam1wVGFibGUuY2xlYXIoKTsKIH0KIAorc3RhdGljIHZvaWQgc2xvd0Nh
c2VSYW4oU3RyaW5nIGtleSkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hN
YXA8U3RyaW5nLCB1aW50NjRfdD4+IHNsb3dDYXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNs
b3dDYXNlcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNl
cy5nZXQoKTsKKyAgICB1aW50NjRfdCB2YWx1ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAoKHZhbHVlICUgMTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xu
KGtleSwgIjogIiwgdmFsdWUpOworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogewogICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKQEAgLTUxNiwxNCArMTYwMiwyNSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICByYXJlQ2FzZVByb2Zp
bGVzID0gUmVmQ291bnRlZEFycmF5PFJhcmVDYXNlUHJvZmlsZT4obV9ieXRlY29kZUNvdW50SGF2
aW5nU2xvd0Nhc2UpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93
Q2FzZSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOykgewotICAg
ICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKKyAgICBmb3IgKFNsb3dDYXNlJiBzbG93
Q2FzZSA6IG1fc2xvd0Nhc2VzKSB7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IHNsb3dDYXNl
LmJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAg
IEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgc2xvd0Nh
c2UuanVtcHNbMF0ubGluayh0aGlzKTsKKworICAgICAgICAvL0J5dGVjb2RlSW5kZXggZmlyc3RU
byA9IG1fYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CisKKyAgICAgICAgaWYgKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSAmJiBh
dG9pKGdldGVudigicHJpbnRTbG93Q2FzZXMiKSkpIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50
U3RyZWFtIG5hbWU7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChuYW1lKTsKKyAgICAg
ICAgICAgIFN0cmluZyBrZXkgPSBuYW1lLnRvU3RyaW5nKCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51
bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsgIiAiICsgb3Bjb2RlTmFtZXNbY3VycmVu
dEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsKKyAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6
Q29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZVJhbihrZXkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFy
ZUNhc2VQcm9maWxlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkKQEAgLTU4MCw3ICsxNjc3LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9jaGVja190cmFwcykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX25lZ2F0ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25lcSkKQEAgLTU5
OSw2ICsxNjk1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9uZXh0KQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobW9kKQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKHVuc2lnbmVkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChp
bmMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGRlYykKQEAgLTYzMSwxOSArMTcz
MCwzNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChjaGVja190ZHopCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHRv
X3Byb3BlcnR5X2tleSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaXNfY2FsbGFi
bGUpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19mdW5jdGlvbikK
KyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKKyAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mKQorCisgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKGxlc3MpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGxlc3Nl
cSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ3JlYXRlcikKKyAgICAgICAgREVG
SU5FX1NMT1dDQVNFX1NMT1dfT1AoZ3JlYXRlcmVxKQorCisgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKGNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQorCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygi
QXQgIiwgZmlyc3RUbywgIiBzbG93OiAiLCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxu
Iik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93
Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5vZmZzZXQoKSwgIk5v
dCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5vZmZzZXQoKSA9PSAoaXRlciAtIDEp
LT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdl
bi4iKTsKKyAgICAgICAgLy8gT09QUzoKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0
ZXItPnRvLm9mZnNldCgpLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNv
ZGVnZW4uIik7CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8u
b2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5r
ZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNv
bHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBzb21lIHNsb3cgcGF0aHMgYWxyZWFk
eSBkbyB0aGlzLCBzbyB3ZSBzaG91bGRuJ3QgcmVwZWF0IGl0LgorICAgICAgICAgICAgcmVzdG9y
ZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlOwogICAgIH0KQEAgLTY4OCw2ICsxODAyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVX
aXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcg
PSB0cnVlOyAvLyBPT1BTOiBoZWxwZnVsIGZvciBydW5uaW5nIExPTCB3L291dCBERkcuCiAgICAg
CiAgICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFs
Q29kZToKQEAgLTc3OCw2ICsxODk0LDg4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFi
ZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisgICAg
Ym9vbCBwcmludEVhY2hPU1IgPSBnZXRlbnYoInByaW50RWFjaE9TUiIpICYmICEhYXRvaShnZXRl
bnYoInByaW50RWFjaE9TUiIpKTsKKworICAgIGlmICghbV9leGl0SnVtcHMuaXNFbXB0eSgpKSB7
CisgICAgICAgIEp1bXBMaXN0IGV4aXRDb21tb247CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6
IG1fZXhpdEp1bXBzKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0LmZp
cnN0OworICAgICAgICAgICAgYXV0byBqdW1wcyA9IGV4aXQuc2Vjb25kOworICAgICAgICAgICAg
anVtcHMubGluayh0aGlzKTsKKworICAgICAgICAgICAgaWYgKHByaW50RWFjaE9TUikgeworICAg
ICAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIHByaW50U3RyZWFtOworICAgICAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5kdW1wKHByaW50U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBDU3Ry
aW5nIHN0ciA9IHByaW50U3RyZWFtLnRvQ1N0cmluZygpOworICAgICAgICAgICAgICAgIHN0ci5i
dWZmZXIoKS0+cmVmKCk7IC8vIGxlYWsgaXQuCisgICAgICAgICAgICAgICAgcHJpbnQoc3RyLmRh
dGEoKSwgIiAtPiBleGl0IGF0IGJjIyIsICBieXRlY29kZUluZGV4Lm9mZnNldCgpLCAiXG4iKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsgLy8gT09QUzogaGFuZGxlIGNoZWNr
cG9pbnQgZXhpdHMuCisKKyAgICAgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAg
ICAgICAgICAgIGV4aXRDb21tb24uYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBBU1NFUlQoIWV4aXRDb21tb24uZW1wdHkoKSk7CisgICAgICAgIGV4aXRDb21tb24ubGluayh0
aGlzKTsKKworCisgICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIg
PT0gcmVnVDQpOworICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKS5jb250YWlucyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxp
ZXMgb24gdGhpcyBiZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBu
dW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhl
IExMSW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25PU1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BS
MCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpOdW1iZXJUYWcpLCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkp
LCByZWdUMik7CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAg
ICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhp
dENvdW50ZXIoKSkpOworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVs
b3csIHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZv
clJlb3B0aW1pemF0aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQ
UiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNl
IHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJs
b2NrKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJp
Z2dlckxPTFJlb3B0aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5v
bkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0
ZXIsIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0
dGlzb24ubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0g
aml0LmJyYW5jaDMyKAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFu
T3JFcXVhbCwKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAg
IC8vICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9y
bWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFn
PigpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKQorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NS
RXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAv
LyAgICBkZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCku
Y29kZSgpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQ
Uik7CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7Cisg
ICAgICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BS
SW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAg
ICAgIC8vIDEuIFN0b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8v
IDIuIGpldHRpc29uIGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0
ZSBiYXJyaWVyIExMSW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93Lmxp
bmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBp
ZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC05NjcsNyArMjE2NSw3IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRy
eVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5k
YXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJ
VCA6IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5tYWNo
aW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAg
c3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCkBAIC05NzgsNyArMjE3Niw3IEBA
IENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJp
bmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CiAgICAg
fQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERp
cmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0
eUNoZWNrLCB1c2VMT0woKSA/IEpJVFR5cGU6OkxPTEpJVCA6IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigi
SklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtMTA3Miw2ICsyMjcw
LDk1MSBAQCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiB7CiAgICAgcmV0dXJuIHRv
dGFsQmFzZWxpbmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENv
bXBpbGVUaW1lOwogfQordm9pZCBKSVQ6OnNwZWN1bGF0ZShFeGl0S2luZCwgSnVtcCBqdW1wKQor
eworICAgIC8vIE9PUFM6IGhhbmRsZSBFeGl0S2luZC4KKyAgICBpZiAoIW1fZXhpdEp1bXBzLnNp
emUoKSB8fCBtX2V4aXRKdW1wcy5sYXN0KCkuZmlyc3QgIT0gbV9ieXRlY29kZUluZGV4KQorICAg
ICAgICBtX2V4aXRKdW1wcy5hcHBlbmQoeyBtX2J5dGVjb2RlSW5kZXgsIEp1bXBMaXN0KCkgfSk7
CisgICAgbV9leGl0SnVtcHMubGFzdCgpLnNlY29uZC5hcHBlbmQoanVtcCk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCYW5rPgorVmVjdG9yPFJlZywgMzI+IGNvbXB1dGVBbGxvd2VkUmVncygp
Cit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2Nh
dGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUg
ZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhp
cworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgVmVj
dG9yPFJlZywgMzI+IGFsbG93ZWQ7CisgICAgUmVnaXN0ZXJTZXQgYWxsb3dlZENhbGxlZVNhdmVz
ID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
UmVnaXN0ZXJTZXQgYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdpc3RlcihpKTsKKyAg
ICAgICAgaWYgKGFsbG93ZWRDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAgICAgICAgICAg
YWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5r
Ojp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIWFsbENhbGxlZVNhdmVzLmNvbnRhaW5zKHJl
ZykpCisgICAgICAgICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAgIH0KKyAgICByZXR1cm4g
YWxsb3dlZDsKK30KKworc3RhdGljIFZlY3RvcjxSZWcsIDMyPiYgYWxsb3dlZEdQUnMoKQorewor
ICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEg
ZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMKKyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1
cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisg
ICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZl
Y3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsK
KyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21wdXRlQWxsb3dlZFJlZ3M8R1BSSW5mbz4oKSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIFZlY3RvcjxS
ZWcsIDMyPiYgYWxsb3dlZEZQUnMoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9y
eSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgIHRoaXMK
KyAgICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8g
ZG8gc2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tl
eSBmb3IgYXJtLi4uCisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxSZWcsIDMyPj4gcmVzdWx0OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgcmVzdWx0LmNvbnN0cnVjdChjb21w
dXRlQWxsb3dlZFJlZ3M8RlBSSW5mbz4oKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKTsKK30KKwordm9pZCBKSVQ6OmFzc2VydE5vU2xvd1BhdGgoKQoreworICAgIC8vIE9PUFM6
IHRoaXMgYnJlYWtzIGN1cnJlbnRseSB3LyB3cml0ZUJhcnJpZXIuIEJ1dCBnZW5lcmFsbHkgc2Vl
bXMgbGlrZSBhIG5pY2UgYXNzZXJ0LiBNYXliZSB3ZSBjYW4gZmlndXJlIHNvbWV0aGluZyBvdXQu
Li4KKworICAgIC8vaWYgKG1fc2xvd0Nhc2VzLnNpemUoKSAmJiBtX3Nsb3dDYXNlcy5sYXN0KCku
Ynl0ZWNvZGVJbmRleCA9PSBtX2J5dGVjb2RlSW5kZXgpCisgICAgLy8gICAgQ1JBU0goKTsKK30K
KworR1BSUmVnIEpJVDo6YWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQpCit7CisgICAgYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBm
b3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgICAgICBpZiAocmVnLmdwcigp
ICE9IGhpbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUu
aXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZWdWYWx1
ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAg
ICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICgh
cmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2Nr
Q291bnQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdW
YWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworRlBSUmVnIEpJVDo6YWxsb2NhdGVGUFIoKQoreworICAgIGFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIC8vIE9PUFM6IGZpeCBkdXBsaWNhdGlvbiB3LyBhbGxvY2F0ZUdQUigpCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiByZWcuZnByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkRlBScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIGNs
b2JiZXJJbXBsKHJlZyk7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmNsb2JiZXJJbXBs
KFJlZyByZWcpCit7CisgICAgLy8gT09QUzogYWRkIHNvbWUgY29uc2lzdGVuY3kgdmFsaWRhdGlv
biBoZXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgbWFwIGFncmVlLgorCisgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRl
ZCkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHJlZ1ZhbHVlLm9wZXJhbmQ7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5p
c0dQUigpKQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmdw
ciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWxs
b2NlZFJlZ0Zvck9wZXJhbmQob3BlcmFuZCkuZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAg
fQorICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBpc0FsbG9jYXRlZC9sb2NrQ291
bnQgdmFsdWVzIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjb2RlIHRoYXQgZG9l
czoKKyAgICAgICAgLy8gLSBWYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLyAtIHNwaWxsRm9yQ2Fs
bAorICAgICAgICAvLyAtIH5WYWx1ZU9wZXJhbmQoKQorICAgICAgICAvLworICAgICAgICAvLyBB
bmQgd2hlbiB3ZSBkZWFsbG9jYXRlIHNvbWV0aGluZyBsaWtlIHRoZSBWYWx1ZU9wZXJhbmQsIHdl
IHdpbGwgZW5kIHVwIGZ1bGx5CisgICAgICAgIC8vIGRlYWxsb2NhdGluZyB0aGUgcmVnaXN0ZXIs
IGVzc2VudGlhbGx5IGRlZ3JhZGluZyBpdCBpbnRvIGEgdGVtcC4KKyAgICAgICAgLy8gT3RoZXJ3
aXNlLCB3aGVuIH5WYWx1ZU9wZXJhbmQoKSBydW5zIGFuZCBjYWxscyB1bmxvY2soKSwgd2UnZCBl
bmQgdXAgaW4KKyAgICAgICAgLy8gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgorICAgICAgICByZWdW
YWx1ZS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KQorICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSBmYWxzZTsKKyAg
ICB9CisKK30KKwordm9pZCBKSVQ6OnNwaWxsRm9yQ2FsbEltcGwoKQoreworICAgIFJlZ2lzdGVy
U2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICBhdXRvIGRvQ2xvYmJlciA9IFsmXSAoYXV0byBzZXQpIHsKKyAgICAgICAgZm9yIChhdXRvIHJl
ZyA6IHNldCkgeworICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQor
ICAgICAgICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgZG9DbG9iYmVyKGFsbG93ZWRHUFJzKCkpOworICAgIGRvQ2xvYmJlcihhbGxvd2VkRlBScygp
KTsKK30KKworU2F2ZVBsYW4gSklUOjpzbG93UGF0aFNhdmVQbGFuKCkKK3sKKyAgICAvLyBPT1BT
OiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNhdmVQbGFuIHJlc3VsdDsKKyAgICBh
dXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1Zh
bHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkICYmIHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJl
Z1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRG
UFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDog
YWxsb3dlZEdQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1NpbGVudFNwaWxsUmVjb3JkIEpJVDo6c2lsZW50U3BpbGxCZWZvcmVD
YWxsKEdQUlJlZyB0b0lnbm9yZSwgRlBSUmVnIHRvSWdub3JlRlBSKQoreworICAgIC8vIE9PUFM6
IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2lsZW50U3BpbGxSZWNvcmQgcmVzdWx0
OworICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcp
OworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGlmIChy
ZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc2F2ZVBs
YW4uYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9wZXJhbmQsIHByb3ZlblR5
cGUocmVnVmFsdWUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycy5hZGQocmVnKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAgIGlmIChyZWcuZnBy
KCkgIT0gdG9JZ25vcmVGUFIpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAg
IH0KKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKSB7CisgICAgICAgIGlmIChyZWcu
Z3ByKCkgIT0gdG9JZ25vcmUpCisgICAgICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAg
IH0KKworICAgIHJlc3VsdC5zdGFja1NpemVGb3JTcGlsbCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqdGhpcywgcmVzdWx0LnNwaWxs
ZWRSZWdpc3RlcnMsIDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzaWxl
bnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJiByZWNvcmQpCit7CisgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2Fs
bCgqdGhpcywgcmVjb3JkLnNwaWxsZWRSZWdpc3RlcnMsIHsgfSwgcmVjb3JkLnN0YWNrU2l6ZUZv
clNwaWxsLCAwKTsKKyAgICByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZygpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgcmVjb3JkLnNhdmVQbGFuKTsKK30KKworc3RhdGljIHZvaWQgYWRkTG9hZENvdW50KHVp
bnQ2NF90IGNvdW50KQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb3VudGVyOworICAgIGZvciAo
dWludDY0X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICsrY291bnRlcjsKKyAg
ICAgICAgaWYgKGNvdW50ZXIgJSAxMDAwMCA9PSAwKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
dW50aW1lIGxvYWQgY291bnQ6ICIsIGNvdW50ZXIpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJl
c3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYgc2F2ZVBsYW4pCit7CisgICAgdWludDY0X3QgbG9h
ZENvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogc2F2ZVBsYW4pIHsKKyAgICAgICAg
UmVnIHJlZyA9IHN0ZDo6Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBzdGQ6OmdldDwxPih0dXBsZSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByb3Zl
blR5cGUgPSBzdGQ6OmdldDwyPih0dXBsZSk7CisKKyAgICAgICAgaWYgKHJlZyA9PSByZWdUb0ln
bm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob3BlcmFuZCA9PSBvcGVy
YW5kVG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVnLmlz
R1BSKCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHJlZy5n
cHIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAg
ICAgICBBU1NFUlQoIWFsbG93ZWRHUFJzKCkuY29udGFpbnMoc2NyYXRjaCkpOworICAgICAgICAg
ICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaCgqdGhp
cyk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNjcmF0Y2gp
OworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUp
KQorICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIo
KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBi
cmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgc2NyYXRjaCB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsK
KworICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHNjcmF0Y2gsIHNjcmF0Y2gsIHJlZy5mcHIo
KSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAgICAg
ICAgaXNJbnQzMi5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKHNjcmF0Y2gsIHJlZy5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICArK2xvYWRDb3VudDsKKyAg
ICB9CisKKyAgICBpZiAoZmFsc2UgJiYgbG9hZENvdW50KSB7CisgICAgICAgIHByb2JlKFs9XSAo
UHJvYmU6OkNvbnRleHQmKSB7CisgICAgICAgICAgICBhZGRMb2FkQ291bnQobG9hZENvdW50KTsK
KyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKGNvbnN0IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICByZXN0b3JlRnJvbVNhdmVQ
bGFuKHNsb3dDYXNlLnJlc3VsdCwgc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5zYXZlUGxhbik7Cit9
CisKK3ZvaWQgSklUOjpzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdw
cikKK3sKKyAgICAvLyBPT1BTOiBBZGQgZGVidWcgYXNzZXJ0IHRvcCBiaXRzIGFyZSB6ZXJvZAor
CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgYm94
SW50MzIoZ3ByLCBKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBz
dG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQp
OworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
PSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c2V0RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBGUFJSZWcgZnByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGZw
cikuaXNBbGxvY2F0ZWQpOworICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgR1BSUmVn
IGdwciA9IHRlbXAuZ3ByKCk7CisKKyAgICBib3hEb3VibGUoZnByLCBKU1ZhbHVlUmVncyB7IGdw
ciB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVy
YW5kKSk7CisKKyAgICB3aWxsRGVmKG9wZXJhbmQpOyAvLyBPT1BTOiBWYWxpZGF0ZSB0aGF0IGZv
ciBieXRlY29kZXMgKC9jaGVja3BvaW50cz8pIHRoYXQgZGVmLCB3aWxsRGVmIHdhcyBjYWxsZWQu
CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGZwciwgb3BlcmFu
ZCk7CisKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0J5dGVjb2RlRG91YmxlOworfQor
Cit2b2lkIEpJVDo6c2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIGdw
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlzQWxsb2NhdGVkKTsKKyAg
ICBzdG9yZTY0KGdwciwgYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgd2lsbERlZihvcGVyYW5k
KTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmxvY2soUmVn
IHJlZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAg
UkVMRUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgICsrcmVnVmFsdWUubG9j
a0NvdW50OworfQorCit2b2lkIEpJVDo6dW5sb2NrKFJlZyByZWcpCit7CisgICAgYXV0byYgcmVn
VmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5sb2NrQ291bnQpOwor
ICAgIC0tcmVnVmFsdWUubG9ja0NvdW50OworICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50ICYm
ICFyZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgcmVnVmFsdWUgPSB7IH07Cit9
CisKK0pJVDo6R1BSVGVtcDo6R1BSVGVtcChKSVQmIGppdCwgR1BSUmVnIGhpbnQpCisgICAgOiBt
X2ppdChqaXQpCit7CisgICAgaWYgKGhpbnQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3By
KGhpbnQpOworfQorCitHUFJSZWcgSklUOjpHUFJUZW1wOjpncHIoR1BSUmVnIGhpbnQpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIG1fZ3ByID0gbV9qaXQuYWxsb2Nh
dGVHUFIoaGludCk7CisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICByZXR1cm4gbV9ncHI7
Cit9CisKK0pJVDo6R1BSVGVtcDo6fkdQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3ByICE9IEludmFsaWRHUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0pJ
VDo6RlBSVGVtcDo6RlBSVGVtcChKSVQmIGppdCkKKyAgICA6IG1faml0KGppdCkKK3sKK30KKwor
RlBSUmVnIEpJVDo6RlBSVGVtcDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2so
bV9mcHIpOworCisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6OkZQUlRlbXA6On5GUFJUZW1w
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBt
X2ppdC51bmxvY2sobV9mcHIpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6SW50MzJPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBncHIoKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6On5JbnQzMk9wZXJhbmQoKQoreworICAg
IG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyT3BlcmFuZDo6Z3By
KCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJlZyA9
IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dwciA9
IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9v
cGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICghaXNJ
bnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1f
aml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdEludDMyKG1fZ3ByKSk7CisK
KyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0ludDMyT25seSk7CisgICAgcmV0
dXJuIG1fZ3ByOworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjpDZWxsT3BlcmFuZChKSVQmIGppdCwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9
CisKK0pJVDo6Q2VsbE9wZXJhbmQ6On5DZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Q2VsbE9wZXJhbmQ6OmdwcigpCit7CisgICAgaWYg
KG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAgIG1f
aml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0
ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwg
bV9ncHIpOworICAgICAgICBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCkgPSBtX2dwcjsK
KyAgICAgICAgbV9qaXQucmVnVmFsdWUobV9ncHIpLm9wZXJhbmQgPSBtX29wZXJhbmQ7CisgICAg
fQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9u
KG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShC
YWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdENlbGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQ2VsbENoZWNrKTsKKyAgICBy
ZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6Ok5vdENlbGxPcGVyYW5kKEpJ
VCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVy
YW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBn
cHIoKTsKK30KKworSklUOjpOb3RDZWxsT3BlcmFuZDo6fk5vdENlbGxPcGVyYW5kKCkKK3sKKyAg
ICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpOb3RDZWxsT3BlcmFuZDo6
Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBtX2dw
ciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwg
bV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlmICht
X2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkgJiBTcGVjQ2VsbENoZWNrKQorICAgICAgICBtX2pp
dC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZDZWxsKG1fZ3ByLCBIYXZlVGFnUmVn
aXN0ZXJzKSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgflNwZWNDZWxsQ2hl
Y2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6OlZhbHVlT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjp+VmFsdWVPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpWYWx1ZU9wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5hc3NpZ25SZWco
bV9ncHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisgICAg
cmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQoSklU
JiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwg
bV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJh
bmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZw
cigpOworfQorCitKSVQ6OkRvdWJsZU9wZXJhbmQ6On5Eb3VibGVPcGVyYW5kKCkKK3sKKyAgICBt
X2ppdC51bmxvY2sobV9mcHIpOworfQorCitGUFJSZWcgSklUOjpEb3VibGVPcGVyYW5kOjpmcHIo
KQoreworICAgIGlmIChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9m
cHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQ
UlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChy
ZWcgIT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAg
ICAgICBtX2ppdC5sb2NrKG1fZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9v
cGVyYW5kIH07CisgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICBHUFJSZWcgZ3ByID0g
dmFsdWVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKwor
ICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsK
KworICAgIGlmICghaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUo
bV9vcGVyYW5kKSkpIHsKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJy
YW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAg
ICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93
bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAg
ICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
fQorCisgICAgbV9qaXQudW5ib3hEb3VibGUoZ3ByLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgbV9q
aXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJhbmQpOworCisgICAgcmV0dXJuIG1fZnByOworfQor
CitKSVQ6Ok51bWJlck9wZXJhbmQ6Ok51bWJlck9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
Cit7CisgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAg
ICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIGZwcigpOworfQorCitKSVQ6Ok51
bWJlck9wZXJhbmQ6On5OdW1iZXJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51bmxvY2sobV9mcHIp
OworfQorCitGUFJSZWcgSklUOjpOdW1iZXJPcGVyYW5kOjpmcHIoKQoreworICAgIGlmIChtX2Zw
ciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBtX2ppdC5h
c3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICB7CisgICAgICAgIEZQUlJlZyByZWcgPSBtX2ppdC5m
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJl
ZykgeworICAgICAgICAgICAgbV9mcHIgPSByZWc7CisgICAgICAgICAgICBtX2ppdC5sb2NrKG1f
ZnByKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5h
bGxvY2F0ZUZQUigpOworICAgIG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworICAgIGVsc2UgaWYgKGlzQnl0
ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKSB7Cisg
ICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQ
UiwgbV9mcHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07
CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byBpc0lu
dDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworCisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC51bmJv
eERvdWJsZSh2YWx1ZUdQUiwgdGVtcEdQUiwgbV9mcHIpOworICAgICAgICBhdXRvIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1f
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7CisKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgfQorCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQs
IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgbV9qaXQuYXNzaWduUmVnKG1fZnByLCBtX29wZXJh
bmQpOworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5k
OjpJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpJbnQzMkNvbnZlcnRp
bmdPcGVyYW5kOjp+SW50MzJDb252ZXJ0aW5nT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2Nr
KG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6Z3ByKCkK
K3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3By
OworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgaWYgKG1faml0LnNob3Vs
ZFNwZWN1bGF0ZUludDMyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIG9wIHsg
bV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBtX2dwciA9IG9wLmdwcigpOworICAgICAgICBt
X2ppdC5sb2NrKG1fZ3ByKTsKKyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU51
bWJlcihtX29wZXJhbmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBt
X2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFu
ZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0IH07
CisgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIGF1dG8gaXNJ
bnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZl
VGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24o
bV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgICAgIG1faml0LnNwZWN1bGF0
ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJl
Z3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICAgICAgbV9qaXQudW5i
b3hEb3VibGUodmFsdWVHUFIsIG1fZ3ByLCBmcHIpOworICAgICAgICBKdW1wTGlzdCBkb25lOwor
I2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1cHBvcnRz
RG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkgeworICAg
ICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRTZW1hbnRp
Y3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwor
ICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJhbmNoSWZU
cnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQgPSBtX2pp
dC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5j
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2libGVEb3Vi
bGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlvblRvSW50
MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVyQ2FsbChz
cGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaXNJbnQzMi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1v
dmUodmFsdWVHUFIsIG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAg
ICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4obV9vcGVyYW5kKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9Owor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgICAgICBtX2ppdC5zcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCwgdmFsdWVHUFIpOwor
CisgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsK
KyAgICB9IGVsc2UgaWYgKG1faml0LnNob3VsZFNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCkpIHsK
KyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsK
KyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAg
IG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7
CisKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlT3RoZXIobV9vcGVyYW5kLCB2YWx1ZUdQUik7CisK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIG1fZ3ByKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9
OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisKKyAgICAg
ICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5sb2NrKG1fZ3By
KTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAgICBGUFJSZWcg
ZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBKdW1wTGlzdCBkb25lOworCisgICAgICAg
IGF1dG8gaXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQ
UiB9LCBIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBub3REb3VibGUgPSBtX2ppdC5i
cmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBI
YXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwg
bV9ncHIsIGZwcik7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJB
Uk02NDo6c3VwcG9ydHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlwdFNlbWFu
dGljcygpKSB7CisgICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVzaW5nSmF2
YVNjcmlwdFNlbWFudGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIG1f
Z3ByLCBCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0byBzcGls
bFJlY29yZCA9IG1faml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsKKyAgICAg
ICAgICAgIG1faml0LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayho
YXNTZW5zaWJsZURvdWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVTbG93IDog
b3BlcmF0aW9uVG9JbnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5zaWxlbnRG
aWxsQWZ0ZXJDYWxsKHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBub3REb3VibGUubGluaygmbV9qaXQpOwor
ICAgICAgICBhdXRvIG5vdE90aGVyID0gbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIG1fZ3ByKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAg
ICBub3RPdGhlci5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBl
LCBtX2ppdC5icmFuY2hJZk5vdEJvb2xlYW4oSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dw
cikpOworICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dw
cik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNJbnQz
Mi5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvV29yZCh2YWx1ZUdQ
UiwgbV9ncHIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0
LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3RoZXIgfCBT
cGVjQm9vbGVhbik7CisgICAgfQorCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitSZWdpc3RlclNl
dCBKSVQ6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpCit7CisgICAgUmVnaXN0ZXJTZXQg
cmVzdWx0ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAg
YXV0byBhZGRJZk5lZWRlZWQgPSBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0
ZWQpCisgICAgICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgfTsKKworICAgIGZvciAoUmVn
IHJlZyA6IGFsbG93ZWRGUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOworICAgIGZv
ciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFkZElmTmVlZGVlZChyZWcpOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN0cmluZyhWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNT
dHJpbmdTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90U3RyaW5nKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlw
ZShvcGVyYW5kKSAmPSBTcGVjU3RyaW5nOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlU3ltYm9s
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpCit7CisgICAgaWYg
KCFpc1N5bWJvbFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVBc0NlbGwpKTsKKyAgICBwcm92
ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTeW1ib2w7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVC
b29sZWFuKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYg
KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEJvb2xl
YW4odmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAm
PSBTcGVjQm9vbGVhbjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc090aGVyU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPdGhlcihKU1ZhbHVlUmVncyB7IHZhbHVl
IH0sIHNjcmF0Y2hHUFIpKTsKKyAgICB9CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVj
T3RoZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24ocHJv
dmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5v
dE9iamVjdCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY09iamVjdDsK
K30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQ
UlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCksIFNwZWNDZWxsQ2hlY2spKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJh
bmNoSWZOb3RDZWxsKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQ2Vs
bENoZWNrOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3BlcmFuZCksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgYnJhbmNoSWZOb3RJbnQzMih2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU51bWJlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCeXRlY29kZU51
bWJlclNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwgYnJhbmNoSWZOb3ROdW1iZXIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNCeXRlY29kZU51bWJlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUFueUJp
Z0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmIChp
c0JpZ0ludFNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICByZXR1cm47
CisKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSB0
cnVlOworI2Vsc2UKKyAgICBjb25zdGV4cHIgYm9vbCB1c2VCaWdJbnQzMiA9IGZhbHNlOworI2Vu
ZGlmCisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChvcGVyYW5kKSB8fCAhdXNlQmlnSW50
MzIpIHsKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIGlm
ICghaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0hlYXBCaWdJ
bnQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJpZ0lu
dCh2YWx1ZSkpOworICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNIZWFwQmlnSW50
OworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGlmICgh
ZG9uZSkgeworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVCaWdJbnQzMihvcGVyYW5kKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90QmlnSW50MzIodmFsdWUsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDMyOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBpc0JpZ0ludDMyID0gYnJhbmNoSWZCaWdJbnQzMih2YWx1
ZSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENl
bGwodmFsdWUpKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90SGVhcEJp
Z0ludCh2YWx1ZSkpOworICAgICAgICBpc0JpZ0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHBy
b3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0JpZ0ludDsKKyAgICB9CisjZWxzZQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnJlc2V0Q3Vy
cmVudEJsb2NrU3RhdGUoKQoreworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5
cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgU3BlY0J5
dGVjb2RlVG9wKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50U3RhdGUu
cHJvdmVuVHlwZXMubnVtYmVyT2ZDb25zdGFudHMoKTsgKytpKQorICAgICAgICBtX2N1cnJlbnRT
dGF0ZS5wcm92ZW5UeXBlcy5jb25zdGFudChpKSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFudChpKSkpOworICAg
IG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNhbGxlZSgpID0gU3BlY0Z1bmN0aW9uOworICAg
IG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZyA9IE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+
KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgQWxsb2NlZFJlZygpKTsK
KyAgICBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnMgPSB7IH07Cit9CisKK3ZvaWQgSklUOjpSZWdW
YWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIs
IG9wZXJhbmQsICIsICIsIGxvY2tDb3VudCwgIikiKTsKK30KKwordm9pZCBKSVQ6OmR1bXBSZWdh
bGxvY1N0YXRlKCkKK3sKKyAgICBkYXRhTG9nTG4oIlJlZyBhbGxvYyBzdGF0ZSA9IFsiKTsKKyAg
ICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnVmFsdWUo
cmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBmb3IgKGF1dG8gcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVn
VmFsdWUocmVnKS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgZGF0YUxvZygiXHQiKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbihyZWcsICIgPSAiLCByZWdWYWx1ZShyZWcpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBkYXRhTG9nTG4oIl0iKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE3
IEBACiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50
ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJS
ZWdpc3Rlck1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
U2VnbWVudGVkVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgZW51bSBPcGNvZGVJ
RCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICBj
bGFzcyBCeXRlY29kZUJhc2ljQmxvY2s7CisgICAgY2xhc3MgQnl0ZWNvZGVHcmFwaDsKICAgICBj
bGFzcyBDYWxsTGlua0luZm87CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0
aW9uRXhlY3V0YWJsZTsKQEAgLTEwNiwxNSArMTEwLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKLSAgICAg
ICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNv
ZGVJbmRleCB0KQotICAgICAgICAgICAgOiBmcm9tKGYpCi0gICAgICAgICAgICAsIHRvKHQpCisg
ICAgdXNpbmcgU2F2ZVBsYW4gPSBWZWN0b3I8c3RkOjp0dXBsZTxSZWcsIFZpcnR1YWxSZWdpc3Rl
ciwgU3BlY3VsYXRlZFR5cGU+PjsKKworICAgIHN0cnVjdCBTaWxlbnRTcGlsbFJlY29yZCB7Cisg
ICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOworICAgICAgICBSZWdpc3RlclNldCBzcGlsbGVkUmVn
aXN0ZXJzOworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JTcGlsbDsKKyAgICB9OworCisg
ICAgc3RydWN0IFNsb3dDYXNlIHsKKyAgICAgICAgU2xvd0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgIHsKICAgICAgICAgfQorCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCwgMT4ganVtcHM7IC8v
IFVzdWFsbHkganVzdCBvbmUgZW50cnkuIEJ1dCBmb3IgdGhpbmdzIHdpdGggY2hlY2twb2ludHMs
IHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIEp1bXBMaXN0cworICAgICAgICBTYXZl
UGxhbiBzYXZlUGxhbjsgLy8gT09QUzogTWF5YmUgaGF2ZSBhIGRlbHRhIGJhc2VkIHN5c3RlbSBm
b3IgdGhpcyBiZXR3ZWVuIHNsb3cgcGF0aHMuCisgICAgICAgIFJlZyByZXN1bHQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3Q7CisgICAgICAgIFZlY3RvcjxSZWc+IGFyZ3VtZW50czsgLy8g
U29tZSBvcHMgc2F2ZSByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGhlcmUgZm9yIGNvbnZlbmll
bmNlCiAgICAgfTsKIAogICAgIHN0cnVjdCBTd2l0Y2hSZWNvcmQgewpAQCAtMTk2LDcgKzIxMSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxs
ZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZh
dGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDog
cHVibGljIEpTSW50ZXJmYWNlSklUIHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNl
SklUOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKIApAQCAtMjA0LDE0ICsyMjEsMTMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKICAgICAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsOwogCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludHB0cl90IHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUgPSB1bnVzZWRQb2ludGVyOwot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0ID0g
MDsKLSAgICAgICAgLy8gTWFnaWMgbnVtYmVyIC0gaW5pdGlhbCBvZmZzZXQgY2Fubm90IGJlIHJl
cHJlc2VudGFibGUgYXMgYSBzaWduZWQgOGJpdCB2YWx1ZSwgb3IgdGhlIFg4NkFzc2VtYmxlcgot
ICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90
IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7Ci0KICAgICBwdWJsaWM6Ci0g
ICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgICAgIGVudW0g
Y2xhc3MgQ29tcGlsZVR5cGUgeworICAgICAgICAgICAgQmFzZWxpbmUsCisgICAgICAgICAgICBM
T0wKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayosIENv
bXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0
ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKIAogICAgICAgICBWTSYgdm0oKSB7IHJl
dHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KQEAgLTIyMCwyMiArMjM2LDIyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAg
dm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKLSAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCisKKyAgICAgICAgc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGls
ZVR5cGUgY29tcGlsZVR5cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVD
b21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGNv
bXBpbGVUeXBlLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxl
VHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5
VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1v
ZGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGly
ZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBj
b2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRl
Y29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI0MywyMSArMjU5LDIx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7
CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8
T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhD
YWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2Vs
aW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdp
dGhDYWNoZWRJZChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBq
aXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAg
ICAgaml0LnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQpAQCAtMjg2LDYgKzMwMiwyMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxl
bmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCisgICAgICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzcGlsbEZvckNhbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91
c2VMT0wpCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsSW1wbCgpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgc3BpbGxGb3JDYWxsSW1wbCgpOworCisgICAgICAgIHZvaWQgY2xvYmJlcihS
ZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAg
ICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNsb2JiZXJJ
bXBsKFJlZyk7CisKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0
aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zMjMs
OSArMzUzLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KEp1bXApOwogCi0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7Ci0gICAgICAgIHZvaWQg
YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZSgp
OworICAgICAgICB2b2lkIGFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgICAgICB2b2lkIGFkZFNs
b3dDYXNlKEp1bXAsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsg
fSk7CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmLCBSZWcgcmVzdWx0
ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAgICAgICBTbG93Q2FzZSYg
ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCk7CiAgICAgICAg
IHZvaWQgYWRkSnVtcChKdW1wLCBpbnQpOwogICAgICAgICB2b2lkIGFkZEp1bXAoY29uc3QgSnVt
cExpc3QmLCBpbnQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7
CkBAIC0zMzMsNyArMzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAg
ICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTM1MCw3ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwotICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIApA
QCAtMzYwLDcgKzM5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBp
bGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBq
dW1wVGFyZ2V0KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFNsb3dDYXNlJiwg
Q29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdldCk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5k
Q29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGVudW0g
V3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRl
ckJhc2UsIFNob3VsZEZpbHRlclZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfTsKQEAg
LTUwOCw4ICs1NDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
LSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBSZWxhdGlvbmFsQ29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0
aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENv
bmRpdGlvbik7CkBAIC01MTcsMTIgKzU0OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxh
dGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0
aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAg
ICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91
YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVD
b25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9u
LCBib29sIGludmVydCwgU2xvd0Nhc2UmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0
U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgor
ICAgICAgICB2b2lkIGVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9u
Kik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVxTnVs
bEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKGNvbnN0IEluc3RydWN0aW9u
Kik7CkBAIC01NDYsOSArNTg3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02MTAsNyArNjUxLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2Jl
Z2luKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9zdXBlcl9zYW1w
bGVyX2VuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbHNoaWZ0
KGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgdm9pZCBlbWl0
X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiopOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKik7CkBAIC02NzgsNzggKzcyMSwxMDAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9u
Kik7CiAKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxs
ZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3Jl
YXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVnYXRlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19l
bnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
KyAgICAgICAgdm9pZCBlbWl0SXNDYWxsYWJsZUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwor
ICAgICAgICB2b2lkIGVtaXRfb3BfaXNfY2FsbGFibGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZl9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZl9pc19mdW5jdGlvbihjb25zdCBJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlwZW9mKGNvbnN0IEluc3RydWN0aW9uKik7CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVtaXRDb21wYXJl
T3BJbXBsKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2xlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBlbWl0X29wX2xlc3NlcShjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAg
ICB2b2lkIGVtaXRfb3BfZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBl
bWl0X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAg
ICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudChjb25zdCBJbnN0cnVj
dGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Nh
bGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKICAgICAg
ICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiop
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAotICAg
ICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dQYXRoRnVuY3Rpb24pOwog
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAg
ICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWdu
ZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsK
KyAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBWaXJ0dWFsUmVnaXN0ZXIoKSwgR1BSUmVnIHJlc3Vs
dEdQUiA9IEludmFsaWRHUFJSZWcpOworI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisjZW5kaWYKICAgICAgICAg
dm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7
Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKKyAgICAgICAgdm9pZCBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90LCBHUFJSZWcgc2Nv
cGVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2
b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwogICAg
ICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5k
LCBHUFJSZWcpOwpAQCAtNzY0LDggKzgyOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZv
aWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKLSAgICAgICAg
dm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7Ci0KICAgICAgICAgdm9pZCBl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cik7CkBAIC03NzgsMzggKzg0MSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0
aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBS
ZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVt
aXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rp
b24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1
bmN0aW9uLCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1
Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uLCBTbG93Q2FzZSYpOwogCi0gICAgICAg
IEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKLSAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+ZnJvbS5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGl0ZXItPmZyb20ubGluayh0aGlzKTsKLSAgICAgICAgICAgICsraXRl
cjsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtEdW1teVNsb3dDYXNlKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghaXRlci0+ZnJvbS5pc1NldCgpKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQot
ICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93
Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAot
ICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9i
eXRlY29kZUluZGV4KTsKLSAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+CisgICAgICAgIHZvaWQgZW1pdFNsb3dPcChGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCwgU3Bl
Y3VsYXRlZFR5cGUgZHN0VHlwZSk7CiAKLSAgICAgICAgYm9vbCBoYXNBbnlTbG93Q2FzZXMoVmVj
dG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgYm9vbCBoYXNB
bnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICAg
ICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFNsb3dDYXNlJiBpdGVyKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gaGFzQW55U2xvd0Nhc2VzKG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVj
b2RlSW5kZXgpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgICAgICAgICAg
Ly8gT09QUworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQor
ICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAvL2xpbmtBbGxTbG93Q2FzZXNG
b3JCeXRlY29kZUluZGV4KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwogICAg
ICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKQEAgLTg5MSw2
ICs5MzcsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hl
Y2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3MuLi4gYXJncykK
KyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJn
cy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAgICAgICAgIGF1
dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAgICAgICAgfQor
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxP
cGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgp
OworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBj
YWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1l
bnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwpAQCAtOTAyLDYgKzk2OCw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgTm9Qcm9maWxpbmcKICAgICAgICAgfTsKIAorICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgYm9vbCB0cnlFbWl0TE9MQml0RmFzdFBhdGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CiAgICAgICAgIHZvaWQg
ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUHJvZmlsaW5nUG9saWN5IHNob3VsZEVtaXRQcm9maWxpbmcgPSBQcm9maWxpbmdQb2xp
Y3k6Ok5vUHJvZmlsaW5nKTsKIApAQCAtOTYxLDYgKzEwMzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNl
bmRpZgogCisgICAgICAgIHZvaWQgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisgICAgICAg
IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAg
IHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBj
b21wdXRlQ29tcGlsZVRpbWVzKCk7CiAgICAgICAgIApAQCAtOTcxLDYgKzEwNDMsMjkyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKKyAg
ICAgICAgY2xhc3MgR1BSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdQUlRl
bXAoSklUJiwgR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIH5HUFJU
ZW1wKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEZQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBGUFJUZW1wKEpJ
VCYpOworICAgICAgICAgICAgfkZQUlRlbXAoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgIH07CisKKyAgICAgICAgY2xh
c3MgSW50MzJPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJPcGVy
YW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMk9w
ZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsgLy8gT25seSBsb3dlciAzMiBiaXRz
IGFyZSB0aGUgaW50MzIuIFVwcGVyIGJpdHMgY2FuIGJlIGFueXRoaW5nLiBNaWdodCBiZSB0YWdn
ZWQsIG1pZ2h0IG5vdCBiZS4KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9q
aXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNs
YXNzIENlbGxPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgQ2VsbE9wZXJh
bmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkNlbGxPcGVy
YW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBjbGFzcyBOb3RDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIE5vdENlbGxPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsK
KyAgICAgICAgICAgIH5Ob3RDZWxsT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigp
OworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAg
IEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgVmFsdWVPcGVyYW5k
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kKEpJVCYsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5WYWx1ZU9wZXJhbmQoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYg
bV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIERvdWJsZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEb3Vi
bGVPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5E
b3VibGVPcGVyYW5kKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsg
SW52YWxpZEZQUlJlZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBOdW1iZXJPcGVyYW5kIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgTnVtYmVyT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCk7CisgICAgICAgICAgICB+TnVtYmVyT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVn
IGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU3BlY3VsYXRl
IG51bWJlcitib29sZWFuK290aGVyLCBhbmQgY29udmVydCB0byBpMzIuIFVzZWZ1bCBmb3IgYml0
b3BzLgorICAgICAgICBjbGFzcyBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIHsgCisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQoSklUJiwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfkludDMyQ29udmVydGluZ09wZXJhbmQoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlJiBwcm92ZW5UeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucHJvdmVuVHlw
ZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmlsdGVyVHlw
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQorICAgICAg
ICB7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IGZpbHRlcjsKKyAgICAgICAg
fQorCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb25Gb3IoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQ
cmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVn
JiBncHJGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFu
ZCkuZ3ByOworICAgICAgICB9CisKKyAgICAgICAgRlBSUmVnJiBmcHJGb3JPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCkuZnByOworICAgICAgICB9CisK
KyAgICAgICAgc3RydWN0IEFsbG9jZWRSZWc7CisgICAgICAgIEFsbG9jZWRSZWcmIGFsbG9jZWRS
ZWdGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWU7CisgICAgICAgIFJlZ1ZhbHVl
JiByZWdWYWx1ZShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICBSZWdWYWx1ZSYg
cmVnVmFsdWUoR1BSUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUm
IHJlZ1ZhbHVlKEZQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgd2ls
bERlZihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcmIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgICAgICAgICAgaWYgKGdwciAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAg
ICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUFJSZWcmIGZwciA9IGZw
ckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBJbnZhbGlk
RlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IFZp
cnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVn
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYXNzaWduUmVnKEdQUlJlZyBncHIsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnVmFsdWUoZ3ByKS5vcGVyYW5k
LmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGdwckZvck9wZXJhbmQob3BlcmFuZCkgPSBncHI7
CisgICAgICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9w
ZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXNzaWduUmVnKEZQUlJlZyBmcHIsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghcmVnVmFsdWUoZnByKS5vcGVyYW5kLmlzVmFsaWQoKSk7CisKKyAgICAgICAgICAgIGZw
ckZvck9wZXJhbmQob3BlcmFuZCkgPSBmcHI7CisgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9w
ZXJhbmQgPSBvcGVyYW5kOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAgICBpZiAoIW1f
Y3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihv
cGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZU51
bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjT3Ro
ZXIgfCBTcGVjQm9vbGVhbik7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZU5vdENlbGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc05vdENlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEocHJlZGljdGlv
bkZvcihvcGVyYW5kKSAmIH5TcGVjQ2VsbENoZWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3lt
Ym9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNTeW1ib2xTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNPYmplY3RTcGVjdWxhdGlv
bihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPdGhlcihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlz
T3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnRTcGVjdWxhdGlvbihw
cmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCaWdJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBi
b29sIHVzZUxPTCgpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVj
dWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCk7
CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRl
T3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZv
aWQgc3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUp
OworICAgICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
R1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVBbnlCaWdJbnQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGUo
RXhpdEtpbmQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wKTsgLy8gT09QUzogV2UgcHJvYmFibHkgd2Fu
dCBtb3JlIGluZm8gaGVyZSBmb3IgdXBkYXRpbmcgcHJvZmlsZXMuCisgICAgICAgIEdQUlJlZyBh
bGxvY2F0ZUdQUihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAgICAgICBGUFJSZWcg
YWxsb2NhdGVGUFIoKTsKKyAgICAgICAgdm9pZCBzZXRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyk7CisgICAgICAgIHZvaWQgc2V0RG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSUmVnKTsK
KyAgICAgICAgdm9pZCBzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsgLy8gT09Q
UzogTWFrZSB0aGlzIHRha2UgdGhlIHJlc3VsdCBwcm92ZW4gdHlwZSBzbyB3ZSBkb24ndCBmb3Jn
ZXQgdG8gc2V0IGl0LgorICAgICAgICB2b2lkIGxvY2soUmVnKTsKKyAgICAgICAgdm9pZCB1bmxv
Y2soUmVnKTsKKyAgICAgICAgU2F2ZVBsYW4gc2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBT
aWxlbnRTcGlsbFJlY29yZCBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlID0g
SW52YWxpZEdQUlJlZywgRlBSUmVnIHRvSWdub3JlRlBSID0gSW52YWxpZEZQUlJlZyk7CisgICAg
ICAgIHZvaWQgc2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYpOwor
ICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIHJlc3RvcmVGcm9tU2F2ZVBsYW4oUmVnIHJlZ1RvSWdub3JlLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZFRvSWdub3JlLCBjb25zdCBTYXZlUGxhbiYpOworICAgICAgICBS
ZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKTsKKwogICAgICAgICBJbnRl
cnByZXRlciogbV9pbnRlcnByZXRlcjsKIAogICAgICAgICBWZWN0b3I8RmFyQ2FsbFJlY29yZD4g
bV9mYXJDYWxsczsKQEAgLTk5MCw3ICsxMzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBt
X2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNl
czsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPFNsb3dDYXNlPiBtX3Nsb3dDYXNlczsKICAgICAg
ICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVu
c2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKQEAgLTEwMjcsNiArMTM4NSw4
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CisKKyAgICAgICAgc3RydWN0IEFs
bG9jZWRSZWcgeworICAgICAgICAgICAgLy8gRm9yIGRvdWJsZXMsIHdlIG1heSBoYXZlIGJveGVk
IGFuIHVuYm94ZWQgdmFyaWFudHMKKyAgICAgICAgICAgIC8vIGFsbG9jYXRlZCBhdCB0aGUgc2Ft
ZSB0aW1lLgorICAgICAgICAgICAgR1BSUmVnIGdwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBmcHIgeyBJbnZhbGlkRlBSUmVnIH07CisKKyAgICAgICAgICAgIHZvaWQg
bWVyZ2UoY29uc3QgQWxsb2NlZFJlZyYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGdwciAhPSBvdGhlci5ncHIpCisgICAgICAgICAgICAgICAgICAgIGdwciA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgICAgICAgICAgaWYgKGZwciAhPSBvdGhlci5mcHIpCisgICAg
ICAgICAgICAgICAgICAgIGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlIHsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kIHsgfTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbG9ja0NvdW50IHsgMCB9
OworICAgICAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCB7IGZhbHNlIH07CisKKyAgICAgICAgICAg
IHZvaWQgbWVyZ2UoY29uc3QgUmVnVmFsdWUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kICE9IG90aGVyLm9wZXJhbmQKKyAgICAgICAgICAgICAgICAg
ICAgfHwgbG9ja0NvdW50ICE9IG90aGVyLmxvY2tDb3VudAorICAgICAgICAgICAgICAgICAgICB8
fCBpc0FsbG9jYXRlZCAhPSBvdGhlci5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAg
KnRoaXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBMb2dFbnRyeSB7
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKKyAgICAgICAgICAgIERhdGFG
b3JtYXQgZm9ybWF0OworICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBCbG9ja1N0YXRlIHsK
KyAgICAgICAgICAgIE9wZXJhbmRzPEFsbG9jZWRSZWcsIHRydWU+IG9wZXJhbmRUb1JlZzsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyTWFwPFJlZ1ZhbHVlPiByZWdpc3RlcnM7CisgICAgICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4gcHJvdmVuVHlwZXM7CisKKyAgICAgICAgICAg
IHZvaWQgbWVyZ2UoY29uc3QgQmxvY2tTdGF0ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRUb1JlZy5zaXplKCkgPT0gb3RoZXIub3BlcmFuZFRv
UmVnLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVy
YW5kVG9SZWcuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1JlZ1tp
XS5tZXJnZShvdGhlci5vcGVyYW5kVG9SZWdbaV0pOworCisgICAgICAgICAgICAgICAgQVNTRVJU
KHByb3ZlblR5cGVzLnNpemUoKSA9PSBvdGhlci5wcm92ZW5UeXBlcy5zaXplKCkpOworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdmVuVHlwZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHByb3ZlblR5cGVzW2ldID0gbWVyZ2VTcGVjdWxhdGlvbnMo
cHJvdmVuVHlwZXNbaV0sIG90aGVyLnByb3ZlblR5cGVzW2ldKTsKKworICAgICAgICAgICAgICAg
IEFTU0VSVChyZWdpc3RlcnMuc2l6ZSgpID09IG90aGVyLnJlZ2lzdGVycy5zaXplKCkpOworICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnNbaV0ubWVyZ2Uob3RoZXIucmVnaXN0ZXJz
W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBCbG9ja1N0YXRlIG1f
Y3VycmVudFN0YXRlOworCisgICAgICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOwor
CisgICAgICAgIHZvaWQgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVHcmFwaD4gbV9ncmFwaDsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVmVjdG9yPE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlLCB0cnVlPj4gbV9wcmVkaWN0aW9uc0F0SGVhZDsKKyAgICAgICAgT3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IG1fY3VycmVudFByZWRpY3Rpb25zOworICAgICAgICBW
ZWN0b3I8T3BlcmFuZHM8dW5zaWduZWQsIHRydWU+PiBtX3VzZUNvdW50czsKKyAgICAgICAgT3Bl
cmFuZHM8dW5zaWduZWQsIHRydWU+IG1fY3VycmVudFVzZUNvdW50czsKKyAgICAgICAgVmVjdG9y
PFZpcnR1YWxSZWdpc3RlciwgMTY+IG1fc3BpbGxDYW5kaWRhdGVzOworCisgICAgICAgIFZlY3Rv
cjxMb2dFbnRyeT4gbV9leGl0TG9nOworCisKKyAgICAgICAgVmVjdG9yPE9wdGlvbmFsPEJsb2Nr
U3RhdGU+PiBtX3N0YXRlQXRFbmQ7CisgICAgICAgIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiBt
X3ByZWRlY2Vzc29yczsKKworICAgICAgICBib29sIG1fdXNlTE9MIHsgZmFsc2UgfTsKKyAgICAg
ICAgYm9vbCBtX2NoZWNrZWRVc2VMT0wgeyBmYWxzZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpw
YWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDg2ICs0Miw4OCBAQAog
I2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAorI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9y
RXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4pOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpncmVhdGVy
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
R3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERvdWJsZUdyZWF0
ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7
CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyZXE+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgIERvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVM
ZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgc2xv
d0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNz
VGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBmYWxzZSwgaXRl
cik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdy
ZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVh
dGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
Z3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFu
ZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0
ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVz
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzcz4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwg
b3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNz
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3Bl
cmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1ZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRl
cmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTQ2LDM3ICsxNDgsMTYxIEBAIHZvaWQgSklUOjplbWl0X29wX2piZWxvd2VxKGNvbnN0
IEluc3RydWMKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
K3ZvaWQgSklUOjplbWl0Q29tcGFyZU9wSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGdwQ29tcGFyZSwgRG91YmxlQ29uZGl0aW9u
IGRvdWJsZUNvbXBhcmUpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxS
ZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5k
IGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVt
cCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc1Rl
bXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFyZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5m
cHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHx8ICFwcmVkaWN0aW9uRm9y
KGxocykgfHwgIXByZWRpY3Rpb25Gb3IocmhzKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgY29tcGFyZURvdWJsZShkb3VibGVDb21w
YXJlLCBsaHNUZW1wLmZwcigpLCByaHNUZW1wLmZwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJl
c3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxo
c0dQUik7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsKKyAg
ICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICB9CisKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwg
RG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbGVzc2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBh
cmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0
Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dyZWF0
ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRD
b21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbk9yRXF1
YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1
c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIHJlc3VsdCk7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpCisgICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAg
ICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdU
MCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBE
b3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwgb3AyLCB0YXJnZXQs
IGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0ZSBp
bmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgogICAg
IC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBj
b25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAvLyAtIGludCBpbW1l
ZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikp
IHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxh
dGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgfHwgIXByZWRpY3Rp
b25Gb3Iob3AxKSB8fCAhcHJlZGljdGlvbkZvcihvcDIpKSB7CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhz
IHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZG91Ymxl
Q29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdw
cigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmhzR1BSKTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlzYWxsb3dBbGxvY2F0
aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yMjksMTcgKzM1NSw0MyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvCiAKIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1Rl
bXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQ
UiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJ
bnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAg
ICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAg
ICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikg
Jj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9
IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7
CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAg
Z2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIo
b3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBs
aHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRl
KGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSks
IHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
b3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0
aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgICAgICBnZXRMSFMoKTsKKyAgICAgICAg
Z2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBAIC0yNTUsNDMgKzQwNyw4OSBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7Cisg
ICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7Cisg
ICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxoc0dQUiA9IGxo
c1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9IFNwZWNJbnQzMk9u
bHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmhz
R1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9wMikgJj0gU3Bl
Y0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJlZ1Qx
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJoc0dQUik7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwor
ICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMy
KG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJ
bW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDAp
OworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwg
cmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVn
VDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAgICBjb21wYXJlMzIo
Y29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKICAgICB9Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0
aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+
c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2FzZSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNv
bmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJo
c0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0MzIoaW52ZXJ0ID8g
Tm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93
UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOworICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xs
b3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51
bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxvYXRpbmctcG9pbnQg
bnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFy
Z3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxKTsKQEAgLTMwMCw4ICs0OTgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDAp
OwpAQCAtMzI2LDggKzUyMiw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CkBA
IC0zNTEsMTIgKzU0NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAg
ICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgIEp1
bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAgIEp1bXAgZmFpbDMg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50
MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAg
ICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAgICAgIGFkZDY0KG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBm
cFJlZ1QwKTsKQEAgLTM2OSw5ICs1NjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwyLmxp
bmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWw0Lmxpbmso
dGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IElu
dC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQpAQCAtMzgxLDExICs1NzQsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNv
bnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3Ny
Y0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3Zl
cmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1cmUgZm9yIGFsbCBvcGNvZGVzIHByb3ZlblR5cGUgYWdy
ZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uLgorICAgICAgICAgICAgICAgIEZQUlRl
bXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXAuZnBy
KCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIGZwcik7
CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAg
ICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAgICAgICAg
ICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIo
T3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBz
ZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4w
OworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnByKTsKKyAg
ICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQu
ZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAg
ICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAg
ICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQUiwgc3JjRHN0KTsK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBp
bnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsg
aW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwgaW5wdXRHUFIpOwor
ICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8IFNwZWNCeXRlY29k
ZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNjI4LDYyIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
Yyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQz
MihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAg
ICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcg
dGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRy
KCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUocmVzdWx0RlBSLCB0
ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0FueUlu
dEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNyY0RzdCwgaW5wdXRH
UFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHRl
bXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUg
PSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBG
UFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7
CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJUZW1wIHRl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0RlBSID0gaW5wdXQuZnByKCk7
CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1
c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICBzdWJEb3VibGUoaW5wdXRG
UFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGlu
cHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvIHNvbWUg
QmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAg
ICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0pOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwg
cmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0KIAogLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzY5MywxMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBs
aHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUu
bV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKChzaG91bGRTcGVjdWxh
dGVEb3VibGUobGhzKSB8fCBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgJiYgc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAg
IE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJo
c1RlbXAuZnByKCk7CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgICAg
ICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3Vs
dEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhNYXRoOjpmbW9kRG91YmxlLCByZXN1bHRGUFIsIGxo
c0ZQUiwgcmhzRlBSKTsKKworICAgICAgICAgICAgc2V0RG91YmxlKGRzdCwgcmVzdWx0RlBSKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIE1ha2Ugc3Vy
ZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KLSAgICBB
U1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWF4ID0gWDg2UmVn
aXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKICAgICBhdXRv
IGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9PSBlYXgpOwogICAg
IEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmhz
VGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAgICBjbG9iYmVyKGVj
eCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAgICAgICAgZWR4VGVt
cC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxhY2UoKnRoaXMsIGVj
eCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRlbXAtPmdwcigpOwor
ICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChlYXhUZW1w
LT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhUZW1wLT5ncHIoKSA9
PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIoKSA9PSBlY3gpOwor
CisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAgICAgcmhzVGVtcC5l
bXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFtZSwgbGlrZSBzcGlsbEV4cGVjdGluZ1Nsb3dQYXRoCisK
KyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIobGhzLCBsaHNH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
bGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAgICAgICAgbW92ZShs
aHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhs
aHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
bGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CisgICAgICAg
IG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQsIHJlZ1QwKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAgSnVtcCBkZW5vbWlu
YXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0
NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBlYXgsIFRydXN0
ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5rKHRo
aXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4NkRpdjMyKGVjeCk7
Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVh
bCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQ
b3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19CisgICAgYm94SW50
MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vsc2Ug
Ly8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0KIAogI2VuZGlmIC8v
IENQVShYODZfNjQpCkBAIC00NjQsNyArODA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRp
b24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExpc3Qgbm90SW50MzJP
cDI7CkBAIC00NzQsNiArODE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsK
QEAgLTU2MiwxNSArOTA1LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25z
dCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9u
Pgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICpp
bnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9v
bCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9u
LCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwg
U2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICsxMDY1LDY2IEBAIHZv
aWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBlbWl0TWF0aElDRmFz
dDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTmVn
SUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElD
LmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0
dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5k
IGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUp
OworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUsIHNsb3dDYXNlKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgT3A+Citib29sIEpJVDo6dHJ5RW1pdExPTEJpdEZhc3RQYXRo
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKKworICAgIGF1dG8gYml0T3AgPSBbJl0gKEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNH
UFIpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8T3AsIE9wQml0YW5kPikKKyAgICAgICAgICAgIGFuZDMyKGxoc0dQUiwg
cmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8T3AsIE9wQml0b3I+KQorICAgICAgICAgICAgb3IzMihsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBP
cEJpdHhvcj4pCisgICAgICAgICAgICB4b3IzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcExzaGlmdD4p
CisgICAgICAgICAgICBsc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFVyc2hpZnQ+KQorICAg
ICAgICAgICAgdXJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wUnNoaWZ0PikKKyAgICAgICAg
ICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHNldElu
dDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICB9OworCisgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICBJbnQz
Mk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsg
KnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQ
Uik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMkNvbnZlcnRpbmcob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmco
b3AyKSkgeworICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNzQxLDE3ICsx
MTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5z
dHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3Bl
cmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBAIC03NjAsMzMgKzExNDUs
MTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICAgICAg
bGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CiAg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwotCiAgICAgUkVM
RUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsZWZ0
VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1w
OworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4gaGVyZS4KKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDEpOwor
ICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAg
ICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7
CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRp
ZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwg
cmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAKKyAgICBTbmlw
cGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4u
ZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAgIGlmIChwcm9maWxp
bmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmlsaW5nKQotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwgcmVzdWx0UmVncy5n
cHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3By
KCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Ay
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVz
dWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90Pigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYm9vbCByZXN1
bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEp
KSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICB9
CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbm90MzIocmVz
dWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIGlm
IChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ludDMy
T25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJ
bnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CiAjZWxzZQpAQCAtODAzLDcgKzEyNjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRub3Qo
Y29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9w
Y29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVm
dFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0UmVncyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtODQ5LDE5ICsxMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFz
dFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgorICAgIGlm
ICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlvbikpCisgICAgICAg
IHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRP
cGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTg3MywyMSArMTMyMCw3NyBAQCB2b2lkIEpJVDo6ZW1p
dFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9w
ZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIyID0gSW52
YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRp
b25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkz
MiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQUi5lbXBsYWNl
KCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdw
cigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5ncHIo
KSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIo
KSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBz
Y3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMDsKKworICAg
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisKICAgICBpZiAoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCiAKICAgICBKSVRS
aWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRjaEZQUiwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAg
ICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkw
MiwxOCArMTQwNSw2NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAg
RlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzRlBS
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNGUFIu
ZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIoKSwg
cmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLmZwcigpLCBy
aHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91Ymxl
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHByb3Zl
blR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIoT3ZlcmZsb3csIHJo
cy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAg
ICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHJlc3Vs
dEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHNGUFIsIHJoc0ZQ
UiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVz
dWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJ
VEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRB
ZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRo
SUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihh
ZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1p
emUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUp
OworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmls
ZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUgKzE0NzUsMzUgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVy
IGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5n
IHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0g
ICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAgICAgcmVzdWx0VGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFz
IHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2lu
ZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgor
ICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CisgICAgfQogI2Vs
c2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQpAQCAtOTQxLDE5ICsxNTEyLDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFy
eU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVn
cywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1
ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxp
bmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxp
bmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9m
aWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2Ugewor
ICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCks
IHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoc3JjUmVncy5ncHIo
KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGlu
ZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTUzNywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAo
aXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVt
YmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlw
ZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3NCwzOSArMTU1NSw4MiBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkK
KyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAh
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0g
ICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQ
UlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAg
IE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmln
aHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdU
MDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJlZyBzY3JhdGNoRlBS
ID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRP
cGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ax
KTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkg
fTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxp
ZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdo
dFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25z
dGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQot
ICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0
Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRl
bXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAt
PmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAg
ICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdo
dFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgc2NyYXRjaEdQ
UiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQ
UiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAotICAgIFJFTEVBU0Vf
QVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
OworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVm
dE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRv
cihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICBtYXRo
SUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9w
ZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAgaWYgKCFHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIUdlbmVyYXRvcjo6
aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKQEAgLTEwMTUs
MTcgKzE2MzksMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwog
CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgq
dGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNv
ZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgIGVsc2UgaWYgKHJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgbGVmdFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
IHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywg
b3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICB9
CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3MuZ3ByKCkpOworICAg
ICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIoKSk7CiAgICAgICAg
IGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVs
KCk7CkBAIC0xMDM1LDExICsxNjc2LDIwIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRC
aW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAg
ICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAg
ICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAgICAgICAgcHJvdmVu
VHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNIZWFwQmlnSW50Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9u
IHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUm
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCArMTY5OCw4IEBAIHZv
aWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpT
VmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdz
ID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkg
fTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7CkBAIC0xMDg1LDcgKzE3MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hG
dW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmlu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJl
cGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2Vu
ZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CiAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAtMTA5NSwxNiArMTc0
NSw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTExNSwxNSArMTc1
NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBB
U1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQp
KSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7
Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmln
aHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAoR2VuZXJhdG9yOjpp
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICAg
ICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9PSByZWdUMiA/IHJl
Z1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRW
YWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVnVDEgOiByZWdUMCB9
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2Fz
ZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mg
eyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAor
ICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBl
bHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJh
bmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKwog
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2Zp
bGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkK
QEAgLTExNTYsMjMgKzE4MTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwot
I2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdU
MjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKLSAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYyICsxODMyLDIzOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNlbmRpZgotCiAgICAg
UkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
OworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQ
UlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQOworICAg
IE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gcmln
aHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7Cisg
ICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdodFRlbXBGUC5lbXBs
YWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAt
PmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5n
cHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5n
cHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigpOworICAgICAg
ICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBs
ZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgICAgIHNjcmF0
Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsKKyAgICAgICAgcmln
aHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxlZnRGUFIgPSBmcFJl
Z1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAgCisgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAg
IEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVmdEZQUiwgcmlnaHRG
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7
CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKIAotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICAgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1w
TGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5l
bXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZGl2KTsK
ICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICAgICAgd2lsbERlZihyZXN1bHQpOwor
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3Vs
YXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwg
U3BlY0JpZ0ludDsKICAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYg
YXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRo
aXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwgYXJpdGhQcm9maWxlLmRpZE9ic2VydmVOZWdaZXJv
RG91YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0
VGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHNHUFIs
IGxoc0ZQUik7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmhzR1BSLCBy
aHNGUFIpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0
RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5j
aE11bDMyKE92ZXJmbG93LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKSk7CisgICAgICAgICAg
ICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8sIGJyYW5jaDMyKExl
c3NUaGFuLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihMZXNzVGhhbiwgcmhzR1BSLCBU
cnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHMuZnBy
KCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIG11bERvdWJsZShs
aHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVO
dW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNG
UFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAg
IG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVs
SUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAg
IGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRp
b25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUs
IG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUsIHNs
b3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBhcml0aFByb2Zp
bGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUlu
dDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworCisgICAgICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAg
ICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
VGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0RlBS
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShsaHMuZ3By
KCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
cmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1YkRvdWJsZShsaHNG
UFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFu
Y2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwor
ICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAg
ICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShsaHMu
ZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShi
eXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1
YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0
aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2Rl
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDAp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgd2lsbERl
Zihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJvb2wgSklUOjpjb21w
aWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CkBA
IC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAg
ICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAg
ICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQogICAgICAgICBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
K3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3LDQ0IEBAIHZvaWQg
SklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21waWxlT3BDYWxsPE9w
Q29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
Q2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2Um
IHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Us
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxs
X2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwg
aXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2Nh
bGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJh
cmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3Ry
dWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4OSwxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAgIH0KICAgICB9KSgp
OwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZl
IG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9p
bnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2Ug
PSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCisgICAgLy8gT09Q
UzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJlPworCisgICAgc3Bp
bGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGlu
c3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAg
ICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6
R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0b3IpIGlzIGluIHJl
Z1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMt
Pm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKwor
ICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hlY2twb2ludFNsb3cu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbmV4dENo
ZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4dENoZWNrcG9pbnRT
bG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAg
eyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVnVDAgPSByZXN1bHRU
ZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJlZ1QwID09IHJlZ1Qw
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKKyAgICAgICAg
cHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CiAK
ICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQUlJlZyBpdGVyYXRv
ckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1Niw2ICs0NzQsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICB9CiAg
ICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09QUzogTG9naWNhbGx5
LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5
dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3Vs
dCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNoSWZOb3RFbXB0eShy
ZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKIAogICAg
IHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOwor
ICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAgICAgICBkb25lQ2hl
Y2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwog
Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BS
KTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1ZUdQUik7CiAgICAg
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVnaXN0ZXJzLAogICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3Vs
dEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9u
ZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVDaGVja3BvaW50U2xv
d1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgICAg
ICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwog
ICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNsb3dQYXRoOworCiAg
ICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3Bl
cnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hlY2twb2ludFNsb3dQ
YXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAg
ICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUu
bGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRv
ck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBAIC01MjYsNyArNTU1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAgICAgICAgIEdQUlJl
ZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAgICAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChp
dGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0gICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJdLmxpbmsodGhpcyk7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01NjEsNyArNTkwLDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogCiAgICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQotCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGNvbnN0IGNoYXIqIEpJVENv
ZGU6OnR5cGVOYW1lKEpJVFR5cGUgamkKICAgICAgICAgcmV0dXJuICJMTEludCI7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgcmV0dXJuICJCYXNlbGluZSI7CisgICAg
Y2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAiTE9MIjsKICAgICBjYXNlIEpJ
VFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuICJERkciOwogICAgIGNhc2UgSklUVHlwZTo6
RlRMSklUOgpAQCAtMTA4LDcgKzExMCw3IEBAIEpJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdp
dGhDb2RlUmVmKEMKIAogSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKCkK
IHsKLSAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChpc09wdGltaXppbmdK
SVQoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCisgICAgaWYg
KChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNERkdPckZUTChqaXRUeXBlKCkpICYm
IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKSkKICAgICAgICAgJiYgbV9yZWYuZXhlY3V0
YWJsZU1lbW9yeSgpKQogICAgICAgICBkYXRhTG9nKCJEZXN0cm95aW5nIEpJVCBjb2RlIGF0ICIs
IHBvaW50ZXJEdW1wKG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSksICJcbiIpOwogfQpAQCAtMjM3
LDYgKzIzOSwxMSBAQCBOYXRpdmVET01KSVRDb2RlOjpOYXRpdmVET01KSVRDb2RlKENvZGVSCiAj
aWYgRU5BQkxFKEpJVCkKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNl
cnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgp
CiB7CisgICAgLy8gRm9yIEJhc2VsaW5lIEpJVCwgdGhpcyBpcyB0cml2aWFsbHkgdHJ1ZS4KKyAg
ICAvLyBGb3IgTE9MIEpJVCwgZXZlcnl0aGluZyBpcyBhbHJlYWR5IHNwaWxsZWQgdG8gdGhlIHN0
YWNrIGF0IGVhY2ggb3Bjb2RlLCBzbyB3aGVuIHdlCisgICAgLy8gZ28gdG8gdGhlIG9wX2NhdGNo
LCB0aGUgbGl2ZSBzdGF0ZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRo
ZSBzdGFjay4KKyAgICAvLyBBbHNvLCBvcF9jYXRjaCBoYXMgbm8gaW5jb21pbmcgcmVnaXN0ZXIv
dHlwZSBwcm9vZiBzdGF0ZSwgc28gaXQncyB0cml2aWFsIHRvIGNhdGNoCisgICAgLy8gYW4gZXhj
ZXB0aW9uIGluIExPTCBqdXN0IGJ5IGp1bXBpbmcgdG8gb3BfY2F0Y2guCiAgICAgcmV0dXJuIHsg
fTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Qg
ewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVuaywKICAgICBCYXNlbGlu
ZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJVAogfTsKQEAgLTY3LDM2
ICs2OCwyMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogdHlwZU5hbWUoSklU
VHlwZSk7CiAKLSAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKSVRUeXBlOjpCYXNlbGluZUpJVDsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGlj
IEpJVFR5cGUgdG9wVGllckpJVCgpCiAgICAgewogICAgICAgICByZXR1cm4gSklUVHlwZTo6RlRM
SklUOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJVChKSVRUeXBl
IGppdFR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpERkdK
SVQ7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICAgICAgcmV0dXJuIEpJ
VFR5cGU6OkZUTEpJVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6Tm9uZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKICAgICBzdGF0aWMgYm9vbCBpc0V4ZWN1dGFibGVTY3JpcHQo
SklUVHlwZSBqaXRUeXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRo
dW5rOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0OgorCisgICAg
ICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBl
OjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA3LDcgKzk1LDExIEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgogICAgICAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoK
KyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRM
SklUOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE2
LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewog
ICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIGNhc2UgSklU
VHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjQsNiArMTE3LDI0
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGNhbGxTaXRl
Qml0c0FyZUJ5dGNvZGVJbmRleChKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGppdFR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgor
ICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEpJVFR5cGU6
OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgorICAgICAgICBjYXNlIEpJ
VFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHN0YXRp
YyBib29sIGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklUVHlwZSBleHBlY3Rl
ZEhpZ2hlcikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhlY3V0YWJsZVNjcmlw
dChleHBlY3RlZExvd2VyKSk7CkBAIC0xNDUsOSArMTU2LDE5IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBpc0xvd2VyT3JTYW1lVGllcihleHBlY3RlZExvd2VyLCBleHBlY3RlZEhp
Z2hlcik7CiAgICAgfQorCisgICAgc3RhdGljIGJvb2wgdXNlc1JlcGxhY2VtZW50Q29kZUJsb2Nr
KEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5
cGU6OkxPTEpJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJ
VFR5cGU6OkZUTEpJVDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaXNPcHRpbWl6aW5n
SklUKEpJVFR5cGUgaml0VHlwZSkKICAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJ
VFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCB8fCBqaXRUeXBlID09
IEpJVFR5cGU6OkxPTEpJVDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RGR09yRlRMKEpJ
VFR5cGUgaml0VHlwZSkKKyAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBlID09IEpJVFR5cGU6
OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYQogICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGlu
IHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKICAgICAgICAgLy8gYW5k
IGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxl
ci0+dGFyZ2V0CiAgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0gICAgICAgIGlmICgh
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUo
KSkpCisgICAgICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+dGFyZ2V0KS5w
dHIoKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5u
YXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMTQ1LDYgKzE0Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwg
dGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3LDYgKzE1OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtl
IGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxs
IHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY3LDI1ICsxNzAsNiBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50
byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9IHNsb3dDYXNlcy5l
bmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAi
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpAQCAtMjA3LDI3ICsx
OTEsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZQogICAgIGp1
bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93Q2FzZSYgSklUOjpl
bnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNlcy5zaXplKCkgfHwg
bV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29kZUluZGV4KSB7Cisg
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAo
bV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2ZVBsYW4gPSBzbG93
UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0LmlzVmFsaWQoKSA9
PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1bHQgPSByZXN1bHQ7
CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAgICAgIG1fc2xvd0Nh
c2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9CisgICAgcmV0dXJu
IG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQog
ewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExp
c3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVt
cCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpLmp1
bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xv
d0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdh
eSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29uc3QgSnVtcCYganVt
cCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmFwcGVuZChq
dW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGlu
dCByZWxhdGl2ZU9mZnNldCkKQEAgLTQwNiwxMSArMzk5LDYgQEAgQUxXQVlTX0lOTElORSBkb3Vi
bGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRl
ZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBS
ZWdpc3RlcklEIHZhbHVlKQpAQCAtNzE3LDYgKzcwNSwxOCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFN
b2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0K
IAordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFNsb3dPcChGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCwgU3BlY3VsYXRlZFR5cGUgZHN0VHlwZSkK
K3sKKyAgICBzcGlsbEZvckNhbGwoKTsKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZnVuY3Rpb24pOworICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CisgICAgaWYgKG1fdXNlTE9MICYmIGRzdC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gZHN0VHlwZTsKKyAgICAgICAgd2lsbERlZihkc3QpOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEs
NyArMTQxLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIH07CiAKLSAgICAgICAgYm9vbCBz
aG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSk7CisgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2Rl
Ojppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKIAogICAgICAgICBpZiAobV9nZW5l
cmF0ZUZhc3RQYXRoT25SZXBhdGNoKSB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIK
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTIwMCw4ICsxOTYs
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4ICs3NTgsNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9p
bmRleGVkCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51
bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2Nh
dGlvbi5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRGlzYWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FzdC5oIgpAQCAtNDEsNiArNDIs
OCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFj
ZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzU0LDI4IEBAIHZvaWQgSklU
OjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
c3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IElmIHdlIGNoYW5n
ZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJzIHBlciBsb2NhbCwg
d2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28gcmVncy4KKyAgICAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMpID09IEludmFsaWRH
UFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE1LDUzIEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
Q29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHRSZWc7CisgICAg
R1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGFsbG9jYXRvclRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGFsbG9jYXRv
clRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgICAgICBhbGxv
Y2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRSZWcgPSByZWdU
MDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBy
ZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRSZWcpOwogICAgIGVs
c2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5
ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJl
ZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNvZGUubV9kc3QpOwog
ICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9
IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUp
OwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3MSw1MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOworICAgIEdQUlJlZyBp
bnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIC8vIE9P
UFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+IGNv
bnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhhc0luc3RhbmNlVGVt
cDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3RvclRlbXAuZW1wbGFj
ZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRlbXAuZW1wbGFjZSgq
dGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRlbXAtPmdwcigpOwor
ICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7CisgICAgICAgIHJl
c3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1QxOworICAgICAgICBp
bnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdU
MCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1
Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5v
dCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MoY29u
c3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxLDQwICsyMjQs
OTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5k
cyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJz
LgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUg
d2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90
byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkg
dGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDMsIHJlZ1Q0
KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8Q2VsbE9wZXJhbmQ+
IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBwcm90b1RlbXBD
ZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVtcDsKKyAgICAgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAgR1BSVGVtcCByZXN1
bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9
OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BS
UmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAgICAgICAgcmVzdWx0
VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBzY3JhdGNo
MlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2YWx1ZVRlbXBDZWxs
LmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVtcENlbGwuZW1wbGFj
ZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcENlbGwt
PmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxsLT5ncHIoKTsKKwor
ICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwgZHN0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm90b0dQUiA9
IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRl
bXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAg
IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgcmVzdWx0VGVtcC5n
cHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJvdG9HUFIsCisgICAg
ICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBl
bmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVtcC5ncHIoKSk7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3Bl
Y3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJl
Z1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBi
YXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQg
Zm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAg
ICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAg
ICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOworICAg
ICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5z
dGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1YkluZm8oKS0+cmVncy5w
cm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI1LDI5IEBAIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNFbXB0eSkpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjRW1wdHkp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1NSw3MiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAg
IGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUodmFsdWUp
ICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBHUFJU
ZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOwor
CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBkb25l
ID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRvIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQUik7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHRlbXBH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7
CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAg
ICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOSwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjU1LDEyICs0NjMs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworI2lmIENQVShBUk02
NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
aW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVzdDY0KFplcm8sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHRl
c3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSks
IHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OSwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIo
Y29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB0ZXN0NjQoTm9u
WmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRhZ1JlZ2lzdGVyLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
ICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lmIFVTRShCSUdJTlQz
MikKQEAgLTI4MiwyMSArNTI5LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNo
SWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmlnSW50KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJ
ZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KGlucHV0R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRH
UFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVh
cEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcp
LCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc0NlbGwubGluayh0
aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9fUkVUVVJOIHZvaWQg
SklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMzEzLDE4ICs1
OTUsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29ucwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9
IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGNv
bXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAg
ICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDQsNjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkg
JiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPYmplY3QpKQorICAg
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVj
T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7IC8vIHNwZWN1bGF0
ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWws
IEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVt
cCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0zNTUsNyArNzA5LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywg
Ynl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1
cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI4LDQxIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0
ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0
KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJbW0ubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
T2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKKyAgICAgICAgaWYg
KGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcxLDIyMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1wIGRvbmUgPSBicmFu
Y2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUo
c3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMsIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7
ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5n
KHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3ltYm9sKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlz
KTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZnVuY3Rpb24g
eyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgbmFt
ZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BS
ID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0gbmFtZS5ncHIoKTsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIsIHZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJs
ZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWVUZW1wLmZwcigpOworICAgICAgICAgICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZwcigpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhdXRv
IG5vblplcm8gPSBicmFuY2hEb3VibGVOb25aZXJvKHZhbHVlRlBSLCBzY3JhdGNoRlBSKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBub25aZXJvLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFu
ZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcEZQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZVRlbXAuZnBy
KCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHRlbXBGUFIuZnByKCk7CisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGF1dG8gbm9uWmVybyA9IGJyYW5jaERvdWJsZU5vblplcm8odmFsdWVG
UFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5vblplcm8ubGluayh0aGlzKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaEdQUiB7ICp0aGlzIH07
CisgICAgICAgICAgICBGUFJUZW1wIHZhbHVlRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgdGVtcEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgICAgICAgICAgY29uc3Rl
eHByIGJvb2wgaW52ZXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jv
b2xlYW4oKm1fdm0sIEpTVmFsdWVSZWdzIHsgdmFsdWVUZW1wLmdwcigpIH0sIHJlc3VsdEdQUiwg
c2NyYXRjaEdQUi5ncHIoKSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBp
bnZlcnQpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVl
KGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBi
aXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3
aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAg
ICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRo
ZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVn
VDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKworICAgICAgICAvLyBJ
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMg
YSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8gY2xlYXIgb3RoZXIg
dGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUg
aW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNW
YWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUg
bG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVn
VDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHhv
cjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIFZhbHVl
T3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihjb25k
aXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHZh
bHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxp
bmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEg
eyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKwor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gx
RlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9
IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBz
Y3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihO
b3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNlcyBpbmxpbmUKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2NyYXRjaDEgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMgfTsKKworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2gxRlBSID0g
ZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMkZQUiA9IGZwU2Ny
YXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNo
MUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTk0LDEyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBz
cmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1
dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1
dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAg
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
KyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIEp1
bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
LmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2Fz
ZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgot
ICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0
aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKworICAgICAg
ICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQp
OworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgYXV0
byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKKworICAgICAgICAg
ICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAor
ICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBGaXJzdCwgaGFuZGxl
IEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0
aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAg
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSks
IHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAg
Ly8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEyNSwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
dW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgh
KHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGlu
ZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNP
dGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNTAwLDEwICsxMTUzLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29y
X251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY090aGVyKSkgewor
ICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVn
VDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTE1LDY1ICsx
MTg0LDQ0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiAgICAg
QVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAg
ICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwg
Jm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAg
ICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShw
cm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFsUG9pbnRlcikpKSB7
CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAg
ICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8g
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQ
b2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCitz
dGF0aWMgdm9pZCBjb21wYXJlU3RyaW5ncyhKSVQmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBub3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgR1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQUiwg
R1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyByaHNUZW1wR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwg
R1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzR1BSLCBKU1N0cmluZzo6
b2Zmc2V0T2ZWYWx1ZSgpKSwgbGhzVGVtcEdQUik7CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmhzR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmhzVGVt
cEdQUik7CisKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwo
bGhzVGVtcEdQUikpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZSb3BlU3RyaW5n
SW1wbChyaHNUZW1wR1BSKSk7CisKKyAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgCisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2gzMigKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksCisgICAgICAg
IHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOworICAgIAorICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6Zmxh
Z3NPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5n
SW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVz
dDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgp
KSkpOworICAgIAorICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc1Rl
bXBHUFIsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIGxoc1RlbXBHUFIpOworICAgIGppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmRh
dGFPZmZzZXQoKSksIHJoc1RlbXBHUFIpOworICAgIAorICAgIGF1dG8gbG9vcCA9IGppdC5sYWJl
bCgpOworICAgIAorICAgIGppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBzY3JhdGNoR1BSKTsKKworICAgIHsKKyAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgobGhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
T25lKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBhdXRvIG1hY3JvU2NyYXRjaCA9IGppdC5zY3Jh
dGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChyaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNP
bmUpLCBtYWNyb1NjcmF0Y2gpOworICAgICAgICBub3RFcXVhbC5hcHBlbmQoaml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaDJHUFIsIG1hY3JvU2NyYXRjaCkpOwor
ICAgIH0KKyAgICAKKyAgICBqaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAgZXF1YWwuYXBwZW5kKGppdC5q
dW1wKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3N0YXRpYyB2b2lkIGNvbXBhcmVTdHJpY3RFcUNlbGxzKEpJVCYg
aml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QmIG5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoLCBHUFJS
ZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSLCBHUFJSZWcgbGhzVGVtcEdQUiwgR1BSUmVnIHJoc1Rl
bXBHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBHUFJSZWcgc2NyYXRjaDJHUFIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2Fs
bEhlbHBlcnM6OkVxdWFsLCBsaHNHUFIsIHJoc0dQUikpOworCisgICAgc2xvd1BhdGguYXBwZW5k
KGppdC5icmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisKKyAgICBhdXRvIGxoc0lzU3RyaW5nID0g
aml0LmJyYW5jaElmU3RyaW5nKGxoc0dQUik7CisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5qdW1w
KCkpOworCisgICAgbGhzSXNTdHJpbmcubGluaygmaml0KTsKKyAgICBub3RFcXVhbC5hcHBlbmQo
aml0LmJyYW5jaElmTm90U3RyaW5nKHJoc0dQUikpOworCisgICAgY29tcGFyZVN0cmluZ3Moaml0
LCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcEdQUiwg
cmhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnRydWU+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2Rl
Lm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBj
b25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6dmFsdWU7CisgICAg
YXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICBhdXRvIGZwQ29t
cGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92
ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywg
bGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BS
ID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxo
cykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCBy
aHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9s
KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVj
dWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhz
LCByaHNHUFIpOworCisgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaFRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAg
ICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisKKyAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWws
IHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwg
c2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1
ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBk
b25lID0ganVtcCgpOworCisgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKGxoc0dQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3Ry
aW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJl
LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihy
aHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BSUmVn
IGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShm
cENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIocmhzKSkg
eworICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxo
c0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZw
cigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3Jl
IHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJo
cyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BS
KTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCwgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhz
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhz
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1f
cmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wSmVxPjo6
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/
IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1
YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgIGlmICghdmFs
dWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkgeworICAg
ICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVD
ZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3QobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJp
bmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJo
cywgcmhzR1BSKTsKKworICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1w
IHsgKnRoaXMgfTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICBK
dW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAg
ICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwg
bGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1w
LmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGgpOworCisgICAgICAgICAgICBpZiAoaXNFcSkgeworICAgICAgICAgICAgICAgIGFkZEp1
bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwg
dGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVT
bG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmlu
ZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmU3RyaW5nKHJoc0dQ
UikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJS
ZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1Rl
bXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigp
OworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNl
cyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgR1BS
UmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNU
ZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
bGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisg
ICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90
SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcEVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQogCi0gICAgR1BSUmVn
IHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVn
IHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BSUmVnIGxoc0dQUiA9
IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBy
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJbXBsPE9wTmVxPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAg
R1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCBy
aHNHUFIpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CisgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BK
ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJo
c0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3Vt
ZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6IFdlIGNhbiBt
YWtlIHRoaXMgYSBzaW5nbGUgYnJhbmNoIGlmIHRoZSByZXN0b3JlIGRvZXNuJ3QgY2xvYmJlciBy
ZXR1cm5WYWx1ZUdQUi4KKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dD
YXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJl
Z1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5n
cHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTYzNSwyNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29k
ZS5tX3JoczsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIGF1dG8gZ3BDb21w
YXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21wYXJlID0g
aXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7
CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFs
KHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAg
ICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5n
KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRl
bXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVt
cCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAg
ICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVhbCwgbm90
RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5n
cHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIG5v
dEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworCisg
ICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qg
bm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRl
bXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoVGVt
cCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhp
cyB9OworCisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFs
LCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1wLmdwcigpLCByaHNU
ZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIG5v
dEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTMy
KGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91
YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91Ymxl
KGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBs
aHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBjb21wYXJlRG91Ymxl
KGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNh
c2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
VGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0
aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgbGhzU2NyYXRjaEdQUiA9IGxoc1NjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmhzU2NyYXRjaEdQUiA9IHJoc1NjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCBy
ZWdUMCwgc3JjMiwgcmVnVDEpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBk
byAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBpcyBEb3Vi
bGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIHJlc3Vs
dCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBnb3RvIGRvbmU7
Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgICBnb3RvIHNs
b3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAqLwotCi0gICAgLy8g
VGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3Vi
bGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUg
bmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIK
LSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4g
YWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGln
aCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8
PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRv
dWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAg
IG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dl
c3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRk
NjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsK
LSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVP
ckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJl
Z1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1Q1
KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNsb3cgaWYgYXQgbGVh
c3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCi0gICAgYW5k
NjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29tZXRoaW5nIG1v
cmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkgbmVlZCB0byBk
byB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoZmFsc2UpOworI2Vs
c2UKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdU
NSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdUNSB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICAgICAgSnVtcExpc3Qg
ZXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGF1dG8gbGhzSXNDZWxsID0gYnJhbmNoSWZDZWxsKGxoc0dQUik7Cisg
ICAgICAgICAgICAgICAgYXV0byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5vdENlbGwocmhzR1BS
KTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAg
ICAgICAgIGxoc0lzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmFw
cGVuZChicmFuY2hJZk5vdENlbGwocmhzR1BSKSk7CisKKyAgICAgICAgICAgICAgICBKdW1wTGlz
dCBzbG93UGF0aDsKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywg
ZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1NjcmF0Y2hHUFIs
IHJoc1NjcmF0Y2hHUFIsIHRlbXBHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgYm90aE5vdENlbGxzLmxpbmso
dGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRo
ZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBm
aW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAg
ICAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRP
Sy5saW5rKHRoaXMpOworICAgICAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihy
aHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7
CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChpc0Vx
KQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGFyZTY0KE5vdEVx
dWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXBM
aXN0IGRvbmU7CisgICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgICAg
ICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/
IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgbm90RXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1
ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGxo
cywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBB
dCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Cisg
ICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAg
ICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSByaWdodCk7CisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChsZWZ0
IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8gc2xvd1BhdGg7Cisg
ICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICovCisKKyAgICAg
ICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291
bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZO
dW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIElu
dDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZp
bmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBh
dCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAg
ICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwor
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChy
ZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIHJlZ1Qx
LCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdU
NSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cg
aWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cyku
CisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwg
d2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0
cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCByZWdUNSk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lO
VDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5n
cykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVn
VDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0
aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMg
ZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAg
ICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAg
ICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlz
KTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0g
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgZWxzZQot
ICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGlmICh0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgICAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAj
ZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE4ODYsMjAzIEBAIHZvaWQg
SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKIAor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBlID09IENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAg
ICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAgICAgICAgYXV0
byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1
YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlmICghaXNFcSkKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENv
bXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykp
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNH
UFIpOworCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBW
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAg
ICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRo
OworCisgICAgICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxz
KCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVt
cC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5n
cHIoKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAg
ICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkSnVtcChlcXVhbCwg
dGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhZGRKdW1wKG5vdEVxdWFs
LCB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBs
aHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURv
dWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBE
b3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIs
IHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIg
PSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnBy
KCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwg
cmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzU2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHJoc1NjcmF0Y2ggeyAqdGhpcyB9Owor
ICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
dGVtcDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIGxoc1NjcmF0Y2hHUFIgPSBsaHNTY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJoc1NjcmF0Y2hHUFIgPSByaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXAyR1BS
ID0gdGVtcDIuZ3ByKCk7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGlnaCBsZXZl
bCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAobGVmdCBp
cyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAg
aWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBpZiAobGVmdCBpcyBD
ZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsKLSAgICBnb3RvIG5v
dFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3Rl
YWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJh
bmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEg
SlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0
IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8vIElmIGl0IGlzIG5v
dCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBz
ZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KLSAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdUNSk7Ci0gICAgYWRk
NjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwotICAgIGxzaGlmdDY0
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJlZ1QzKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOwotCi0gICAg
SnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOwotICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAo
YXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVt
cCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJp
Z0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxk
IGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3
ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGZhbHNlKTsKKyNlbHNlCisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAg
ICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0
byBsZWZ0SXNDZWxsID0gYnJhbmNoSWZDZWxsKGxoc0dQUik7CisgICAgICAgICAgICAgICAgYXV0
byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5vdENlbGwocmhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgICAgIGxlZnRJc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKHJoc0dQUikpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwg
c2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNTY3JhdGNoR1BSLCByaHNTY3JhdGNoR1BSLCB0
ZW1wR1BSLCB0ZW1wMkdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgp
OworCisgICAgICAgICAgICAgICAgYm90aE5vdENlbGxzLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZp
cnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0
CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICAgICAgYXV0byBsZWZ0
T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAg
ICAgICAgICAgYXV0byByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdo
dE9LLmxpbmsodGhpcyk7CisgICAgICAgICAgICBpZiAoaXNFcSkgeworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIG5vdEVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeyAKKyAgICAgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBl
cXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1QwLCByaHMs
IHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmlj
dEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgICAgICBhcmVFcXVh
bC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIC8qIEF0IGEg
aGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKKyAgICAg
ICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAgICAgICAgICAgZ290
byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgIGdvdG8g
dGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAg
ICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsKKyAgICAgICAgKi8K
KworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQgaXMgRG91YmxlIHx8
IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3RlYWQgb2YgdGhlIDQg
dGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9i
cmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEg
bnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAor
ICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVhbCAxPDw1MC4KKyAg
ICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCBy
ZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOworICAgICAg
ICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3Zl
T3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5j
aDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChhcmVFcXVhbCwgdGFy
Z2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIC8vIEp1bXAgc2xv
dyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRz
KS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGNv
dWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMy
LCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7CisgICAgICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFsLmxpbmsodGhpcyk7
CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAgLy8gSnVtcCBzbG93
IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4g
Rmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRl
c3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJ
bnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAg
ICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJl
Z1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0
T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0
cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0
YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNl
bGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
ICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2Vs
bChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUu
IEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0
ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1bXAgbGVmdE9LID0g
YnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIHJpZ2h0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwg
dGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDgsODkgKzIwOTUs
MjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKICAgICBjb21w
aWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxo
c0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byBkb25lID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21T
bG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwor
ICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sw
XS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOwor
ICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxh
bihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAg
aWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQg
eyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorCisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVy
aWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkp
OwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotICAgIGlzQmln
SW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBp
bnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAgYXV0byBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBh
dXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRjaEdQUiksIHJlc3Vs
dEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7CisjZWxzZQorICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpLCByZXN1bHRH
UFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNw
ZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJ
bnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsKKworICAgICAgICBp
c05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChy
ZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmplY3Qoc3Jj
KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUiksIHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworCisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFsIHdpdGggdGhpcy4K
KyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBl
bnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAogICAgIHJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZy
YW1lKTsKQEAgLTg4OCw5ICsyMzc0LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRf
c2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUg
PSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNj
b3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdU
MCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkgJj0gU3BlY0NlbGw7
IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJhbmQgc2NvcGUgeyAq
dGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdw
cigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2Jq
ZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsyNDA1LDE3IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElU
YWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVy
blZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
OTIyLDkgKzI0MzAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5z
dAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNv
ZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBq
dW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hh
cldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsKKyAg
ICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFi
bGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjQ1NCwxNDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0cmluZ0p1bXBUYWJs
ZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVl
T3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRl
eCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8g
T09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2Vy
UmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9
IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7
CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgY29uc3RleHBy
IGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1ZTsKKyAgICBhdXRv
IGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENl
bGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3Jj
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBj
b21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1
bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3JhdGNoR1BSLCByZXN1
bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAg
ICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRy
KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworICAgICAg
ICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAo
KTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJlT3AsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKwor
ICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICAgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAg
ICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlcU51bGxJbXBsPE9w
RXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMp
OwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiop
CiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIgc3RhdGUgaGVyZSBz
aW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAgICAvLyBFdmVuIHRo
b3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAg
ICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2Fy
aWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0Mg
cHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKLSAg
ICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUgPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9CiAKICAgICBlbWl0
V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSwyMyArMjYwNSw5MyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBl
bHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgc2NvcGUpOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBzY29wZSk7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKICAgICBTdHJ1Y3R1cmVJRCogY2Fj
aGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgYXV0byBp
c1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmNEc3QpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwgcmVz
dWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNy
Y0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0aGlzIHJpZ2h0Pwor
ICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3Jj
RHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRv
IHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBl
bHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNPYmplY3RPdGhl
cikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
aWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAgYXV0
byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSwg
cmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBh
biBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAgICAgICAgICBpZiAo
aXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSks
IHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkK
KyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlu
cHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAg
ICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8g
T09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIp
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzI2OTksNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlv
biA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9
IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTEwNjgsNyAr
MjcwOSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAg
UmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNh
bGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVPcGVyYW5kOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRl
bXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjYWxsZWVPcGVyYW5k
LmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgZ3ByVGVtcDMuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
IGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBhbGxvY2F0b3JSZWcg
PSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdwclRlbXAyLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAgICAgICAgcmFyZURh
dGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0aW9uUmVnID0gZ3By
VGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcp
OworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWcs
IGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhl
Y3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFy
ZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNzUxLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3Ry
dWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFsT2JqZWN0OworICAg
IH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hl
Y2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZp
cnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KKyAgICAvLyBUaGlz
IHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRvIGFueXRoaW5nIGV4
Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwpAQCAtMTE2Miw4ICsyNzk2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2Ug
aXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRl
LgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJu
RWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhp
bnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgLy8gT09Q
UzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlzIE9TUiBlbnRlci4K
ICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVy
KGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRv
IHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9w
dGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xMTg3LDEz
ICsyODI0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAg
ICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xv
dyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRp
bWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGNv
cHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTIwNiwx
MSArMjg0MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAg
ICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQgc28gaXQgd29ya3Mg
aW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQogCkBAIC0xMjMzLDEw
ICsyODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQoY29ucwogICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCArMjg3NywxOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAg
PSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVn
RXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcywgcmV0dXJuVmFs
dWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIzICsyODk4LDQyIEBA
IHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBz
Y29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUubV9zY29wZSk7
CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwor
ICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0g
bV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAg
ICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOworICAgIH0KKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMwMSwyNCArMjk2Miw0
NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNvZGUu
bV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBzY29w
ZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxh
Y2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5n
cHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwog
I2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKIAog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25F
eHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9w
OjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQ
UiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAgIH0KKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICszMDMyLDE5IEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0
ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBzaXplKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEzNjAsMTQgKzMwNTMsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisKKyAgICBH
UFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gdGVtcDsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHRlbXAuZW1w
bGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIgPSB0ZW1wLT5ncHIo
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJnR1BSID09IHJldHVyblZhbHVlR1BSKTsKKyAg
ICB9CisKKyAgICAvLyBPT1BTOiBJbmxpbmUgdGhlIGFsbG9jYXRpb24gcGF0aCBoZXJlLCBpdCBt
YXR0ZXJzIGZvciBzdW5zcGlkZXItY3J5cHRvLWFlcworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogI2Vsc2UKLSAgICBl
bWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoc2l6ZUluZGV4
LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNlbmRpZgogfQogCkBA
IC0xMzgxLDE1ICszMDg5LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJv
cGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JW
YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
cmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBsb2FkMzIoQWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICszMTM4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNl
OworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKQEAgLTE0MzYsNiAr
MzE2Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBP
T1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1ICszMTk0LDE1IEBA
IHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBKSVRBcnJheU1vZGUg
bW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5
cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgog
ICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMz
IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAg
IEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVj
dGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRG
b3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlSnVtcCk7CiAgICAg
CiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkp
LCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShi
YWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKICAgICBMYWJl
bCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzMyMTEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJl
bCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGls
YXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJh
ZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5
dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1vZGUsIHByb2ZpbGUs
IGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFz
X2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMzI0NCw4MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07
CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRv
ciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlzLCBpbmRleCB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1l
cmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQ
UiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAg
IC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlz
IGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBp
dCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOwog
Ci0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3Mu
bGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0g
ICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0g
ICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihv
ZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7Cisg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5l
IHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIFRpbWVz
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7
CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwor
ICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVy
d2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdU
MSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8
aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgICAgIAor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzMyOCw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGlu
Qm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAg
IEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0
aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5k
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAg
ICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAg
cmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgq
dGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBl
bnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBl
bnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAg
ICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BS
KTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwog
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1Qw
LCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0
Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1l
c0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjU3Ry
aW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NTc0LDIxICszMzgyLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
cjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gz
MihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsK
KyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5k
PiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVt
cC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAg
aW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51
bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIo
KTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVn
VDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsK
KyAgICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIGluZGV4R1BSLCBB
ZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAg
c2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKICAg
ICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNwZWNPdGhlcjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszNDM2LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxv
Y2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKKyAgICBz
cGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2Zp
bGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2NTgsNiArMzQ5OCw5
IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tl
bigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7
CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0g
cmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblBy
b2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszNTE1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwog
ICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAh
PSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlm
IHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTY4NCw2ICszNTMwLDE5MyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1Qz
LCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAordGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRJc0NhbGxhYmxlSW1wbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5w
dXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIGF1dG8gaXNGdW5jdGlvbiA9IGJyYW5jaElm
RnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAgICBhdXRvIG5vdE9iamVjdCA9IGJyYW5jaElmTm90
T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gc2xvd1BhdGggPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgT3ZlcnJpZGVz
R2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgCisgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgbm90
T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgIAorICAgICAgICBpc0Z1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9pc19jYWxsYWJsZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGVtaXRJc0NhbGxhYmxlSW1wbDxPcElzQ2FsbGFibGU+KGN1cnJlbnRJbnN0cnVjdGlvbik7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19mdW5jdGlvbihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxhYmxlSW1wbDxPcFR5
cGVvZklzRnVuY3Rpb24+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX3R5cGVvZl9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVv
ZklzT2JqZWN0PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3Bl
cmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BS
KTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gaXNOdWxsID0gYnJhbmNoSWZFcXVhbChKU1ZhbHVl
UmVncyB7IGlucHV0R1BSIH0sIGpzTnVsbCgpKTsKKyAgICAgICAgYXV0byBpc05vbk51bGxOb25D
ZWxsID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgIGF1dG8gaXNGdW5jdGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAg
ICBhdXRvIG5vdE9iamVjdCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAg
CisgICAgICAgIGF1dG8gc2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlu
cHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgCisgICAgICAgIGlz
TnVsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisgICAgICAg
IAorICAgICAgICBpc05vbk51bGxOb25DZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGlzRnVuY3Rp
b24ubGluayh0aGlzKTsKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV92YWx1ZTsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgIEp1bXAgc2xvd1BhdGg7CisgICAgICAg
IGVtaXRUeXBlT2YoCisgICAgICAgICAgICBKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0sIHJlc3Vs
dEdQUiwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlLCBib29sIGZhbGxzVGhyb3Vn
aCkgeworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtLT5zbWFsbFN0cmlu
Z3MudHlwZVN0cmluZyh0eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgaWYgKCFm
YWxsc1Rocm91Z2gpCisgICAgICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChKdW1wIHRoZVNsb3dQYXRoKSB7CisgICAg
ICAgICAgICAgICAgc2xvd1BhdGggPSB0aGVTbG93UGF0aDsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJl
c3VsdEdQUiwgZHN0KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICB9IGVsc2UKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEVudW1lcmFibGVMZW5ndGg+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBi
YXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoaW5wdXRHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAg
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7CisgICAgSlNWYWx1ZSBp
bml0aWFsVmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFs
VmFsdWUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzeW1ib2xUYWJsZS0+
c2luZ2xldG9uKCkuaXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVtaXRTbG93T3Aoc2xv
d19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGRz
dCwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIFZhbHVlT3BlcmFuZCBzY29wZVRlbXAgeyAqdGhpcywgc2NvcGUgfTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRl
bXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisK
KyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGVUZW1wLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
R1BSID0gc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBz
Y3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAg
IGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPEpTTGV4aWNhbEVudmlyb25tZW50PigKKyAgICAg
ICAgICAgICptX3ZtLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpLCBidXR0ZXJmbHksIHNjcmF0Y2gxR1BS
LCBzY3JhdGNoMkdQUiwKKyAgICAgICAgICAgIHNsb3dQYXRoLCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6YWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpKTsKKworICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgCisgICAgICAgIC8vIERvbid0
IG5lZWQgYSBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFj
dGl2YXRpb24sIHNvIHRoZQorICAgICAgICAvLyBhY3RpdmF0aW9uIG11c3QgYmUgeW91bmcuCisg
ICAgICAgIHN0b3JlUHRyKHNjb3BlR1BSLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzeW1ib2xUYWJs
ZSksIEFkZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZTeW1i
b2xUYWJsZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gTXVzdCBpbml0aWFsaXplIGFs
bCBtZW1iZXJzIHRvIHVuZGVmaW5lZCBvciB0aGUgVERaIGVtcHR5IHZhbHVlLgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWUsIEFkZHJlc3MocmVzdWx0
R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShTY29wZU9mZnNldChp
KSkpKTsKKyAgICAgICAgCisgICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gT09QUworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE3MDIsMTEgKzM3MzUsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
YXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6Ondp
dGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50MzIocmVnVDAsIHJl
c3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVn
VDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1Qw
LCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTcxNCwyOSArMzc1Niw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9s
ZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFt
ZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFy
YW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Cisg
ICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQUik7CisgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVx
dWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMy
KG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveElu
dDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwor
ICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwg
cmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgorICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszODA1LDk5IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQ
Uik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFu
T3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgbG9hZFZh
bHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsK
ICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRz
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7
Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFs
dWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdz
KTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5k
cyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkp
OworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKKworICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVt
cC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNjcmF0Y2hHUFIsIHNs
b3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVzdWx0R1BSLCBkc3Qp
OworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAg
ICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMywgcmVnVDIpOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZhbHVlUmVncy50YWdH
UFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAgQVNTRVJUKHZhbHVl
UmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BS
KCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKLSAgICBlbWl0
TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAg
ICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3Vs
dFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjQsNiArMTQyNCw4IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXIKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKKworICAgIC8vZGF0YUxvZ0xuKCJjb21wYXJlTGVzcywgbGhzOiAi
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksICIgcmhzOiAiLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMikpOwogICAgIAogICAgIHJldHVybiBqc0xlc3M8dHJ1ZT4oZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ay
KSk7CiB9CkBAIC0xNDkxLDYgKzE0OTMsOCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uQ29tcGFyCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgc3JjMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAor
ICAgIC8vZGF0YUxvZ0xuKCJzdHJpY3RlcSwgbGhzOiAiLCBzcmMxLCAiIHJoczogIiwgc3JjMik7
CisKICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFsT2JqZWN0LCBzcmMxLCBz
cmMyKTsKIH0KIApAQCAtMTY5MSw3ICsxNjk1LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkRlYnVnLAogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIHZvaWQgdXBkYXRl
QWxsUHJlZGljdGlvbnNBbmRPcHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICBjb2RlQmxv
Y2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICBj
b2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIH0KIApAQCAtMTcxOSw3ICsxNzIzLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgIERlZmVyR0NG
b3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jay0+
aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgeworICAgIGlmIChVTkxJS0VMWShj
b2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBjb2RlQmxvY2st
PmppdFR5cGUoKSAhPSBKSVRUeXBlOjpMT0xKSVQpKSB7CiAgICAgICAgIGRhdGFMb2coIlVuZXhw
ZWN0ZWQgY29kZSBibG9jayBpbiBCYXNlbGluZS0+REZHIHRpZXItdXA6ICIsICpjb2RlQmxvY2ss
ICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAg
LTE3NDUsNyArMTc0OSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRp
bWkKIAogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlP
cHRpbWl6ZVRvREZHIiwgKCJjb3VudGVyID0gIiwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRl
cigpKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAg
ICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFsbFByZWRpY3Rpb25z
KCk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNob29zaW5n
IG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldCwgYmVjYXVzZSB0aGUgdGhyZXNo
b2xkIGhhc24ndCBiZWVuIHJlYWNoZWQuIik7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
bnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQpAQCAtMTgxNCw3ICsxODE4LDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAgICAvLyBub3RoaW5nIGxlZnQg
dG8gZG8uCiAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgp
KSB7CiAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0
aW1pemVUb0RGRyIsICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKLSAgICAgICAgICAgIGNvZGVC
bG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+YmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29kZSBibG9jayAiLCAqY29kZUJs
b2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudC4iKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgICAgIH0KQEAgLTE4NDMsNyArMTg0Nyw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
bnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAo
IWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgeworICAgICAgICBpZiAoIWNvZGVCbG9j
ay0+c2hvdWxkT3B0aW1pemVUb0RGR05vdygpKSB7CiAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0aW1pemVUb0RGRyIsICgiaW5zdWZmaWNpZW50IHBy
b2ZpbGluZyIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwKICAgICAgICAgICAgICAgICAiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZvciAiLCAqY29kZUJs
b2NrLApAQCAtMTg2Nyw3ICsxODcxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbk9wdGltaQogICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2Nr
LT5uZXdSZXBsYWNlbWVudCgpOworICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJs
b2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudChjb2RlQmxvY2spOwogICAgICAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUoCiAgICAgICAgICAgICB2bSwgcmVw
bGFjZW1lbnRDb2RlQmxvY2ssIG51bGxwdHIsIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwK
ICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrOjpjcmVhdGUoKSk7CkBAIC0xODc5LDcgKzE4ODMsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayog
b3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIEFTU0VS
VChvcHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXpl
ZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXplZENvZGVCbG9jayAm
JiBKSVRDb2RlOjppc0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAg
ICAgCiAgICAgaWYgKHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVPU1JFbnRyeSh2bSwg
Y2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0
IGJjIyIsIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTE5NzIsNyArMTk3Niw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UcnlPU1IKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCk7CisgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCkt
PmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKQEAgLTM0MzMs
NiArMzQzNyw0MiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2hlY2tJCiAg
ICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ucmln
Z2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykp
Cit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGls
ZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAorICAgIC8vIHJlYWxseSBiZSBw
cm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xDb2RlQmxvY2stPnZt
KCkuaGVhcCk7CisKKyAgICBpZiAoZ2V0ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpICYmICEhYXRv
aShnZXRlbnYoInByaW50RWFjaEpldHRpc29uIikpKQorICAgICAgICBkYXRhTG9nTG4oImpldHRp
c29uLCBmb3JjaW5nIHJlb3B0IG5vdzogIiwgKmxvbENvZGVCbG9jayk7CisgICAgbG9sQ29kZUJs
b2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAg
CisgICAgLy8gT09QUzogcHJvY2VzcyB2YWx1ZSBwcm9maWxlcyBoZXJlLCBzaW5jZSB3ZSdyZSBq
ZXR0aXNvbmluZywgaG9wZWZ1bGx5IHRoZXkgdXBkYXRlIHcvIHRoaW5ncyB3ZSBjYXJlIGFib3V0
LgorCisgICAgc2FuaXRpemVTdGFja0ZvclZNKGxvbENvZGVCbG9jay0+dm0oKSk7CisKKyAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpsb2xDb2RlQmxvY2ssICI6IEVudGVy
ZWQgcmVvcHRpbWl6ZSBmcm9tIExPTCIpOworCisgICAgQ29kZUJsb2NrKiBsbGludENvZGVCbG9j
ayA9IGxvbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxl
ZCB3aXRoIHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrLgorICAgIEFTU0VSVChKSVRDb2RlOjppc0Jh
c2VsaW5lQ29kZShsbGludENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKyAgICBDb2RlQmxvY2sq
IHJlcGxhY2VtZW50ID0gbGxpbnRDb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CisgICAgaWYgKCFy
ZXBsYWNlbWVudCB8fCByZXBsYWNlbWVudCA9PSBsbGludENvZGVCbG9jaykgeworICAgICAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpsbGludENvZGVCbG9jaywgIjogTm90
IHJlb3B0aW1pemluZyBMT0wgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGJlZW4gamV0dGlzb25lZC4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlcGxh
Y2VtZW50IG11c3QgYmUgb3B0aW1pemVkIGNvZGUuIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5
CisgICAgLy8gdG8gY2hlY2sgb3VyIGxvZ2ljLgorICAgIEFTU0VSVChsbGludENvZGVCbG9jay0+
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChsb2xDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisKKyAgICAvLyBPT1BTOiBmaWd1
cmUgb3V0IHN0dWNrIGluIGEgbG9vcCBsb2dpYworICAgIGxvbENvZGVCbG9jay0+amV0dGlzb24o
UHJvZmlsZXI6OkpldHRpc29uRHVlVG9PU1JFeGl0LCBDb3VudFJlb3B0aW1pemF0aW9uKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzE5LDYgKzMxOSw4IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
VmFsdWUKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9m
aWxlckxvZywgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywgdm9pZCwgKFZNKikpOwogCitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdywgdm9pZCwg
KENvZGVCbG9jayogbG9sQ29kZUJsb2NrKSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yODEsOCArMjc3LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAg
KyttX2dldEJ5VmFsSW5kZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIs
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIg
c2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24g
QVJNLgpAQCAtNTk4LDggKzU5MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW4KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKQEAgLTYzOSw4ICs2MzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CkBAIC02ODYsOCArNjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC03MjksOCArNzE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC03NzgsOCArNzYzLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtODE5LDggKzgwMiw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKQEAgLTExMDAsOCArMTA4MSw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwpAQCAtMTI1Nyw4ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dElu
Zm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVs
ZVZhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBA
CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVz
cGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKQEAgLTUyLDUxICs1NCwxMTcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlv
bmFsPFZhbHVlT3BlcmFuZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBy
ZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7
CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSOworCisg
ICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNl
KTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNl
VmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigp
OworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgaW5kZXhpbmdUeXBlR1BSID0gcmVzdWx0R1BSOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9
IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRp
b25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
SnVtcCBub3RDZWxsOworICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOworICAgICAg
ICBpZiAobm90Q2VsbC5pc1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwor
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwg
cHJvcGVydHlHUFIpOworICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBtb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQ
UiwgZHN0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBi
YXNlR1BSKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8
fCBzaG91bGRTcGVjdWxhdGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVTdHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8
fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykp
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGlu
Z1R5cGVHUFIsIHByb2ZpbGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5
KSwgU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1i
b2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVz
ZUxPTCgpKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQ
Uik7CiAgICAgfQogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAg
ICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhh
c0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4XTsKLSAgICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4
OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1
bHRHUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMs
IHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJv
cGVydHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICB7CisgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgdW5hdmFpbGFi
bGVSZWdpc3RlcnNGb3JTdHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0
ZU5hbWU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dD
YXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4Owog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nh
c2UucmVzdWx0LmdwcigpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTcsNiArMjU3LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAor
ICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlO
YW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAg
ICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE5LDggKzQyMSwxMSBA
QCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2Fk
IHRoZSByZWdpc3RlcnMuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAs
IHZhbHVlLCByZWdUMSk7CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9k
ZShieXRlY29kZSksIHB1dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIg
aWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0zMzksNyArNDQ0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRv
ciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZTsKQEAgLTM0Nyw3ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFN
b2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0
ZWNvZGUpIHsKKyAgICBhdXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAg
ICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMg
KzQ2MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
fTsKIAogICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4
XS5ieVZhbEluZm87CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNs
b3dQYXRoID0gbGFiZWwoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwpAQCAtMzgxLDYgKzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25h
bWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5m
byhtX2J5dGVjb2RlSW5kZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IERvIGJl
dHRlciBpZiB3ZSBjYW4hCisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5
NCwxMyArNTAwLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QK
ICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhi
eVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgZmFzdFBhdGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwogICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9
IGJ5dGVjb2RlLm1fcHV0S2luZDsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAg
TGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
QEAgLTQyMCw0OSArNTI1LDEwNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZShjCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBi
YXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNj
ZXNzb3IgeyAqdGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29y
LmdwcigpOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50
MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywg
Ynl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlz
LCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAg
ICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCBy
ZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2Ug
eyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIg
eyAqdGhpcywgYnl0ZWNvZGUubV9nZXR0ZXIgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRl
ciB7ICp0aGlzLCBieXRlY29kZS5tX3NldHRlciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3Qg
YXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdl
dHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIHByb3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNj
ZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
YmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHBy
b3BlcnR5IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBw
cm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3By
KCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE4
ICs2MzMsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAg
ICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAg
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJs
ZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRj
aEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBu
ZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAg
ICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ug
c2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC00OTIsMjUgKzY4Nywy
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdy
aXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gc2xvd0Nhc2UucmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3
MTcsNzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVl
LmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRo
aXMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFz
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3Jh
dGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNl
R1BSID0gcmVnVDE7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChwcm9wZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5
KTsKKyAgICB9CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZWdUMik7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdp
c3RlcnNGb3JTdHViKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9v
bGVhbjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFy
cmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMg
cmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU0MSwyMjEgKzc4OSwzNjggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eVZhbHNbbV9kZWxCeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAo
dXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5n
cHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxh
Y2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
c3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBl
bnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2Us
IGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYg
KHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQu
Z3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAg
IEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9
IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5h
cmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwog
CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJS
ZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZh
bHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAg
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKwogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVu
Z3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVu
Z3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRC
eUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0
aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVz
ZUxPTCgpID8gcmVzdWx0R1BSIDogcmVnVDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5n
dGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlc3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
SGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwor
ICAgIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1
ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhp
c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBs
YWNlKCp0aGlzLCB0aGlzVlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9
IHRoaXNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNH
UFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQodGhpc0dQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKHRoaXNWUmVnKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcs
IHRoaXNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7
CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsr
XTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgdGhpc0dQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9
IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFu
ZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVz
dCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hv
dFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBT
dHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRo
aXMuCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVl
VlJlZywgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNj
cmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIg
PSByZWdUMTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
YmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIs
IGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDog
UHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CkBAIC03NjUsNzcgKzExNjAsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydQogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUg
c2l6ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5
Mzk1Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7Cisg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4o
KTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlz
KTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0
QnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQor
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUu
ZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMp
OworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwog
CiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAg
SklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBK
SVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52
YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTg0NywxNyArMTI2MCwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluCiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29s
dmVUeXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7
CiAKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxz
ZQorICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJl
c3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNj
b3BlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTg2
NywyMSArMTI4OCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVy
YW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIo
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdU
MDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQ
Uik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGlmIChkZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHNjb3BlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1f
bGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFk
YXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgpAQCAtODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNv
bHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUs
IHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9yZXNvbHZlVHlwZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJl
c3VsdEdQUiwgZHN0KTsKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTk0MCwxNSArMTM3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BS
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAg
ICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQs
IEdQUlJlZyByZWcpCkBAIC05NjIsMTIgKzE0MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC05NzgsNTEgKzE0MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQor
ICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAg
ICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNs
b3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7
Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAg
ICBHUFJSZWcgb2Zmc2V0R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQ
UiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNl
dFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSByZWdUMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwg
c2NvcGVHUFIsIHJlc3VsdEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNj
b3BlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAg
ICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7
CisgICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAg
ICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9m
ZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRo
aXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIo
b2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsK
LSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBy
ZXN1bHQpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0
R1BSKTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BS
KTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hl
Y2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpv
cGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3Vs
dEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xMDM2LDEwICsxNTA0LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7
CisgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAK
QEAgLTEwNTIsMjcgKzE1MjAsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNl
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwog
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
dHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIs
IGRzdCk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMTA4Miw0MCArMTU1MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworCisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZy
b21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0K
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVz
c09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJl
Y3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVt
aXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdU
MSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVn
VDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTEyOSwyMSArMTU3OSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1l
dGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAg
IEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywg
dmFsdWUpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1
cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdl
IGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0
LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZh
ciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7Cisg
ICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3Bl
R1BSOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBi
dXR0ZXJmbHlHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAg
ICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZz
ZXRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdw
cigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
R1BSID0gcmVnVDM7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAg
ICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBK
dW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAg
ICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChy
ZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAg
ICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0
cihvZmZzZXRHUFIpOworICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChi
dXR0ZXJmbHlHUFIsIG9mZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAg
IEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZh
bHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMDsKKwogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVy
ZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNr
cyBzdGF0aWNhbGx5LgogICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Kj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9t
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9j
YXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFk
YXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0
YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBz
dG9yZTY0KHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Cisg
ICAgICAgICAgICAgICAgc3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkg
fHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3Vy
ZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0
KTsKKworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAg
ICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAg
ICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwor
ICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKQEAgLTExOTAsMTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hW
YWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFs
dWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRD
b2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdv
IGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVz
b2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIpKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1p
YywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHkt
aW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKQEAgLTEyMDksMjMgKzE3MjUsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAg
ICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3
YW50IHRvIGJsb2NrIHRoZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMg
c2FtZSByZWdpc3Rlciwgc2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwg
d2Ugd29uJ3QgdXNlIHNjcmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJl
c29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHNjcmF0Y2hHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
ICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVl
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTEyNDIsMTAgKzE3Njcs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRU
b1Njb3BlPigpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5m
byhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyKSB7CkBAIC0xMjYxLDYxICsxNzg0LDE3OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsK
ICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBhcmd1bWVudHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1
ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFy
Z3VtZW50cyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBh
cmd1bWVudHNHUFIgPSBhcmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRy
ZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BS
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0Fy
Z3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RB
cmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFs
dWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBh
cmd1bWVudHNHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAg
ICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BS
ID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAg
ICAgICB2YWx1ZUdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFy
Z3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKyAgICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRy
ZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8
fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogTWFrZSBpdCBz
byB0aGF0IHdlOgorICAgIC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMg
b3Igbm90LiBJZiB3ZSBkb24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byBy
ZWdhbGxvYyBzdGF0ZS4gT3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBp
dAorICAgIC8vICAgZG9lc24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1l
IGNvZGUgbWF5IG5vdCBhbHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2Ug
YnJhbmNoIHRvIG91dCBvZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAg
Ly8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25k
aXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2
YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNo
b3VsZEZpbHRlckJhc2UpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUob3duZXIpICYg
U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5U
eXBlKHZhbHVlKSAmIH5TcGVjQ2VsbCkpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHZhbHVlVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JP
cGVyYW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVH
UFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVH
UFIpOworICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3duZXIsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBvd25lclZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjcmF0Y2hW
YWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+
Z3ByKCk7CisKKyAgICAgICAgaWYgKGdwckZvck9wZXJhbmQob3duZXIpICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICBvd25lckdQUiA9IGdwckZvck9wZXJhbmQob3duZXIpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIG93bmVyVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAg
ICAgICBvd25lckdQUiA9IG93bmVyVmFsdWUtPmdwcigpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihvd25lciwgb3duZXJHUFIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgb3duZXJHUFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgfQorCiAg
ICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICgh
dXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAg
ICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAg
ICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJl
Z1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
dGhpcyk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5j
aCh2bSgpLCBvd25lckdQUiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxS
ZWNvcmQ+IHNpbGVudFNwaWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBO
byBuZWVkIHRvIHNpbGVudCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRTcGlsbFJlY29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGls
bFJlY29yZCk7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKKyAgICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVy
Tm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxs
LmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAt
IEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3Qg
YnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVy
d2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3Qg
cG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlz
IGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGlu
ZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZh
bHVlKSB7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BS
UmVnIHZhbHVlR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChn
cHJGb3JPcGVyYW5kKHZhbHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAg
ICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAK
ICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1
ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMTMyNywxMSArMTk2NywyNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRl
bXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9
IFNwZWNDZWxsOworCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZXN1bHRH
UFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0J5dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGlu
ZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEw
ICsxOTk2LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAg
ICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZh
bHVlR1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zm
c2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Mo
cmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxk
KGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUs
MjUgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAg
ICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW47CisgICAgeworICAgICAgICBPcHRpb25h
bDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0
Y2hHUFIpOworICAgIH0KKworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRT
cGlsbFJlY29yZDsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3Jk
ID0gc2lsZW50U3BpbGxCZWZvcmVDYWxsKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIHNpbGVudEZpbGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUx
LDggQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0g
ZmFsc2U7CisKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRy
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgCkBAIC0xNTY3LDYgKzIyNTQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2
YXRlTmFtZVdpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlE
ID09IG9wX3B1dF9ieV92YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNp
b24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
dm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrKQogewogICAgIEFTU0VS
VF9VTlVTRUQocHJvZmlsZWRERkdDb2RlQmxvY2ssICFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2Rl
QmxvY2ssICIgZGlkIGJlY29tZSByZWFkeS4iKTsKICAgICAKQEAgLTU1LDcgKzU1LDcgQEAgdm9p
ZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQpCiB7CiAgICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNv
ZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDE1ICszMSwyMiBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgog
CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRX
b3JrbGlzdDo6UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlzdDo6
UGxhbj4gewogcHVibGljOgotICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgOiBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCi0gICAgICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQorICAgICAgICA6IG1fbGxpbnRDb2RlQmxvY2soY29kZUJsb2NrKQorICAg
ICAgICAsIG1fY29kZUJsb2NrVG9Db21waWxlKGNvbXBpbGVUeXBlID09IEpJVDo6Q29tcGlsZVR5
cGU6OkxPTCA/IG1fbGxpbnRDb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KG1fbGxpbnRDb2RlQmxv
Y2spIDogbV9sbGludENvZGVCbG9jaykgCisgICAgICAgICwgbV9qaXQobV9jb2RlQmxvY2tUb0Nv
bXBpbGUtPnZtKCksIG1fY29kZUJsb2NrVG9Db21waWxlLCBjb21waWxlVHlwZSwgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBh
cmF0aW9uQmVmb3JlQ29tcGlsZSgpOworICAgICAgICAvLyBPT1BTOiB2aXNpdCB0aGlzIGluIGNv
bmN1cnJlbnQgZ2MKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRD
b2RlQmxvY2spIHsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAu
cHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlSW5UaHJlYWQoKQpAQCAtNTMsMTcgKzYwLDIzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGZpbmFsaXplKCkKICAgICB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IG1faml0LmxpbmsoKTsKKworICAgICAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4
aXQoWyZdIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50
Q29kZUJsb2NrKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhl
YXAudW5wcm90ZWN0KG1fY29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfSk7CisKICAgICAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAg
ICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBp
bGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKKyAgICAgICAgICAgIENPREVCTE9DS19MT0df
RVZFTlQobV9sbGludENvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24g
ZmFpbGVkIikpOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCAiICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9j
ay0+ZG9udEpJVEFueXRpbWVTb29uKCk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRG
YWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+
ZG9udEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5tX2Rp
ZEZhaWxKSVRDb21waWxhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIpOwot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSht
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+aml0U29vbigpOworICAgICAg
ICAgICAgbV9jb2RlQmxvY2tUb0NvbXBpbGUtPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29k
ZShtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5q
aXRTb29uKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzEsOCArODQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7
IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT52bSgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tLZXkoKSB7IHJldHVybiBtX2xsaW50
Q29kZUJsb2NrOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jay0+dm0o
KTsgfQogICAgIAogICAgIGJvb2wgaXNGaW5pc2hlZENvbXBpbGluZygpCiAgICAgewpAQCAtODAs
MTUgKzkzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNGaW5pc2hlZENvbXBpbGlu
ZzsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5
cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
ICAgICB7Ci0gICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7CiAg
ICAgICAgIHBsYW4uZmluYWxpemUoKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIENvZGVC
bG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2xsaW50Q29kZUJsb2NrOworICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2tUb0NvbXBpbGU7CiAgICAgSklUIG1faml0OwogICAgIExv
Y2sgbV9sb2NrOwogICAgIGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nIHsgZmFsc2UgfTsKQEAg
LTIzMyw5ICsyNDcsMTEgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9j
awogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSA9IE9wdGlvbnM6
OmZvcmNlTE9MKCkgPyBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wgOiBKSVQ6OkNvbXBpbGVUeXBlOjpC
YXNlbGluZTsKICAgICAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgewot
ICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CkBAIC0yNDksNyArMjY1LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVC
bG9jawogICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewogICAg
ICAgICAgICAgbV9wbGFubmVkLmFkZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBs
YW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3
IFBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkp
OwogICAgICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX3F1ZXVl
LmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2Vy
KTsKQEAgLTI3MywxNCArMjg5LDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihD
b2RlQmxvY2sKICAgICAvLyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUuIElmIHRoZSBjb25j
dXJyZW50IEpJVCB0aHJlYWQgaXMgY29udm95ZWQsIHdlIHJldmVydCB0byBtYWluCiAgICAgLy8g
dGhyZWFkIGNvbXBpbGVzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhcyBnb29kIGFzIGlmIHdlIGhh
ZCBtdWx0aXBsZSBKSVQgdGhyZWFkcy4gTWF5YmUgd2UKICAgICAvLyBjYW4gZG8gdGhhdCBzb21l
ZGF5LgotICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KTsKKyAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogfQogCisvKgogdm9pZCBKSVRXb3JrbGlzdDo6Y29t
cGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bmspCisKKyAgICBhdXRvIGlzQ29tcGlsZWQgPSBbJl0gewor
ICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuaykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZUJsb2NrLT5o
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGJvb2wgaXNQbGFubmVkOwpAQCAtMjk2LDE3ICszMjIsMjQg
QEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIAogICAgIH0KICAgICAK
ICAgICAvLyBOb3cgaXQgbWlnaHQgYmUgY29tcGlsZWQhCi0gICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisgICAgaWYgKGlzQ29tcGlsZWQo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBo
YWQgcHJldmlvdXNseSBhdHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRo
IHRoZQotICAgIC8vIGJhc2VsaW5lIEpJVC4KLSAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0YSgp
OwotICAgIAotICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCi0gICAgSklUOjpjb21waWxlKHZt
LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOwotICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2Rl
KGNvZGVCbG9jayk7CisKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VMT0woKSkgeworICAgICAgICBD
b2RlQmxvY2sqIGxvbENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAg
ICAgICAgSklUOjpjb21waWxlKHZtLCBsb2xDb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJh
c2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgbG9sQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENv
ZGUobG9sQ29kZUJsb2NrKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBkbyB0aGlzIGlu
IGNhc2Ugd2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNv
bXBpbGUgd2l0aCB0aGUKKyAgICAgICAgLy8gYmFzZWxpbmUgSklULgorICAgICAgICBjb2RlQmxv
Y2stPnJlc2V0SklURGF0YSgpOworICAgICAgICAKKyAgICAgICAgLy8gT0ssIGp1c3QgY29tcGls
ZSBpdC4KKyAgICAgICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5
cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KTsKKyAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFs
bENvZGUoY29kZUJsb2NrKTsKKyAgICB9CiB9CisqLwogCiB2b2lkIEpJVFdvcmtsaXN0OjpmaW5h
bGl6ZVBsYW5zKFBsYW5zJiBteVBsYW5zKQogewpAQCAtMzE0LDcgKzM0Nyw3IEBAIHZvaWQgSklU
V29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG0KICAgICAgICAgcGxhbi0+ZmluYWxpemUo
KTsKICAgICAgICAgCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAg
ICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVCbG9jaygpKTsKKyAgICAgICAgbV9wbGFubmVk
LnJlbW92ZShwbGFuLT5jb2RlQmxvY2tLZXkoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDcgKzU1LDYgQEAgcHVibGljOgogICAgIHZvaWQgcG9sbChWTSYpOwogICAgIAogICAgIHZvaWQg
Y29tcGlsZUxhdGVyKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxv
Y2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICAKICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmts
aXN0KCk7CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JO
dWxsKCk7CkBAIC02Niw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgVGhyZWFkOwogICAg
IGZyaWVuZCBjbGFzcyBUaHJlYWQ7CiAgICAgCisgICAgLy92b2lkIGNvbXBpbGVOb3coQ29kZUJs
b2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKSk7CiAgICAgdm9pZCBmaW5hbGl6ZVBsYW5zKFBsYW5zJik7CiAgICAgCiAgICAgUGxh
bnMgbV9xdWV1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQog
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBU
JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQm
IG9wZXJhdG9yW10oc2l6ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2
YXRlOgogICAgIHN0ZDo6YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdp
c3RlcnMoKT4gbV9tYXAgeyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxU
b0NvZGVQdHIuY29kZVB0cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5
IHx8IEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkp
CisgICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2Rl
QmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVy
KCkubGFiZWxBdE9mZnNldCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xv
d1BhdGhDYWxsLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1Ymxp
YzoKIAogICAgIEpJVDo6Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAg
ICAgIC8vIFdlIGp1c3Qgd2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAg
ICAgICAvLyBtX2ppdC0+c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBM
SU5HKQogICAgICAgICBpZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3Ry
dWN0aW9uKCZtX2ppdC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVj
b2RlT2Zmc2V0XSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4
ICszNjMsMTAgQEAgaW5saW5lIGJvb2wgc2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsbwogfQog
CiAvLyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCi1pbmxpbmUgYm9vbCBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDAp
KQoraW5saW5lIENvZGVCbG9jayogaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKKyAgICAvLyBPT1BTOiBJbXBsZW1lbnQgdGhpcyB3
LnIudCBMT0wuCisKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15
IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0Mg
aGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAKQEAgLTM3
MywyOSArMzc1LDQ1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYK
ICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgi
dGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1
dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgSklUV29y
a2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucG9sbCh2bSk7Ci0gICAgCisKKyAgICBhdXRv
IGxvbENvZGVCbG9jayA9IFsmXSgpIC0+IENvZGVCbG9jayogeworICAgICAgICBpZiAoQ29kZUJs
b2NrKiByZXBsYWNlbWVudCA9IGNvZGVCbG9jay0+b3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewor
ICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklU
KQorICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisgICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENv
ZGVCbG9jaygpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCiAgICAgc3dpdGNoIChjb2RlQmxv
Y2stPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVh
ZHkgY29tcGlsZWQuIik7CiAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKICAgICB9CiAgICAgY2FzZSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rOiB7CiAgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVH
bG9iYWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRlcihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2so
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgICAgIHJldHVybiBjb2Rl
QmxvY2s7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBkZWZhdWx0OgotICAg
ICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxv
Y2ssICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBkYXRhTG9nKCJVbmV4
cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlw
ZSBlbnRyeU9TUihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQogewogICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCAiLCBuYW1l
LCAiIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLApAQCAtNDA2LDE4ICs0MjQsMjEgQEAgc3RhdGlj
IFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQgogICAgICAgICBMTElOVF9SRVRVUk5f
VFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZt
KCk7Ci0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKSkK
KyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJsb2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3Modm0sIGNvZGVCbG9jayk7CisgICAgaWYgKCFjb21waWxlZENvZGVCbG9jaykKICAgICAg
ICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7Cisg
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxlZENvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgi
aW4gcHJvbG9ndWUiKSk7CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENv
ZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gUHJvbG9ndWUpCi0gICAgICAgIExMSU5U
X1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51
bGxwdHIpOworICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRD
b2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChraW5kID09
IEFyaXR5Q2hlY2spOwotICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxs
cHRyKTsKKyAgICBMTElOVF9SRVRVUk5fVFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCkt
PmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxs
cHRyKTsKIH0KICNlbHNlIC8vIEVOQUJMRShKSVQpCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQor
c3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKIHsKICAgICBjb2RlQmxvY2stPmRv
bnRKSVRBbnl0aW1lU29vbigpOwogICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0
cik7CkBAIC00MjcsMzEgKzQ0OCwzMSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5
T1NSKENvZGVCCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
ImVudHJ5X29zciIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOwogfQogCiBMTElO
VF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOworICAgIHJldHVybiBl
bnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxl
ZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50
cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsK
LSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9v
c3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlP
U1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSkt
PmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURf
UEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxG
cmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJl
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAg
IHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5
X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5
Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanND
YXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+
Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFt
ZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFi
bGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2Nv
bnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGxvb3Bfb3NyKQpAQCAtNDgwLDE5ICs1MDEsMjIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
bG9vcF9vc3IpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAg
ICAgfQogICAgIAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVC
bG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpCisgICAgQ29kZUJsb2NrKiBjb21waWxl
ZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAg
ICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2Rl
QmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwog
Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KTsKKyAgICBBU1NFUlQoY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCB8fCBjb21waWxlZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxP
TEpJVCk7CiAKLSAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrLT5qaXRD
b2RlTWFwKCk7CisgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvbXBpbGVkQ29kZUJs
b2NrLT5qaXRDb2RlTWFwKCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4g
Y29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwog
ICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVM
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKKwor
ICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNvbXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAg
ICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJnZXQsIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsK
ICNlbHNlIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgT3JpZ2luU3RhY2s6Ok9yaWdpblN0
YWNrKERhdGFiYXNlJiBkYXRhYgogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBz
dGFjay5zaXplKCk7ICsraSkgewogICAgICAgICBhcHBlbmQoT3JpZ2luKAotICAgICAgICAgICAg
ZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKHN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSgpLT5i
YXNlbGluZUNvZGVCbG9jay5nZXQoKSksCisgICAgICAgICAgICBkYXRhYmFzZS5lbnN1cmVCeXRl
Y29kZXNGb3Ioc3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lKCktPmxvbE9yQmFzZWxpbmVDb2RlQmxv
Y2suZ2V0KCkpLAogICAgICAgICAgICAgc3RhY2tbaV0uYnl0ZWNvZGVJbmRleCgpKSk7CiAgICAg
fQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw2ICs2NywyMCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2Nr
KCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9CiAKK0Z1bmN0aW9uQ29kZUJsb2NrKiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmxvbE9yQmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQoreworICAgIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2U7Cisg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgIGVkZ2UgPSBtX2NvZGVCbG9ja0Zv
ckNhbGwuZ2V0KCk7CisgICAgZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIGVkZ2UgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC5nZXQoKTsKKyAgICB9CisgICAgaWYgKCFlZGdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxv
Y2soKS0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZlKCkpOworfQorCiB2b2lkIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDEzICsxMTQsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QoKTsKICAgICB9CiAKKyAgICBGdW5jdGlvbkNvZGVCbG9jayogbG9sT3JC
YXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBGdW5jdGlv
bkNvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7
CiAgICAgICAgIAotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2tGb3Ioa2luZCk7Ci0gICAgfQotCiAgICAgUmVmUHRyPFR5cGVTZXQ+IHJldHVy
blN0YXRlbWVudFR5cGVTZXQoKSAKICAgICB7CiAgICAgICAgIFJhcmVEYXRhJiByYXJlRGF0YSA9
IGVuc3VyZVJhcmVEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsMTAgQEAgc3Rh
dGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMoKQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0
ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIC8vT3B0aW9uczo6dXNlREZHSklUKCkgPSAwOwor
ICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOworICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAx
OworCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgIE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0
aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3
LDYgKzUyNyw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAg
IHYoQm9vbCwgdXNlSklUQ2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEJvb2wsIHVzZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJ
ZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmll
bGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKICAgICB2KEJvb2wsIHVzZVByaXZhdGVTdGF0aWNDbGFz
c0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3Rh
bmQgcHJpdmF0ZSBzdGF0aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYo
Qm9vbCwgZm9yY2VMT0wsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpCiAKIGVudW0gT3B0aW9uRXF1
aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2MCw3ICs1NjAsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnBy
b2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICBvcmlnaW4ud2Fsa1VwSW5saW5lU3RhY2soWyZd
IChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKSB7CiAgICAgICAgICAgICAgICAgbWFjaGlu
ZU9yaWdpbiA9IGNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZy
YW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAgICAgICBhcHBl
bmRDb2RlQmxvY2soaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay5nZXQoKSA6IG1hY2hpbmVDb2RlQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soaW5saW5lQ2FsbEZyYW1lID8g
aW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpIDogbWFjaGluZUNv
ZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwogICAgICAgICAgICAgfSk7CiAK
ICAgICAgICAgICAgIGlmIChPcHRpb25zOjpjb2xsZWN0U2FtcGxpbmdQcm9maWxlckRhdGFGb3JK
U0NTaGVsbCgpKSB7CkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpw
cm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBs
bGludF9oYW5kbGVfdWNhdWdodF9leGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0
IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwotICAgICAg
ICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW5wcm9jZXNzZWRTdGFja1RyYWNl
LmxsaW50UEMpKTsKICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5
dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJsb2NrKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI3
MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQsNDkgKzM0NCwzMyBAQCBDb2RlQmxvY2sqIFNjcmlw
dEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9jCiB9CiAKIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJs
ZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQorICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIGlmIChjbGFzc0luZm8o
dm0pID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
a2luZCA9PSBDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sq
IGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9jayo+KAotICAgICAgICAgICAgZXhl
Y3V0YWJsZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgRXZhbENv
ZGVCbG9jayogcmVzdWx0ID0gRXZhbENvZGVCbG9jazo6Y3JlYXRlKHZtLAotICAgICAgICAgICAg
Q29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0QWx0ZXJuYXRpdmUodm0sIGJhc2VsaW5lKTsKKyAgICAgICAgRXZhbENvZGVCbG9jayogcmVz
dWx0ID0gRXZhbENvZGVCbG9jazo6Y3JlYXRlKHZtLCBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9j
aywgc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9jayY+KCphbHRlcm5hdGl2ZSkpOworICAgICAgICBy
ZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBhbHRlcm5hdGl2ZSk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIAogICAgIGlmIChjbGFzc0luZm8odm0pID09IFByb2dyYW1FeGVj
dXRhYmxlOjppbmZvKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9y
Q2FsbCk7Ci0gICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFBy
b2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGJhc2Vs
aW5lID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jayo+KAotICAgICAgICAgICAgZXhlY3V0
YWJsZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgUHJvZ3JhbUNv
ZGVCbG9jayogcmVzdWx0ID0gUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLAotICAgICAgICAg
ICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0QWx0ZXJuYXRpdmUodm0sIGJhc2VsaW5lKTsKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9j
ayogcmVzdWx0ID0gUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBDb2RlQmxvY2s6OkNvcHlQ
YXJzZWRCbG9jaywgc3RhdGljX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jayY+KCphbHRlcm5hdGl2ZSkp
OworICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBhbHRlcm5hdGl2ZSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0gTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChr
aW5kID09IENvZGVGb3JDYWxsKTsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICAg
ICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKj4oCi0gICAgICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2soKS0+
YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiByZXN1
bHQgPSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sCi0gICAgICAgICAgICBDb2Rl
QmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICAgICAgcmVzdWx0LT5zZXRB
bHRlcm5hdGl2ZSh2bSwgYmFzZWxpbmUpOworICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KiByZXN1bHQgPSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sIENvZGVCbG9jazo6
Q29weVBhcnNlZEJsb2NrLCBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJj4oKmFs
dGVybmF0aXZlKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUodm0sIGFsdGVybmF0
aXZlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VS
VChjbGFzc0luZm8odm0pID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKLSAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
dGhpcyk7Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25Db2RlQmxvY2sqPigKLSAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQp
LT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IEZ1
bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUodm0sCi0gICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNl
ZEJsb2NrLCAqYmFzZWxpbmUpOwotICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUodm0sIGJhc2Vs
aW5lKTsKKyAgICBGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gRnVuY3Rpb25Db2RlQmxvY2s6
OmNyZWF0ZSh2bSwgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssIHN0YXRpY19jYXN0PEZ1bmN0
aW9uQ29kZUJsb2NrJj4oKmFsdGVybmF0aXZlKSk7CisgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2
ZSh2bSwgYWx0ZXJuYXRpdmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTM5OCw3ICsz
ODIsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cExMSW50KENvZGVCbG9jayogY29kZUJsCiBzdGF0aWMg
dm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJM
RShKSVQpCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKHZtLCBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIC8vIE9PUFM6IEZpZ3Vy
ZSBvdXQgd2hhdCB3ZSB3YW50IHRvIGRvIHdpdGggdGhlIG5vIExMSW50IG9wdGlvbi4uLi4KKyAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywg
SklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3RhbGxDb2RlKENvZGVC
bG9jayopOwogICAgIHZvaWQgaW5zdGFsbENvZGUoVk0mLCBDb2RlQmxvY2sqLCBDb2RlVHlwZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2tGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNGdW5jdGlvbiosIEpTU2NvcGUqLCBFeGNlcHRpb24q
Jik7Ci0gICAgQ29kZUJsb2NrKiBuZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9y
KENvZGVCbG9jayogYWx0ZXJuYXRpdmUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCiAgICAg
dm9pZCBjbGVhckNvZGUoSXNvQ2VsbFNldCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBpbGVz
KEpTVmFsdWUgdGhlRgogewogICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZh
bHNlOwogI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkp
CisgICAgICAgIHJldHVybiBqc051bWJlcigwKTsgLy8gT09QUworCiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VKSVQoKSB8fCAhT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSB8fCAhT3B0aW9uczo6dXNl
REZHSklUKCkpCiAgICAgICAgIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSB0cnVlOwogI2Vs
c2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5z
dGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAg
ICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChmb3VuZENvZGVCbG9jay0+aml0VHlwZSgpKSkgewog
ICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKCptX2xvY2spOwogICAgICAgICBpZiAo
IWxvY2tlcikKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5
IGFnYWluIGxhdGVyLgpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0
ZUNvZGVCbG9ja3NPblN0YWMKIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAo
Y29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUo
KSkpCisgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxv
Y2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVy
OjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7CiAgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQpJbmRleDogVG9vbHMvU2NyaXB0cy9jb21w
YXJlLXJlc3VsdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb21wYXJlLXJlc3VsdHMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODIsOCArMTgyLDggQEAgZGVmIGNvbXB1dGVNdWx0aXBsZUh5cG90aGVz
ZXNTaWduaWZpY2FuYwogCiBkZWYgZHVtcEJyZWFrZG93bnMoYSwgYik6CiAgICAgbmFtZUxlbmd0
aCA9IGxlbigic3VidGVzdCIpCi0gICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKQotICAg
IGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKKyAgICBhTGVuZ3RoID0gbGVuKGFbdW5pdE1h
cmtlcl0pICsgMworICAgIGJMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkgKyAzCiAgICAgcmF0
aW9MZW5ndGggPSBsZW4oImIgLyBhIikKIAogICAgIHBWYWx1ZUhlYWRlciA9ICJwVmFsdWUgKHNp
Z25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3ZlcnkgUmF0ZSkiCkBAIC0yMTIsNyArMjEyLDcg
QEAgZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIHBMZW5ndGggKz0gMgogCiAgICAgc3Ry
aW5ncyA9IFtdCi0gICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2Nv
cmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5n
dGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9
YVt1bml0TWFya2VyXSwgYlNjb3JlPWJbdW5pdE1hcmtlcl0sIG5hbWVMZW5ndGg9bmFtZUxlbmd0
aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJlPSJiIC8gYSIsIHJh
dGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwgcExlbmd0aD1wTGVu
Z3RoKSkKKyAgICBzdHJpbmdzLmFwcGVuZCgifHtrZXk6XntuYW1lTGVuZ3RofX18e2FTY29yZTpe
e2FMZW5ndGh9fSB8e2JTY29yZTpee2JMZW5ndGh9fSB8e2NvbXBhcmU6XntyYXRpb0xlbmd0aH19
fHtwTWFya2VyOl57cExlbmd0aH19fCIuZm9ybWF0KGtleT0ic3VidGVzdCIsIGFTY29yZT0iYTog
IiArIGFbdW5pdE1hcmtlcl0sIGJTY29yZT0iYjogIiArIGJbdW5pdE1hcmtlcl0sIG5hbWVMZW5n
dGg9bmFtZUxlbmd0aCwgYUxlbmd0aD1hTGVuZ3RoLCBiTGVuZ3RoPWJMZW5ndGggLCBjb21wYXJl
PSJiIC8gYSIsIHJhdGlvTGVuZ3RoPXJhdGlvTGVuZ3RoLCBwTWFya2VyPXBWYWx1ZUhlYWRlciwg
cExlbmd0aD1wTGVuZ3RoKSkKICAgICBmb3Iga2V5IGluIGEua2V5cygpOgogICAgICAgICBpZiBr
ZXkgPT0gdW5pdE1hcmtlcjoKICAgICAgICAgICAgIGNvbnRpbnVlCkluZGV4OiBMYXlvdXRUZXN0
cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBMYXlvdXRU
ZXN0cy9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyAr
NCwyMSBAQCB2YXIgc2VsZiA9IHRoaXM7CiAKIHNlbGYudGVzdFJ1bm5lciA9IHsKICAgICBuZXZl
cklubGluZUZ1bmN0aW9uOiBuZXZlcklubGluZUZ1bmN0aW9uLAotICAgIG51bWJlck9mREZHQ29t
cGlsZXM6IG51bWJlck9mREZHQ29tcGlsZXMsCisgICAgbnVtYmVyT2ZERkdDb21waWxlczogKGZ1
bmN0aW9uKCkgeworICAgICAgICBsZXQgbWFwOworICAgICAgICByZXR1cm4gKGYpID0+IHsKKyAg
ICAgICAgICAgIGlmIChpc0RGR0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVt
YmVyT2ZERkdDb21waWxlcyhmKTsKKworICAgICAgICAgICAgLy8gRW11bGF0ZSBydW5uaW5nIHRo
aXMgZnVuY3Rpb24gZm9yIGEgYml0IHRvIGdldCBzb21lIHRpZXJpbmcgYmVmb3JlIHJldHVybmlu
ZyB0cnVlLgorICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAgbWFwID0gbmV3
IFdlYWtNYXA7CisgICAgICAgICAgICBsZXQgY291bnQgPSBtYXAuZ2V0KGYpIHx8IDA7CisgICAg
ICAgICAgICBjb3VudCArPSAxOworICAgICAgICAgICAgbWFwLnNldChmLCBjb3VudCk7CisgICAg
ICAgICAgICByZXR1cm4gKGNvdW50IC8gNDAwMCkgfCAwOworICAgICAgICB9OworICAgIH0pKCks
CiAgICAgZmFpbE5leHROZXdDb2RlQmxvY2s6IGZhaWxOZXh0TmV3Q29kZUJsb2NrCiB9OwogCkBA
IC0xNDksOCArMTYzLDkgQEAgZnVuY3Rpb24gZGZnU2hvdWxkQmUodGhlRnVuY3Rpb24sIF9hLCBf
YgogICB2YWx1ZXMucHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOwogICAKICAgdHJ5IHsKLSAg
ICB3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOnRoZUZ1bmN0aW9ufSkpCisgICAgd2hpbGUgKCFkZmdD
b21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKSB7CiAgICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7
CisgICAgfQogICAgIHZhbHVlcy5wdXNoKGV2YWwoX2EpKTsKICAgfSBjYXRjaCAoZSkgewogICAg
IGV4Y2VwdGlvbiA9IGU7CkBAIC0zNDYsNyArMzYxLDcgQEAgZnVuY3Rpb24gZGZnSW5jcmVtZW50
KGFyZ3VtZW50KQogICAgIGlmIChkaWRGYWlsU29tZVRlc3RzKQogICAgICAgICByZXR1cm4gYXJn
dW1lbnQuaTsKICAgICAKLSAgICBpZiAoIWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSkKKyAgICBpZiAo
IWRmZ0NvbXBpbGVkKGFyZ3VtZW50KSAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
ICJzdGFydCIgaW4gYXJndW1lbnQgPyBhcmd1bWVudC5zdGFydCA6IDA7CiAgICAgCiAgICAgcmV0
dXJuIGFyZ3VtZW50Lmk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418203</attachid>
            <date>2021-01-22 18:05:52 -0800</date>
            <delta_ts>2021-01-25 12:09:08 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>634601</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0xNjQ2
LDEzICsxNjQ4LDEzIEBAIGxldCBydW5XYXNtID0gdHJ1ZTsKIGlmICh0eXBlb2YgV2ViQXNzZW1i
bHkgPT09ICJ1bmRlZmluZWQiKQogICAgIHJ1bldhc20gPSBmYWxzZTsKIAotaWYgKGZhbHNlKSB7
CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZhbHNlOwogICAgIHJ1bkFSRVMgPSBmYWxz
ZTsKICAgICBydW5XU0wgPSBmYWxzZTsKICAgICBydW5SZXhCZW5jaCA9IGZhbHNlOwogICAgIHJ1
bldUQiA9IGZhbHNlOwotICAgIHJ1blN1blNwaWRlciA9IGZhbHNlOworICAgIHJ1blN1blNwaWRl
ciA9IHRydWU7CiAgICAgcnVuU2ltcGxlID0gZmFsc2U7CiAgICAgcnVuQ0RKUyA9IGZhbHNlOwog
ICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9j
bGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9j
bGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgaWYgKGlzRDgpCiBpZiAodHlw
ZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0TGlzdCA9IHVuZGVmaW5lZDsK
IAorLy90ZXN0TGlzdCA9IFsnbi1ib2R5LVNQJ107CisKIGlmICh0eXBlb2YgdGVzdEl0ZXJhdGlv
bkNvdW50ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0SXRlcmF0aW9uQ291bnQgPSB1bmRlZmlu
ZWQ7CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNo
bWFyay1ydW5uZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDggQEAKIC8vIEZJWE1FOiBVc2UgdGhlIHJlYWwgcHJv
bWlzZSBpZiBhdmFpbGFibGUuCiAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgaW50ZXJmYWNlIGlz
IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVhbCBQcm9taXNlLgorCitfX2Rpc2FibGVTYW1wbGluZ1By
b2ZpbGVyKCk7CisKIGZ1bmN0aW9uIFNpbXBsZVByb21pc2UoKSB7CiAgICAgdGhpcy5fY2hhaW5l
ZFByb21pc2UgPSBudWxsOwogICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDsKQEAgLTEyOCwxNyAr
MTMxLDIxIEBAIEJlbmNobWFya1J1bm5lci5wcm90b3R5cGUuX3J1blRlc3QgPSBmdW4KIAogICAg
IHNlbGYuX3dyaXRlTWFyayhzdWl0ZS5uYW1lICsgJy4nICsgdGVzdC5uYW1lICsgJy1zdGFydCcp
OwogICAgIHZhciBzdGFydFRpbWUgPSBub3coKTsKKyAgICBfX2VuYWJsZVNhbXBsaW5nUHJvZmls
ZXIoKTsKICAgICB0ZXN0LnJ1bihwcmVwYXJlUmV0dXJuVmFsdWUsIGNvbnRlbnRXaW5kb3csIGNv
bnRlbnREb2N1bWVudCk7CisgICAgX19kaXNhYmxlU2FtcGxpbmdQcm9maWxlcigpOwogICAgIHZh
ciBlbmRUaW1lID0gbm93KCk7CiAgICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicg
KyB0ZXN0Lm5hbWUgKyAnLXN5bmMtZW5kJyk7CiAKICAgICB2YXIgc3luY1RpbWUgPSBlbmRUaW1l
IC0gc3RhcnRUaW1lOwogCiAgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAgIF9fZW5hYmxl
U2FtcGxpbmdQcm9maWxlcigpOwogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAg
ICAvLyBTb21lIGJyb3dzZXJzIGRvbid0IGltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgbGF5b3V0IGZv
ciBwYWludC4KICAgICAgICAgLy8gRm9yY2UgdGhlIGxheW91dCBoZXJlIHRvIGVuc3VyZSB3ZSdy
ZSBtZWFzdXJpbmcgdGhlIGxheW91dCB0aW1lLgogICAgICAgICB2YXIgaGVpZ2h0ID0gc2VsZi5f
ZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0
OworICAgICAgICBfX2Rpc2FibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgICAgIHZhciBlbmRU
aW1lID0gbm93KCk7CiAgICAgICAgIHNlbGYuX2ZyYW1lLmNvbnRlbnRXaW5kb3cuX3VudXNlZEhl
aWdodFZhbHVlID0gaGVpZ2h0OyAvLyBQcmV2ZW50IGRlYWQgY29kZSBlbGltaW5hdGlvbi4KICAg
ICAgICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicgKyB0ZXN0Lm5hbWUgKyAnLWFz
eW5jLWVuZCcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiAr
MzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3RpbwogCiBzdGF0
aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlv
bkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uQXNE
b3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25J
c0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2NjMsOCBAQCBwcml2YXRlOgogCiAgICAgICAg
IGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1iZXIiLCBmdW5jdGlvbkFzRG91YmxlTnVtYmVy
LCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzREZHRW5hYmxlZCIsIGZ1bmN0aW9u
SXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImRyb3BBbGxMb2Nr
cyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6ZXhw
b3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZygpKSB7CkBAIC0yNjUzLDYg
KzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uQXNEb3VibAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIobnVtKSk7CiB9CiAKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxlZCwgKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
T3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGdsb2JhbE9i
amVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHko
KSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5q
aXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNs
dWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCkBAIC0yNjksNyArMjcxLDcgQEAgdm9pZCBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBC
bG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxv
Y2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29k
ZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3Rh
dHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFwaChC
bG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVj
b2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUs
IHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3Rh
dHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBkdW1wSGVhZGVyKGJsb2NrLCBpbnN0cnVjdGlv
bnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91dC5wcmludCgiYmIjIiwgYmxvY2suaW5kZXgo
KSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRpY3Rpb25zQXRIZWFkKSB7CisgICAgICAgICAg
ICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhlYWQ6IFsiKTsKKyAgICAgICAgICAgIGNvbnN0
IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlvbnNBdEhlYWQtPmF0KGJsb2NrLmluZGV4KCkp
OworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgIj0i
KTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5hcmd1
bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9u
KG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
b3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkp
OwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGlj
U3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEw
OCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgogY2xhc3MgQ29kZUJsb2NrQnl0ZWNvZGVEdW1w
ZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwotICAg
IHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwg
Qnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0
IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOworICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFw
aChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIE9wdGlv
bmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0
SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CiAKICAgICB2b2lkIGR1bXBJZGVu
dGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgogCiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxW
ZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50
U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQorICAgIHZvaWQgZHVtcChDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMs
IE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBzcGVjdWxh
dGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCiAgICAg
ewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2tUeXBlPjo6ZHVtcEdy
YXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywgc3BlY3VsYXRpb25BdEhlYWQsIHBy
aW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZVVzZURlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlVXNlRGVmLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNyArODAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlyCiAg
ICAgLy8gTm8gdXNlcy4KICAgICBjYXNlIG9wX25ld19yZWdleHA6CiAgICAgY2FzZSBvcF9kZWJ1
ZzoKLSAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgIGNhc2Ugb3BfbG9vcF9oaW50OgogICAgIGNh
c2Ugb3Bfam1wOgogICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKQEAgLTEwMyw2ICsxMDIsNyBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlyCiAgICAgY2FzZSBvcF9nZXRf
c2NvcGU6CiAgICAgICAgIHJldHVybjsKIAorICAgIFVTRVMoT3BKbmVxUHRyLCB2YWx1ZSwgc3Bl
Y2lhbFBvaW50ZXIpCiAgICAgVVNFUyhPcFRvVGhpcywgc3JjRHN0KQogICAgIFVTRVMoT3BDaGVj
a1RkeiwgdGFyZ2V0VmlydHVhbFJlZ2lzdGVyKQogICAgIFVTRVMoT3BJZGVudGl0eVdpdGhQcm9m
aWxlLCBzcmNEc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmluCiAgICAgaWYgKGNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnQoc3BlY2lhbGl6YXRpb25LaW5k
KCkpOwogICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbnNTaXplKCkpOwotICAgIGlmICh0
aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgbV9zaG91bGRBbHdheXNC
ZUlubGluZWQpCisgICAgaWYgKCh0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgfHwgdGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgJiYgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQpCiAgICAgICAgIG91dC5wcmludCgiIChTaG91bGRBbHdheXNCZUlubGluZWQp
Iik7CiAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklubGluZSgpKQogICAgICAgICBv
dXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElDU3RhdHVzTWFwIHN0YXR1c01h
cDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAgIEJ5dGVjb2RlR3JhcGggZ3Jh
cGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIG91
dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+Ojpk
dW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6Om51bGxvcHQsIG91dCwg
c3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNN
YXAmIHN0YXR1c01hcCkKQEAgLTI5NSw2ICsyOTUsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZShvdGhlci52bSgpLCB0
aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcihvdGhlci5tX2luc3RydWN0aW9uc1Jh
d1BvaW50ZXIpCisgICAgLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyhvdGhlci5tX2FyZ3VtZW50
VmFsdWVQcm9maWxlcykKICAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFu
dFJlZ2lzdGVycykKICAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90
aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogICAgICwgbV9mdW5jdGlv
bkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKQEAgLTMwOSw3ICszMTAsOCBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgQVNTRVJUKG1fc2NvcGVSZWdp
c3Rlci5pc0xvY2FsKCkpOwogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwotICAg
IHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKworICAgIG1fbnVtUGFy
YW1ldGVycyA9IG90aGVyLm51bVBhcmFtZXRlcnMoKTsKICAgICAKICAgICB2bS5oZWFwLmNvZGVC
bG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTg1MCw3ICs4NTIsNyBAQCBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogICAgIC8vIHRvIHRoZSBDb2RlQmxvY2suIEhvd2V2ZXIsIGl0cyBsaWZlY3lj
bGUgaXMgdGllZCBkaXJlY3RseSB0byB0aGUgQ29kZUJsb2NrLCBhbmQKICAgICAvLyB3aWxsIGJl
IGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIHRoZSBDb2RlQmxvY2sgZGVzdHJ1Y3RzLgogCi0g
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKICNlbmRpZgogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0
KCkucmVtb3ZlKHRoaXMpOwpAQCAtOTY0LDYgKzk2Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRB
bHRlcm5hdGl2ZShWTSYgdm0sIEMKIHsKICAgICBSRUxFQVNFX0FTU0VSVChhbHRlcm5hdGl2ZSk7
CiAgICAgUkVMRUFTRV9BU1NFUlQoYWx0ZXJuYXRpdmUtPmppdENvZGUoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoYWx0ZXJuYXRpdmUtPmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpID09IGFsdGVy
bmF0aXZlKTsKICAgICBtX2FsdGVybmF0aXZlLnNldCh2bSwgdGhpcywgYWx0ZXJuYXRpdmUpOwog
fQogCkBAIC0xMDM3LDcgKzEwNDAsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJv
bmdseShjb25zCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tz
IGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZl
cmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAg
Ly8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUu
Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAo
IUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDQ1LDcgKzEwNDgsNyBAQCBib29sIENvZGVCbG9jazo6
c2hvdWxkVmlzaXRTdHJvbmdseShjb25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNv
bkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtl
ZCh0aGlzKTsKIH0KQEAgLTEwNTgsNiArMTA2MSw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xp
dmUoSklUVHlwZSBqaXRUeXAKICAgICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAg
ICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwNzQsNiArMTA3OSw4IEBAIHN0YXRpYyBT
ZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkg
MTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8g
SW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7
CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5
cGU6OkZUTEpJVDoKQEAgLTExNjksNyArMTE3Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJM
RShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
eworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZH
OjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAg
ICAKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwpAQCAtMTIxNyw3ICsxMjI0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IAogICAgIC8vIEluIHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJl
IGNhbGxlZCBvbiBhIGJhc2VsaW5lIENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAg
ICAvLyB0aGF0IHdlIG1pZ2h0IGRlY2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpl
dHRpc29uZWQgZHVlIHRvIG9sZCBhZ2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRv
ZXNuJ3QgcHJvdGVjdCB1cy4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENv
ZGUtPmRmZ0NvbW1vbigpOwpAQCAtMTUxOSw4ICsxNTI2LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6
OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJl
SW50ZXJwcmV0ZWQoaml0VHlwZSgpKSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7
CisgICAgICAgIC8vIE9PUFM6IFNlcGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3du
IGZ1bmN0aW9uIGZvciBKSVQgSUNzLiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3Qg
anVzdCBmb3IgTExJbnQuCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAg
ICB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyAr
MTUzNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkg
ewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7
CiAgICAgfQpAQCAtMTU0OCw2ICsxNTU3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KAogICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2Vs
aW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50
ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgpAQCAtMTU5MCw3ICsxNjAwLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5h
ZGQoQ29kZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVy
YXRvci0+dmFsdWUuYnlWYWxJbmZvID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkgeworICAgICAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAg
ICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9u
KCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3Rh
dHVzZXMuY2FsbHMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0
YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpA
QCAtMTc3NSw4ICsxNzg1LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRz
KGNvbnMKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CiAgICAgaWYgKGRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBm
b3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMp
IHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVD
b2RlQmxvY2spOworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyYW5zaXRpdmVseSBrZWVwIHRo
ZSBiYXNlbGluZSBjb2RlIGJsb2NrIGFsaXZlLiBJdCdzIGVhc2llciB0byBub3Qgd29ycnkgdGhh
dCB3ZSdyZSByZWx5aW5nIG9uIHRoZSBMT0wgQ29kZUJsb2NrIHNvbWVob3cuCisgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNv
ZGVCbG9jay5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwogICAgICAgICB9CiAgICAg
fQogI2VuZGlmCkBAIC0xODEwLDEyICsxODIyLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0U3Ryb25nUmVmZXIKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3Jk
ZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRPU1JFeGl0
VGFyZ2V0cyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIH0KICNlbmRpZgorCisgICAgaWYgKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fYWx0ZXJu
YXRpdmUpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgy
Myw3ICsxODM4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgog
ICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlm
ICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2Rl
Ojppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xODU5
LDYgKzE4NzQsMjUgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdgog
I2VuZGlmCiB9CiAKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpsb2xPckJhc2VsaW5lQWx0ZXJuYXRp
dmUoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgQ29kZUJsb2NrKiByZXN1bHQgPSB0aGlzOwor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGF1dG8gaml0VHlwZSA9IHJlc3VsdC0+aml0VHlw
ZSgpOworICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKK30K
KwogQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB7CiAjaWYgRU5BQkxF
KEpJVCkKQEAgLTE4NjcsNyArMTkwMSw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGlu
ZVZlcnNpb24oKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9
IHJlcGxhY2VtZW50KCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZXNSZXBsYWNlbWVudENvZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRo
ZSByZXBsYWNlbWVudCBjYW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAg
YW5kIHRoZSBleGVjdXRhYmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRz
IGNvZGVCbG9ja3MgKHNlZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNz
LAogICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24g
dGhlIHN0YWNrLCBhbmQgYXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTk2NSw3IEBA
IEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxs
U2l0ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENh
bGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBS
RUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBB
U1NFUlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBD
b2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsK
QEAgLTE5NDksNiArMTk4Myw4IEBAIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVCbG9jazo6
bmV3RXgKIAogdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CisgICAgQVNTRVJU
KGJhc2VsaW5lQWx0ZXJuYXRpdmUoKSA9PSB0aGlzKTsKKwogICAgIGF1dG8mIGluc3RydWN0aW9u
ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgT3BDYXRjaCBvcCA9IGlu
c3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gb3AubWV0YWRh
dGEodGhpcyk7CkBAIC0yMTMwLDkgKzIxNjYsOSBAQCB2b2lkIENvZGVCbG9jazo6bGlua0luY29t
aW5nQ2FsbChDYWxsRnJhCiAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7
CiB9CiAKLUNvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCitDb2RlQmxvY2sq
IENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSkKIHsKLSAg
ICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNw
ZWNpYWxpemF0aW9uS2luZCgpKTsKKyAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1Jl
cGxhY2VtZW50Q29kZUJsb2NrRm9yKGFsdGVybmF0aXZlLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7
CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMjIzMSw1MSArMjI2Nyw1NSBAQCB2b2lkIENvZGVC
bG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDKCpoZWFwKCkpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhp
bmdzIGhlcmU6Ci0gICAgLy8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMg
b24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAx
KSBJZiB3ZSdyZSBERkcvRlRMLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBv
biB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAogICAgIC8vICAg
IHdlIHNob3VsZCBPU1IgZXhpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3Ry
dWN0aW9uIGFmdGVyIHRoZSByZXR1cm4uCiAgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2Ug
Y2FsbCB0aGUgb3duZXIgZXhlY3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENv
ZGVCbG9jay4KIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpKSB7CiAgICAgICAgIGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMo
KTsKLSAgICAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdl
KSB7Ci0gICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KGNvbXBpbGF0aW9uKSkKLSAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNv
bihyZWFzb24sIGRldGFpbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hl
cyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFz
IGFscmVhZHkgaGFwcGVuZWQuCi0gICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+
aW52YWxpZGF0ZSgpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxp
ZGF0ZWQuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkg
fHwgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93
bmVyRXhlY3V0YWJsZSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChy
ZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgICAgIFBy
b2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5jb21waWxhdGlvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlv
bikpCisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNv
biwgZGV0YWlsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNo
ZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhh
cyBhbHJlYWR5IGhhcHBlbmVkLgorICAgICAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1v
bigpLT5pbnZhbGlkYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJl
ZW4gaW52YWxpZGF0ZWQuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSBy
ZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhdm0uaGVh
cC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKERGRzo6c2hv
dWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgaW52YWxpZGF0
ZSAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCiAgICAg
Ly8gQ291bnQgdGhlIHJlb3B0aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHdhbnRl
ZC4KICAgICBpZiAobW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBNYXliZSB0aGlzIHNob3VsZCBjYWxsIGFsdGVybmF0aXZlKCkuCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICAgICAgYmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAgIERpZCBjb3VudCByZW9wdGltaXphdGlvbiBmb3IgIiwgKnRoaXMs
ICJcbiIpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmICh0aGlzICE9IHJlcGxhY2VtZW50
KCkpIHsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhlIGVudHJ5
cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKICAgICAgICAgLy8gYmxv
Y2tzLgorICAgICAgICAvLyBPciwgd2UncmUgYW4gTE9MIENvZGVCbG9jayBhbmQgd2VyZSBhbHJl
YWR5IGpldHRpc29uZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYWx0ZXJu
YXRpdmUoKSkKICAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwog
Ci0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFz
b24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQorICAgIGlmIChKSVRDb2RlOjpp
c0RGR09yRlRMKGppdFR5cGUoKSkgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCiAgICAg
ICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IAogICAgIC8vIEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRv
IGluc3RhbGwgY29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3
b3VsZCBhZGQgYSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCkBAIC0yMzA2LDcg
KzIzNDYsNyBAQCBKU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9iYWxPYmplY3RGCiAgICAg
YXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdCgpOwot
ICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKIH0KIAogY2xhc3MgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIHsKQEAg
LTIzNjUsNyArMjQwNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2Fs
bEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9m
aWxpbmcoKSkKKyAgICBpZiAoIWhhc0Jhc2VsaW5lT3JMT0xQcm9maWxpbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcykpCkBAIC0y
MzkwLDcgKzI0MzAsNyBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxG
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6
aXNERkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgbV9zaG91
bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZUNhbGxMaW5rKCksICIgICAgQ2xlYXJpbmcgU0FCSSBiY2F1c2UgY2FsbGVyIHdhcyBh
bHJlYWR5IG9wdGltaXplZC4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ4MywxMiArMjUyMywx
NCBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMoCiB7CiAgICAgQVNT
RVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwogICAgIGlmIChPcHRpb25z
Ojp0ZXN0VGhlRlRMKCkpIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24p
CiAgICAgICAgICAgICByZXR1cm4gMTAwMDAwMDsKICAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5D
b21waWxlZFdpdGhGVEwgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwog
ICAgIH0KICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsK
LSAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVw
bGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcjsKKyAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJl
cGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXI7CiB9CiAKIGludDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxp
ZXIoKSBjb25zdApAQCAtMjY0MSw3ICsyNjgzLDcgQEAgYXV0byBDb2RlQmxvY2s6OnVwZGF0ZU9T
UkV4aXRDb3VudGVyQW5kQwogCiAgICAgYm9vbCBkaWRUcnlUb0VudGVySW5Mb29wID0gZmFsc2U7
CiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4aXQubV9jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFt
ZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0g
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CisgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlU
b0VudGVySW5Mb29wKCkpIHsKICAgICAgICAgICAgIGRpZFRyeVRvRW50ZXJJbkxvb3AgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3MDksMjUgKzI3NTEsMzQgQEAg
dm9pZCBDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdAogdm9pZCBDb2RlQmxvY2s6
OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxh
dGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgpOwotICAg
IGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgaWYgKHR5cGUgIT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgJiYgdHlwZSAhPSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAg
ZGF0YUxvZ0xuKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNvZGUgYnV0IGhh
dmUgIiwgdHlwZSk7CiAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihqaXRDb2RlKCkuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBlKSk7CiAgICAg
fQogICAgIAogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudCgp
OwotICAgIGJvb2wgaGFzUmVwbGFjZW1lbnQgPSAocmVwbGFjZW1lbnQgJiYgcmVwbGFjZW1lbnQg
IT0gdGhpcyk7CisgICAgYm9vbCBoYXNSZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50ICYmIHJlcGxh
Y2VtZW50ICE9IHRoaXM7CisgICAgYm9vbCByZXBsYWNlbWVudElzSGlnaGVyVGllciA9IGZhbHNl
OworICAgIGlmIChoYXNSZXBsYWNlbWVudCkgeworICAgICAgICByZXBsYWNlbWVudElzSGlnaGVy
VGllciA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudC0+aml0VHlwZSgpLCBqaXRU
eXBlKCkpOworICAgICAgICBoYXNSZXBsYWNlbWVudCAmPSByZXBsYWNlbWVudElzSGlnaGVyVGll
cjsKKyAgICB9CiAgICAgaWYgKChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKSAhPSBo
YXNSZXBsYWNlbWVudCkgewogICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiB3ZSBoYXZlIHJlc3Vs
dCA9ICIsIHJlc3VsdCwgIiBidXQgIik7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSB0aGlz
KQogICAgICAgICAgICAgZGF0YUxvZygid2UgYXJlIG91ciBvd24gcmVwbGFjZW1lbnQuXG4iKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0YUxvZygib3VyIHJlcGxhY2VtZW50IGlzICIs
IHBvaW50ZXJEdW1wKHJlcGxhY2VtZW50KSwgIlxuIik7CisgICAgICAgIGRhdGFMb2dMbigiVXM6
ICIsIFJhd1BvaW50ZXIodGhpcyksICIgcmVwbGFjZW1lbnQ6ICIsIFJhd1BvaW50ZXIocmVwbGFj
ZW1lbnQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0g
ICAgCisKKyAgICBpZiAoaGFzUmVwbGFjZW1lbnQgJiYgIXJlcGxhY2VtZW50SXNIaWdoZXJUaWVy
KQorICAgICAgICByZXR1cm47CisKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29t
cGlsYXRpb25TdWNjZXNzZnVsOgotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJl
cGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKQEAgLTI3NTYs
NyArMjgwNyw4IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAg
ICAKIHVpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMy
X3QgZGVzaXJlZFRocmVzaG9sZCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpOworICAgIC8vQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKTsgLy8gT09QUzogV2UgY2FsbCB0aGlzIGZyb20gdGhlIExPTCBjb21waWxlciB0
aHJlYWQgYmVmb3JlIGluc3RhbGwuCisKICAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5
IHNvIHdlIGRvbid0IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKICAgICAv
LyBlbm91Z2ggdGhhdCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4KICAgICB1bnNpZ25lZCByZXN1
bHQgPSBkZXNpcmVkVGhyZXNob2xkOwpAQCAtMjgzNiw3ICsyODg4LDcgQEAgREZHOjpDb2RlT3Jp
Z2luUG9vbCYgQ29kZUJsb2NrOjpjb2RlT3JpZwogCiBzaXplX3QgQ29kZUJsb2NrOjpudW1iZXJP
ZkRGR0lkZW50aWZpZXJzKCkgY29uc3QKIHsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkp
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21t
b24oKS0+ZGZnSWRlbnRpZmllcnMuc2l6ZSgpOwpAQCAtMjg0Nyw3ICsyODk5LDcgQEAgY29uc3Qg
SWRlbnRpZmllciYgQ29kZUJsb2NrOjppZGVudGlmaWVyKAogICAgIHNpemVfdCB1bmxpbmtlZElk
ZW50aWZpZXJzID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmllcnMpCiAg
ICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0gICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NFUlQoSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdD
b21tb24oKS0+ZGZnSWRlbnRpZmllcnNbaW5kZXggLSB1bmxpbmtlZElkZW50aWZpZXJzXTsKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKQEAgLTI5MTIsMzAgKzI5NjQsMzEgQEAgdm9pZCBD
b2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKCkKICAgICB1cGRhdGVBbGxBcnJheVByZWRp
Y3Rpb25zKCk7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCitib29s
IENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVUb0RGR05vdygpCiB7CiAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhpcywg
Ii4uLiIpOwogCiAgICAgaWYgKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IE9wdGlvbnM6
Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAK
LSAgICB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICBiYXNlbGluZUNvZGVCbG9j
ay0+dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogICAgIAogICAgIHVuc2lnbmVkIG51bWJl
ck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKICAgICB1bnNpZ25lZCBudW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzOwotICAgIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5k
Q291bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMpOworICAgIGJhc2VsaW5lQ29kZUJsb2NrLT51cGRhdGVBbGxW
YWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MobnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAogICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZ0YoCiAgICAgICAgICAg
ICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUpLCAlbGYgKCV1IC8gJXUpXG4iLAotICAg
ICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBu
dW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpLAotICAgICAgICAgICAgbnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcygpLAotICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpLAotICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywgVmFsdWVQ
cm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgKiBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpKTsKKyAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzIC8gYmFzZWxpbmVDb2RlQmxvY2stPm51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzKCksCisgICAgICAgICAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMs
IGJhc2VsaW5lQ29kZUJsb2NrLT5udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpLAor
ICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBiYXNlbGluZUNvZGVCbG9jay0+bnVtYmVyT2ZOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmls
ZXMsIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzICogYmFzZWxpbmVDb2RlQmxvY2stPm51
bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpOwogICAgIH0KIAotICAgIGlmICgoIW51
bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVO
b25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCi0gICAgICAgICYm
ICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUo
KSkKKyAgICBpZiAoKCFiYXNlbGluZUNvZGVCbG9jay0+bnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cyAvIGJhc2VsaW5lQ29kZUJsb2NrLT5udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
ID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCisgICAgICAgICYmICgh
YmFzZWxpbmVDb2RlQmxvY2stPnRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJs
ZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tl
dHMgLyBiYXNlbGluZUNvZGVCbG9jay0+dG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBP
cHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQogICAgICAgICAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIpICsgMSA+PSBPcHRpb25z
OjptaW5pbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
CkBAIC0yOTQ4LDEwICszMDAxLDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5v
dygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4
aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoYWx0ZXJuYXRpdmUoKS0+
aml0VHlwZSgpKSk7CisgICAgLy8gT09QUworICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRM
KGppdFR5cGUoKSkpOwogICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGFsdGVy
bmF0aXZlKCk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVBbHRlcm5h
dGl2ZSgpOwogICAgIAogICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6IHsKQEAgLTMwNTAsNiArMzEwMyw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJh
bWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpC
YXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgcmV0dXJuIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
QEAgLTMyMjYsMTQgKzMyODAsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5z
aWduZWQgbgogewogICAgIG1fbnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7CiAgICAg
QVNTRVJUKG1fbnVtQnJlYWtwb2ludHMpOwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdK
SVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQog
ICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb0RlYnVnZ2VyQnJlYWtwb2lu
dCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVw
cGluZ01vZGUgbW9kZSkKIHsKICAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7Ci0gICAgaWYgKG1v
ZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0
VHlwZSgpKSkKKyAgICBpZiAobW9kZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5nKTsKIH0KIApAQCAtMzI5Niw3ICszMzUwLDcgQEAgVW5h
cnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogCiBib29sIENvZGVCbG9jazo6
Y291bGRUYWtlU3BlY2lhbEFyaXRoRmFzdENhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQogewotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICBpZiAoIWhhc0Jh
c2VsaW5lT3JMT0xQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSA9IGJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgaWYgKCFwcm9maWxlKQpAQCAtMzQyMSw5ICszNDc1LDkg
QEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRlYwogewogICAgIE9wdGlv
bmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAgICAgSklUVHlwZSBqaXRUeXBlID0g
dGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09IEpJVFR5cGU6OkludGVycHJldGVy
VGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICBpZiAoSklUQ29k
ZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGppdFR5cGUpKQogICAgICAgICBieXRlY29k
ZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29kZUluZGV4KCk7Ci0gICAgZWxzZSBpZiAoaml0
VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQpIHsK
KyAgICBlbHNlIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CiAgICAgICAgIENvZGVPcmlnaW4gb3Jp
Z2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKQEAgLTM0NjYsNyArMzUyMCw3IEBAIGJv
b2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3AKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiBXZSBuZWVkIHRvIGJlCiAg
ICAgLy8gY2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzaWduYWwgaGFu
ZGxlciBzYWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBwZXJ0dXJiIHRoZSByZWZDb3Vu
dCBvZiBtX2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5oYXNJbnN0
YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMoKTsKICNlbHNlCkBAIC0zNDgwLDcgKzM1MzQsNyBAQCBi
b29sIENvZGVCbG9jazo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzCiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQog
ICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhh
bmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291
bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBjb21tb25EYXRhID0gKm1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CiAgICAgY29tbW9uRGF0YS5pbnN0YWxsVk1UcmFwQnJlYWtwb2ludHModGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBwdWJsaWM6CiAKICAgICBDb2RlQmxv
Y2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29kZUJsb2NrKiBsb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAgICAKICAgICAvLyBGSVhN
RTogR2V0IHJpZCBvZiB0aGlzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjM2NzcKQEAgLTM0Nyw3ICszNDgsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGxpa2VseVRvVGFrZVNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7
Ci0gICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgaWYgKCFo
YXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgdW5zaWdu
ZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBi
eXRlY29kZUluZGV4KTsKQEAgLTM1Niw3ICszNTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNv
dWxkVGFrZVNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAg
ICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgaWYgKCFoYXNCYXNl
bGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgdW5zaWduZWQgdmFs
dWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBieXRlY29k
ZUluZGV4KTsKQEAgLTQxMiw4ICs0MTMsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogICAg
IHVuc2lnbmVkIGJ5dGVjb2RlQ29zdCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVDb3N0OyB9
CiAKLSAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSkKLSAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50KCk7CisgICAgLy8gRXhhY3Rs
eSBlcXVpdmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2Vt
ZW50Q29kZUJsb2NrRm9yKGFsdGVybmF0aXZlLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2lu
ZCgpKQorICAgIENvZGVCbG9jayogbmV3UmVwbGFjZW1lbnQoQ29kZUJsb2NrKiBhbHRlcm5hdGl2
ZSk7CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFJlZjxKSVRDb2RlPiYmIGNvZGUpCiAgICAg
ewpAQCAtNDM2LDkgKzQzNywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCi0gICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CisgICAgYm9v
bCBoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIEpJVFR5cGUgdHlw
ZSA9IGppdFR5cGUoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CiAgICAgfQogICAgIAogI2lmIEVOQUJMRShK
SVQpCkBAIC01MTEsNiArNTEzLDcgQEAgcHVibGljOgogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVl
UHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJvZmlsZShjb25z
dCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpAQCAtNTM5LDcgKzU0Miw3
IEBAIHB1YmxpYzoKICAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5zIGltcGxpZXMgdGhhdCB0aGVy
ZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wgaGFzQ29kZU9yaWdpbnMoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpOwor
ICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpOwogICAgIH0KICAg
ICAgICAgCiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENhbGxTaXRlSW5kZXggaW5kZXgpCkBA
IC04MDMsNyArODA2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mREZHQ29tcGls
ZXMoKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAotICAgIGJvb2wgc2hvdWxkT3B0aW1pemVOb3co
KTsKKyAgICBib29sIHNob3VsZE9wdGltaXplVG9ERkdOb3coKTsKICAgICB2b2lkIHVwZGF0ZUFs
bFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAgICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRp
Y3Rpb25zKCk7CiAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1NywxNSBAQCB2b2lkIENvZGVCbG9j
azo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1f
dmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKK30KIAordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoQ2F0Y2hQcm9maWxl
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAg
aWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKGF1
dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKQorICAgICAgICAg
ICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wg
Q29kZU9yaWdpbjo6aXNBcHByb3hpbWF0ZWx5RXF1YWxUbygKICAgICAgICAgaWYgKCFhSGFzSW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgICAg
ICBpZiAoYUlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgIT0gYklubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisgICAgICAgIGlmIChhSW5saW5l
Q2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpICE9IGJJbmxpbmVDYWxsRnJh
bWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAogICAgICAgICBhID0gYUlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVy
OwpAQCAtOTksNyArOTksNyBAQCB1bnNpZ25lZCBDb2RlT3JpZ2luOjphcHByb3hpbWF0ZUhhc2go
SW5sCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgPT0gdGVybWluYWwpCiAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKLSAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFz
aDxKU0NlbGwqPjo6aGFzaChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgp
KTsKKyAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChpbmxpbmVD
YWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICAKICAgICAg
ICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgIH0KQEAg
LTEyMSw3ICsxMjEsNyBAQCBDb2RlQmxvY2sqIENvZGVPcmlnaW46OmNvZGVPcmlnaW5Pd25lcigp
CiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gdGhpcy0+aW5saW5lQ2FsbEZyYW1lKCk7CiAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgIHJldHVy
biBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwog
fQogCiBpbnQgQ29kZU9yaWdpbjo6c3RhY2tPZmZzZXQoKSBjb25zdApAQCAtMTQ1LDcgKzE0NSw3
IEBAIHZvaWQgQ29kZU9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKICAgICAgICAgICAg
IG91dC5wcmludCgiIC0tPiAiKTsKICAgICAgICAgCiAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJh
bWUqIGZyYW1lID0gc3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgICAgIG91
dC5wcmludChmcmFtZS0+YnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1BvaW50
ZXIoZnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwgIj4gIik7CisgICAgICAgICAgICBv
dXQucHJpbnQoZnJhbWUtPmJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBSYXdQb2lu
dGVyKGZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwgIj4gIik7CiAgICAgICAg
ICAgICBpZiAoZnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIoY2xvc3VyZSkgIik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgRXhpCiAgICAgY2FzZSBFeGl0RnJvbUFueXRoaW5nOgogICAgICAgICBvdXQucHJpbnQo
IkZyb21Bbnl0aGluZyIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0RnJvbUxPTDoK
KyAgICAgICAgb3V0LnByaW50KCJGcm9tTE9MIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEV4aXRGcm9tREZHOgogICAgICAgICBvdXQucHJpbnQoIkZyb21ERkciKTsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdK
SVRUeXBlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0aW5nSklUVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CiAgICAgRXhp
dEZyb21Bbnl0aGluZywKKyAgICBFeGl0RnJvbUxPTCwKICAgICBFeGl0RnJvbURGRywKICAgICBF
eGl0RnJvbUZUTAogfTsKQEAgLTM4LDYgKzM5LDggQEAgZW51bSBFeGl0aW5nSklUVHlwZSA6IHVp
bnQ4X3QgewogaW5saW5lIEV4aXRpbmdKSVRUeXBlIGV4aXRpbmdKSVRUeXBlRm9yKEpJVFR5cGUg
dHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoK
KyAgICAgICAgcmV0dXJuIEV4aXRGcm9tTE9MOwogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgog
ICAgICAgICByZXR1cm4gRXhpdEZyb21ERkc7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZy
YW1lLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE3ICs0NSwxNyBA
QCBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUZvckNhCiAKIENvZGVCbG9ja0hh
c2ggSW5saW5lQ2FsbEZyYW1lOjpoYXNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2stPmhhc2goKTsKKyAgICByZXR1cm4gbG9sT3JCYXNlbGluZUNvZGVCbG9jay0+aGFz
aCgpOwogfQogCiBDU3RyaW5nIElubGluZUNhbGxGcmFtZTo6aGFzaEFzU3RyaW5nSWZQb3NzaWJs
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5oYXNoQXNTdHJpbmdJ
ZlBvc3NpYmxlKCk7CisgICAgcmV0dXJuIGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmhhc2hBc1N0
cmluZ0lmUG9zc2libGUoKTsKIH0KIAogQ1N0cmluZyBJbmxpbmVDYWxsRnJhbWU6OmluZmVycmVk
TmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihi
YXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLT5lY21hTmFtZSgpLnV0ZjgoKTsK
KyAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGxvbE9yQmFzZWxpbmVDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKS0+ZWNtYU5hbWUoKS51dGY4KCk7CiB9CiAKIHZvaWQg
SW5saW5lQ2FsbEZyYW1lOjpkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1w
QnJpZWZGdW5jdGlvbkkKIAogdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgb3V0LnBy
aW50KGJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpKSk7CisgICAgb3V0LnByaW50KGJyaWVmRnVuY3Rpb25JbmZvcm1hdGlv
bigpLCAiOjwiLCBSYXdQb2ludGVyKGxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpKTsKICAg
ICBpZiAoaXNJblN0cmljdENvbnRleHQoKSkKICAgICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1v
ZGUpIik7CiAgICAgb3V0LnByaW50KCIsICIsIGRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4KCks
ICIsICIsIHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewog
ICAgIH0KICAgICAKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJndW1lbnRzV2l0aEZpeHVw
OyAvLyBJbmNsdWRlcyAndGhpcycgYW5kIGFyaXR5IGZpeHVwcy4KLSAgICBXcml0ZUJhcnJpZXI8
Q29kZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKKyAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2Nr
PiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwog
CiAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90
IGluY2x1ZGUgZml4dXBzLgpAQCAtMjMxLDIwICsyMzEsMjEgQEAgc3RydWN0IElubGluZUNhbGxG
cmFtZSB7CiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
c3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
c3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNl
dCgpOyB9CiAKLSAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gYmFz
ZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0luU3RyaWN0Q29udGV4dCgpOyB9
CisgICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGxvbE9yQmFzZWxp
bmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0luU3RyaWN0Q29udGV4dCgpOyB9CiAK
ICAgICB2b2lkIGR1bXBCcmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oUHJpbnRTdHJlYW0mKSBjb25z
dDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogCiAgICAgTUFLRV9QUklO
VF9NRVRIT0QoSW5saW5lQ2FsbEZyYW1lLCBkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uLCBi
cmllZkZ1bmN0aW9uSW5mb3JtYXRpb24pOwotCiB9OwogCiBpbmxpbmUgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVDYWxsRnJhbWUpOwotICAgIHJl
dHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgIGlmIChD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVC
bG9jay5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2
ZSgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4sIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2spCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWaXJ0
dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM0LDcgKzEzNSw3
IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNpemVvZigKIAogZW51bSBPcGVy
YW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBmYWxzZT4KIGNsYXNzIE9wZXJh
bmRzIHsKIHB1YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3RkOjpjb25kaXRpb25hbF90PHN0
ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBWZWN0b3I8VCwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBAIHB1YmxpYzoKIAogICAgIE9w
ZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFy
Z3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCisgICAgZXhwbGljaXQg
T3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51
bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRz
KG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2FscyhudW1Mb2NhbHMpCisgICAgICAg
ICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNp
emUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOworICAgICAgICBzaXplX3Qg
c2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMg
KyAhIXRyYWNrQ2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwogICAgICAgICBp
ZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQogICAgICAgICAg
ICAgbV92YWx1ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNp
emVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25z
dCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3Vt
ZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFu
dHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1B
cmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1f
bnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3co
bnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmdy
b3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3RhbnRzICsgbnVtVG1wcyArICEh
dHJhY2tDYWxsZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAg
fQogICAgIApAQCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcGVyYW5k
cyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5p
dGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9m
QXJndW1lbnRzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMo
KSkKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1iZXJPZkNvbnN0YW50cygpKQog
ICAgIHsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXplKCkpOwogICAgICAgICBtX3Zh
bHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3Niw1MSBAQCBwdWJsaWM6CiAK
ICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3Vt
ZW50czsgfQogICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
TG9jYWxzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1iZXJPZkxvY2FscygpOyB9Cisg
ICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Db25zdGFu
dHM7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCkgLSBudW1iZXJP
ZkNvbnN0YW50cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAgdGVtcGxhdGUgPGJvb2wgZm9v
ID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+
CisgICAgc2l6ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlcy5zaXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3QgdG1wSW5kZXgoc2l6ZV90IGlk
eCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZlRtcHMoKSk7Ci0g
ICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMo
KTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxv
Y2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAgICAgc2l6ZV90IGFyZ3VtZW50
SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1i
ZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsKICAgICB9Ci0gICAgCiAgICAg
c2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1l
bnRzKCkgKyBpZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFudEluZGV4KHNpemVfdCBpZHgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZDb25zdGFudHMoKSk7
CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSAr
IGlkeDsKKyAgICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3QgaWR4KSB7IHJldHVybiBtX3Zh
bHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KICAgICAKICAgICBSZWZU
eXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgo
aWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorCisgICAgdGVtcGxhdGUgPGJv
b2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0Nh
bGxlZT4+CisgICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0K
KyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lm
X3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5cGUgY2FsbGVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAgUmVmVHlwZSBsb2NhbChzaXpl
X3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RS
ZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5k
ZXgoaWR4KV07IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBjb25zdGFu
dChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tjb25zdGFudEluZGV4KGlkeCld
OyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgc2l6
ZV90IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMo
KSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG51bWJlck9mVG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxsZWUgKyBz
aXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKICAg
ICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1
ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0g
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRz
KCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSArICEhdHJhY2tDYWxs
ZWUgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwogCiAgICAgICAgIGlm
IChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0
aWFsaXphdGlvbikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qg
b3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAg
ICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9wZXJhbmQub2Zmc2V0KCkgPT0g
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGVl
SW5kZXgoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4
KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5p
c0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRJbmRleChvcGVyYW5kLnRv
Q29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xv
Y2FsKCkpOwogICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUgQEAgcHVibGljOgogICAgIAog
ICAgIFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxl
ZSgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQu
dG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50
KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFuZC50b0NvbnN0YW50SW5kZXgo
KSk7CiAgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCkBA
IC0zMzgsNiArMzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNB
cmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvcGVyYW5k
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9w
ZXJhbmQudG9Db25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZM
b2NhbHMoKTsKICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CkBA
IC0zNjQsOSArNDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51
bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBu
dW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgaWYgKGluZGV4
IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
KTsKLSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2Fscygp
ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFy
Z3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpCisgICAg
ICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW5kZXggLSBudW1iZXJP
ZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
dHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjYWxsZWVJbmRleCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKGluZGV4IC0gKG51
bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZDb25zdGFudHMo
KSkpOwogICAgIH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpAQCAtMzkzLDEwICs0MzcsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAK
IHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFy
ZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVz
dCBhcmUgdG1wcy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMg
YXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgdGhlIG5leHQg
bV9udW1Db25zdGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSByZXN0IGFyZSB0bXBzLgogICAg
IFN0b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHMgeyAwIH07CiAg
ICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Db25zdGFu
dHMgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUgdm9pZCBPcGVyYW5kOjpkdW1w
KFByaW50U3RyZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxs
ZWU+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90
IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7
CkBAIC01NywxMCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgInRt
cCIsIHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CiAg
ICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgImNhbGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgpLCBjb250ZXh0KSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIHRyYWNrQ2FsbGVlPgordm9p
ZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVu
dEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNzgs
NiArODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5k
ZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tD
YWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgY2FsbGVlKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0
RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSA9IGppdC0+Y29kZUJsb2NrKCktPmppdENvZGUoKS0+
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoaml0LT5j
b2RlQmxvY2soKSwgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOwogICAgICAgICBtX25lZWRzVG9S
ZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24gPSBtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRF
eGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgPiAwOwogICAg
ICAgICBpZiAobV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKQotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2Nr
KCktPmppdFR5cGUoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNE
RkdPckZUTChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVS
ZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0
RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOwog
ICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKQEAgLTcxMCw3ICs3MTAsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3Jw
aGljQWNjZXNzCiAgICAgICAgIC8vIFdlIHNldCB0aGVzZSB0byBpbmRpY2F0ZSB0byB0aGUgc3R1
YiB0byByZW1vdmUgaXRzZWxmIGZyb20gdGhlIENvZGVCbG9jaydzCiAgICAgICAgIC8vIGV4Y2Vw
dGlvbiBoYW5kbGVyIHRhYmxlIHdoZW4gaXQgaXMgZGVhbGxvY2F0ZWQuCiAgICAgICAgIGNvZGVC
bG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMgPSBjb2RlQmxvY2s7Ci0gICAgICAgIEFTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrVGhhdE93bnNFeGNlcHRpb25IYW5k
bGVycy0+aml0VHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNv
ZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOwogICAgICAgICBj
YWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcgPSBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9y
RXhjZXB0aW9uSGFuZGxpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBpc0ludDMyU3BlY3VsYXRpb24o
U3BlY3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0ludDMyT25seSk7
CiB9CiAKK2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihTcGVjdWxhdGVk
VHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjQnl0ZWNv
ZGVEb3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMyU3BlY3VsYXRpb24oU3BlY3Vs
YXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUgJiBTcGVjSW50
MzJPbmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBV
cGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxs
IHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNv
ZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBwdWJs
aWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
bnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OwpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rl
cik7IH0KICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJ
c0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9
CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNB
cmd1bWVudChtX3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3RhbnQoKTsgfQogICAgIGJvb2wg
aXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmly
dHVhbFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBp
c0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlz
TG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KQEAg
LTExNyw2ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwo
aW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3Bl
cmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6
OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFu
ZChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRUb09wZXJhbmQoaW50IGNvbnN0
YW50SW5kZXgpIHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJ
bmRleDsgfQogCiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwogfTsKQEAgLTEzMyw0ICsxMzUs
OSBAQCBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvCiAgICAgcmV0dXJu
IFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKGFyZ3Vt
ZW50KSArIG9mZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyRm9yQ29uc3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7CisgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVyYW5kKGNvbnN0YW50SW5kZXgp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcg
KzU0LDcgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dAogICAgICwg
dmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwg
dmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQogICAgICwgdmFs
dWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQotICAgICwgaW50ZXJz
ZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBz
LCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRtcHMsIDAsIEFic3RyYWN0VmFs
dWU6OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4ZWN1dGlvbkNvdW50KQogewog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5j
bHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkluQnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkluc3Rh
bmNlT2ZTdGF0dXMuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW1tdXRhYmxl
QnV0dGVyZmx5LmgiCkBAIC05MDUsNyArOTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybiBwcmVkaWN0aW9uOwogICAgICAgICB9OwogCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5
dGVjb2RlT2Zmc2V0KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgQ29kZU9yaWdp
bihieXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUoKSkpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxv
Y2tBbmRCeXRlY29kZU9mZnNldChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKSwgQ29kZU9yaWdpbihieXRlY29kZUluZGV4LCBpbmxpbmVDYWxs
RnJhbWUoKSkpOwogICAgICAgICBpZiAocHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKICAgICAgICAg
ICAgIHJldHVybiBwcmVkaWN0aW9uOwogCkBAIC05MzksNyArOTQwLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHdoaWxlIChzdGFjay0+bV9pbmxpbmVDYWxsRnJhbWUgIT0gY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay0+bV9jYWxs
ZXI7CiAKLSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJvbUZv
ckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5tX3Byb2ZpbGVkQmxvY2ssICpjb2Rl
T3JpZ2luKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJv
bUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5tX3Byb2ZpbGVkQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKSwgKmNvZGVPcmlnaW4pOwogICAgICAgICB9CiAKICAgICAgICAg
ZGVmYXVsdDoKQEAgLTk4Miw4ICs5ODMsOSBAQCBwcml2YXRlOgogCiAgICAgQXJyYXlNb2RlIGdl
dEFycmF5TW9kZShBcnJheVByb2ZpbGUmIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uKQog
ICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrKTsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrKTsKICAgICAgICAgYm9vbCBtYWtlU2Fm
ZSA9IHByb2ZpbGUub3V0T2ZCb3VuZHMobG9ja2VyKTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9k
ZTo6ZnJvbU9ic2VydmVkKGxvY2tlciwgJnByb2ZpbGUsIGFjdGlvbiwgbWFrZVNhZmUpOwogICAg
IH0KQEAgLTE2NjgsNyArMTY3MCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwo
Tm9kZSogY2EKICAgICBjb25zdCBJbnN0cnVjdGlvbiogc2F2ZWRDdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNp
YWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtp
bmQpOwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRh
YmxlKCktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmxvbE9yQmFz
ZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpbnNlcnRDaGVja3Mo
Y29kZUJsb2NrKTsKIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMhCkBAIC02
ODczLDcgKzY4NzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBIYXNoU2V0PHVuc2lnbmVkLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gc2VlbkFyZ3VtZW50
czsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPm1fbG9jayk7CiAKICAgICAgICAg
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQocHJvZmlsZS5tX29wZXJhbmQpOwpAQCAtODM0NSwyMyArODM0NywyOCBAQCBCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgewogICAgICAgICBtX2V4aXRQcm9m
aWxlLmluaXRpYWxpemUobV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKIAot
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgbV9sYXp5T3BlcmFuZHMuaW5pdGlhbGl6ZShsb2NrZXIsIG1fcHJvZmlsZWRC
bG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKGxvY2tlcikpOworICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvKiBjb2RlQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpOworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7CisgICAgICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFsaXplKGxvY2tlciwgY29k
ZUJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2VyKSk7CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIC8vIFdlIGRvIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgbG9jayBiZWNh
dXNlIHdlIHdhbnQgdG8gZW5jb3VyYWdlIFN0cnVjdHVyZVN0dWJJbmZvJ3MKICAgICAgICAgLy8g
dG8gYmUgcG90ZW50aWFsbHkgYWRkZWQgdG8gb3BlcmF0aW9ucyBhbmQgYmVjYXVzZSB0aGUgcHJv
ZmlsZWQgYmxvY2sgY291bGQgYmUgaW4gdGhlCiAgICAgICAgIC8vIG1pZGRsZSBvZiBMTEludC0+
SklUIHRpZXItdXAgaW4gd2hpY2ggY2FzZSB3ZSB3b3VsZCBiZSBhZGRpbmcgdGhlIGluZm8ncyBy
aWdodCBub3cuCi0gICAgICAgIGlmIChtX3Byb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lSklUUHJv
ZmlsaW5nKCkpCi0gICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2stPmdldElDU3RhdHVzTWFwKGxv
Y2tlciwgbV9iYXNlbGluZU1hcCk7CisgICAgICAgIGlmIChtX3Byb2ZpbGVkQmxvY2stPmhhc0Jh
c2VsaW5lT3JMT0xQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jay0+Z2V0
SUNTdGF0dXNNYXAobV9iYXNlbGluZU1hcCk7CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayog
b3B0aW1pemVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgbV9v
cHRpbWl6ZWRDb250ZXh0Lm9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZEJsb2NrOwotICAg
IGlmIChPcHRpb25zOjp1c2VQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24oKSAmJiBvcHRpbWl6
ZWRCbG9jaykgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG9wdGltaXplZEJs
b2NrLT5tX2xvY2spOwotICAgICAgICBvcHRpbWl6ZWRCbG9jay0+Z2V0SUNTdGF0dXNNYXAobG9j
a2VyLCBtX29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICB7CisgICAgICAgIENvZGVCbG9jayog
b3B0aW1pemVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxhY2VtZW50KCk7CisgICAgICAg
IG1fb3B0aW1pemVkQ29udGV4dC5vcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRCbG9jazsK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbigpICYm
IG9wdGltaXplZEJsb2NrICYmIEpTQzo6SklUQ29kZTo6aXNIaWdoZXJUaWVyKG9wdGltaXplZEJs
b2NrLT5qaXRUeXBlKCksIG1fcHJvZmlsZWRCbG9jay0+aml0VHlwZSgpKSkgeworICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihvcHRpbWl6ZWRCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgICAgIG9wdGltaXplZEJsb2NrLT5nZXRJQ1N0YXR1c01hcChsb2NrZXIsIG1fb3B0aW1p
emVkQ29udGV4dC5tYXApOworICAgICAgICB9CisgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2lj
Q29udGV4dFN0YWNrLmFwcGVuZCgmbV9vcHRpbWl6ZWRDb250ZXh0KTsKICAgICB9Ci0gICAgYnl0
ZUNvZGVQYXJzZXItPm1faWNDb250ZXh0U3RhY2suYXBwZW5kKCZtX29wdGltaXplZENvbnRleHQp
OwogICAgIAogICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1dpdGhGaXh1cCA9IHN0
ZDo6bWF4PGludD4oYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKTsKIApAQCAtODM3NSw3ICs4MzgyLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZQogCiAgICAgICAgIC8vIFRoZSBvd25lciBpcyB0aGUgbWFjaGlu
ZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgYmFycmllciBvbiB0aGF0IHdoZW4g
dGhlCiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCi0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YmFz
ZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHByb2ZpbGVkQmxvY2spOyAvLyBPT1BT
OiBBc3NlcnQgaXQncyBhIExPTCwgQmFzZWxpbmUsIG9yIExMSW50IENCLgogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUg
PyBtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9jYWxsZXIt
Pm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0
U3RhY2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBDb21tb25EYXRhOjp2YWxpZGF0
ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5j
aGVjayhyZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBpbmxpbmVDYWxs
RnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQorICAgICAgICAgICAgaWYgKENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2Rl
QmxvY2suZ2V0KCkpCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soYmFz
ZWxpbmVDb2RlQmxvY2spOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcy
LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIAogICAgIEFT
U0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwot
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCktPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIXByb2ZpbGVk
REZHQ29kZUJsb2NrIHx8IHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6REZHSklUKTsKICAgICAKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjc4LDcgKzE2NzgsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdy
YXBoOjptZXRoCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRB
cmd1bWVudERlZmluaXRlbHkgbm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1ODQxCiAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Tm9kZSAmJiBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgIENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IHByb2ZpbGVkQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAmcHJvZmlsZWRCbG9jay0+
dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTE2ODYsMTIgKzE2ODYsMTIgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSBHcmFwaDo6bWV0aAogCiAgICAgICAgIC8vIGN1cnJlbnROb2RlIGlzIG51bGwgd2hl
biB3ZSdyZSBkb2luZyBzcGVjdWxhdGlvbiBjaGVja3MgZm9yIGNoZWNrQXJndW1lbnRUeXBlcygp
LgogICAgICAgICBpZiAoIWN1cnJlbnROb2RlIHx8IG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBj
dXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljIHx8ICFjdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkp
IHsKLSAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2sgPSBwcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogCiAgICAgICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5k
KAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5v
ZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE3MDAsNyArMTcwMCw3IEBA
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKICAgICAgICAgICAgIGlm
IChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiAmcHJv
ZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpKTsKIAotICAgICAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2st
Pmhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlZEJs
b2NrLT5oYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
QmluYXJ5QXJpdGhQcm9maWxlKiByZXN1bHQgPSBwcm9maWxlZEJsb2NrLT5iaW5hcnlBcml0aFBy
b2ZpbGVGb3JCeXRlY29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAg
IGlmIChVbmFyeUFyaXRoUHJvZmlsZSogcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+dW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CisgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJh
bWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgIH0KICAg
ICAKICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlRm9yKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4pCkBAIC00OTIsMTMgKzQ5MiwyMCBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9ja0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
ICAgICB7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJu
IG1fcHJvZmlsZWRCbG9jazsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9y
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9jayk7CisgICAgICAgIHJldHVy
biBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmln
aW4sIG1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKKyAgICB9CisKKyAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVP
cmlnaW4pCisgICAgeworICAgICAgICBpZiAoYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJh
bWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CisgICAgICAgIHJldHVybiBtX3Byb2Zp
bGVkQmxvY2s7CiAgICAgfQogICAgIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRJc1N0aWxsVmFsaWQoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCB2b2lkIE9TUkVudHJ5RGF0YTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FOCiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIEFTU0VSVCghY29kZUJs
b2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQCB2b2lkIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlCiB7CiAg
ICAgQ29kZUJsb2NrKiBzb3VyY2VQcm9maWxlZENvZGVCbG9jayA9CiAgICAgICAgIGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soCi0gICAgICAgICAgICBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spOworICAgICAgICAgICAg
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2NrLT5iYXNlbGluZUFs
dGVybmF0aXZlKCkpOwogICAgIGlmIChzb3VyY2VQcm9maWxlZENvZGVCbG9jaykgewogICAgICAg
ICBFeGl0aW5nSW5saW5lS2luZCBpbmxpbmVLaW5kOwogICAgICAgICBpZiAobV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUuaW5saW5lQ2FsbEZyYW1lKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBoYW5k
bGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZQogICAgICAgICAgICAgaml0LmJyYW5jaFRl
c3Q4KAogICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6Tm9uWmVybywKICAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygKLSAgICAgICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCktPmFkZHJlc3NPZkRpZFRyeVRvRW50ZXJJbkxvb3AoKSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+YWRkcmVzc09mRGlkVHJ5VG9FbnRlckluTG9vcCgpKSkpOwogICAgIH0KICAgICAKICAg
ICBqaXQubW92ZSgKQEAgLTM4NCw4ICszODQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAgZm9y
IChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxsRnJhbWVzKSB7
CiAgICAgICAgICAgICBqaXQubW92ZSgKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YmFz
ZWxpbmVDb2RlQmxvY2suZ2V0KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0Zv
cklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKICAgICAgICAgICAgIG9zcldyaXRlQmFycmllcih2bSwgaml0LCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDQzLDcgKzIwNDMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uQ3JlYXRlCiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgaWYg
KGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tG
b3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgY29kZUJsb2NrID0g
aW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwogICAgIGVsc2UK
ICAgICAgICAgY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAKQEAgLTM2
MDUsNyArMzYwNSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2UK
ICAgICAKICAgICBib29sIGRpZFRyeVRvRW50ZXJJbnRvSW5saW5lZExvb3BzID0gZmFsc2U7CiAg
ICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4aXQtPm1fY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUg
PSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkgeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9F
bnRlckluTG9vcCgpKSB7CiAgICAgICAgICAgICBkaWRUcnlUb0VudGVySW50b0lubGluZWRMb29w
cyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzY2MCw3ICszNjYw
LDcgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZQogICAgIFdvcmts
aXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOwogICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSBl
eGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkpIHsKICAgICAgICAgd29ya2xpc3RTdGF0
ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKLSAgICAgICAgICAgIHZt
LCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKSk7
CisgICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5sb2xPckJhc2VsaW5l
QWx0ZXJuYXRpdmUoKSwgRlRMTW9kZSkpOwogICAgIH0gZWxzZQogICAgICAgICB3b3JrbGlzdFN0
YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOwogICAgIApAQCAtMzY5MCw3ICszNjkwLDcgQEAgc3Rh
dGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZQogICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29kZUJsb2NrLCAidHJpZ2dlckZUTFJlcGxhY2VtZW50IiwgKCkpOwogICAgIC8vIFdl
IG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KICAgICBjb21waWxlKAotICAgICAgICB2bSwgY29k
ZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIEJ5dGVjb2RlSW5k
ZXgoKSwKKyAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoY29kZUJsb2NrLT5s
b2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKSksIGNvZGVCbG9jaywgRlRMTW9kZSwgQnl0ZWNvZGVJ
bmRleCgpLAogICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4oKSwgVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKIAogICAgIC8vIElmIHdlIHJlYWNo
ZWQgaGVyZSwgdGhlIGNvdW50ZXIgaGFzIG5vdCBiZSByZXNldC4gRG8gdGhhdCBub3cuCkBAIC0z
NzQ5LDcgKzM3NDksNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZy
CiAgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CiAgICAgaWYgKFdvcmtsaXN0KiB3
b3JrbGlzdCA9IGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKSkgewogICAgICAgICB3
b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAotICAg
ICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCks
IEZUTEZvck9TUkVudHJ5TW9kZSkpOworICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNv
ZGVCbG9jay0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZlKCksIEZUTEZvck9TUkVudHJ5TW9kZSkp
OwogICAgIH0gZWxzZQogICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3du
OwogCkBAIC0zNzk3LDcgKzM3OTcsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2
bSwgQ2FsbEZyCiAgICAgICAgIH0KIAogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVC
bG9jaywgImRlbGF5RlRMQ29tcGlsZSIsICgiT1NSIGVudHJ5IGZhaWxlZCB0b28gbWFueSB0aW1l
cyIpKTsKLSAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGlt
aXphdGlvbigpOworICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5jb3VudFJl
b3B0aW1pemF0aW9uKCk7IC8vIE9PUFM6IFRoaXMgb3IgTE9MIENCPwogICAgICAgICBqaXRDb2Rl
LT5jbGVhck9TUkVudHJ5QmxvY2tBbmRSZXNldFRocmVzaG9sZHMoY29kZUJsb2NrKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfTsKQEAgLTM5MjgsNyArMzkyOCw3IEBAIHN0YXRpYyBj
aGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnIKICAgICBPcGVyYW5kczxPcHRpb25hbDxK
U1ZhbHVlPj4gbXVzdEhhbmRsZVZhbHVlczsKICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCA9IGpp
dENvZGUtPmJ5dGVjb2RlSW5kZXhUb1N0cmVhbUluZGV4LmdldChvcmlnaW5CeXRlY29kZUluZGV4
KTsKICAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdChjYWxsRnJhbWUsIGNvZGVCbG9jaywgQ29kZU9y
aWdpbihvcmlnaW5CeXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMp
OwotICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1Jl
cGxhY2VtZW50KCk7CisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVC
bG9jay0+bmV3UmVwbGFjZW1lbnQoY29kZUJsb2NrLT5sb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUo
KSk7CiAKICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExPU1Ii
LCAoKSk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBjb21waWxlKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NjAsNyArNTYwLDcgQEAgYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQogICAgIC8vIGNv
ZGUgdG8gYmUgcmVwbGFjZWQgZHVyaW5nIGEgY29tcGlsYXRpb24sIGV4Y2VwdCBpZiB3ZSBkZWxl
dGUgdGhlIHBsYW4sIGluIHdoaWNoCiAgICAgLy8gY2FzZSB3ZSB3b3VsZG4ndCBiZSBoZXJlLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI3MDcKLSAg
ICBpZiAobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgIT0gcmVwbGFjZW1lbnQtPmJhc2VsaW5l
VmVyc2lvbigpKQorICAgIGlmIChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSAhPSByZXBsYWNl
bWVudC0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIW1fd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC02NDQsOCArNjQ0LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxp
emVXaXRob3V0TgogICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChjb25zdGFu
dC5nZXQoKSk7CiAKICAgICAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1f
aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJh
bWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICAgICAgICAgICAgICB0cmFja2VkUmVm
ZXJlbmNlcy5hZGQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVC
bG9jay5nZXQoKSk7CisgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGlubGlu
ZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgYW55IG90aGVyIHJlZmVyZW5jZXMgdGhhdCB3
ZSBoYXZlIGFueXdoZXJlIGluIHRoZSBKSVRDb2RlIGFyZSBhbHNvCkBAIC02OTMsOCArNjkzLDgg
QEAgdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogCiAgICAgaWYgKG1f
aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6
ICptX2lubGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJh
bWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpKTsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoaW5saW5lQ2Fs
bEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldEFyZ3VtZW50U3RhcgogTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPU1JFeGl0RnV6ekNoZWNrKCkKIHsKICAgICBpZiAoIU9w
dGlvbnM6OnVzZU9TUkV4aXRGdXp6KCkKLSAgICAgICAgfHwgIWNhblVzZU9TUkV4aXRGdXp6aW5n
KG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9vcmlnaW4uc2VtYW50aWMpKQor
ICAgICAgICB8fCAhY2FuVXNlT1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5wcm9maWxlZENv
ZGVCbG9ja0ZvcihtX29yaWdpbi5zZW1hbnRpYykpCiAgICAgICAgIHx8ICFkb09TUkV4aXRGdXp6
aW5nKCkpCiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpOwogICAgIApAQCAt
NDQyOCw5ICs0NDI4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5v
ZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9j
aygpLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwpAQCAtNDUyMCw5ICs0NTIwLDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNo
RlBSUmVnID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5w
cm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KCk7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
KyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFBy
b2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJP
cHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
U3ViOwpAQCAtNTExMyw5ICs1MTEzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlu
Y09yRGVjKE5vZAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUq
IG5vZGUpCiB7CiAgICAgLy8gRklYTUU6IGFkZCBhIGZhc3QgcGF0aCwgYXQgbGVhc3QgZm9yIEJp
Z0ludDMyLCBidXQgcHJvYmFibHkgYWxzbyBmb3IgSGVhcEJpZ0ludCBoZXJlLgotICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVC
bG9jayA9IG1faml0LmdyYXBoKCkucHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBwcm9maWxlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpOwogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5h
ZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0g
b3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwpAQCAtNTM2OSw5ICs1MzY5LDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNo
RlBSUmVnID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5w
cm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KCk7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
KyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxP
cHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
TXVsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjEsNyArMTIxLDYgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Ywog
ewogICAgIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2ln
bmVkIG51bVZhcmlhYmxlczsKICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3
IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVt
VmFyaWFibGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBu
dW1UbXBzID0gY29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNl
dDsKICAgICB9IGVsc2UgeworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFz
ZWxpbmVDb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFz
ZWxpbmVDb2RlQmxvY2stPm51bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1Myw3ICszNTMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFy
Z3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAg
ICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4o
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFi
aWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDcgKzU2Nyw3IEBAIHZvaWQgSGVh
cDo6cHJvdGVjdChKU1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiB7
CiAgICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChtX3ZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdB
UElMb2NrKCkpOworICAgIC8vQVNTRVJUKG1fdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxv
Y2soKSk7IC8vIE9PUFMKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNiArNTIsMTcgQEAg
dm9pZCBDYWxsRnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRgogYm9vbCBDYWxsRnJhbWU6
OmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29k
ZUJsb2NrKCkpOwotICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewotICAgIGNh
c2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6Ci0gICAg
Y2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVC
eXRjb2RlSW5kZXgoY29kZUJsb2NrKCktPmppdFR5cGUoKSk7CiB9CiAKIGJvb2wgQ2FsbEZyYW1l
OjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChj
b2RlQmxvY2soKSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAg
Y2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgIGNhc2UgSklUVHlwZTo6QmFzZWxp
bmVKSVQ6CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC03OSw4ICs3MCw2IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxs
U2l0ZUJpdHNBcmVDb2RlT3JpZ2kKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU2LDEwICs0NTYsMTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxl
ckluZm8qIGZpbmRFeAogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxs
RnJhbWUoKTsKICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVySW5kZXg7Ci0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIGV4
Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsK
LSAgICBlbHNlCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChj
b2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNh
bGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOworICAgIGVsc2UKKyAgICAgICAgZXhj
ZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwog
CiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJ
bmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5s
aW5lZEZyYW1lKENhbGwKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3RlcikudW5ib3hlZEludDMyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZnJhbWUu
bV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7Ci0gICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICBtX2ZyYW1lLm1fY29k
ZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwog
ICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5k
ZXgoKTsKIAogICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZUZvckNhbGxGcmFtZShjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIEV4ZWN1dGFibGVCYXNlKiBBc3NlbWJseUhlbHBlcnM6OmV4ZWN1dGEK
ICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgp
OwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1l
LT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKIH0KIAogQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZGYXN0VHlwZWRBcnJheShH
UFJSZWcgYmFzZUdQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTIgKzMwLDE4IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJC
eXRlY29kZUdyYXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNv
ZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNs
dWRlICJEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0Fz
eW5jR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgog
I2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBA
IC00OSw2ICs1NSw4IEBACiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5j
bHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50
ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY4LDg5MSBA
QCBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGls
ZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBP
dmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1
dG8gc2V0VHlwZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlw
ZSkgeworICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOwor
ICAgIH07CisKKyAgICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1
bGF0ZWRUeXBlIHR5cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7
CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1
dG8gYnl0ZWNvZGUpIHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5n
ZXQoJmJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAg
Ly8gV2UgcmFjaWx5IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUg
dHlwZXMgaXQgcmVwcmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07
CisKKyAgICBhdXRvIHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBT
cGVjdWxhdGVkVHlwZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KSkgeworICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2Fs
bF92YXJhcmdzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29u
c3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3Ry
dWN0aW9uLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVl
UHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVBy
b2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2JpdHhvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRu
b3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cEJpdG5vdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBu
YW1lPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAg
c2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbjog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVu
PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0
ZXJhdG9yUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1f
bmV4dCwgbWV0YWRhdGEubV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNl
dFR5cGUoYnl0ZWNvZGUubV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlv
bik7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVBy
b2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBv
cF9tb3Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBl
Rm9yKGluc3RydWN0aW9uLT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1
ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmll
bGQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAg
c2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAg
ICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdp
dGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0
PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1
bWVudHM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJp
Yz4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICgh
KGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJv
ZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
IGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmln
aHQpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAg
ICAgICAgaWYgKCEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVj
RG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJl
TmFOOworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7Cisg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJp
Z0ludDMyIGJldHRlcgorICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBp
c0JpZ0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJp
bmdPclN0cmluZ09iamVjdFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAg
ICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8
IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoK
KyAgICBjYXNlIG9wX3N1YjoKKyAgICBjYXNlIG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRs
ZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAo
IShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwor
CisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVs
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVj
b2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlz
Qnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFNwZWNCeXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVBy
b2R1Y2VOYU5Gcm9tTm9uTmFOID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2Owor
ICAgICAgICAgICAgICAgIGlmIChtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYg
U3BlY0RvdWJsZVB1cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGSVhNRTogQ2FuIHByb2JhYmx5IGRvIGJldHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAg
aWYgKGlzQmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICAgICAgaWYgKCEhKGxlZnQg
JiAoU3BlY0JpZ0ludCB8IFNwZWNPYmplY3QpKSB8fCAhIShyaWdodCAmIChTcGVjQmlnSW50IHwg
U3BlY09iamVjdCkpKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjQmlnSW50OworICAg
ICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgfTsKKworICAg
ICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAg
aGFuZGxlKGluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVj
dGlvbi0+YXM8T3BNdWw+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9kaXYpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAg
aWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIC8vIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0
cyBvbiAlIDAKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkg
fCBTcGVjRG91YmxlUHVyZU5hTik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29k
ZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5
dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIg
fCBTcGVjQmlnSW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNp
Z25lZDoKKyAgICAgICAgLy8gTWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBm
ZWVkYmFjayBmb3Igc3BlY3VsYXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50
QXNEb3VibGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoK
KyAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHBy
b2ZpbGUpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMp
OworICAgICAgICAgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAg
ICAgc2V0VHlwZShkc3QsIHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNB
bnlJbnRBc0RvdWJsZSA6IFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVS
ZWFsOworICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9u
KGlucHV0KSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVEb3Vi
bGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0
VHlwZShkc3QsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9pbmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJbmM+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5
dGVjb2RlLm1fc3JjRHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X2RlYykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERl
Yz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9z
cmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7
CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
OworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQs
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAg
IH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYg
KCEobGVmdCAgJiYgcmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlz
QmlnSW50U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKworICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
IGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxl
ZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0
eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJl
ck9yQm9vbGVhblNwZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAg
ICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAg
ICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAo
IXR5cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVj
b2RlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9w
ZXJ0eV9rZXk6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRv
UHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3Jj
KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgh
KHR5cGUgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERz
dFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBNYXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJn
ZSB3LyBibG9ja3MgYWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhh
dmUgcHJvcGVyIHByb2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlw
ZShwcm9maWxlLm1fb3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+
bnVtVmFycygpKTsgKytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19h
cnJheToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwg
U3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NpemU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRo
U2l6ZT4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
LCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRo
X3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFz
X2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklY
TUU6IE1heWJlIHdlIGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdl
IHdhbnQKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+
KCksIFNwZWNPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlz
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNw
ZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJv
bWlzZU9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKSwgU3BlY1N0cmluZyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNG
dW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVj
RnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4
cDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+
KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0FzeW5jR2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1
bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3Bl
Y09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVMZXhpY2FsRW52aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0lu
dDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhh
c0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3By
b3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJl
UHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9o
YXNfZW51bWVyYWJsZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0
dXJlUG5hbWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwg
U3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwg
U3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3Ro
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCks
IFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2Nv
cGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCks
IFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3Bl
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURp
cmVjdEFyZ3VtZW50cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJn
dW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3Vt
ZW50czoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRB
cmd1bWVudHM+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4o
KSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
Z2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdl
bmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5l
d0dlbmVyYXRvcj4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9hcmd1bWVudF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BBcmd1bWVudENvdW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9zcHJlYWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3By
ZWFkPigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4o
KSwgU3BlY1JlZ0V4cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
U3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
c3RyaWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVx
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR3JlYXRlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dyZWF0ZXJlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVh
dGVyZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxv
dzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wSXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF90eXBlb2ZfaXNfb2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cFR5cGVvZklzT2JqZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfdHlwZW9mX2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFR5cGVvZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BFcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxs
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5n
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVj
U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRU
eXBlPihieXRlY29kZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRl
ZFR5cGU+KGJ5dGVjb2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV9zcmNEc3QsIHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZGVsX2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxf
YnlfdmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pc19jYWxsYWJs
ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0
aF90aGlzOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9j
aGVja190ZHo6CisgICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9u
b3A6CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJf
c2FtcGxlcl9lbmQ6CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6Cisg
ICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3Ry
YXBzOgorICAgIGNhc2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBj
YXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ug
b3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6
CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRh
X3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNh
c2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAg
ICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5l
cV9udWxsOgorICAgIGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51
bmRlZmluZWRfb3JfbnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3Rl
cToKKyAgICBjYXNlIG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ug
b3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6Cisg
ICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bf
am5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJl
cToKKyAgICBjYXNlIG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ug
b3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRj
aF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92
YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmls
ZV9jb250cm9sX2Zsb3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9w
dXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRf
c2V0dGVyX2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAg
Y2FzZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vu
dmlyb25tZW50OgorICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAg
IGNhc2Ugb3Bfd2lkZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6
CisgICAgY2FzZSBsbGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3By
b2dyYW1fcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1
ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAg
Y2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5l
cmljX3JldHVybl9wb2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3Ry
YW1wb2xpbmU6CisgICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25h
dGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2Nv
bnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFt
cG9saW5lOgorICAgIGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAg
ICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dl
dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNh
c2Ugb3BfaXRlcmF0b3Jfb3Blbl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6
CisgICAgY2FzZSBsbGludF9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2Ugd2FzbV90cmFtcG9s
aW5lX3dhc21fY2FsbF9pbmRpcmVjdF9ub190bHM6CisgICAgY2FzZSBub3JtYWxfb3NyX2V4aXRf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2dldF9ob3N0X2NhbGxfcmV0dXJuX3ZhbHVlOgor
ICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2Nh
bGxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2Nh
bGxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfZXZhbF9zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbDoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9j
b25zdHJ1Y3Q6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CisgICAg
Y2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW46CisgICAgY2FzZSBqc190cmFtcG9s
aW5lX29wX2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF9zbG93OgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2Nh
bGxfZXZhbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0X3Ns
b3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW5fc2xvdzoKKyAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdW50
YWc6CisgICAgY2FzZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrX3RhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2Nv
bnN0cnVjdF9hcml0eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSB3YXNtX3Ry
YW1wb2xpbmVfd2FzbV9jYWxsOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9u
b190bHM6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6
OnJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpCit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVu
aXF1ZTxCeXRlY29kZUdyYXBoPihtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpKTsKKyAgICBtX3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVt
Q2FsbGVlTG9jYWxzKCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5t
X2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJs
b2NrLT5mb3JFYWNoQ2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXJCdWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAg
ICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgtPmF0KDApLmlzRW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5h
dCgwKS5pbmRleCgpID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChz
aXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0g
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJl
ZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOwor
CisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcs
ICIgPSAiKTsKKyAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1f
cHJlZGljdGlvbnNBdEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9n
TG4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2Fs
bGVlKCkgPSBTcGVjRnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgYm9vbCBjb21w
dXRlVXNlQ291bnRzID0gdHJ1ZTsKKyAgICBtX3VzZUNvdW50cy5yZXNpemUobV9ncmFwaC0+c2l6
ZSgpKTsKKyAgICBkbyB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUg
cmV2ZXJzZSBwb3N0IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2Yg
aG93IHdlIHRyYXZlcnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8v
IElzIGEgc2ltcGxlIERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5k
ZW50IG9uIHRoZWlyIGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBp
cyBjYXRjaCB0cmVhdGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMu
Li4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNC
bG9jayYgYmxvY2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlv
bnMgPSBtX3ByZWRpY3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBp
ZiAoY29tcHV0ZVVzZUNvdW50cykKKyAgICAgICAgICAgICAgICBtX3VzZUNvdW50c1tibG9jay5p
bmRleCgpXSA9IE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5j
b25zdGFudHMoKS5zaXplKCksIDApOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlC
bG9jaygpICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAg
ICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggeyBpICsgYmxvY2subGVhZGVyT2Zm
c2V0KCkgfTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KS5wdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50
SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRz
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXNlQ291bnRz
W2Jsb2NrLmluZGV4KCldLm9wZXJhbmQob3BlcmFuZCkgKz0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVj
a3BvaW50ID0gY3VycmVudEluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNr
cG9pbnQtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwg
Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNv
ZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3Vu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBzdWNjZXNzb3IgOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBzdWNjZXNzb3JPcGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25z
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3Vs
YXRpb24oc3VjY2Vzc29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbXB1dGVVc2VDb3VudHMgPSBmYWxz
ZTsKKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSkKKyAgICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbCgKQEAgLTY3LDcgKzk2MCwxMyBAQCB2b2lkIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJl
dGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
K2Jvb2wgSklUOjp1c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7CisgICAg
cmV0dXJuIG1fdXNlTE9MOworfQorCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBDb21waWxlVHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAg
LCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUsNiArOTc0LDcg
QEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9jYW5C
ZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAg
ICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQorICAgICwgbV91c2VMT0woY29tcGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxPTCkKIHsKIH0K
IApAQCAtMTM3LDExICsxMDM3LDE5IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogICAgICAgICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBcCiAgICAgTkVY
VF9PUENPREUobmFtZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCisjZGVmaW5l
IERFRklORV9TTE9XX09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7
IFwKICAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsg
XAotICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCi0gICAgICAgICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOyBcCisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAg
ICAgICAgICBpZiAoZ2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSAmJiBhdG9pKGdldGVudigi
cHJpbnRTbG93Q2FsbENhc2VzIikpKSB7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBjYk5hbWU7IFwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChjYk5hbWUp
OyBcCisgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGNiTmFtZS50b1N0cmluZygpICsgIiBi
YyMiICsgU3RyaW5nOjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9w
Y29kZU5hbWVzW2N1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07IFwKKyAgICAgICAgICAg
ICAgICBwcm9iZShbPV0oUHJvYmU6OkNvbnRleHQmKSB7IFwKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0NhbGxDYXNlUmFuKGtleSk7IFwKKyAgICAgICAgICAgICAgICB9KTsgXAorICAgICAgICAg
ICAgfSBcCisgICAgICAgICAgICBlbWl0U2xvd09wKHNsb3dfcGF0aF8jI25hbWUsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgZHN0LCB0eXBlKTsgXAogICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENP
REVfSU5fTUFJTihvcF8jI25hbWUpOyBcCiAgICAgfQpAQCAtMTU2LDI2ICsxMDY0LDQ2IEBAIHZv
aWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9X
Q0FTRV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNu
YW1lKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1l
KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5h
bWUpOyBcCiAgICAgfQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwK
ICAgICBjYXNlIG9wXyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xv
d0Nhc2VDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAg
ICAgaWYgKHVzZUxPTCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzbG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAor
ICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhG
dW5jdGlvbiBzdHViKQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAorc3RhdGljIHZvaWQgc2xvd0NhbGxDYXNlUmFuKFN0cmluZyBrZXkpCit7CisgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+PiBzbG93
Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxs
X29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93Q2FzZXMuY29uc3RydWN0KCk7CisgICAg
fSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMuZ2V0KCk7CisgICAgdWludDY0X3QgdmFs
dWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCh2YWx1ZSAl
IDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihrZXksICI6ICIsIHZhbHVlKTsKK30KKwog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgcnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ss
ICJcbiIpOwogICAgIApAQCAtMjMxLDE2ICsxMTU5LDg1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2Fz
ZSA9IDA7Ci0gICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAgICAgdW5z
aWduZWQgcHJldmlvdXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwotICAgICAg
ICBpZiAobV9ieXRlY29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxs
IGJ5dGVjb2RlIGluc3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KLSAg
ICAgICAgICAgIC8vIExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBo
aXQuCi0gICAgICAgICAgICBicmVha3BvaW50KCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICAvLyBPT1BTCisKKyAgICAg
ICAgbV9zdGF0ZUF0RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBtX3ByZWRl
Y2Vzc29ycy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBibG9j
ayA6ICptX2dyYXBoKSB7CisgICAgICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJsb2NrKCkgfHwg
YmxvY2suaXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGZvciAoYXV0byBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmNvbnRhaW5z
KGJsb2NrLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICBtX3ByZWRlY2Vzc29yc1tzdWNj
ZXNzb3JJbmRleF0uYXBwZW5kKGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CisgICAgfQogCi0gICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSwgbGFiZWwoKSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAg
ICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNl
dCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJi
IyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1
bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUo
bV9jdXJyZW50U3RhdGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1f
Y3VycmVudFN0YXRlID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBt
X2dyYXBoLT5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2Nr
LT5pc0VudHJ5QmxvY2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMg
PSBtX3ByZWRlY2Vzc29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWxsUHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNz
b3JzLmZpcnN0KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0
ZUF0RW5kW3ByZWRlY2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhl
YWRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
VXNlQ291bnRzID0gV1RGTW92ZShtX3VzZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0p
OworICAgICAgICAgICAgICAgIG1fc3BpbGxDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUg
PSBtX3Nsb3dDYXNlcy5zaXplKCk7CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3Rh
cnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKKyAg
ICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVu
dGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgorICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRo
YXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KKyAgICAgICAgICAgIGJyZWFrcG9pbnQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAg
IG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSwgbGFiZWwoKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKIApAQCAtMjc4LDQ2ICsxMjc1
LDQzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogI2Vu
ZGlmCiAKKworICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVn
IGFsbG9jIGJlZm9yZSBiYyMiLCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAg
ICAgZHVtcFJlZ2FsbG9jU3RhdGUoKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAg
ICB9CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBERUZJTkVfU0xPV19P
UChpbl9ieV92YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3MpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGxlc3NlcSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcmVxKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19j
YWxsYWJsZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHR5cGVvZikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lz
X29iamVjdCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1c2hf
d2l0aF9zY29wZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJv
bm1lbnQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfaWRfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVf
U0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVz
b2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChk
ZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hh
YmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AobmV3X2FycmF5X2J1ZmZlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQot
ICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERF
RklORV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xP
V19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9f
aW5kZXhfc3RyaW5nKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3Vt
ZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX3Jlc3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9t
aXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSkKLSAgICAgICAgREVGSU5F
X1NMT1dfT1AoY3JlYXRlX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2FzeW5jX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvcikK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AocG93KQorICAgICAgICBERUZJTkVfU0xPV19PUChpbl9i
eV92YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9v
bGVhbikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0
PigpLm1fZHN0LCBTcGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhf
c2NvcGUsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLm1fZHN0LCBT
cGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwg
U3BlY0hlYXBUb3ApCisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMs
IFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0
X2J5X3ZhbF93aXRoX3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2
YWwsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNE
ZWNsSW5FdmFsPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
ZGVmaW5lX2RhdGFfcHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0
dWFsUmVnaXN0ZXIoKSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0
YXRpY19lcnJvciwgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVf
U0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBcnJheVdpdGhTcHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AobmV3X2FycmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
QnVmZmVyPigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVh
ZCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhl
cikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNC
b29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwg
U3BlY0NlbGwpCisgICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisg
ICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0
QXJndW1lbnRzKQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2Rz
dCwgU3BlY1Njb3BlZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Ns
b25lZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1
bWVudHM+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Y3JlYXRlX2FyZ3VtZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVBcmd1bWVudHNCdXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
UmVzdD4oKS5tX2RzdCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVf
cHJvbWlzZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3Qs
IFNwZWNQcm9taXNlT2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNl
T2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3Ro
ZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09i
amVjdE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIp
CisgICAgICAgIERFRklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBv
dz4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBE
RUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcg
KzEzOTIsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBE
RUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1
cGVyX3NhbXBsZXJfZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShY
ODZfNjQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVf
U0xPV19PUChtb2QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNC
eXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9w
X21vdikKICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25l
Z2F0ZSkKQEAgLTQ3NCwxMCArMTQ3Miw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUp
CiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAg
ICBERUZJTkVfT1Aob3BfaXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2Zf
aXNfZnVuY3Rpb24pCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAg
ICAgICBERUZJTkVfT1Aob3BfdHlwZW9mKQorCisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQor
ICAgICAgICBERUZJTkVfT1Aob3BfbGVzc2VxKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRl
cikKKyAgICAgICAgREVGSU5FX09QKG9wX2dyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Ao
b3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVf
bGV4aWNhbF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5
dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1f
Y2hlY2tlZFVzZUxPTCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ug
b3BfdGhyb3c6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoK
KyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNl
IG9wX3B1dF9ieV92YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAg
ICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAg
ICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9u
b3A6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAg
ICAgICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9s
b2d1ZToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9M
ID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAg
ICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAg
ICAgYXV0byBjb3VudCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCYgY291bnRlciA9IG1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9w
ZXJhbmQpOworICAgICAgICAgICAgICAgIC0tY291bnRlcjsKKyAgICAgICAgICAgICAgICBpZiAo
IWNvdW50ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT09QUzogRG8gdGhpcyBsYXppbHkg
aW4gc2xvdyBwYXRoIGNyZWF0aW9uL3NwaWxsRm9yQ2FsbAorICAgICAgICAgICAgICAgICAgICAv
L21fc3BpbGxDYW5kaWRhdGVzLmFwcGVuZChvcGVyYW5kKTsKKworICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gZ3ByRm9yT3BlcmFuZChv
cGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGdwcik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgRlBSUmVnIGZwciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xvYmJlcihmcHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNr
cG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2tw
b2ludC0tOykgeworICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleCht
X2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAg
ICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coIkF0ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJc
biIpOwogICAgIH0KQEAgLTQ5OCw2ICsxNTcwLDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUxpbmtQYXNzKCkKICAgICBtX2ptcFRhYmxlLmNsZWFyKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNs
b3dDYXNlUmFuKFN0cmluZyBrZXkpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxI
YXNoTWFwPFN0cmluZywgdWludDY0X3Q+PiBzbG93Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAg
ICBzbG93Q2FzZXMuY29uc3RydWN0KCk7CisgICAgfSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93
Q2FzZXMuZ2V0KCk7CisgICAgdWludDY0X3QgdmFsdWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVy
YXRvci0+dmFsdWU7CisgICAgaWYgKCh2YWx1ZSAlIDEwMDApID09IDApCisgICAgICAgIGRhdGFM
b2dMbihrZXksICI6ICIsIHZhbHVlKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKIHsKICAgICBtX2dldEJ5SWRJbmRleCA9IDA7CkBAIC01MTYsMTQgKzE2MDIsMjUg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQ
cm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBp
dGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsK
LSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYg
c2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93
Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAg
ICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNs
b3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZp
cnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVj
b2RlSW5kZXgpLnB0cigpOworCisgICAgICAgIGlmIChnZXRlbnYoInByaW50U2xvd0Nhc2VzIikg
JiYgYXRvaShnZXRlbnYoInByaW50U2xvd0Nhc2VzIikpKSB7CisgICAgICAgICAgICBTdHJpbmdQ
cmludFN0cmVhbSBuYW1lOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobmFtZSk7Cisg
ICAgICAgICAgICBTdHJpbmcga2V5ID0gbmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3RyaW5n
OjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVzW2N1
cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07CisgICAgICAgICAgICBwcm9iZShbPV0oUHJv
YmU6OkNvbnRleHQmKSB7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VSYW4oa2V5KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUq
IHJhcmVDYXNlUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpCkBAIC01ODAsNyArMTY3Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfY2hlY2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2Qp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBA
IC01OTksNiArMTY5NSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1df
T1AoaW5jKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzEsMTkg
KzE3MzAsMzQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AocmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX1NMT1dfT1AoY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19P
UCh0b19wcm9wZXJ0eV9rZXkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlzX2Nh
bGxhYmxlKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rp
b24pCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZikKKworICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChsZXNzKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChs
ZXNzZXEpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXIpCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFM
b2coIkF0ICIsIGZpcnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCks
ICJcbiIpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1f
c2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCks
ICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIg
LSAxKS0+dG8ub2Zmc2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNv
ZGVnZW4uIik7CisgICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lU
SF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAh
PSBpdGVyLT50by5vZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2Fz
ZSBjb2RlZ2VuLiIpOworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJz
dFRvLm9mZnNldCgpID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMg
bGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
QWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFs
cmVhZHkgZG8gdGhpcywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJl
c3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRI
YXZpbmdTbG93Q2FzZTsKICAgICB9CkBAIC02ODgsNiArMTgwMiw4IEBAIHZvaWQgSklUOjpjb21w
aWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gdHJ1ZTsgLy8gT09QUzogaGVscGZ1bCBmb3IgcnVubmluZyBMT0wgdy9vdXQgREZHLgog
ICAgIAogICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKICAgICBjYXNlIEds
b2JhbENvZGU6CkBAIC03NzgsNiArMTg5NCw4OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRM
aW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRo
KGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFi
ZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAor
ICAgIGJvb2wgcHJpbnRFYWNoT1NSID0gZ2V0ZW52KCJwcmludEVhY2hPU1IiKSAmJiAhIWF0b2ko
Z2V0ZW52KCJwcmludEVhY2hPU1IiKSk7CisKKyAgICBpZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHko
KSkgeworICAgICAgICBKdW1wTGlzdCBleGl0Q29tbW9uOworICAgICAgICBmb3IgKGF1dG8mIGV4
aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhp
dC5maXJzdDsKKyAgICAgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAg
ICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChwcmludEVhY2hPU1IpIHsK
KyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwcmludFN0cmVhbTsKKyAgICAgICAg
ICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChwcmludFN0cmVhbSk7CisgICAgICAgICAgICAgICAg
Q1N0cmluZyBzdHIgPSBwcmludFN0cmVhbS50b0NTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBz
dHIuYnVmZmVyKCktPnJlZigpOyAvLyBsZWFrIGl0LgorICAgICAgICAgICAgICAgIHByaW50KHN0
ci5kYXRhKCksICIgLT4gZXhpdCBhdCBiYyMiLCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgIlxu
Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBj
aGVja3BvaW50IGV4aXRzLgorCisgICAgICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7
CisgICAgICAgICAgICBleGl0Q29tbW9uLmFwcGVuZChqdW1wKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgQVNTRVJUKCFleGl0Q29tbW9uLmVtcHR5KCkpOworICAgICAgICBleGl0Q29tbW9uLmxp
bmsodGhpcyk7CisKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6OnBj
R1BSID09IHJlZ1Q0KTsKKyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkuY29udGFpbnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVsb3cg
cmVsaWVzIG9uIHRoaXMgYmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQ
UiwgbnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNl
IHRoZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFy
Z0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIs
IExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIocmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAgICAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRl
cigpKSwgcmVnVDIpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsKKyAg
ICAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9T
UkV4aXRDb3VudGVyKCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5jaDMy
KEJlbG93LCByZWdUMiwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hv
bGRGb3JSZW9wdGltaXphdGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6
cGNHUFIsIG51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBz
aW5jZSB0aGUgTExJbnQgUEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPihtX2Nv
ZGVCbG9jayk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
blRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAgICAgY2Fs
bChub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJlclRhZ1Jl
Z2lzdGVyLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgc2tp
cEpldHRpc29uLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6ZU5v
dyA9IGppdC5icmFuY2gzMigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVy
VGhhbk9yRXF1YWwsCisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAorICAg
ICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6
Om5vcm1hbE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhpdFB0
clRhZz4oKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkKKyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2lu
dE9TUkV4aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAgICAg
ICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVu
aygpLmNvZGUoKTsKKyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFi
bGVHUFIpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIp
OworICAgICAgICBtb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1w
KEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6IAor
ICAgICAgICAvLyAxLiBTdG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAgICAg
ICAvLyAyLiBqZXR0aXNvbiBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8gMy4g
d3JpdGUgYmFycmllciBMTEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxv
dy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAg
ICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIxNjUsNyBA
QCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8SlNFbnRy
eVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpT
RW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJp
bmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpM
T0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+
bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAg
ICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIxNzYs
NyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9jay0+
c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwog
ICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5l
dyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRo
QXJpdHlDaGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxv
Z0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9j
aywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1
bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIsNiAr
MjI3MCw5NTEgQEAgU2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVy
biB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxG
VExDb21waWxlVGltZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVt
cCkKK3sKKyAgICAvLyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1w
cy5zaXplKCkgfHwgbV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkK
KyAgICAgICAgbV9leGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgp
IH0pOworICAgIG1fZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmFuaz4KK1ZlY3RvcjxSZWcsIDMyPiBjb21wdXRlQWxsb3dlZFJl
Z3MoKQoreworICAgIC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFs
bG9jYXRlIGEgZGlmZmVyZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4g
dGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtl
IHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAg
IFZlY3RvcjxSZWcsIDMyPiBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwor
ICAgIFJlZ2lzdGVyU2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7
CisgICAgICAgIGlmIChhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAg
ICAgIGFsbG93ZWQuYXBwZW5kKHJlZyk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBCYW5rOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0g
QmFuazo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlu
cyhyZWcpKQorICAgICAgICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgcmV0
dXJuIGFsbG93ZWQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRHUFJzKCkK
K3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0
ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUg
ZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhp
cworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3ll
ZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+
KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBWZWN0
b3I8UmVnLCAzMj4mIGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIg
c3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0
aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVk
IHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEg
aG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3Qo
Y29tcHV0ZUFsbG93ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1
bHQuZ2V0KCk7Cit9CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBP
T1BTOiB0aGlzIGJyZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5
IHNlZW1zIGxpa2UgYSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcg
b3V0Li4uCisKKyAgICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFz
dCgpLmJ5dGVjb2RlSW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7
Cit9CisKK0dQUlJlZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2Vy
dE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5n
cHIoKSAhPSBoaW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1Zh
bHVlLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVn
VmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9j
YXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRv
JiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUu
bG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK0ZQUlJlZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICAvLyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAg
IGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVk
KSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gcmVnLmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVn
IDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1Zh
bHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAg
ICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVy
SW1wbChSZWcgcmVnKQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlk
YXRpb24gaGVyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxv
Y2F0ZWQpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVy
YW5kOworICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChy
ZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5k
KS5ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFsbG9jZWRSZWdGb3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9j
a0NvdW50IHZhbHVlcyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0
IGRvZXM6CisgICAgICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZv
ckNhbGwKKyAgICAgICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gQW5kIHdoZW4gd2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5k
LCB3ZSB3aWxsIGVuZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lz
dGVyLCBlc3NlbnRpYWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90
aGVyd2lzZSwgd2hlbiB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdl
J2QgZW5kIHVwIGluCisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAg
cmVnVmFsdWUub3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1Zh
bHVlLmxvY2tDb3VudCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7
CisgICAgfQorCit9CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdp
c3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CisgICAgYXV0byBkb0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0
byByZWcgOiBzZXQpIHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVn
KSkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsK
KworICAgIGRvQ2xvYmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQ
UnMoKSk7Cit9CisKK1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8g
T09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7Cisg
ICAgYXV0byBhcHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiBy
ZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0Fs
bG9jYXRlZCAmJiByZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlw
ZShyZWdWYWx1ZS5vcGVyYW5kKSkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxv
d2VkRlBScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRHUFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVm
b3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUsIEZQUlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAvLyBP
T1BTOiB0aGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJl
c3VsdDsKKyAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0g
WyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBp
ZiAocmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNh
dmVQbGFuLmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92
ZW5UeXBlKHJlZ1ZhbHVlLm9wZXJhbmQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmVzdWx0LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVn
LmZwcigpICE9IHRvSWdub3JlRlBSKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsK
KyAgICB9CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAo
cmVnLmdwcigpICE9IHRvSWdub3JlKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsK
KyAgICB9CisKKyAgICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5z
cGlsbGVkUmVnaXN0ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6
c2lsZW50RmlsbEFmdGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQorewor
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoKnRoaXMsIHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1Np
emVGb3JTcGlsbCwgMCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCksIHJlY29yZC5zYXZlUGxhbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRDb3Vu
dCh1aW50NjRfdCBjb3VudCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICBm
b3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICArK2NvdW50ZXI7
CisgICAgICAgIGlmIChjb3VudGVyICUgMTAwMDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFMb2dM
bigiUnVudGltZSBsb2FkIGNvdW50OiAiLCBjb3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
OjpyZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2NF90
IGxvYWRDb3VudCA9IDA7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7CisgICAg
ICAgIFJlZyByZWcgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gc3RkOjpnZXQ8MT4odHVwbGUpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cm92ZW5UeXBlID0gc3RkOjpnZXQ8Mj4odHVwbGUpOworCisgICAgICAgIGlmIChyZWcgPT0gcmVn
VG9JZ25vcmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0g
b3BlcmFuZFRvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJl
Zy5pc0dQUigpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBy
ZWcuZ3ByKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIo
KSk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAg
ICAgICAgICAgQVNTRVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAg
ICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2go
KnRoaXMpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3Jh
dGNoKTsKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKSkKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcu
ZnByKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc0ludDMy
ID0gYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lzdGVy
cyk7CisKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcu
ZnByKCkpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAg
ICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShzY3JhdGNoLCByZWcuZnByKCkpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsb2FkQ291bnQ7
CisgICAgfQorCisgICAgaWYgKGZhbHNlICYmIGxvYWRDb3VudCkgeworICAgICAgICBwcm9iZShb
PV0gKFByb2JlOjpDb250ZXh0JikgeworICAgICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRDb3Vu
dCk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1Bh
dGhTYXZlUGxhbihjb25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21T
YXZlUGxhbihzbG93Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4p
OworfQorCit2b2lkIEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyBncHIpCit7CisgICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVy
b2QKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAg
IGJveEludDMyKGdwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7Cisg
ICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVy
YW5kKTsKKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpID0gU3BlY0ludDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1
ZShmcHIpLmlzQWxsb2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQ
UlJlZyBncHIgPSB0ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3Mg
eyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Io
b3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhh
dCBmb3IgYnl0ZWNvZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2Fs
bGVkLgorICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9w
ZXJhbmQpOworCisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsK
K30KKwordm9pZCBKSVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyBncHIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7
CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3Bl
cmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2Nr
KFJlZyByZWcpCit7CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVl
LmxvY2tDb3VudDsKK30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8m
IHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdW
YWx1ZS5pc0FsbG9jYXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50
KTsKKyAgICAtLXJlZ1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCAmJiAhcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9
OworfQorCitKSVQ6OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAg
IDogbV9qaXQoaml0KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGdwcihoaW50KTsKK30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFs
bG9jYXRlR1BSKGhpbnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQor
CitKSVQ6OkZQUlRlbXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9
CisKK0ZQUlJlZyBKSVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFs
aWRGUFJSZWcpCisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xv
d1BhdGgoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5s
b2NrKG1fZnByKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBS
VGVtcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3Bl
cmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sK
KyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6
OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
biBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyBy
ZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9n
cHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIs
IG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAo
IWlzSW50MzJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAg
ICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikp
OworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAg
IHJldHVybiBtX2dwcjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBq
aXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigp
OworfQorCitKSVQ6OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAg
IGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAg
ICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3By
Rm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJh
bmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9n
cHI7CisgICAgICAgIG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOwor
ICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxh
dGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJz
KSk7CisKKyAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7Cisg
ICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFu
ZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9y
T3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgZ3ByKCk7Cit9CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7
CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJh
bmQ6OmdwcigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJl
dHVybiBtX2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJl
ZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9n
cHIsIG1fb3BlcmFuZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBp
ZiAobV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAg
bV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2Vs
bENoZWNrKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1
ZU9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQo
aml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0
LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIGdwcigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgp
Cit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVy
YW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBy
ZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJS
ZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0g
SW52YWxpZEdQUlJlZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWdu
UmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOwor
ICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5k
KEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JP
cGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAg
ICBmcHIoKTsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7Cisg
ICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6
ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJu
IG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAg
ICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBp
ZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAg
ICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQs
IG1fb3BlcmFuZCB9OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdw
ciA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zw
cik7CisKKyAgICBpZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5U
eXBlKG1fb3BlcmFuZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91Ymxl
S25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7Cisg
ICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwor
ICAgIH0KKworICAgIG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAg
IG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsK
K30KKworSklUOjpOdW1iZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVy
YW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7
CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklU
OjpOdW1iZXJPcGVyYW5kOjp+TnVtYmVyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1f
ZnByKTsKK30KKworRlBSUmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAo
bV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9q
aXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9q
aXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRG
UFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9j
ayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9q
aXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9q
aXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkg
eworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRl
bXBHUFIsIG1fZnByKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2pp
dCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8g
aXNJbnQzMiA9IG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBI
YXZlVGFnUmVnaXN0ZXJzKTsKKworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxh
dGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3Bl
Y3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQu
dW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25l
ID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAg
ICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVy
YW5kLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9v
cGVyYW5kKTsKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3Bl
cmFuZDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAg
ICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChy
ZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJDb252
ZXJ0aW5nT3BlcmFuZDo6fkludDMyQ29udmVydGluZ09wZXJhbmQoKQoreworICAgIG1faml0LnVu
bG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6Omdw
cigpCit7CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2dwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChtX2ppdC5z
aG91bGRTcGVjdWxhdGVJbnQzMihtX29wZXJhbmQpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBv
cCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAgICAg
ICAgbV9qaXQubG9jayhtX2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxh
dGVOdW1iZXIobV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5k
IHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9w
ZXJhbmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAg
ICAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2pp
dCB9OworICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBhdXRv
IGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwg
SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0
aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFs
dWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgICAgIG1faml0
LnVuYm94RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyAgICAgICAgSnVtcExpc3QgZG9u
ZTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBw
b3J0c0RvdWJsZVRvSW50MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsK
KyAgICAgICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2Vt
YW50aWNzKGZwciwgbV9ncHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5h
cHBlbmQobV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5j
aElmVHJ1bmNhdGVTdWNjZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0g
bV9qaXQuc2lsZW50U3BpbGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9q
aXQuY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxl
RG91YmxlVG9JbnQoKSA/IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25U
b0ludDMyLCBtX2dwciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNh
bGwoc3BpbGxSZWNvcmQpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2pp
dC5tb3ZlKHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisK
KyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCkp
IHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQg
fTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAg
ICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dw
cik7CisKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQsIHZhbHVlR1BS
KTsKKworICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dw
cik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVPdGhlcihtX29wZXJhbmQp
KSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5k
IH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAg
ICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgICAgIG1faml0LnNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCwgdmFsdWVHUFIp
OworCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJh
bmQgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisg
ICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayht
X2dwcik7CisKKyAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBS
UmVnIGZwciA9IHRlbXBGUFIuZnByKCk7CisKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKworICAg
ICAgICBhdXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFs
dWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gbm90RG91YmxlID0gbV9q
aXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVH
UFIsIG1fZ3ByLCBmcHIpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1i
bGVyQVJNNjQ6OnN1cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRT
ZW1hbnRpY3MoKSkgeworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2lu
Z0phdmFTY3JpcHRTZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAg
ICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnBy
LCBtX2dwciwgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8g
c3BpbGxSZWNvcmQgPSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7Cisg
ICAgICAgICAgICBtX2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hl
Y2soaGFzU2Vuc2libGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xv
dyA6IG9wZXJhdGlvblRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2ls
ZW50RmlsbEFmdGVyQ2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgbm90RG91YmxlLmxpbmsoJm1faml0
KTsKKyAgICAgICAgYXV0byBub3RPdGhlciA9IG1faml0LmJyYW5jaElmTm90T3RoZXIoSlNWYWx1
ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBtX2dwcik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKDApLCBtX2dwcik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAg
ICAgICAgbm90T3RoZXIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFk
VHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RCb29sZWFuKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwg
bV9ncHIpKTsKKyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwg
bV9ncHIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGlz
SW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQodmFs
dWVHUFIsIG1fZ3ByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBt
X2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVy
IHwgU3BlY0Jvb2xlYW4pOworICAgIH0KKworICAgIHJldHVybiBtX2dwcjsKK30KKworUmVnaXN0
ZXJTZXQgSklUOjp1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVy
U2V0IHJlc3VsdCA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKwor
ICAgIGF1dG8gYWRkSWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJl
Z1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxs
b2NhdGVkKQorICAgICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3Ig
KFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAg
ICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVn
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmco
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAo
IWlzU3RyaW5nU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3Zl
blR5cGUob3BlcmFuZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5
bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAg
IGlmICghaXNTeW1ib2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlQm9vbGVhbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAg
IGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RC
b29sZWFuKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0Jvb2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2
YWx1ZSB9LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0g
U3BlY090aGVyOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9u
KHByb3ZlblR5cGUob3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNo
SWZOb3RPYmplY3QodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmpl
Y3Q7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5U
eXBlKG9wZXJhbmQpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3Bl
Y0NlbGxDaGVjazsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJh
bmQpICY9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVB
bnlCaWdJbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0
dXJuOworCisjaWYgVVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMy
ID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsK
KyNlbmRpZgorCisgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJp
Z0ludDMyKSB7CisgICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAg
ICBpZiAoIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFw
QmlnSW50KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBC
aWdJbnQodmFsdWUpKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJp
Z0ludDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBp
ZiAoIWRvbmUpIHsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlQmlnSW50MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIo
dmFsdWUsIHNjcmF0Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZO
b3RDZWxsKHZhbHVlKSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhl
YXBCaWdJbnQodmFsdWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAg
ICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNl
dEN1cnJlbnRCbG9ja1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNw
ZWNCeXRlY29kZVRvcCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0
YXRlLnByb3ZlblR5cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJy
ZW50U3RhdGUucHJvdmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZSht
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsK
KyAgICBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsK
KyAgICBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0
cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWco
KSk7CisgICAgbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6
UmVnVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
IigiLCBvcGVyYW5kLCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1w
UmVnYWxsb2NTdGF0ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7
CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1Zh
bHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAg
ICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYg
KHJlZ1ZhbHVlKHJlZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7
CisgICAgICAgICAgICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0
NiwxNyBAQAogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJK
U0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVk
ZSAiUmVnaXN0ZXJNYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8
d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bj
b2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7Cisg
ICAgY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAg
ICAgY2xhc3MgQ2FsbExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBG
dW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0g
ICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5
dGVjb2RlSW5kZXggdCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0
KQorICAgIHVzaW5nIFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFsUmVn
aXN0ZXIsIFNwZWN1bGF0ZWRUeXBlPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQg
eworICAgICAgICBTYXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxl
ZFJlZ2lzdGVyczsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsK
KworICAgIHN0cnVjdCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KQogICAgICAgICB7CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXg7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBz
OyAvLyBVc3VhbGx5IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9p
bnRzLCB3ZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAg
U2F2ZVBsYW4gc2F2ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0
ZW0gZm9yIHRoaXMgYmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7
IC8vIFNvbWUgb3BzIHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252
ZW5pZW5jZQogICAgIH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Niw3ICsy
MTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBw
cml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVy
ZmFjZUpJVDsKKwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAg
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnRwdHJfdCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRl
cjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNl
dCA9IDA7Ci0gICAgICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBi
ZSByZXByZXNlbnRhYmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJs
ZXIKLSAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5
IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGlj
OgotICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBl
bnVtIGNsYXNzIENvbXBpbGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAg
ICAgTE9MCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sq
LCBDb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9
IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkg
eyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAg
ICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAg
IAotICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBD
b21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
bXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2
YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2Nr
LCBjb21waWxlVHlwZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29t
cGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJy
YXlNb2RlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGls
ZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2
bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1f
Ynl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGpp
dC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1
OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxp
bmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpC
YXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5h
bWVXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAg
ICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJy
YXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2Ji
ZXIoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAg
ICAgICAgICAgIGNsb2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9i
YmVySW1wbChSZWcpOworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAt
MzIzLDkgKzM1MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2tw
b2ludChKdW1wKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2
b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBh
ZGRTbG93Q2FzZShKdW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSB7IH0pOworICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJl
c3VsdCA9IFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nh
c2UmIGVuc3VyZVNsb3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAg
ICAgICB2b2lkIGFkZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0
IEp1bXBMaXN0JiwgaW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBp
bnQpOwpAQCAtMzMzLDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAg
dm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7
CiAKQEAgLTM2MCw3ICszOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBD
b21waWxlT3BFcVR5cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1w
U2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBp
bnQganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2Fz
ZSYsIENvbXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBl
bnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRG
aWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07
CkBAIC01MDgsOCArNTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFM
VUUzMl82NCkKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNv
bmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9u
YWxDb25kaXRpb24pOwpAQCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwg
UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09w
ZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbios
IERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91
YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJh
dGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFz
c2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KKyAgICAgICAgdm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVj
dGlvbiopOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBl
cU51bGxJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2Fk
ZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtNTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1
MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxl
cl9iZWdpbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJf
c2FtcGxlcl9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xz
aGlmdChjb25zdCBJbnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJ
bnN0cnVjdGlvbiopOwpAQCAtNjc4LDc4ICs3MjEsMTAwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVj
dGlvbiopOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVj
dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRf
Y2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
amdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9o
YXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+CisgICAgICAgIHZvaWQgZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7
CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKik7
CisgICAgICAgIHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiop
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0Q29t
cGFyZU9wSW1wbChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJs
ZUNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzKGNvbnN0IEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAg
dm9pZCBlbWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZv
aWQgZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwor
ICAgICAgICB2b2lkIGVtaXRfb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9jYWxsZWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVz
cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJh
YmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAK
LSAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2
b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9u
KTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlv
biopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAog
ICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vu
c2lnbmVkKTsKLSAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25l
ZCk7CisgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyBy
ZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAg
ICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVw
dGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVn
IHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAg
ICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsK
ICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3Bl
cmFuZCwgR1BSUmVnKTsKQEAgLTc2NCw4ICs4MjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09m
T3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAg
ICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAg
ICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZv
aWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyKTsKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIpOwpAQCAtNzc4LDM4ICs4NDEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0
cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5h
bWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9p
ZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAg
IHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAg
ICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAg
IH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQo
KSkKLSAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICAr
K2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAg
IH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxs
U2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNl
cywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIs
IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0aW9uPgorICAgICAgICB2b2lkIGVtaXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFNwZWN1bGF0ZWRUeXBlIGRzdFR5cGUpOwogCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2Vz
KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wg
aGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisg
ICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAg
ICAgIC8vIE9PUFMKKyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAo
YikKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nh
c2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsK
ICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC04
OTEsNiArOTM3LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlv
bkNoZWNrKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+
KGFyZ3MuLi4pOworICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAg
ICBhdXRvIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAg
IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEZQUlJlZyBy
ZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVu
dHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJh
bWUoKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAg
ICAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gY2FsbDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFy
Z3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKQEAgLTkwMiw2ICs5NjgsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIE5vUHJvZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQ
YXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2
b2lkIGVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFByb2ZpbGluZ1BvbGljeSBzaG91bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5n
UG9saWN5OjpOb1Byb2ZpbGluZyk7CiAKQEAgLTk2MSw2ICsxMDMwLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9
CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAg
ICAgICB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAg
ICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJv
b2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTk3MSw2ICsxMDQzLDI5MiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwog
CisgICAgICAgIGNsYXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBH
UFJUZW1wKEpJVCYsIEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+
R1BSVGVtcCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRH
UFJSZWcpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBGUFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVt
cChKSVQmKTsKKyAgICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnBy
KCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAg
ICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAg
IGNsYXNzIEludDMyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50
MzJPcGVyYW5kKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIg
Yml0cyBhcmUgdGhlIGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUg
dGFnZ2VkLCBtaWdodCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQm
IG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAg
ICBjbGFzcyBDZWxsT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxs
T3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCk7CisgICAgICAgICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBn
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3Bl
cmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBK
SVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBEb3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
RG91YmxlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAg
ICB+RG91YmxlT3BlcmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2Zw
ciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgTnVtYmVyT3BlcmFuZCB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpOworICAgICAgICAgICAgfk51bWJlck9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQ
UlJlZyBmcHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7Cisg
ICAgICAgICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIC8vIFNwZWN1
bGF0ZSBudW1iZXIrYm9vbGVhbitvdGhlciwgYW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9y
IGJpdG9wcy4KKyAgICAgICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5k
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsK
KworICAgICAgICBTcGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3Zl
blR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRl
clR5cGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAg
ICAgIH0KKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0
YW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQ
UlJlZyYgZ3ByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9w
ZXJhbmQpLmdwcjsKKyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAg
fQorCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxv
Y2VkUmVnRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdW
YWx1ZSYgcmVnVmFsdWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
Y3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFs
dWUmIHJlZ1ZhbHVlKEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1Zh
bHVlJiByZWdWYWx1ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IHdpbGxEZWYoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICghbV91c2VMT0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAg
ICAgICAgICByZWdWYWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIg
PSBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52
YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQg
PSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQ
UlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFzc2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGdwcikub3Bl
cmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0g
Z3ByOworICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFu
ZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnBy
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXJlZ1ZhbHVlKGZwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAg
ICBmcHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnBy
KS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYg
KCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25G
b3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7
CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3Bl
Y090aGVyIHwgU3BlY0Jvb2xlYW4pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVOb3RDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0
ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzU3ltYm9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3Vs
YXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc090aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAg
ICAgYm9vbCB1c2VMT0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNl
bGwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQg
c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0Nl
bGwpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAg
ICB2b2lkIHNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3Vs
YXRlKEV4aXRLaW5kLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5
IHdhbnQgbW9yZSBpbmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJS
ZWcgYWxsb2NhdGVHUFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBS
UmVnIGFsbG9jYXRlRlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcpOworICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJl
Zyk7CisgICAgICAgIHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8v
IE9PUFM6IE1ha2UgdGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3Qg
Zm9yZ2V0IHRvIHNldCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQg
dW5sb2NrKFJlZyk7CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAg
ICAgU2lsZW50U3BpbGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9y
ZSA9IEludmFsaWRHUFJSZWcsIEZQUlJlZyB0b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOwor
ICAgICAgICB2b2lkIHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQm
KTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAg
ICAgUmVnaXN0ZXJTZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAg
SW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNv
cmQ+IG1fZmFyQ2FsbHM7CkBAIC05OTAsNyArMTM0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggbV9ieXRlY29kZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93
Q2FzZXM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAg
ICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1h
cDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEz
ODUsODcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVj
dCBBbGxvY2VkUmVnIHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBi
b3hlZCBhbiB1bmJveGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhl
IHNhbWUgdGltZS4KKyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgICAgICBGUFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2
b2lkIG1lcmdlKGNvbnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQor
ICAgICAgICAgICAgICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7
IDAgfTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAg
ICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAg
ICAgICAgIHx8IGxvY2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAg
ICAgfHwgaXNBbGxvY2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAg
ICAgICp0aGlzID0geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50
cnkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBE
YXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0
ZSB7CisgICAgICAgICAgICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7
CisgICAgICAgICAgICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAg
ICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAg
ICAgICB2b2lkIG1lcmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJh
bmRUb1JlZy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3BlcmFuZFRvUmVnLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9S
ZWdbaV0ubWVyZ2Uob3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFT
U0VSVChwcm92ZW5UeXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRp
b25zKHByb3ZlblR5cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lz
dGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0
ZSBtX2N1cnJlbnRTdGF0ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUo
KTsKKworICAgICAgICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPEJ5dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNC
bG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5k
czxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAg
ICAgVmVjdG9yPE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAg
IE9wZXJhbmRzPHVuc2lnbmVkLCB0cnVlPiBtX2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZl
Y3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDE2PiBtX3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBW
ZWN0b3I8TG9nRW50cnk+IG1fZXhpdExvZzsKKworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxC
bG9ja1N0YXRlPj4gbV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVk
Pj4gbV9wcmVkZWNlc3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07Cisg
ICAgICAgIGJvb2wgbV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxCeXRlY29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODgg
QEAKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAK
IHZvaWQgSklUOjplbWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BK
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1Ro
YW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJl
QW5kSnVtcDxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVz
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVx
dWFsKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVy
ZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3Nl
cT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVH
cmVhdGVyVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21w
YXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1
YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wPE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVM
ZXNzVGhhbk9yVW5vcmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91
YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2Us
IHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91Ymxl
TGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2Us
IGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzc0VxLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3Jl
YXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BK
Z3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
PE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7Cisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3Mo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21w
YXJlTGVzcywgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxl
c3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVy
ZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpu
bGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRo
YW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdzxPcEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIp
OworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlciwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4o
Y3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlR3JlYXRlckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpuZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9y
ZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTE0NiwzNyArMTQ4LDE2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShj
b25zdCBJbnN0cnVjCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6ZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBncENvbXBhcmUsIERvdWJsZUNvbmRp
dGlvbiBkb3VibGVDb21wYXJlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBs
aHNUZW1wLmdwcigpLCByaHNUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShy
aHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAg
ICAgICAgICBjb21wYXJlRG91YmxlKGRvdWJsZUNvbXBhcmUsIGxoc1RlbXAuZnByKCksIHJoc1Rl
bXAuZnByKCksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoKHNob3VsZFNwZWN1bGF0
ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB8fCAhcHJlZGljdGlv
bkZvcihsaHMpIHx8ICFwcmVkaWN0aW9uRm9yKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQg
cmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91Ymxl
Q29tcGFyZSwgbGhzVGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChsaHNHUFIpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7
CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2xlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1Ro
YW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xl
c3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRD
b21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWws
IERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
ZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFu
LCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9n
cmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
bWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5P
ckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKK30KKwogdm9pZCBK
SVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2ln
bmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9w
MSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdFRlbXAuZ3ByKCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1
bHQpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShy
ZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwg
cmVnVDApOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
biwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdl
dCwgY29uZGl0aW9uKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFy
Z2V0LCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24sIERvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJh
dGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoK
ICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8v
IC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQg
aW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aERvdWJsZShkb3VibGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHx8ICFwcmVk
aWN0aW9uRm9yKG9wMSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AyKSkgeworICAgICAgICAgICAgTnVt
YmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5k
IHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRv
dWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlz
LCBvcDEgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJo
cy5ncHIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHJoc0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQ
Uik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxs
b2NhdGlvbiA9IGZhbHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICszNTUsNDMgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQogeworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRp
b25hbDxWYWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBy
aHNUZW1wOworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBs
aHNHUFIgPSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBT
cGVjSW50MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVn
VDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgICAgIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShv
cDIpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNH
UFIgPSByZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNH
UFIpOworICAgICAgICB9CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAg
ICAgIGdldExIUygpOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFu
dEludChvcDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIElt
bTMyKG9wMmltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlv
biwgbGhzR1BSLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QxKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0g
Z2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29t
bXV0ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWlt
bSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAg
ICAgIGdldFJIUygpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BS
LCByaHNHUFIpLCB0YXJnZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICs0MDcsODkgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQog
eworICAgIEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1w
OworICAgIGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIg
PSBsaHNUZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50
MzJPbmx5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAg
IHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSBy
ZWdUMTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBl
bHNlCisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJ
bW0zMihvcDJpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQ
UiwgSW1tMzIob3AyaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QwKTsKKyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlv
biksIHJlZ1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21t
dXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9
IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIs
IHJlZ1QxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdU
MCk7CisgICAgICAgIGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFy
ZTMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0
cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rp
b24tPnNpemUoKSwgY29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlv
biBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24g
Y29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BS
LCByaHNHUFIpOworICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVy
dCA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUg
Zm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2lu
dCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50
IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBv
aW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCBhcmd1bWVudEdQUjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSk7CkBAIC0zMDAsOCArNDk4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIp
KSB7Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZO
b3ROdW1iZXIocmVnVDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QwKTsKQEAgLTMyNiw4ICs1MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51
bWJlcihyZWdUMSk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEp
OwpAQCAtMzUxLDEyICs1NDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBMSFMgaXMgbm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkg
ewogICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAg
ICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZh
aWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJ
ZkludDMyKHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEp
OwogICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2
NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdU
MCwgZnBSZWdUMCk7CkBAIC0zNjksOSArNTYyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWls
Mi5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5s
aW5rKHRoaXMpOwogICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5v
dCBJbnQuCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KQEAgLTM4MSwxMSArNTc0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2lu
Yyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQz
MihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQz
Mk92ZXJmbG93KCkpIHsgLy8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBl
IGFncmVlcyB3LyB0aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBG
UFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1w
LmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBm
cHIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAg
ICAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAg
ICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFk
ZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERv
dWJsZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcg
ZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9
IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7
CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlu
cHV0LmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7Cisg
ICAgICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAg
ICAgICAgc2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGlucHV0LmdwcigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0Rz
dCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVn
cyB7IGlucHV0R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BS
KTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTMsMTEgKzYyOCw2MiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVj
b2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1Qw
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94
SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBS
UmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKGlucHV0R1BSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25z
dCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZElt
bVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQ
UiwgdGVtcEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0
LCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNB
bnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJ
bW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlu
cHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUoc3JjRHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBGUFJSZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUg
b25lID0gMS4wOworICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0
ZW1wRlBSKTsKKyAgICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRG
UFIpOworICAgICAgICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVt
cCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZw
cigpOworICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAg
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91Ymxl
KFRydXN0ZWRJbW1QdHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlu
cHV0RlBSLCB0ZW1wRlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0
LCBpbnB1dEZQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBz
b21lIEJpZ0ludDMyLi4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7Cisg
ICAgICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsK
KyAgICAgICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2OTMsMTEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVj
b2RlLm1fcmhzOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKGxocykgfHwgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpICYmIHNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7Cisg
ICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAg
ICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBy
ZXN1bHRGUFIgPSByZXN1bHRUZW1wLmZwcigpOworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soTWF0aDo6Zm1vZERvdWJsZSwgcmVzdWx0RlBS
LCBsaHNGUFIsIHJoc0ZQUik7CisKKyAgICAgICAgICAgIHNldERvdWJsZShkc3QsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBNYWtl
IHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0g
ICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4
NlJlZ2lzdGVyczo6ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAg
YXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsK
ICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChlY3gpOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gZWR4VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHJoc1RlbXA7CisgICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBjbG9iYmVyKGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJl
cihlY3gpOworICAgICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVk
eFRlbXAuZW1wbGFjZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlz
LCBlY3gpOworCisgICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIo
KTsKKyAgICAgICAgZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4
VGVtcC0+Z3ByKCkgPT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3By
KCkgPT0gZWR4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4
KTsKKworICAgICAgICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1Rl
bXAuZW1wbGFjZSgqdGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7
CisgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBzcGls
bEZvckNhbGwoKTsgLy8gT09QUzogbmV3IG5hbWUsIGxpa2Ugc3BpbGxFeHBlY3RpbmdTbG93UGF0
aAorCisgICAgICAgIGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywg
bGhzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KGxoc0dQUik7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1v
dmUobGhzR1BSLCBlYXgpOworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBsaHNHUFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMobGhzLCBsaHNHUFIsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KGxoc0dQUik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAg
ICAgICBtb3ZlKGxoc0dQUiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVu
b21pbmF0b3JOb3ROZWcxID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0x
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
LTIxNDc0ODM2NDctMSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBU
cnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGlu
ayh0aGlzKTsKICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihl
Y3gpOwotICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRp
dmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDAp
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJh
dG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQorICAgIGJv
eEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLSNl
bHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5S
RUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShsaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9u
KHByb3ZlblR5cGUocmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRp
ZiAvLyBDUFUoWDg2XzY0KQpAQCAtNDY0LDcgKzgwNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9tb2QoY29uc3QgSW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29u
ZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdElu
dDMyT3AyOwpAQCAtNDc0LDYgKzgxNiw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
KGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdU
MCk7CkBAIC01NjIsMTUgKzkwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQo
Y29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJh
dGlvbj4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlv
biAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24s
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZl
cnQsIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDAp
OwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyNCwxMyArMTA2NSw2NiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFy
aXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJ
VE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJl
IGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3Bl
cmFuZCBjYW4gYmUgYSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGlt
aXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6OnRyeUVtaXRMT0xCaXRGYXN0
UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisKKyAgICBhdXRvIGJpdE9wID0gWyZdIChHUFJSZWcgbGhzR1BSLCBHUFJSZWcg
cmhzR1BSKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcEJpdGFuZD4pCisgICAgICAgICAgICBhbmQzMihsaHNH
UFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZV92PE9wLCBPcEJpdG9yPikKKyAgICAgICAgICAgIG9yMzIobGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxP
cCwgT3BCaXR4b3I+KQorICAgICAgICAgICAgeG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BMc2hp
ZnQ+KQorICAgICAgICAgICAgbHNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BVcnNoaWZ0PikK
KyAgICAgICAgICAgIHVyc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFJzaGlmdD4pCisgICAg
ICAgICAgICByc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBz
ZXRJbnQzMihyZXN1bHQsIHJlc3VsdEdQUik7CisgICAgfTsKKworICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAg
SW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJo
cyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKyAgICAgICAgYml0T3AobGhzR1BSLCBy
aHNHUFIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50MzJDb252ZXJ0aW5nKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0
aW5nKG9wMikpIHsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCBsaHMgeyAqdGhpcywg
b3AxIH07CisgICAgICAgIEludDMyQ29udmVydGluZ09wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzLmdwcigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MSwx
NyArMTEzNSw4IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OwotI2VuZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRGYXN0UGF0aDxPcD4oY3VycmVu
dEluc3RydWN0aW9uKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVm
dE9wZXJhbmQ7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwpAQCAtNzYwLDMzICsx
MTQ1LDEwNiBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAg
ICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkp
OwogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCiAgICAgICAgIHJpZ2h0
T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQogICAg
IFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
czsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
bGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNo
VGVtcDsKKworICAgIC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3Ax
KTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3Vs
dFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07Cisg
ICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAg
ICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3Mp
OworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1Q0OwogICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Cisj
ZW5kaWYKIAotICAgIFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogCisgICAg
U25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAg
Z2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKICAgICBpZiAocHJv
ZmlsaW5nUG9saWN5ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1pdFByb2ZpbGluZykKLSAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MuZ3ByKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdz
LmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Ax
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3Vs
dCkgPSBTcGVjSW50MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBl
KHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5v
dD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wg
cmVzdWx0SXNJbnQzMiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
b3AxKSkgeworICAgICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMy
KHJlc3VsdEdQUik7CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBpZiAocmVzdWx0SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJ
bnQzMk9ubHk7IAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOwogI2Vsc2UKQEAgLTgwMyw3ICsxMjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0
bm90KGNvbnN0IEluc3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IGxlZnRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTg0OSwxOSArMTMwNyw4IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlm
dEZhc3RQYXRoKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UK
LSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKKyAg
ICBpZiAodHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAg
ICAgICByZXR1cm47CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlw
cGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBAIC04NzMsMjEgKzEzMjAsNzcgQEAgdm9pZCBKSVQ6
OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9
IEludmFsaWRGUFJSZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAg
T3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29t
ZSBpMzIgZmFzdCBwYXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNl
KCp0aGlzLCBvcDIpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAg
ICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1w
LT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+
Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAg
ICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisK
KyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBS
ID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYg
KCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAg
SklUUmlnaHRTaGlmdEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVz
dWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaEZQUiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkp
OwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwg
U3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
MiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkg
PSBTcGVjSW50MzJPbmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsK
KyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC05MDIsMTggKzE0MDUsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEFkZD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ay
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAg
ICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAg
ICAgIEZQUlRlbXAgbGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJo
c0ZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhz
RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3By
KCksIHJoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIo
KSwgcmhzRlBSLmZwcigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKGJ5dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9Owor
ICAgICAgICAgICAgICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93
LCByaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgICAgICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVt
YmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBy
ZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLCBy
aHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFk
ZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
SklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRv
TWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFk
ZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9w
dGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGlt
aXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxNDc1LDM1
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdp
c3RlciBhcyBzcmMgYW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1
c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRo
LgotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gc3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNyY1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3Vs
dFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07Cisg
ICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3Rl
ciBhcyBzcmMgYW5kIGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwg
dXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0
aC4KKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0K
ICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKQEAgLTk0MSwxOSArMTUxMiwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
VW5hcnlNYXRoSUM8CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3Vs
dFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kLCBzcmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElD
R2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+
dmFsdWU7CiAKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRl
SW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVk
SW5saW5lQ29kZSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRo
UHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNl
IHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdw
cigpLCByZXN1bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3Mu
Z3ByKCkpOwogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhKdW1wcyk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBp
bmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAtOTYzLDcgKzE1MzcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAg
aWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29k
ZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVO
dW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNw
ZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzE1NTUsODIgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CiAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFu
dEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkg
fHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVn
cyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qz
OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAg
ICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsK
KyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IHJpZ2h0VGVtcEZQOwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZw
UmVnVDA7CisgICAgRlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJp
Z2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25z
dGFudChsZWZ0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdw
cigpIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMikpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBz
Y3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmln
aHRUZW1wRlAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hU
ZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOwor
ICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0g
cmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7
CisgICAgICAgIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxl
ZnRGUFIgPSBmcFJlZ1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxF
QVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29u
c3RhbnQocmlnaHRPcGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOworICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5l
cmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAg
bWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5k
LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2Ny
YXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xl
ZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0
T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2Vu
ZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0
b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0x
MDE1LDE3ICsxNjM5LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRo
SUMKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxp
bmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxp
bmVDb2RlKSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlm
IChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdo
dFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29u
c3QoKSkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOworICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1
bHQpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7Cisg
ICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBs
YWJlbCgpOwpAQCAtMTAzNSwxMSArMTY3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUQmluYXJ5TWF0aElDCiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkK
KyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAg
ICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0lu
dDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJl
c3VsdFJlZ3MpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRj
aEZ1bmN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0
YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0
aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE2OTgsOCBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3Jj
UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpIH07CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpOwpAQCAtMTA4NSw3ICsxNzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVFVuYXJ5TWF0aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2Zp
bGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBh
dGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
biByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5l
cmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYg
KzE3NDUsNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKLSNlbmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5
dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0
T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUg
KzE3NTUsMzYgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAg
ICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVy
YW5kKSkpOwogCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
bGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50
KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRv
cjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07Cisg
ICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIg
PyByZWdUMyA6IHJlZ1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVy
YW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVn
VDAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlm
CiAKKyAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7
CisKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0
Y2gpCkBAIC0xMTU2LDIzICsxODE3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IElu
c3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
MjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZw
UmVnVDI7Ci0KLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7
Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTgzMiwy
MzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5z
ZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQog
ICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVnczsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAg
ICBGUFJSZWcgbGVmdEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxW
YWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsK
KyAgICBPcHRpb25hbDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+
IHJpZ2h0VGVtcEZQOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIp
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRU
ZW1wLT5ncHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVt
cC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAg
ICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBS
ID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZw
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBz
Y3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAg
IHJpZ2h0RlBSID0gZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7
CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0g
ZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAK
ICAgICBKSVREaXZHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJp
Z2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgo
KSkgewogICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdw
cigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5k
SnVtcExpc3QoKS5lbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0
KCkuZW1wdHkoKSk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rp
dik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgICAgIHdpbGxEZWYocmVzdWx0
KTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNw
ZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5
cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAg
ICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJl
ciB8IFNwZWNCaWdJbnQ7CiAgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2Zp
bGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3Ay
IH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVn
WmVyb0RvdWJsZSgpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBS
UmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQ
UiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJl
c3VsdFRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhz
R1BSLCBsaHNGUFIpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQ
UiwgcmhzRlBSKTsKKyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJl
c3VsdEZQUik7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHRGUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBi
cmFuY2hNdWwzMihPdmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAg
ICAgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gz
MihMZXNzVGhhbiwgbGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhpdEtpbmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoTGVzc1RoYW4sIHJoc0dQ
UiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9w
MikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBG
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3Vi
bGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMs
IG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07Cisg
ICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcg
bGhzRlBSID0gbGhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIo
KTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAg
ICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBz
ZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUTXVsSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4o
bXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVNdWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJ
VE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
LSAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4o
bXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGlt
aXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXpl
LCBzbG93Q2FzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQ
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAg
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAg
IEZQUlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhz
LmdwcigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUo
bGhzRlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAg
ICAgICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91Ymxl
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoU3ViMzIoT3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkp
KTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0Lmdwcigp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUo
bGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3Vi
bGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBzdWJEb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3Vi
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lz
ZV9jYXN0PEpJVFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xv
dzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yk9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRl
Y29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJl
Z1QwKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdp
bGxEZWYoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6
Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBT
bG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDAp
OwpAQCAtMjE2LDYgKzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4K
ICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJu
LgogICAgICovCisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAg
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKQEAgLTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAg
ICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQg
IT0gb3BfY2FsbF9ldmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2Fs
bDxPcENvbnN0cnVjdD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4o
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fs
bF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIpOworICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd0Nhc2UpOwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2Fs
bF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxs
VmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAg
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDb25zdHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nv
bnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0
cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAg
fSkoKTsKIAorICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQg
aGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVj
a3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8v
IE9PUFM6IGZpZ3VyZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAg
IHNwaWxsRm9yQ2FsbCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBpbnN0cnVjdGlvbiwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgp
OwogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1v
ZGU6OkdlbmVyaWMpKSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBp
biByZWdUMAogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5h
bWVzLT5uZXh0OwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7
CisKKyAgICBKdW1wTGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRT
bG93LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVy
c0ZvclN0dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5l
eHRDaGVja3BvaW50U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3Bv
aW50U2xvdyk7CisKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRU
ZW1wIHsgKnRoaXMsIHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVz
dWx0VGVtcC5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSBy
ZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAg
ICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDAp
OwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1
Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRl
cmF0b3JHUFIgPSByZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0
LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAg
fQogICAgIH0pKCk7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2lj
YWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBl
ciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biBy
ZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0LCByZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1w
dHkocmVnVDApOwogCkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAK
ICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BS
KTsKKyAgICAgICAgSnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9u
ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIp
KTsKIAotICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1
ZUdQUik7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywK
ICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJS
ZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAg
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBl
bmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7
IGRvbmVHUFIgfSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2lu
dFNsb3dQYXRoKTsKKworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFk
dmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAg
ICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxz
ZTsKICAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCks
IEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKTsKIAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsK
KwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5w
cm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRT
bG93UGF0aCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsK
KyAgICAgICAgd2lsbERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25E
b25lLmxpbmsodGhpcyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRl
cmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcg
KzU1NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1
bXBMaXN0IG5vdE9iamVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlclJlc3VsdEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRo
aXMpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5
MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBK
SVRDb2RlOjp0eXBlTmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAg
IGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOwor
ICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5
cGU6OkZUTEpJVDoKQEAgLTEwOCw3ICsxMTAsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENv
ZGVXaXRoQ29kZVJlZihDCiAKIEpJVENvZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJl
ZigpCiB7Ci0gICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQorICAg
IGlmICgoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKGlzREZHT3JGVEwoaml0VHlwZSgp
KSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCiAgICAgICAgICYmIG1fcmVmLmV4
ZWN1dGFibGVNZW1vcnkoKSkKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBKSVQgY29kZSBh
dCAiLCBwb2ludGVyRHVtcChtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpLCAiXG4iKTsKIH0KQEAg
LTIzNyw2ICsyMzksMTEgQEAgTmF0aXZlRE9NSklUQ29kZTo6TmF0aXZlRE9NSklUQ29kZShDb2Rl
UgogI2lmIEVOQUJMRShKSVQpCiBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9Q
cmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUlu
ZGV4KQogeworICAgIC8vIEZvciBCYXNlbGluZSBKSVQsIHRoaXMgaXMgdHJpdmlhbGx5IHRydWUu
CisgICAgLy8gRm9yIExPTCBKSVQsIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBzcGlsbGVkIHRvIHRo
ZSBzdGFjayBhdCBlYWNoIG9wY29kZSwgc28gd2hlbiB3ZQorICAgIC8vIGdvIHRvIHRoZSBvcF9j
YXRjaCwgdGhlIGxpdmUgc3RhdGUgbXVzdCBhbHJlYWR5IGJlIGluIHRoZSByaWdodCBwbGFjZSBv
biB0aGUgc3RhY2suCisgICAgLy8gQWxzbywgb3BfY2F0Y2ggaGFzIG5vIGluY29taW5nIHJlZ2lz
dGVyL3R5cGUgcHJvb2Ygc3RhdGUsIHNvIGl0J3MgdHJpdmlhbCB0byBjYXRjaAorICAgIC8vIGFu
IGV4Y2VwdGlvbiBpbiBMT0wganVzdCBieSBqdW1waW5nIHRvIG9wX2NhdGNoLgogICAgIHJldHVy
biB7IH07CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShy
ZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50
OF90IHsKICAgICBIb3N0Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFz
ZWxpbmVKSVQsCisgICAgTE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02
NywzNiArNjgsMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1l
KEpJVFR5cGUpOwogCi0gICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0
YXRpYyBKSVRUeXBlIHRvcFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6
OkZUTEpJVDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklU
VHlwZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAg
IGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6
REZHSklUOwotICAgICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVy
biBKSVRUeXBlOjpGVExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2Ny
aXB0KEpJVFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewog
ICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENh
bGxUaHVuazoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKwor
ICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklU
VHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAg
ICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAg
ICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xK
SVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAg
LTExNiw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUp
IHsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNl
IEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDYgKzEx
NywyNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxs
U2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChqaXRUeXBlKSB7CisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBKSVRU
eXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBz
dGF0aWMgYm9vbCBpc0xvd2VyVGllcihKSVRUeXBlIGV4cGVjdGVkTG93ZXIsIEpJVFR5cGUgZXhw
ZWN0ZWRIaWdoZXIpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0V4ZWN1dGFibGVT
Y3JpcHQoZXhwZWN0ZWRMb3dlcikpOwpAQCAtMTQ1LDkgKzE1NiwxOSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICByZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0
ZWRIaWdoZXIpOwogICAgIH0KKworICAgIHN0YXRpYyBib29sIHVzZXNSZXBsYWNlbWVudENvZGVC
bG9jayhKSVRUeXBlIGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBK
SVRUeXBlOjpMT0xKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9
PSBKSVRUeXBlOjpGVExKSVQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGlzT3B0aW1p
emluZ0pJVChKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9
PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQgfHwgaml0VHlw
ZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNERkdPckZU
TChKSVRUeXBlIGppdFR5cGUpCisgICAgewogICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRU
eXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChW
TSYgdm0sIENhbGxGcmFtZSogY2EKICAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNl
dCBpbiB0aGUgbWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCiAgICAgICAgIC8v
IGFuZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhh
bmRsZXItPnRhcmdldAogICAgICAgICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAgICBp
ZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRU
eXBlKCkpKQorICAgICAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+aml0VHlwZSgpKSkKICAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdl
dCkucHRyKCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxl
ci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVC5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTE0NSw2ICsxNDYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBj
YWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2Uu
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE1Nyw2ICsxNTksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4KIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
ID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzog
TWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBz
cGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTE2NywyNSArMTcwLDYgQEAg
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxs
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNs
b3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKLXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRl
ci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNl
RW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2Fz
ZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRl
eCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNywy
NyArMTkxLDM2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAg
ICBqdW1wLmxpbmtUbyhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJ
VDo6ZW5zdXJlU2xvd0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1
bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgp
IHx8IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkg
eworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
aWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0g
c2xvd1BhdGhTYXZlUGxhbigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlk
KCkgPT0gISFyZXN1bHQpOworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVz
dWx0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICBtX3Ns
b3dDYXNlcy5sYXN0KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0IHsgfSk7CisgICAgfQorICAgIHJl
dHVybiBtX3Nsb3dDYXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFk
ZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1
bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5
KGp1bXAsIG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0
KS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFk
ZFNsb3dDYXNlKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1
bXBMaXN0JiBqdW1wTGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhp
cyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93
Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAm
IGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5hcHBl
bmQoanVtcCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1w
LCBpbnQgcmVsYXRpdmVPZmZzZXQpCkBAIC00MDYsMTEgKzM5OSw2IEBAIEFMV0FZU19JTkxJTkUg
ZG91YmxlIEpJVDo6Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcs
IEZQUmVnaXN0ZXJJRCB2YWx1ZSkKQEAgLTcxNyw2ICs3MDUsMTggQEAgQUxXQVlTX0lOTElORSBF
Q01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1bGF0ZWRUeXBlIGRzdFR5
cGUpCit7CisgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGZ1bmN0aW9uKTsKKyAgICBzbG93UGF0aENh
bGwuY2FsbCgpOworICAgIGlmIChtX3VzZUxPTCAmJiBkc3QuaXNWYWxpZCgpKSB7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IGRzdFR5cGU7CisgICAgICAgIHdpbGxEZWYoZHN0KTsKKyAgICB9
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICB9OwogCi0gICAgICAgIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJs
b2NrLT5qaXRUeXBlKCkpOworICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklU
Q29kZTo6aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSk7CiAKICAgICAgICAgaWYgKG1f
Z2VuZXJhdGVGYXN0UGF0aE9uUmVwYXRjaCkgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNyw4ICsxMDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCAr
MTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwpAQCAtMTI0Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFi
bGVfaW5kZXhlZAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCYXNpY0Jsb2Nr
TG9jYXRpb24uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkRp
c2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKQEAgLTQxLDYg
KzQyLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01MSw2ICs1NCwyOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3NyYzsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBJZiB3ZSBj
aGFuZ2UgcmVnYWxsb2Mgc3VjaCB0aGF0IHRoZXJlIGNhbiBiZSBOIHJlZ2lzdGVycyBwZXIgbG9j
YWwsIHdlIGNhbiBtYWtlIHRoaXMgc3VjaCB0aGF0IHdlIGRvbid0IG5lZWQgdHdvIHJlZ3MuCisg
ICAgICAgIGlmIChzcmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0g
aW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzExNSw1MyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmly
dHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVz
dWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAg
ICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOwor
ICAgIEdQUlJlZyBhbGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0
b3JUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxv
Y2F0b3JUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKworICAgICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAg
YWxsb2NhdG9yUmVnID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcg
PSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0g
cmVnVDA7CisgICAgICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVn
ID0gcmVnVDI7CisgICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAg
ICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0
KTsKICAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRl
Y29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2Rz
dCkgPSBTcGVjRmluYWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
ZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0
dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdw
cigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNzEsNTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdp
c3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJS
ZWcgaW5zdGFuY2VHUFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAv
LyBPT1BTOiBpbnZlbnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiBjb25zdHJ1Y3RvclRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5j
ZVRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVt
cGxhY2UoKnRoaXMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxh
Y2UoKnRoaXMsIGhhc0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2Uo
KnRoaXMpOworCisgICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIo
KTsKKyAgICAgICAgaW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAg
ICAgaW5zdGFuY2VHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24n
dCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAg
SnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9I
YXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNl
VmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9s
RnVuY3Rpb24oKSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
cmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29u
c3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBp
cyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNz
KGNvbnN0cnVjdG9yR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hC
b29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCAr
MjI0LDkzIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3Bl
cmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lz
dGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBk
b25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3Vs
dC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQg
cHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2Vk
IGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICBy
ZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCBy
ZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
bV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVy
YW5kPiB2YWx1ZVRlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9U
ZW1wQ2VsbDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAg
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAg
cmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAg
IEdQUlJlZyBwcm90b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJl
c3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVl
KSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1w
Q2VsbC5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVt
cGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBD
ZWxsLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7
CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAg
ICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9H
UFIgPSBwcm90b1RlbXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1
bHRUZW1wLmdwcigpLCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
ICAgICB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRl
bXAuZ3ByKCksCisgICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAor
ICAgICAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAg
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMu
YXBwZW5kKGdlbik7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSBy
ZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9y
IGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNh
biB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Rv
LCByZWdUMSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxs
cy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5
X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIHByb3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQK
KyAgICAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3Rv
CisgICAgICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
KyAgICAgICAgCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBt
X2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJl
Z3MucHJvdG90eXBlR1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMyNSwyOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkp
KQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Vt
cHR5KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNTUsNzIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOwogCi0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAK
LSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwg
cmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RD
ZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZh
bHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlu
cHV0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAg
R1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVt
cC5ncHIoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BS
KTsKKworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8g
ZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGlucHV0R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0
ZW1wR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgp
OworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwor
ICAgICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAg
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwor
CisgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MjksMzMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikp
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3Ro
ZXIpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jv
b2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiAr
NDYzLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVl
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyNpZiBDUFUo
QVJNNjQpCisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxz
ZSksIGlucHV0R1BSLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHRlc3Q2NChaZXJv
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAg
ICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMjY4LDExICs0OTksMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNOdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdDY0
KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdpc3Rl
ciwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0UoQklH
SU5UMzIpCkBAIC0yODIsMjEgKzUyOSw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50
KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29t
cGFyZTgoRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0gYnJh
bmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6QmlnSW50MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChpbnB1
dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjpCaWdJbnQzMk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJU
YWcpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlz
KTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVz
dWx0R1BSKTsKIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFu
Y2hJZkNlbGwocmVnVDApOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJp
Z0ludDMyTWFzayksIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMy
VGFnKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxsLmxp
bmsodGhpcyk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVn
VDApOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwog
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVSTiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMxMywx
OCArNTk1LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5
cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1
ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVl
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
IHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAg
ICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjQ0LDYxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY09iamVjdCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdw
cigpOworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkK
KyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+
U3BlY09iamVjdCkpCisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVlVGVt
cCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBzcGVj
dWxhdGUKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5
cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21w
YXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0K
IAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMzU1LDcgKzcwOSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVU
ZW1wLmdwcigpOworICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcyOCw0MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYg
KGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3Zl
blR5cGUoc3JjKSAmIH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5k
IHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5j
aElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9i
amVjdCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAg
aXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk9iamVjdChyZWdUMCkpOworICAgICAgICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAgICAg
IGlmIChkc3QgIT0gc3JjKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIgKzc3MSwyMjEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0g
YnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgaWYgKCEocHJvdmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAg
ICAgICBtb3ZlKHZhbHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7
CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN5bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFs
dWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0
cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJv
bCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBwcm92ZW5UeXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wo
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwor
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlv
bk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1bmN0
aW9uIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IG5hbWUgeyAqdGhpcywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5jdGlv
bkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUuZ3By
KCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBmdW5jdGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDAp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUJvb2xlYW4odmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9y
NjQoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHZhbHVlKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVl
VGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWVUZW1wLmdwcigpOworICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVE
b3VibGUodmFsdWUpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0
aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlJlZyB2YWx1ZUZQUiA9IHZhbHVlVGVtcC5mcHIoKTsKKyAgICAgICAgICAg
IEZQUlJlZyBzY3JhdGNoRlBSID0gdGVtcEZQUi5mcHIoKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
YXV0byBub25aZXJvID0gYnJhbmNoRG91YmxlTm9uWmVybyh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7
CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgbm9uWmVyby5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIE51bWJlck9w
ZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBGUFJUZW1wIHRl
bXBGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWVUZW1w
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZwcigpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBhdXRvIG5vblplcm8gPSBicmFuY2hEb3VibGVOb25aZXJvKHZh
bHVlRlBSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBub25aZXJvLmxpbmsodGhp
cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1w
IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hHUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSVGVtcCB2YWx1ZUZQUiB7ICp0aGlzIH07CisgICAgICAgICAg
ICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNv
bnN0ZXhwciBib29sIGludmVydCA9IHRydWU7CisgICAgICAgICAgICBlbWl0Q29udmVydFZhbHVl
VG9Cb29sZWFuKCptX3ZtLCBKU1ZhbHVlUmVncyB7IHZhbHVlVGVtcC5ncHIoKSB9LCByZXN1bHRH
UFIsIHNjcmF0Y2hHUFIuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgaW52ZXJ0KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNW
YWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBh
bGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hp
Y2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSku
Ci0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFk
ZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAgICAg
Ly8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2Vk
IGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFyIG90
aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0
cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0
IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAg
dGhlIGxvdyBiaXQuCisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
Y29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFs
LCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMg
aW5saW5lCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9u
IH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0
Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07
CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoMUZQUiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJG
UFIgPSBmcFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
Uiwgc2NyYXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwor
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZh
bHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCks
IEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRhcmdldCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBjb25kaXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlIHsgKnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlv
biwgdmFsdWVHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAg
ICBJbnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoTm90RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5l
CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07Cisg
ICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQ
UiA9IGZwU2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBm
cFNjcmF0Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2Ny
YXRjaDFGUFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NDAsNDYgKzk5NCwxMjkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlz
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUo
aW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7
ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRv
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAg
Ly8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAg
ICBhdXRvIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAg
ICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBu
dWxsCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRl
c0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8g
Rmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
KyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAg
ICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAg
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
KyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxp
bmsodGhpcyk7Ci19Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlT3RoZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgICAgICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3Jh
dGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVz
dGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAg
ICAgICAgICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOwor
CisgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAg
ICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51
bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxp
bmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNl
cyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CisgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAg
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
KyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CisgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00ODgsMTAgKzExMjUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5v
dGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTUwMCwxMCArMTE1MywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikp
IHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2
NSArMTE4NCw0NDIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Ywog
ICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIo
MSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
Ci0gICAgZXF1YWwubGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIp
KSkgeworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFz
SnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBh
dXRvIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVj
aWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigx
KSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQorc3RhdGljIHZvaWQgY29tcGFyZVN0cmluZ3MoSklUJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgbm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgsIEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNH
UFIsIEdQUlJlZyBsaHNUZW1wR1BSLCBHUFJSZWcgcmhzVGVtcEdQUiwgR1BSUmVnIHNjcmF0Y2hH
UFIsIEdQUlJlZyBzY3JhdGNoMkdQUikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc0dQUiwgSlNTdHJp
bmc6Om9mZnNldE9mVmFsdWUoKSksIGxoc1RlbXBHUFIpOworICAgIGppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJoc0dQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJo
c1RlbXBHUFIpOworCisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZlJvcGVTdHJpbmdJ
bXBsKGxoc1RlbXBHUFIpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9wZVN0
cmluZ0ltcGwocmhzVGVtcEdQUikpOworCisgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhsaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgIAorICAgIG5vdEVxdWFsLmFwcGVuZChqaXQuYnJhbmNoMzIoCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLAorICAg
ICAgICBzY3JhdGNoR1BSKSk7CisgICAgCisgICAgZXF1YWwuYXBwZW5kKGppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBzbG93UGF0
aC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8s
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6
OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0
cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5j
aFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhC
aXQoKSkpKTsKKyAgICAKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhs
aHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBsaHNUZW1wR1BSKTsKKyAgICBq
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBs
OjpkYXRhT2Zmc2V0KCkpLCByaHNUZW1wR1BSKTsKKyAgICAKKyAgICBhdXRvIGxvb3AgPSBqaXQu
bGFiZWwoKTsKKyAgICAKKyAgICBqaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgc2NyYXRjaEdQUik7CisKKyAgICB7CisgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KGxoc1RlbXBHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc09uZSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgYXV0byBtYWNyb1NjcmF0Y2ggPSBqaXQu
c2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBkaXNhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgocmhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lKSwgbWFjcm9TY3JhdGNoKTsKKyAgICAgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2gyR1BSLCBtYWNyb1NjcmF0Y2gp
KTsKKyAgICB9CisgICAgCisgICAgaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZqaXQpOworICAgIGVxdWFsLmFwcGVuZChq
aXQuanVtcCgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCitzdGF0aWMgdm9pZCBjb21wYXJlU3RyaWN0RXFDZWxscyhK
SVQmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBub3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwg
R1BSUmVnIGxoc0dQUiwgR1BSUmVnIHJoc0dQUiwgR1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyBy
aHNUZW1wR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgR1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgZXF1YWwuYXBwZW5kKGppdC5icmFuY2hQdHIo
Q0NhbGxIZWxwZXJzOjpFcXVhbCwgbGhzR1BSLCByaHNHUFIpKTsKKworICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuYnJhbmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgIHNsb3dQYXRoLmFwcGVu
ZChqaXQuYnJhbmNoSWZIZWFwQmlnSW50KHJoc0dQUikpOworCisgICAgYXV0byBsaHNJc1N0cmlu
ZyA9IGppdC5icmFuY2hJZlN0cmluZyhsaHNHUFIpOworICAgIG5vdEVxdWFsLmFwcGVuZChqaXQu
anVtcCgpKTsKKworICAgIGxoc0lzU3RyaW5nLmxpbmsoJmppdCk7CisgICAgbm90RXF1YWwuYXBw
ZW5kKGppdC5icmFuY2hJZk5vdFN0cmluZyhyaHNHUFIpKTsKKworICAgIGNvbXBhcmVTdHJpbmdz
KGppdCwgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXBH
UFIsIHJoc1RlbXBHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEp0cnVlPigpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRl
Y29kZS5tX3JoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOwor
ICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBm
cENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxP
clVub3JkZXJlZDsKKworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwo
cHJvdmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVj
dChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJo
cywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAg
ICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBz
cGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7
CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IHNs
b3dQYXRoOworCisgICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVx
dWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3By
KCksIHNjcmF0Y2hUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZXF1YWwubGluayh0
aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1
ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1
dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDog
SlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0g
ZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFw
cGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhs
aHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZlN0cmluZyhyaHNHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50
MzIocmhzKSkgeworICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQ
UlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhz
VGVtcC5ncHIoKTsKKyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQg
bGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsg
KnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3Vi
bGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJo
cykpIHsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAg
ICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVt
cC5mcHIoKTsKKyAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBS
LCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8g
bW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNU
ZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlz
LCByaHMgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9
IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgs
IHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29k
ZS5tX3JoczsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEpl
cT46OnZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlz
RXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJs
ZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAo
IXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsK
KyAgICAgICAgaWYgKCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3Vs
YXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNH
UFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJo
c0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9s
KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN5bWJvbChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
U3RyaW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAg
IGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmlu
ZyhyaHMsIHJoc0dQUik7CisKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07
CisgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BS
VGVtcCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gy
VGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAg
ICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKwor
ICAgICAgICAgICAgY29tcGFyZVN0cmluZ3MoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1Bh
dGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1wLmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNo
VGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICBh
ZGRKdW1wKGVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZEp1bXAobm90RXF1
YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZT
dHJpbmcobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhy
aHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNH
UFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIp
KTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNH
UFIpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJP
cGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3Vi
bGUocmhzKSkgeworICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07
CisgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
RlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSBy
aHNUZW1wLmZwcigpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxo
c0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51
bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgIE51bWJl
ck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5m
cHIoKTsKKyAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUg
Y2FzZXMgaGVyZS4KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
IEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0g
cmhzVGVtcC5ncHIoKTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsK
KworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0
KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8
T3BFcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVn
VDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQ
UlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
Y29uZGl0aW9uLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAg
ICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVz
ZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3By
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5l
cT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OworICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAg
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFy
ZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQ
UiwgcmhzR1BSKTsKKyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOwordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBs
PE9wSmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhz
R1BSLCByaHNHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBj
YW4gbWFrZSB0aGlzIGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2Ji
ZXIgcmV0dXJuVmFsdWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihz
bG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2Rl
Lm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSks
IHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIg
PSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNb
MV0uZ3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNH
UFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRo
U2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRh
cmdldCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVGhyb3c+KCk7CkBAIC01ODksNzQgKzE2MzUsMjQwIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0
ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0g
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdw
Q29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFy
ZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVF
cXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
bGhzKSAmJiBzaG91bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNU
ZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAg
ICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0
cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BS
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAg
ICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aFRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAg
ICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qg
c2xvd1BhdGg7CisKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWws
IG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1Rl
bXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAg
ICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAg
ICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
KworICAgICAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBM
aXN0IG5vdEVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAg
ICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRj
aFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsg
KnRoaXMgfTsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxzKCp0aGlzLCBl
cXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwg
cmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisK
KyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAg
ICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAg
ICBub3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRT
cGVjdWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7
ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBh
cmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZURvdWJsZShyaHMpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0
ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhp
cywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhz
IH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURv
dWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
Ym94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2
ZSBjYXNlcyBoZXJlLgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICAgICAgR1BSVGVtcCBsaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgcmhzU2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAg
eyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIGxoc1NjcmF0Y2hHUFIgPSBsaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJoc1NjcmF0Y2hHUFIgPSByaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3Jj
MSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dEdQUiwgZHN0KTsKIAogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwg
d2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMg
RG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICBy
ZXN1bHQgPSAobGVmdCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBk
b25lOwotICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290
byBzbG93UGF0aDsKLSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAg
IC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMg
RG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxk
IGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVt
YmVyCi0gICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0
aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxs
IGhpZ2ggYml0cyBhdCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhl
biAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25s
eSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICBtb3ZlKHJlZ1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdU
NSk7Ci0gICAgb3I2NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCByZWdUMSwgcmVnVDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBy
ZWdUNSk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0
IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAg
IGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQg
dG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGZhbHNlKTsK
KyNlbHNlCiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9w
U3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwg
cmVnVDUpOwotICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgICAgIEp1bXBM
aXN0IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBhdXRvIGxoc0lzQ2VsbCA9IGJyYW5jaElmQ2VsbChsaHNHUFIp
OworICAgICAgICAgICAgICAgIGF1dG8gYm90aE5vdENlbGxzID0gYnJhbmNoSWZOb3RDZWxsKHJo
c0dQUik7CisgICAgICAgICAgICAgICAgbm90RXF1YWwuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAg
ICAgICAgICAgICBsaHNJc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RFcXVh
bC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJoc0dQUikpOworCisgICAgICAgICAgICAgICAgSnVt
cExpc3Qgc2xvd1BhdGg7CisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRo
aXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNTY3JhdGNo
R1BSLCByaHNTY3JhdGNoR1BSLCB0ZW1wR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGJvdGhOb3RDZWxscy5s
aW5rKHRoaXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYg
ZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2gg
aXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4K
KyAgICAgICAgICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAgICAgICAgICBs
ZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50
MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQ
UikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworCisgICAgICAgICAgICBpZiAo
aXNFcSkKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGxoc0dQUiwgcmhzR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChO
b3RFcXVhbCwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29s
ZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBK
dW1wTGlzdCBkb25lOworICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAg
ICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlz
RXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgIG5vdEVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMighaXNFcSA/IEpT
VmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisg
ICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAg
IHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhsaHMsIHJlZ1QwLCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAg
LyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEp
OgorICAgICAgICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAg
ICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOwor
ICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAo
bGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRo
OworICAgICAgICBkb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisg
ICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmln
aHQgaXMgRG91YmxlKSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0
IHdvdWxkIGJlIG5haXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5j
aElmTnVtYmVyCisgICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBh
biBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBs
ZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAg
ICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsK
KyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1Qz
KTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9y
NjQocmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVx
dWFsLCByZWdUMywgcmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDUpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnVDUpOworCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBz
bG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0lu
dHMpLgorICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2Ug
Y291bGQgZG8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50
MzIsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6
Ok5TdHJpY3RFcSkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShC
SUdJTlQzMikKLSAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0
cmluZ3MpLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNs
b3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwg
d2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0g
ICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAg
cmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
TnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNo
IGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAg
ICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7
CisgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmso
dGhpcyk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVx
KQotICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVs
c2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAo
dHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxODg2LDIwMyBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Cisg
ICAgICAgIGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAg
IGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJv
dmVuVHlwZShsaHMpLCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEp
CisgICAgICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhz
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAg
ICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVPYmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChy
aHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBz
aG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywg
cmhzR1BSKTsKKworICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlVHJ1ZSksIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWco
KSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBw
ZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAg
ICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93
UGF0aDsKKworICAgICAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAg
ICAgICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gyVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFD
ZWxscygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxo
c1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRl
bXAuZ3ByKCkpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAg
ICAgICAgICAgICAgIGlmIChpc0VxKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEp1bXAoZXF1
YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkSnVtcChub3RF
cXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAg
ICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSBy
aHNUZW1wLmdwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxo
c0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVt
cC5mcHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhz
RlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAg
ICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1i
ZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhz
RlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1w
LmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNG
UFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBP
T1BTOiBDb3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAg
IFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJUZW1wIGxoc1Nj
cmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNTY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHRlbXAyIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1Rl
bXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBsaHNTY3JhdGNoR1BSID0gbGhzU2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByaHNTY3JhdGNoR1BSID0gcmhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1w
MkdQUiA9IHRlbXAyLmdwcigpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2gg
bGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxl
ZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwot
ICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQg
aXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290
byBub3RUYWtlbjsKLSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBp
bnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2Vk
IGJyYW5jaElmSW50MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBp
cyBub3QgYSBudW1iZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBi
aXQgc2V0Ci0gICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
Ci0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAg
IGFkZDY0KHJlZ1Q1LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQot
ICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRK
dW1wKGFyZUVxdWFsLCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8v
IEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFu
ZCBCaWdJbnRzKS4KLSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBj
b3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQz
Miwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGlj
X2Fzc2VydChmYWxzZSk7CisjZWxzZQorICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1l
bnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAg
ICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGF1dG8gbGVmdElzQ2VsbCA9IGJyYW5jaElmQ2VsbChsaHNHUFIpOworICAgICAgICAgICAgICAg
IGF1dG8gYm90aE5vdENlbGxzID0gYnJhbmNoSWZOb3RDZWxsKHJoc0dQUik7CisgICAgICAgICAg
ICAgICAgbm90RXF1YWwuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBsZWZ0SXND
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbm90RXF1YWwuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChyaHNHUFIpKTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOwor
ICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1
YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzU2NyYXRjaEdQUiwgcmhzU2NyYXRjaEdQ
UiwgdGVtcEdQUiwgdGVtcDJHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRoKTsKKworICAgICAgICAgICAgICAgIGJvdGhOb3RDZWxscy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91Ymxl
LiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4g
dGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAgIGF1dG8g
bGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0aGlzKTsK
KyAgICAgICAgICAgIGF1dG8gcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAgICAgICAg
cmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgICAgICAgICAgYWRkSnVtcChlcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBu
b3RFcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAobm90RXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwg
cmhzLCByZWdUMSk7CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5T
dHJpY3RFcSkgewotICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJl
RXF1YWwubGluayh0aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBB
dCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Cisg
ICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAg
IGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBn
b3RvIHRha2VuOworICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisg
ICAgICAgICAgIGdvdG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAg
ICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJs
ZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRo
ZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50
MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1Zh
bHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3Zl
cmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5v
dCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBz
ZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
CisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwg
cmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdU
NSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAg
ICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBi
cmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWws
IHRhcmdldCk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmln
SW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3
ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJ
bnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5n
cworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRo
aXMpOworICAgICAgICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAg
c2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdU
MCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3Vi
bGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhl
biB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5j
aElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7
Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQz
MihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICBy
aWdodE9LLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSkKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1Qw
KSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFy
ZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
KyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91
YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRo
ZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51
bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBy
aWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCksIHRhcmdldCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsy
MDk1LDIyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAg
Y29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9u
ZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVG
cm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQog
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1Qx
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVu
dHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIo
KTsKKyAgICB9CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2
ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdl
dCk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwot
ICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0VlJlZyk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZU51bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBl
KHNyYykgJiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19u
dW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVn
VDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBp
c0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0
eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2Rl
TnVtYmVyKSkgeworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
TnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAg
ICAgICAgc3BlY3VsYXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAg
ICAgYXV0byBpc051bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCBy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVz
dWx0R1BSLCBkc3QpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIg
fCBTcGVjQmlnSW50OworICAgICAgICB9CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAg
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmco
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwog
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09i
amVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0
KHNyYykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7
CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwor
ICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRo
aXMuCisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBP
U1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0
b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7CkBAIC04ODgsOSArMjM3NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFy
ZW50X3Njb3BlKGNvbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNj
b3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwg
cmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWND
ZWxsOyAvLyBXZSBrbm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3Bl
IHsgKnRoaXMsIGN1cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29w
ZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2Nv
cGVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y09iamVjdE90aGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjQwNSwxNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0
T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJl
Q1RJVGFibGUoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTkyMiw5ICsyNDMwLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0
IEluc3QKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAg
ICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0
clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzI0NTQsMTQ3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1w
VGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxl
SW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRo
VW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7
IC8vIE9PUFM6IFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1
Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVz
dHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlw
ZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0
ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAg
YXV0byBjb21wYXJlT3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVO
b3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwg
cmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
ICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAg
ICAgICAgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25a
ZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihpc0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFy
ZVB0cihjb21wYXJlT3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAg
ICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIp
OworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAx
KSwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CisKKyAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwor
ICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwot
ICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2Fz
Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1w
bDxPcEVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwot
ICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLQotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0
aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudElu
c3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qKQogeworICAgIC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhl
cmUgc2luY2UgZW1pdFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZl
biB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50
CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNl
c3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5n
IEdDIHByZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVT
cGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdElu
aXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZp
bmVkKCksIGFkZHJlc3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICAgICAgcHJvdmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAg
ZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsMjMgKzI2MDUsOTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0g
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJl
c3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAg
IH0gZWxzZQorICAgICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAgICAgU3RydWN0dXJlSUQq
IGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIGF1
dG8gaXNTdHJpY3QgPSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSks
IHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdo
dD8KKyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxs
KHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
Y0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVl
ZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAg
IH0gZWxzZSBpZiAoaXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0
T3RoZXIpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0
IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
ICAgIGlmIChwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAg
IGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlz
KSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2Un
cmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJh
bmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAg
aWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
aW5wdXRHUFIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhp
cykpLCByZXN1bHRHUFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0
KCkpCisgICAgICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7
IC8vIE9PUFM6IGlzIHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7Cisg
ICAgICAgIHNldEpTVmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIo
Y2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyNjk5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVu
Y3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVS
ZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4
LDcgKzI3MDksMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAog
ICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklE
IHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVl
LCBjYWxsZWVSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBn
cHJUZW1wMjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBncHJUZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3Bl
cmFuZC5lbXBsYWNlKCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAz
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICBjYWxsZWVSZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9y
UmVnID0gZ3ByVGVtcDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJh
cmVEYXRhUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9
IGdwclRlbXA0LT5ncHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVl
UmVnKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0
UmVnLCBkc3QpOworCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVS
ZWcpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246
OnJhcmVEYXRhVGFnKSkpOwpAQCAtMTA4Niw2NCArMjc1MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcs
IFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVt
aXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdFJlZyk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJn
ZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAg
ICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkoaW5wdXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8g
VGhpcyB3b3JrcyBmb3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGlu
ZyBleGNlcHQganVtcCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKQEAgLTExNjIsOCArMjc5NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBN
YWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBz
dGF0ZS4KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJl
dHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxv
b3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8v
IE9PUFM6IGNsZWFyIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50
ZXIuCiAgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291
bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAg
YXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02
NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4
NywxMyArMjgyNCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgU2xvd0Nhc2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhl
IHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJl
T3B0aW1pemVkKCkpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAg
ICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEy
MDYsMTEgKzI4NDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJ
bgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAg
ICAgICAgLy8gZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNp
emUoKSk7IC8vIE9PUFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdv
cmtzIGluIExPTCB0b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudElu
c3RydWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIz
MywxMCArMjg2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMK
ICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8
dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI4NzcsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVn
ZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdS
ZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0
PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVy
blZhbHVlR1BSIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjg5OCw0
MiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7
CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2Nv
cGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhl
YyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwog
CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNl
IGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHNjb3BlR1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChv
cGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI5
NjIsNDYgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1QwOworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gc2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVj
b2RlLm1fc2NvcGUpOworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAg
c2NvcGUucmVzZXQoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5l
bXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BS
KTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsK
KyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlm
CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0
aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQg
PSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlv
bik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2Nv
cGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09
IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMzAzMiwxOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNT
dGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGls
bEZvckNhbGwoKTsKKyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIGFyZ0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMzYwLDE0ICszMDUzLDI5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisg
ICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1w
LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+
Z3ByKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ0dQUiA9PSByZXR1cm5WYWx1ZUdQUik7
CisgICAgfQorCisgICAgLy8gT09QUzogSW5saW5lIHRoZSBhbGxvY2F0aW9uIHBhdGggaGVyZSwg
aXQgbWF0dGVycyBmb3Igc3Vuc3BpZGVyLWNyeXB0by1hZXMKKwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2l6ZUluZGV4LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdH
UFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0g
ICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJ
bmRleCwgcmVnVDEsIGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0K
IApAQCAtMTM4MSwxNSArMzA4OSwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJh
dG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAg
ICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMy
KEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0MDksNiArMzEzOCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBm
YWxzZTsKKyAgICAvLyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2
LDYgKzMxNjcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAK
IHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsg
Ly8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMzE5NCwx
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkCiAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50
cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4K
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5z
dHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRM
b2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwog
ICAgIAogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSwgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nh
c2UoYmFkVHlwZUp1bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAg
TGFiZWwgZG9uZSA9IGxhYmVsKCk7CkBAIC0xNDc4LDEzICszMjExLDE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0g
bGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENv
bXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgp
LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9m
aWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKQEAgLTE1MTAsMzcgKzMyNDQsODEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3I7CiAKLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1l
cmF0b3IgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXgg
fTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBl
bnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5k
ZXhHUFIgPSBpbmRleFZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAK
LSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihl
bnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRl
eCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRo
ZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKIAotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEp
OwotICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEp
OwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWln
aHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDAp
OworICAgICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAg
ICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlu
bGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91
dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBU
aW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIp
OworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90
aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRo
aXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIG5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVy
dHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGlu
ZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJ
bmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOworCisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVn
VDEsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1Qw
KTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBP
dGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0
aGlzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICAgICAgbmVnMzIocmVnVDEpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAg
ICAKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1NTAsMjEgKzMzMjgsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVt
cCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsK
KyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BS
UmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAg
IE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3Bl
cmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsK
KyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAg
ICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxh
Y2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAg
ICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBi
cmFuY2gzMihCZWxvdywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7
CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3Vs
dEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlz
KTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCBy
ZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwg
VGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y1N0cmluZyB8IFNwZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTU3NCwyMSArMzM4Miw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVy
aWNfcG5hCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhH
UFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3Bl
cmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRv
clRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAg
ICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9
IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+
Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9
IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQ
Uik7CisgICAgfQorCisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQ
UiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVj
dG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1Qw
KTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1Qw
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwor
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQo
QmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7
CiAgICAgCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRH
UFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzQzNiw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5
cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisg
ICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Q
cm9maWxlLCByZWdUMCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzM0
OTgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0No
aWNrZW4oKSk7CisKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFt
ZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIw
ICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNr
ZW5Qcm9sb2d1ZT4oKTsKQEAgLTE2NzIsNiArMzUxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7
CisKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQ
UjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVt
cyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAgLTE2ODQsNiArMzUzMCwxOTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIGxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCBy
ZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAK
K3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0SXNDYWxsYWJsZUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICBhdXRvIGlzRnVuY3Rpb24gPSBicmFu
Y2hJZkZ1bmN0aW9uKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBub3RPYmplY3QgPSBicmFuY2hJ
Zk5vdE9iamVjdChpbnB1dEdQUik7CisgICAgICAgIAorICAgICAgICBhdXRvIHNsb3dQYXRoID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IE92ZXJy
aWRlc0dldENhbGxEYXRhKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgIAorICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
IG5vdE9iamVjdC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBkb25lID0ganVtcCgpOwor
ICAgICAgICAKKyAgICAgICAgaXNGdW5jdGlvbi5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfaXNfY2FsbGFibGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBlbWl0SXNDYWxsYWJsZUltcGw8T3BJc0NhbGxhYmxlPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0SXNDYWxsYWJsZUltcGw8
T3BUeXBlb2ZJc0Z1bmN0aW9uPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
eXBlb2ZJc09iamVjdD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1
dEdQUik7CisgICAgICAgIAorICAgICAgICBhdXRvIGlzTnVsbCA9IGJyYW5jaElmRXF1YWwoSlNW
YWx1ZVJlZ3MgeyBpbnB1dEdQUiB9LCBqc051bGwoKSk7CisgICAgICAgIGF1dG8gaXNOb25OdWxs
Tm9uQ2VsbCA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOwor
ICAgICAgICBhdXRvIGlzRnVuY3Rpb24gPSBicmFuY2hJZkZ1bmN0aW9uKGlucHV0R1BSKTsKKyAg
ICAgICAgYXV0byBub3RPYmplY3QgPSBicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUik7CisgICAg
ICAgIAorICAgICAgICBhdXRvIHNsb3dQYXRoID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IE92ZXJyaWRlc0dldENhbGxEYXRhKSk7CisgICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIAorICAgICAg
ICBpc051bGwubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAg
ICAgICAKKyAgICAgICAgaXNOb25OdWxsTm9uQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBpc0Z1
bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxz
ZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3Zv
aWQgSklUOjplbWl0X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlw
ZW9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fdmFsdWU7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBKdW1wTGlzdCBkb25lOworICAgICAgICBKdW1wIHNsb3dQYXRoOworICAg
ICAgICBlbWl0VHlwZU9mKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9LCBy
ZXN1bHRHUFIsCisgICAgICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Ro
cm91Z2gpIHsKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bS0+c21hbGxT
dHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGlm
ICghZmFsbHNUaHJvdWdoKQorICAgICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkp
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAoSnVtcCB0aGVTbG93UGF0aCkgewor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gdGhlU2xvd1BhdGg7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
LCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgfSBlbHNlCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGlucHV0R1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0
ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
KyAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSkpOworICAgIEpTVmFs
dWUgaW5pdGlhbFZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5p
dGlhbFZhbHVlKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc3ltYm9sVGFi
bGUtPnNpbmdsZXRvbigpLmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBlbWl0U2xvd09w
KHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCwgY3VycmVudEluc3RydWN0aW9u
LCBkc3QsIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBWYWx1ZU9wZXJhbmQgc2NvcGVUZW1wIHsgKnRoaXMsIHNjb3BlIH07CisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRj
aDFUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9
OworCisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMUdQUiA9IHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BS
ID0gc2NyYXRjaDJUZW1wLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAg
ICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxKU0xleGljYWxFbnZpcm9ubWVudD4oCisg
ICAgICAgICAgICAqbV92bSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKSwgYnV0dGVyZmx5LCBzY3JhdGNo
MUdQUiwgc2NyYXRjaDJHUFIsCisgICAgICAgICAgICBzbG93UGF0aCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6OmFsbG9jYXRpb25TaXplKHN5bWJvbFRhYmxlKSk7CisKKyAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBE
b24ndCBuZWVkIGEgbWVtb3J5IGJhcnJpZXJzIHNpbmNlIHdlIGp1c3QgZmFzdC1jcmVhdGVkIHRo
ZSBhY3RpdmF0aW9uLCBzbyB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbiBtdXN0IGJlIHlvdW5n
LgorICAgICAgICBzdG9yZVB0cihzY29wZUdQUiwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc3ltYm9s
VGFibGUpLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
U3ltYm9sVGFibGUoKSkpOworICAgICAgICAgICAgCisgICAgICAgIC8vIE11c3QgaW5pdGlhbGl6
ZSBhbGwgbWVtYmVycyB0byB1bmRlZmluZWQgb3IgdGhlIFREWiBlbXB0eSB2YWx1ZS4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsgKytp
KQorICAgICAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoaW5pdGlhbFZhbHVlLCBBZGRyZXNzKHJl
c3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUoU2NvcGVPZmZz
ZXQoaSkpKSk7CisgICAgICAgIAorICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworCisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzAyLDExICszNzM1LDIwIEBAIHZvaWQgSklUOjplbWl0
X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdz
Ojp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1Qw
LCByZXN1bHQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1
bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2Fk
MzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyks
IHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhy
ZWdUMCwgcmVnVDEpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE3MTQsMjkgKzM3NTYsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jl
c3RfbGVuZ3RoKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1Q
YXJhbWV0ZXJzVG9Ta2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JF
cXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51
bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkp
OworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZXN1bHRHUFIpOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFu
T3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJ
bW0zMihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBi
b3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHplcm9MZW5ndGgubGluayh0aGlz
KTsKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1Qw
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDAp
KSksIHJlZ1QwKTsKICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTc0NCw0OSArMzgwNSw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1
bHRHUFIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxv
YWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgKyBpbmRleCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCBy
ZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBl
KGRzdCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdU
MCk7CiAjZW5kaWYKIAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJv
dW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRl
eCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92
ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
UmVncyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZC
b3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5k
ZXgpKTsKKyAgICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRo
aXMpOworICAgICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByb3RvdHlwZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BS
VGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dENlbGwodmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QodmFsdWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90
eXBlKHZtKCksIHZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BS
LCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwg
ZHN0KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7
CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1Qy
KTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3Mu
dGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdU
Mik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2
YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKSk7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwor
ICAgICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI0LDYgKzE0MjQsOCBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGFyCiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICAvL2RhdGFMb2dMbigiY29tcGFyZUxlc3MsIGxo
czogIiwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCAiIHJoczogIiwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpKTsKICAgICAKICAgICByZXR1cm4ganNMZXNzPHRydWU+KGdsb2JhbE9i
amVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMikpOwogfQpAQCAtMTQ5MSw2ICsxNDkzLDggQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkNvbXBhcgogICAgIEpTVmFsdWUgc3JjMSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKTsKICAgICBKU1ZhbHVlIHNyYzIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7
CiAKKyAgICAvL2RhdGFMb2dMbigic3RyaWN0ZXEsIGxoczogIiwgc3JjMSwgIiByaHM6ICIsIHNy
YzIpOworCiAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGdsb2JhbE9iamVjdCwgc3Jj
MSwgc3JjMik7CiB9CiAKQEAgLTE2OTEsNyArMTY5NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25EZWJ1ZywKICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyB2b2lkIHVw
ZGF0ZUFsbFByZWRpY3Rpb25zQW5kT3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKLSAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgY29k
ZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAg
ICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiB9CiAKQEAgLTE3MTksNyArMTcy
Myw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICBEZWZl
ckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGlmIChVTkxJS0VMWShjb2RlQmxv
Y2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKKyAgICBpZiAoVU5MSUtF
TFkoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgY29kZUJs
b2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6TE9MSklUKSkgewogICAgICAgICBkYXRhTG9nKCJV
bmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gQmFzZWxpbmUtPkRGRyB0aWVyLXVwOiAiLCAqY29kZUJs
b2NrLCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xNzQ1LDcgKzE3NDksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
T3B0aW1pCiAKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9s
ZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRl
bGF5T3B0aW1pemVUb0RGRyIsICgiY291bnRlciA9ICIsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNv
dW50ZXIoKSkpOwotICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7Cisg
ICAgICAgIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0
aW9ucygpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDaG9v
c2luZyBub3QgdG8gb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQsIGJlY2F1c2UgdGhlIHRo
cmVzaG9sZCBoYXNuJ3QgYmVlbiByZWFjaGVkLiIpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KQEAgLTE4MTQsNyArMTgxOCw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICAgICAgLy8gbm90aGluZyBs
ZWZ0IHRvIGRvLgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1l
bnQoKSkgewogICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxh
eU9wdGltaXplVG9ERkciLCAoImNvbXBpbGVkIGFuZCBmYWlsZWQiKSk7Ci0gICAgICAgICAgICBj
b2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgICAgICAgICBjb2RlQmxvY2st
PmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNvZGUgYmxvY2sgIiwgKmNv
ZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQuIik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIs
IG51bGxwdHIpOwogICAgICAgICB9CkBAIC0xODQzLDcgKzE4NDcsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKKyAgICAgICAgaWYgKCFjb2Rl
QmxvY2stPnNob3VsZE9wdGltaXplVG9ERkdOb3coKSkgewogICAgICAgICAgICAgQ09ERUJMT0NL
X0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheU9wdGltaXplVG9ERkciLCAoImluc3VmZmljaWVu
dCBwcm9maWxpbmciKSk7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksCiAgICAgICAgICAgICAgICAgIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNv
ZGVCbG9jaywKQEAgLTE4NjcsNyArMTg3MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25PcHRpbWkKICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVC
bG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoY29kZUJsb2NrKTsKICAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAogICAgICAgICAgICAgdm0s
IHJlcGxhY2VtZW50Q29kZUJsb2NrLCBudWxscHRyLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5k
ZXgsCiAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBKSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjazo6Y3JlYXRlKCkpOwpAQCAtMTg3OSw3ICsxODgzLDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgIH0KICAgICAKICAgICBDb2RlQmxv
Y2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBB
U1NFUlQob3B0aW1pemVkQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRp
bWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxv
Y2sgJiYgSklUQ29kZTo6aXNERkdPckZUTChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkp
OwogICAgIAogICAgIGlmICh2b2lkKiBkYXRhQnVmZmVyID0gREZHOjpwcmVwYXJlT1NSRW50cnko
dm0sIGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG9wdGltaXplZENvZGVCbG9jaywgIm9zckVudHJ5Iiwg
KCJhdCBiYyMiLCBieXRlY29kZUluZGV4KSk7CkBAIC0xOTcyLDcgKzE5NzYsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJ5T1NSCiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpOworICAgIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2
ZSgpLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7CiAgICAgYXV0byBieXRlY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVJbmRleCktPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CkBAIC0z
NDMzLDYgKzM0MzcsNDIgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNr
SQogICAgIHJldHVybiAwOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
VHJpZ2dlckxPTFJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxv
Y2spKQoreworICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mg
d2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkg
YmUgcHJvZml0YWJsZS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MobG9sQ29kZUJsb2Nr
LT52bSgpLmhlYXApOworCisgICAgaWYgKGdldGVudigicHJpbnRFYWNoSmV0dGlzb24iKSAmJiAh
IWF0b2koZ2V0ZW52KCJwcmludEVhY2hKZXR0aXNvbiIpKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJq
ZXR0aXNvbiwgZm9yY2luZyByZW9wdCBub3c6ICIsICpsb2xDb2RlQmxvY2spOworICAgIGxvbENv
ZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwor
ICAgIAorICAgIC8vIE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJvZmlsZXMgaGVyZSwgc2luY2Ugd2Un
cmUgamV0dGlzb25pbmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0ZSB3LyB0aGluZ3Mgd2UgY2FyZSBh
Ym91dC4KKworICAgIHNhbml0aXplU3RhY2tGb3JWTShsb2xDb2RlQmxvY2stPnZtKCkpOworCisg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbG9sQ29kZUJsb2NrLCAiOiBF
bnRlcmVkIHJlb3B0aW1pemUgZnJvbSBMT0wiKTsKKworICAgIENvZGVCbG9jayogbGxpbnRDb2Rl
QmxvY2sgPSBsb2xDb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgLy8gV2UgbXVzdCBiZSBj
YWxsZWQgd2l0aCB0aGUgYmFzZWxpbmUgY29kZSBibG9jay4KKyAgICBBU1NFUlQoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUobGxpbnRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisgICAgQ29kZUJs
b2NrKiByZXBsYWNlbWVudCA9IGxsaW50Q29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOworICAgIGlm
ICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxpbnRDb2RlQmxvY2spIHsKKyAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbGxpbnRDb2RlQmxvY2ssICI6
IE5vdCByZW9wdGltaXppbmcgTE9MIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRpc29u
ZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHRoZSBy
ZXBsYWNlbWVudCBtdXN0IGJlIG9wdGltaXplZCBjb2RlLiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1
bml0eQorICAgIC8vIHRvIGNoZWNrIG91ciBsb2dpYy4KKyAgICBBU1NFUlQobGxpbnRDb2RlQmxv
Y2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQobG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworCisgICAgLy8gT09QUzog
ZmlndXJlIG91dCBzdHVjayBpbiBhIGxvb3AgbG9naWMKKyAgICBsb2xDb2RlQmxvY2stPmpldHRp
c29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwgQ291bnRSZW9wdGltaXphdGlvbik7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcxMzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxOSw2ICszMTksOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblZhbHVlCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NUeXBl
UHJvZmlsZXJMb2csIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsKIAorSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZv
aWQsIChDb2RlQmxvY2sqIGxvbENvZGVCbG9jaykpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjgxLDggKzI3Nyw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAg
ICAgICsrbV9nZXRCeVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01NTgsNyAr
NTUyLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lz
dGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5n
IG9uIEFSTS4KQEAgLTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CkBAIC02MzksOCArNjMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3NSw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzc4LDggKzc2Myw2IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4ICs4MDIsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CkBAIC0xMTAwLDggKzEwODEsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKQEAgLTEyNTcsOCArMTIzNiw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
OCBAQAogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5n
UHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBu
YW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01Miw1MSArNTQsMTE3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5
R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsK
KworICAgIGlmIChtX3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOwor
ICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0g
YmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9
IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVH
UFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIH0KIAogICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4g
T3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBh
dXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90
Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
ICAgIEp1bXAgbm90Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBu
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAg
ICAgICAgaWYgKG5vdENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlz
KTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZh
bCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VH
UFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7
CisgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFz
ZSwgYmFzZUdQUik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9w
ZXJ0eSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0
eSkgfHwgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9M
KCkgfHwgIWlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hl
Y2spKQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5k
ZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncyk7CisgICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9w
ZXJ0eSksIFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVj
U3ltYm9sKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJv
bCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYg
KCF1c2VMT0woKSkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRHUFIpOwogICAgIH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJ
bmRleDsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHBy
b3BlcnR5R1BSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xv
d0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1LDQxICsx
NzMsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwor
ICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1
ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9
IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgeworICAgICAgICBh
dXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
c2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYm
IHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncyk7CisgICAgICAgIHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0
ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBy
aXZhdGVOYW1lPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRl
eDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5
R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNs
b3dDYXNlLnJlc3VsdC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3LDYgKzI1Nyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7
CiAKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
OwogICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMxOSw4ICs0MjEs
MTEgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIHJl
bG9hZCB0aGUgcmVnaXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJl
Z1QwLCB2YWx1ZSwgcmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJsZVJl
Z2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAg
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNt
YU1vZGUoYnl0ZWNvZGUpLCBwdXRLaW5kKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0NCw3IEBAIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2U7CkBAIC0zNDcsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBl
Y21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRv
IGJ5dGVjb2RlKSB7CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAg
ICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzU1
LDEzICs0NjAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQog
ICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxv
YWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3Rh
dGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0uYnlWYWxJbmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJl
bCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKQEAgLTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZh
bEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBE
byBiZXR0ZXIgaWYgd2UgY2FuIQorCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogCkBA
IC0zOTQsMTMgKzUwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbklu
Zm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQYXRoSm1wLCBkb25lLCBkb25lKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKICAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtp
bmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CkBAIC00MjAsNDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUoYwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgYmFzZSB7ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGFjY2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nl
c3Nvci5ncHIoKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
MSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRo
aXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAq
dGhpcywgYnl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOwor
ICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQ
UiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRl
ciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIs
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBi
YXNlIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0
dGVyIHsgKnRoaXMsIGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBz
ZXR0ZXIgeyAqdGhpcywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigp
OworICAgICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBpbnQz
Ml90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRl
LCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBh
dHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZh
bHVlT3BlcmFuZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07
CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9
IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3Nv
ckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVl
T3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29y
LmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3
MiwxOCArNjMzLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNlR1BS
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2gtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFp
bGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNj
cmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVl
bmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDkyLDI1ICs2
ODcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
KTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUyMCwx
OSArNzE3LDcwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVl
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNl
R1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOwor
ICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9
IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YmFzZUdQUiA9IHJlZ1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICBy
ZXN1bHRHUFIgPSByZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3Vs
YXRlQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9w
ZXJ0eSk7CisgICAgfQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3Bl
Y0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRl
LWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2Ji
ZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0
IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01NDEsMjIxICs3ODksMzY4IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
ZGVsQnlWYWxzW21fZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAg
R1BSUmVnIGJhc2VHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAK
LSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAg
aWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgcmVnVDApOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5l
bXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QwOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRC
eUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5n
cHIoKTsKKwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVz
dWx0LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNl
VmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VH
UFIgPSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBz
bG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZERp
cmVjdCk7CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BS
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIo
KTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RBcnJh
eUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4o
R2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlM
ZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFIg
PSB1c2VMT0woKSA/IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5
TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJVEdldEJ5SWRX
aXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7Cisg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKKyAgICAKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNl
VmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVn
IHRoaXNHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUu
ZW1wbGFjZSgqdGhpcywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNH
UFIgPSB0aGlzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+
Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0
aGlzR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNW
UmVnLCB0aGlzR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJl
Z2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQ
UikpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQ
UiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5k
ZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIHRoaXNHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJl
Y3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJl
LCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRv
IGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJz
ICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0
aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJv
bSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2
YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BS
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBi
YXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgdmFsdWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVl
R1BSID0gcmVnVDE7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCks
IFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChi
YXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7Cisg
ICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1Yigp
LAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNo
R1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVj
dCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwpAQCAtNzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0
IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBj
b2RlIHNpemUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwOTM5NQotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2Up
OworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
SWQ+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4o
dGhpcyk7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1tt
X3B1dEJ5SWRJbmRleCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
Ci0KKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7Cisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BS
ID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7Cisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsr
XTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAor
ICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3Zv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgVmlydHVhbFJlZ2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsr
aSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1
c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC04NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURl
cHRoOwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsK
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3Rh
bnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBA
IC04NjcsMjEgKzEyODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxDZWxs
T3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAg
ICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
cmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAgICAg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
ZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBk
c3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTg5NCw5ICsxMzMwLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
cmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlLCByZXN1bHRHUFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05MDksMjkgKzEzNDUs
MjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
LSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
LCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC05NDAsMTUgKzEzNzYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09i
amVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQ
UiwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdU
MSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2NyYXRj
aEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7
CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVy
YW5kLCBHUFJSZWcgcmVnKQpAQCAtOTYyLDEyICsxNDAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lk
IEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtOTc4LDUxICsxNDEzLDg0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFu
ZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQp
OwogCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1
cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdl
IGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0
LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZh
ciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJl
Z1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IG9mZnNldFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAg
ICAgICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAg
ICAgICAgIG9mZnNldFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgICAgICAgICAgc2Nv
cGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBv
ZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRz
dCk7CisKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNs
b3QsIHNjb3BlR1BSLCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNj
b3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
ICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZz
ZXQpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAgICAg
ICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9m
TGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihm
aXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihK
SVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGlu
ayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5l
ZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNl
dCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMyKG9m
ZnNldEdQUik7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9mZnNl
dEdQUik7CisgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BS
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9t
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERa
IGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDAp
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1
cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3Bl
cmFuZFNsb3QpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAg
ICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgICAgICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSAr
ICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCBy
ZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTAzNiwxMCArMTUwNCwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisg
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOworICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogCkBAIC0xMDUyLDI3ICsxNTIwLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0g
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBm
YWxzZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0
R1BSLCBkc3QpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVh
azsKQEAgLTEwODIsNDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7
Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFk
ZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGlu
ZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwg
cmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMjksMjEgKzE1NzksNDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAK
KyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZh
bHVlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRo
aXMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3Ry
dWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5j
ZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9i
amVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRo
ZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAg
ICBPcHRpb25hbDxHUFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y29wZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBHUFJS
ZWcgYnV0dGVyZmx5R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAg
b2Zmc2V0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFs
dWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOwor
ICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseUdQUiA9IHJlZ1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7IC8v
IFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNo
ZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25h
bGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9u
LgogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkg
LT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAg
ICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CisgICAgICAgICAgICBu
ZWdQdHIob2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNlSW5k
ZXgoYnV0dGVyZmx5R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE1NCwyOCArMTYz
Miw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAg
ICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAgICAgICAgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY3JhdGNo
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNr
IGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBj
aGVja3Mgc3RhdGljYWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hH
UFIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVy
YW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNo
cG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBt
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihj
b25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKCZtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVtaXRO
b3RpZnlXcml0ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgc3RvcmU2NCh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OworICAgICAgICAgICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVzZUxP
TCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9z
dXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENs
b3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7CisKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0
KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkwLDEyICsxNjk3LDIxIEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRj
aFZhbHVlLnJlc2V0KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBl
bWl0Q29kZSBmcm9tIGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3
ZSBnbyBkb3duIGFueSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fp
bi4KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0
UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2Fk
IFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBp
c0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
OiBHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5
bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJl
YWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CkBAIC0xMjA5LDIzICsxNzI1LDMyIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRj
aFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9u
J3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0
aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBh
dGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7
CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwog
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
dHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBAIC0xMjQyLDEwICsx
NzY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0K
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgewpAQCAtMTI2MSw2MSArMTc4NCwxNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVu
dHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
VmFsdWU7CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBhcmd1bWVudHMpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRH
UFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRz
R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQo
QWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50
c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50
c1ZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJS
ZWcgYXJndW1lbnRzR1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgYXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAg
ICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50
c0dQUiA9IGFyZ3VtZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZh
bHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsK
KyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwg
QWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9M
KCkgfHwgISEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1ha2Ug
aXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0
aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGlu
dG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBz
YXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVu
dGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNv
IHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwog
ICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5
cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVy
KSAmIFNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJv
dmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJU
ZW1wPiB2YWx1ZVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFs
dWUpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3By
Rm9yT3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHZh
bHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG93bmVyLCByZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY3Jh
dGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFs
dWUtPmdwcigpOworCisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICAgICAgb3duZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIH0K
KwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBp
ZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQog
Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNw
aWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsg
Ly8gTm8gbmVlZCB0byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAg
ICAgc2lsZW50U3BpbGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIp
OworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50
U3BpbGxSZWNvcmQpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsodGhpcyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBv
d25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90
Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAg
Ly8gLSBLbm93IGlmIHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRv
bid0IGJyYW5jaCBhcm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBP
dGhlcndpc2UsIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vz
bid0IHBvcHVsYXRlIHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFs
d2F5cyBleGVjdXRlIGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9m
IGxpbmUgY29kZSBmb3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90Q2Vs
bDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSkgeworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBp
ZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAg
ICB2YWx1ZUdQUiA9IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXVzZUxPTCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAg
fQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAg
dmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzMjcsMTEgKzE5NjcsMjYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZz
ZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBH
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRl
bXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNl
KSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVs
ZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRl
cm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM0
MSwxMCArMTk5NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9i
amVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEK
KyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBzdG9yZVB0
cih2YWx1ZUdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46
Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmll
cihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxG
aWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMTQ0Nyw4ICsy
MTE1LDI1IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7
CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAgT3B0
aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAgICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBz
Y3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2ls
ZW50U3BpbGxSZWNvcmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJl
Y29yZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisKICAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0NjYsNiAr
MjE1MSw4IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXMKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxP
TCA9IGZhbHNlOworCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgp
LnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwogICAgIApAQCAtMTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
UHJpdmF0ZU5hbWVXaQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZp
ZXIgcHJvcGVydHlOYW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBBU1NFUlQo
KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlf
dmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNv
ZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAgICBB
U1NFUlRfVU5VU0VEKHByb2ZpbGVkREZHQ29kZUJsb2NrLCAhcHJvZmlsZWRERkdDb2RlQmxvY2sp
OwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAq
Y29kZUJsb2NrLCAiIGRpZCBiZWNvbWUgcmVhZHkuIik7CiAgICAgCkBAIC01NSw3ICs1NSw3IEBA
IHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0KQogewogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAg
IEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCk7CisgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIs
ICpjb2RlQmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQpOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxNSArMzEsMjIgQEAKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJWTUlubGluZXMu
aCIKIAorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
SklUV29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xp
c3Q6OlBsYW4+IHsKIHB1YmxpYzoKLSAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIDogbV9jb2RlQmxv
Y2soY29kZUJsb2NrKQotICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2Nr
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgOiBtX2xsaW50Q29kZUJsb2NrKGNvZGVCbG9jaykK
KyAgICAgICAgLCBtX2NvZGVCbG9ja1RvQ29tcGlsZShjb21waWxlVHlwZSA9PSBKSVQ6OkNvbXBp
bGVUeXBlOjpMT0wgPyBtX2xsaW50Q29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudChtX2xsaW50Q29k
ZUJsb2NrKSA6IG1fbGxpbnRDb2RlQmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2Nr
VG9Db21waWxlLT52bSgpLCBtX2NvZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBp
biBjb25jdXJyZW50IGdjCisgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xs
aW50Q29kZUJsb2NrKSB7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5o
ZWFwLnByb3RlY3QobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmaW5hbGl6ZSgpCiAgICAgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBtX2ppdC5saW5rKCk7CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2Nv
cGVFeGl0KFsmXSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9s
bGludENvZGVCbG9jaykKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0o
KS5oZWFwLnVucHJvdGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAg
ICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6
Ci0gICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRD
b21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKG1fbGxpbnRDb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0
aW9uIGZhaWxlZCIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1f
ZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxv
Y2stPmRvbnRKSVRBbnl0aW1lU29vbigpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+
bV9kaWRGYWlsSklUQ29tcGlsYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4i
KTsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENv
ZGUobV9jb2RlQmxvY2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFs
bENvZGUobV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9j
ay0+aml0U29vbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVC
bG9jay0+dm0oKTsgfQorICAgIENvZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9s
bGludENvZGVCbG9jazsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2st
PnZtKCk7IH0KICAgICAKICAgICBib29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAg
LTgwLDE1ICs5MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21w
aWxpbmc7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAg
ICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBp
bGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCiAgICAgewotICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KTsKKyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgp
OwogICAgICAgICBwbGFuLmZpbmFsaXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsK
KyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAg
ICBMb2NrIG1fbG9jazsKICAgICBib29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07
CkBAIC0yMzMsOSArMjQ3LDExIEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2Rl
QmxvY2sKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KKworICAgIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRp
b25zOjpmb3JjZUxPTCgpID8gSklUOjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlw
ZTo6QmFzZWxpbmU7CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkp
IHsKLSAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOworICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5
cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtMjQ5LDcgKzI2NSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihD
b2RlQmxvY2sKICAgICAgICAgCiAgICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsK
ICAgICAgICAgICAgIG1fcGxhbm5lZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0
cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVm
KG5ldyBQbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpKTsKICAgICAgICAgICAgIG1fcGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9x
dWV1ZS5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxv
Y2tlcik7CkBAIC0yNzMsMTQgKzI4OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0
ZXIoQ29kZUJsb2NrCiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUg
Y29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAg
IC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3
ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQg
c29tZWRheS4KLSAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBl
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6
OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZd
IHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bmspCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9j
ay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIy
LDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAg
ICAgCiAgICAgLy8gTm93IGl0IG1pZ2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2st
PmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBp
bGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ug
d2UgaGFkIHByZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUg
d2l0aCB0aGUKLSAgICAvLyBiYXNlbGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERh
dGEoKTsKLSAgICAKLSAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGls
ZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KTsKLSAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxs
Q29kZShjb2RlQmxvY2spOworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7
CisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBl
OjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIGxvbENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3Rh
bGxDb2RlKGxvbENvZGVCbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhp
cyBpbiBjYXNlIHdlIGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0
byBjb21waWxlIHdpdGggdGhlCisgICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29k
ZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNv
bXBpbGUgaXQuCisgICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBp
bGVUeXBlOjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlu
c3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6
ZmluYWxpemVQbGFucyhQbGFucyYgbXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lk
IEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFs
aXplKCk7CiAgICAgICAgIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAg
ICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxh
bm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2
b2lkIGNvbXBpbGVMYXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29k
ZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKSk7CiAgICAgCiAgICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxX
b3JrbGlzdCgpOwogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlz
dE9yTnVsbCgpOwpAQCAtNjYsNiArNjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsK
ICAgICBmcmllbmQgY2xhc3MgVGhyZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENv
ZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCkpOwogICAgIHZvaWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAg
IFBsYW5zIG1fcXVldWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1h
cC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAg
IH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Cisg
ICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25z
dCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwog
cHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9m
UmVnaXN0ZXJzKCk+IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihj
YWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3Nl
bWJseSB8fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKQorICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVy
Q29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNh
bGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBl
bHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhP
dGhlcigpLmxhYmVsQXRPZmZzZXQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1Nsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBw
dWJsaWM6CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPwor
ICAgICAgICAvLyBXZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4K
KyAgICAgICAgLy8gbV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKICAgICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJ
bnN0cnVjdGlvbigmbV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9i
eXRlY29kZU9mZnNldF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjMsOCArMzYzLDEwIEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8K
IH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJv
b2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKSkKK2lubGluZSBDb2RlQmxvY2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRo
aXMgdy5yLnQgTE9MLgorCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAv
LyBNeSBjYWxsZXJzIGRvbid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRv
IEdDIGhlcmUgYXQgYWxsLgogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBA
IC0zNzMsMjkgKzM3NSw0NSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyhWCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsK
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUi
LCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRF
eGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJ
VFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAg
YXV0byBsb2xDb2RlQmxvY2sgPSBbJl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENv
ZGVCbG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkp
IHsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxP
TEpJVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBs
b2xDb2RlQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBh
bHJlYWR5IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNh
c2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5z
dXJlR2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUOworICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJs
b2NrKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4g
Y29kZUJsb2NrOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29k
ZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygi
VW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlT1NSKCksCiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwg
bmFtZSwgIiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKQEAgLTQwNiwxOCArNDI0LDIxIEBAIHN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVU
VVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOwotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9j
aykpCisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAg
ICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikp
OworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnki
LCAoImluIHByb2xvZ3VlIikpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGls
ZWRDb2RlQmxvY2spOwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBM
TElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygp
LCBudWxscHRyKTsKKyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+
aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2lu
ZCA9PSBBcml0eUNoZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
bnVsbHB0cik7CisgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29k
ZSgpLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
bnVsbHB0cik7CiB9CiAjZWxzZSAvLyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJu
VHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2lu
ZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2Nr
LT5kb250SklUQW55dGltZVNvb24oKTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51
bGxwdHIpOwpAQCAtNDI3LDMxICs0NDgsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBl
bnRyeU9TUihDb2RlQgogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVO
VVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksICJlbnRyeV9vc3IiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAg
IFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNh
bGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1
cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anND
YWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NhbGwiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShw
Yyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5q
c0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50
cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVu
dHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVl
KCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgp
LCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsK
KyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxG
cmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJl
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQog
CiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9h
cml0eUNoZWNrKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NS
KGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxl
KCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxs
RnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVj
dXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChsb29wX29zcikKQEAgLTQ4MCwxOSArNTAxLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGxvb3Bfb3NyKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIp
OwogICAgIH0KICAgICAKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBj
b2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29t
cGlsZWRDb2RlQmxvY2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2Nr
LCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2Nr
KQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAg
IENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVk
Q29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
KTsKIAotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCk7CisgICAgQVNTRVJUKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgfHwgY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpMT0xKSVQpOwogCi0gICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+
aml0Q29kZU1hcCgpOworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENv
ZGVCbG9jay0+aml0Q29kZU1hcCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJU
YWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBj
b2RlTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7
CisKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAg
CiAgICAgTExJTlRfUkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUo
KSk7CiAjZWxzZSAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3Rh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIE9yaWdpblN0YWNrOjpPcmln
aW5TdGFjayhEYXRhYmFzZSYgZGF0YWIKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgc3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXBwZW5kKE9yaWdpbigKLSAgICAgICAg
ICAgIGRhdGFiYXNlLmVuc3VyZUJ5dGVjb2Rlc0ZvcihzdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUo
KS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLAorICAgICAgICAgICAgZGF0YWJhc2UuZW5zdXJl
Qnl0ZWNvZGVzRm9yKHN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSgpLT5sb2xPckJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKSwKICAgICAgICAgICAgIHN0YWNrW2ldLmJ5dGVjb2RlSW5kZXgoKSkpOwog
ICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNiArNjcsMjAgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
YgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVC
bG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOwogfQogCitGdW5jdGlvbkNvZGVCbG9jayog
RnVuY3Rpb25FeGVjdXRhYmxlOjpsb2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK3sKKyAgICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdl
OworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICBlZGdlID0gbV9jb2RlQmxv
Y2tGb3JDYWxsLmdldCgpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICBlZGdlID0gbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuZ2V0KCk7CisgICAgfQorICAgIGlmICghZWRnZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29k
ZUJsb2NrKCktPmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKK30KKwogdm9pZCBGdW5jdGlv
bkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMyArMTE0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29k
ZUJsb2NrRm9yQ29uc3RydWN0KCk7CiAgICAgfQogCisgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGxv
bE9yQmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgRnVu
Y3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwogICAgICAgICAKLSAgICBGdW5jdGlvbkNvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwotICAgIH0KLQogICAgIFJlZlB0cjxUeXBlU2V0PiBy
ZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCkgCiAgICAgewogICAgICAgICBSYXJlRGF0YSYgcmFyZURh
dGEgPSBlbnN1cmVSYXJlRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBA
IHN0YXRpYyB2b2lkIGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNv
bXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIHsKKyAgICAvL09wdGlvbnM6OnVzZURGR0pJVCgpID0g
MDsKKyAgICBPcHRpb25zOjpmb3JjZUxPTCgpID0gMTsKKyAgICBPcHRpb25zOjp1c2VMTEludCgp
ID0gMTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4
Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyNyw2ICs1MjcsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsK
ICAgICB2KEJvb2wsIHVzZUpJVENhZ2UsIGNhblVzZUpJVENhZ2UoKSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihCb29sLCB1c2VQdWJsaWNTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFs
LCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHVibGljIHN0YXRpYyBkYXRh
IGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCiAgICAgdihCb29sLCB1c2VQcml2YXRlU3RhdGlj
Q2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRl
cnN0YW5kIHByaXZhdGUgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAg
ICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKQogCiBlbnVtIE9wdGlv
bkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
Ojpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgb3JpZ2luLndhbGtVcElubGluZVN0YWNr
KFsmXSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgewogICAgICAgICAgICAgICAgIG1h
Y2hpbmVPcmlnaW4gPSBjb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNh
bGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAg
YXBwZW5kQ29kZUJsb2NrKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2suZ2V0KCkgOiBtYWNoaW5lQ29kZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGlubGluZUNhbGxGcmFt
ZSA/IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSA6IG1hY2hp
bmVDb2RlQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgIH0p
OwogCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdFNhbXBsaW5nUHJvZmlsZXJEYXRh
Rm9ySlNDU2hlbGwoKSkgewpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxl
cjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50
J3MgbGxpbnRfaGFuZGxlX3VjYXVnaHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdh
aW5zdCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAg
ICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCkgeworICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkxPTEpJVCkgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tU
cmFjZS5sbGludFBDKSk7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlH
ZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDQ5ICszNDQsMzMgQEAgQ29kZUJsb2NrKiBT
Y3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvYwogfQogCiBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1
dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKAotICAgIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKKyAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBpZiAoY2xhc3NJ
bmZvKHZtKSA9PSBFdmFsRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwotICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBFdmFsQ29kZUJs
b2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2sqPigKLSAgICAgICAgICAg
IGV4ZWN1dGFibGUtPmNvZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIEV2
YWxDb2RlQmxvY2sqIHJlc3VsdCA9IEV2YWxDb2RlQmxvY2s6OmNyZWF0ZSh2bSwKLSAgICAgICAg
ICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOwotICAgICAgICByZXN1
bHQtPnNldEFsdGVybmF0aXZlKHZtLCBiYXNlbGluZSk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sq
IHJlc3VsdCA9IEV2YWxDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgQ29kZUJsb2NrOjpDb3B5UGFyc2Vk
QmxvY2ssIHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2smPigqYWx0ZXJuYXRpdmUpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYWx0ZXJuYXRpdmUpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBpZiAoY2xhc3NJbmZvKHZtKSA9PSBQcm9ncmFt
RXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNhbGwpOwotICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBi
YXNlbGluZSA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPigKLSAgICAgICAgICAgIGV4
ZWN1dGFibGUtPmNvZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIFByb2dy
YW1Db2RlQmxvY2sqIHJlc3VsdCA9IFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSh2bSwKLSAgICAg
ICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOwotICAgICAgICBy
ZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBiYXNlbGluZSk7CisgICAgICAgIFByb2dyYW1Db2Rl
QmxvY2sqIHJlc3VsdCA9IFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSh2bSwgQ29kZUJsb2NrOjpD
b3B5UGFyc2VkQmxvY2ssIHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2smPigqYWx0ZXJuYXRp
dmUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYWx0ZXJuYXRpdmUpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjbGFzc0luZm8odm0pID09
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7Ci0g
ICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8TW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayo+KAotICAgICAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2Nr
KCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayog
cmVzdWx0ID0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLAotICAgICAgICAgICAg
Q29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0QWx0ZXJuYXRpdmUodm0sIGJhc2VsaW5lKTsKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jayogcmVzdWx0ID0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBDb2RlQmxv
Y2s6OkNvcHlQYXJzZWRCbG9jaywgc3RhdGljX2Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayY+
KCphbHRlcm5hdGl2ZSkpOworICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBhbHRl
cm5hdGl2ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgUkVMRUFTRV9B
U1NFUlQoY2xhc3NJbmZvKHZtKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7Ci0gICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KHRoaXMpOwotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uQ29kZUJsb2NrKj4oCi0gICAgICAgIGV4ZWN1dGFibGUtPmNvZGVCbG9ja0Zvcihr
aW5kKS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQg
PSBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtLAotICAgICAgICBDb2RlQmxvY2s6OkNvcHlQ
YXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBi
YXNlbGluZSk7CisgICAgRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IEZ1bmN0aW9uQ29kZUJs
b2NrOjpjcmVhdGUodm0sIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCBzdGF0aWNfY2FzdDxG
dW5jdGlvbkNvZGVCbG9jayY+KCphbHRlcm5hdGl2ZSkpOworICAgIHJlc3VsdC0+c2V0QWx0ZXJu
YXRpdmUodm0sIGFsdGVybmF0aXZlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zOTgs
NyArMzgyLDggQEAgc3RhdGljIHZvaWQgc2V0dXBMTEludChDb2RlQmxvY2sqIGNvZGVCbAogc3Rh
dGljIHZvaWQgc2V0dXBKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBF
TkFCTEUoSklUKQotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2
bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAvLyBPT1BTOiBG
aWd1cmUgb3V0IHdoYXQgd2Ugd2FudCB0byBkbyB3aXRoIHRoZSBubyBMTEludCBvcHRpb24uLi4u
CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKHZtLCBjb2RlQmxv
Y2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVk
KTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnN0YWxsQ29kZShD
b2RlQmxvY2sqKTsKICAgICB2b2lkIGluc3RhbGxDb2RlKFZNJiwgQ29kZUJsb2NrKiwgQ29kZVR5
cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2Nr
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTRnVuY3Rpb24qLCBKU1Njb3BlKiwgRXhjZXB0
aW9uKiYpOwotICAgIENvZGVCbG9jayogbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CisgICAgQ29kZUJsb2NrKiBuZXdSZXBsYWNlbWVudENvZGVCbG9j
a0ZvcihDb2RlQmxvY2sqIGFsdGVybmF0aXZlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAog
ICAgIHZvaWQgY2xlYXJDb2RlKElzb0NlbGxTZXQmKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBAIEpTVmFsdWUgbnVtYmVyT2ZERkdDb21w
aWxlcyhKU1ZhbHVlIHRoZUYKIHsKICAgICBib29sIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMg
PSBmYWxzZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJ
VCgpKQorICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7IC8vIE9PUFMKKwogICAgIGlmICghT3B0
aW9uczo6dXNlSklUKCkgfHwgIU9wdGlvbnM6OnVzZUJhc2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6
OnVzZURGR0pJVCgpKQogICAgICAgICBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsK
ICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFw
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFZNVHJhcHM6OnRy
eUluc3RhbGxUcmFwQnJlYWtwb2ludHMoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7
CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkp
IHsKICAgICAgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAg
aWYgKCFsb2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVy
IHRyeSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFZNVHJhcHM6OmludmFs
aWRhdGVDb2RlQmxvY2tzT25TdGFjCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAg
aWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRU
eXBlKCkpKQorICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMv
Y29tcGFyZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1
bHRzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwko
d29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw4IEBAIGRlZiBjb21wdXRlTXVsdGlwbGVIeXBv
dGhlc2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIG5hbWVM
ZW5ndGggPSBsZW4oInN1YnRlc3QiKQotICAgIGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkK
LSAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pCisgICAgYUxlbmd0aCA9IGxlbihhW3Vu
aXRNYXJrZXJdKSArIDMKKyAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMwogICAg
IHJhdGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIpCiAKICAgICBwVmFsdWVIZWFkZXIgPSAicFZhbHVl
IChzaWduaWZpY2FuY2UgdXNpbmcgRmFsc2UgRGlzY292ZXJ5IFJhdGUpIgpAQCAtMjEyLDcgKzIx
Miw3IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhhLCBiKToKICAgICBwTGVuZ3RoICs9IDIKIAogICAg
IHN0cmluZ3MgPSBbXQotICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpee25hbWVMZW5ndGh9fXx7
YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7Y29tcGFyZTpee3JhdGlv
TGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5PSJzdWJ0ZXN0IiwgYVNj
b3JlPWFbdW5pdE1hcmtlcl0sIGJTY29yZT1iW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVM
ZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEi
LCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9
cExlbmd0aCkpCisgICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2Nv
cmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5n
dGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9
ImE6ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2NvcmU9ImI6ICIgKyBiW3VuaXRNYXJrZXJdLCBuYW1l
TGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29t
cGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFk
ZXIsIHBMZW5ndGg9cExlbmd0aCkpCiAgICAgZm9yIGtleSBpbiBhLmtleXMoKToKICAgICAgICAg
aWYga2V5ID09IHVuaXRNYXJrZXI6CiAgICAgICAgICAgICBjb250aW51ZQpJbmRleDogTGF5b3V0
VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgTGF5
b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRlc3RSdW5uZXIgPSB7CiAgICAg
bmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlvbiwKLSAgICBudW1iZXJPZkRG
R0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51bWJlck9mREZHQ29tcGlsZXM6
IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAgICAgcmV0dXJuIChmKSA9PiB7
CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAgICAgIC8vIEVtdWxhdGUgcnVubmlu
ZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0aWVyaW5nIGJlZm9yZSByZXR1
cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAgICAgICAgIG1hcCA9
IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50ID0gbWFwLmdldChmKSB8fCAwOwor
ICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIG1hcC5zZXQoZiwgY291bnQpOwor
ICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsKKyAgICAgICAgfTsKKyAgICB9
KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4dE5ld0NvZGVCbG9jawogfTsK
IApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBf
YSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKICAgCiAgIHRyeSB7
Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQorICAgIHdoaWxlICgh
ZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAgdmFsdWVzLnB1c2goZXZhbChf
YSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgIH0gY2F0Y2ggKGUpIHsK
ICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBAIGZ1bmN0aW9uIGRmZ0luY3Jl
bWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0cykKICAgICAgICAgcmV0dXJu
IGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkpCisgICAg
aWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3RhcnQgOiAwOwogICAgIAogICAg
IHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418317</attachid>
            <date>2021-01-25 12:09:08 -0800</date>
            <delta_ts>2021-02-02 18:51:30 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>638123</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0xNjQ2
LDEzICsxNjQ4LDEzIEBAIGxldCBydW5XYXNtID0gdHJ1ZTsKIGlmICh0eXBlb2YgV2ViQXNzZW1i
bHkgPT09ICJ1bmRlZmluZWQiKQogICAgIHJ1bldhc20gPSBmYWxzZTsKIAotaWYgKGZhbHNlKSB7
CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZhbHNlOwogICAgIHJ1bkFSRVMgPSBmYWxz
ZTsKICAgICBydW5XU0wgPSBmYWxzZTsKICAgICBydW5SZXhCZW5jaCA9IGZhbHNlOwogICAgIHJ1
bldUQiA9IGZhbHNlOwotICAgIHJ1blN1blNwaWRlciA9IGZhbHNlOworICAgIHJ1blN1blNwaWRl
ciA9IHRydWU7CiAgICAgcnVuU2ltcGxlID0gZmFsc2U7CiAgICAgcnVuQ0RKUyA9IGZhbHNlOwog
ICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9j
bGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9j
bGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgaWYgKGlzRDgpCiBpZiAodHlw
ZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0TGlzdCA9IHVuZGVmaW5lZDsK
IAorLy90ZXN0TGlzdCA9IFsnbi1ib2R5LVNQJ107CisKIGlmICh0eXBlb2YgdGVzdEl0ZXJhdGlv
bkNvdW50ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0SXRlcmF0aW9uQ291bnQgPSB1bmRlZmlu
ZWQ7CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL2JlbmNo
bWFyay1ydW5uZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDggQEAKIC8vIEZJWE1FOiBVc2UgdGhlIHJlYWwgcHJv
bWlzZSBpZiBhdmFpbGFibGUuCiAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgaW50ZXJmYWNlIGlz
IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVhbCBQcm9taXNlLgorCitfX2Rpc2FibGVTYW1wbGluZ1By
b2ZpbGVyKCk7CisKIGZ1bmN0aW9uIFNpbXBsZVByb21pc2UoKSB7CiAgICAgdGhpcy5fY2hhaW5l
ZFByb21pc2UgPSBudWxsOwogICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDsKQEAgLTEyOCwxNyAr
MTMxLDIxIEBAIEJlbmNobWFya1J1bm5lci5wcm90b3R5cGUuX3J1blRlc3QgPSBmdW4KIAogICAg
IHNlbGYuX3dyaXRlTWFyayhzdWl0ZS5uYW1lICsgJy4nICsgdGVzdC5uYW1lICsgJy1zdGFydCcp
OwogICAgIHZhciBzdGFydFRpbWUgPSBub3coKTsKKyAgICBfX2VuYWJsZVNhbXBsaW5nUHJvZmls
ZXIoKTsKICAgICB0ZXN0LnJ1bihwcmVwYXJlUmV0dXJuVmFsdWUsIGNvbnRlbnRXaW5kb3csIGNv
bnRlbnREb2N1bWVudCk7CisgICAgX19kaXNhYmxlU2FtcGxpbmdQcm9maWxlcigpOwogICAgIHZh
ciBlbmRUaW1lID0gbm93KCk7CiAgICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicg
KyB0ZXN0Lm5hbWUgKyAnLXN5bmMtZW5kJyk7CiAKICAgICB2YXIgc3luY1RpbWUgPSBlbmRUaW1l
IC0gc3RhcnRUaW1lOwogCiAgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAgIF9fZW5hYmxl
U2FtcGxpbmdQcm9maWxlcigpOwogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAg
ICAvLyBTb21lIGJyb3dzZXJzIGRvbid0IGltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgbGF5b3V0IGZv
ciBwYWludC4KICAgICAgICAgLy8gRm9yY2UgdGhlIGxheW91dCBoZXJlIHRvIGVuc3VyZSB3ZSdy
ZSBtZWFzdXJpbmcgdGhlIGxheW91dCB0aW1lLgogICAgICAgICB2YXIgaGVpZ2h0ID0gc2VsZi5f
ZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0
OworICAgICAgICBfX2Rpc2FibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgICAgIHZhciBlbmRU
aW1lID0gbm93KCk7CiAgICAgICAgIHNlbGYuX2ZyYW1lLmNvbnRlbnRXaW5kb3cuX3VudXNlZEhl
aWdodFZhbHVlID0gaGVpZ2h0OyAvLyBQcmV2ZW50IGRlYWQgY29kZSBlbGltaW5hdGlvbi4KICAg
ICAgICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicgKyB0ZXN0Lm5hbWUgKyAnLWFz
eW5jLWVuZCcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiAr
MzY4LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3RpbwogCiBzdGF0
aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlv
bkNhbGxiYWNrKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uQXNE
b3VibGVOdW1iZXIpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25J
c0RGR0VuYWJsZWQpOwogCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRyb3BBbGxMb2Nrcyk7CiAKQEAgLTY2Miw2ICs2NjMsOCBAQCBwcml2YXRlOgogCiAgICAgICAg
IGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1iZXIiLCBmdW5jdGlvbkFzRG91YmxlTnVtYmVy
LCAxKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzREZHRW5hYmxlZCIsIGZ1bmN0aW9u
SXNERkdFbmFibGVkLCAwKTsKKwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImRyb3BBbGxMb2Nr
cyIsIGZ1bmN0aW9uRHJvcEFsbExvY2tzLCAxKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6ZXhw
b3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZygpKSB7CkBAIC0yNjUzLDYg
KzI2NTYsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uQXNEb3VibAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIobnVtKSk7CiB9CiAKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzREZHRW5hYmxlZCwgKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKikpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
T3B0aW9uczo6dXNlREZHSklUKCkpKTsKK30KKwogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uRHJvcEFsbExvY2tzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKikpCiB7CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGdsb2JhbE9i
amVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQogewotICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHko
KSkKKyAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5q
aXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNs
dWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQnl0
ZWNvZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCkBAIC0yNjksNyArMjcxLDcgQEAgdm9pZCBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBC
bG9jaz4KLXZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wR3JhcGgoQmxv
Y2sqIGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29k
ZUdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3Rh
dHVzTWFwKQordm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBHcmFwaChC
bG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVj
b2RlR3JhcGgmIGdyYXBoLCBPcHRpb25hbDxWZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUs
IHRydWU+Pj4gcHJlZGljdGlvbnNBdEhlYWQsIFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3Rh
dHVzTWFwJiBpY1N0YXR1c01hcCkKIHsKICAgICBkdW1wSGVhZGVyKGJsb2NrLCBpbnN0cnVjdGlv
bnMsIG91dCk7CiAKQEAgLTI4Myw2ICsyODUsMjMgQEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmR1bQogCiAgICAgICAgIG91dC5wcmludCgiYmIjIiwgYmxvY2suaW5kZXgo
KSwgIlxuIik7CiAKKyAgICAgICAgaWYgKHByZWRpY3Rpb25zQXRIZWFkKSB7CisgICAgICAgICAg
ICBvdXQucHJpbnQoInByZWRpY3Rpb25zIGF0IGhlYWQ6IFsiKTsKKyAgICAgICAgICAgIGNvbnN0
IGF1dG8mIHByZWRpY3Rpb25zID0gcHJlZGljdGlvbnNBdEhlYWQtPmF0KGJsb2NrLmluZGV4KCkp
OworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgIj0i
KTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5hcmd1
bWVudChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcHJlZGljdGlvbnMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSksICI9Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9u
KG91dCwgcHJlZGljdGlvbnMubG9jYWwoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
b3V0LnByaW50KCJdXG4iKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBibG9jay50b3RhbExlbmd0aCgpOyApIHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkp
OwogICAgICAgICAgICAgZHVtcGVyLmR1bXBCeXRlY29kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGlj
U3RhdHVzTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEw
OCw3IEBAIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgogY2xhc3MgQ29kZUJsb2NrQnl0ZWNvZGVEdW1w
ZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBkdW1wQmxvY2soQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOwotICAg
IHN0YXRpYyB2b2lkIGR1bXBHcmFwaChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwg
Qnl0ZWNvZGVHcmFwaCYsIFByaW50U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxlKCksIGNvbnN0
IElDU3RhdHVzTWFwJiA9IElDU3RhdHVzTWFwKCkpOworICAgIHN0YXRpYyB2b2lkIGR1bXBHcmFw
aChCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIE9wdGlv
bmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0
SGVhZCA9IFdURjo6bnVsbG9wdCwgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKSwg
Y29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7CiAKICAgICB2b2lkIGR1bXBJZGVu
dGlmaWVycygpOwogICAgIHZvaWQgZHVtcENvbnN0YW50cygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgogCiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLSAgICB2b2lkIGR1bXAoQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBPcHRpb25hbDxW
ZWN0b3I8T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+Pj4gc3BlY3VsYXRpb25BdEhlYWQsIFByaW50
U3RyZWFtJiBwcmludGVyID0gV1RGOjpkYXRhRmlsZSgpKQorICAgIHZvaWQgZHVtcChDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMs
IE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBzcGVjdWxh
dGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkpCiAgICAg
ewogICAgICAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2tUeXBlPjo6ZHVtcEdy
YXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCAqdGhpcywgc3BlY3VsYXRpb25BdEhlYWQsIHBy
aW50ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZVVzZURlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlVXNlRGVmLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNyArODAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlyCiAg
ICAgLy8gTm8gdXNlcy4KICAgICBjYXNlIG9wX25ld19yZWdleHA6CiAgICAgY2FzZSBvcF9kZWJ1
ZzoKLSAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgIGNhc2Ugb3BfbG9vcF9oaW50OgogICAgIGNh
c2Ugb3Bfam1wOgogICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKQEAgLTEwMyw2ICsxMDIsNyBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlyCiAgICAgY2FzZSBvcF9nZXRf
c2NvcGU6CiAgICAgICAgIHJldHVybjsKIAorICAgIFVTRVMoT3BKbmVxUHRyLCB2YWx1ZSwgc3Bl
Y2lhbFBvaW50ZXIpCiAgICAgVVNFUyhPcFRvVGhpcywgc3JjRHN0KQogICAgIFVTRVMoT3BDaGVj
a1RkeiwgdGFyZ2V0VmlydHVhbFJlZ2lzdGVyKQogICAgIFVTRVMoT3BJZGVudGl0eVdpdGhQcm9m
aWxlLCBzcmNEc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmluCiAgICAgaWYgKGNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnQoc3BlY2lhbGl6YXRpb25LaW5k
KCkpOwogICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbnNTaXplKCkpOwotICAgIGlmICh0
aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgbV9zaG91bGRBbHdheXNC
ZUlubGluZWQpCisgICAgaWYgKCh0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgfHwgdGhpcy0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkgJiYgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQpCiAgICAgICAgIG91dC5wcmludCgiIChTaG91bGRBbHdheXNCZUlubGluZWQp
Iik7CiAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklubGluZSgpKQogICAgICAgICBv
dXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIElDU3RhdHVzTWFwIHN0YXR1c01h
cDsKICAgICBnZXRJQ1N0YXR1c01hcChzdGF0dXNNYXApOwogICAgIEJ5dGVjb2RlR3JhcGggZ3Jh
cGgodGhpcywgdGhpcy0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3JhcGgsIG91
dCwgc3RhdHVzTWFwKTsKKyAgICBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+Ojpk
dW1wR3JhcGgodGhpcywgaW5zdHJ1Y3Rpb25zKCksIGdyYXBoLCBXVEY6Om51bGxvcHQsIG91dCwg
c3RhdHVzTWFwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNN
YXAmIHN0YXR1c01hcCkKQEAgLTI5NSw2ICsyOTUsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZShvdGhlci52bSgpLCB0
aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcihvdGhlci5tX2luc3RydWN0aW9uc1Jh
d1BvaW50ZXIpCisgICAgLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyhvdGhlci5tX2FyZ3VtZW50
VmFsdWVQcm9maWxlcykKICAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFu
dFJlZ2lzdGVycykKICAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90
aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogICAgICwgbV9mdW5jdGlv
bkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKQEAgLTMwOSw3ICszMTAsOCBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgQVNTRVJUKG1fc2NvcGVSZWdp
c3Rlci5pc0xvY2FsKCkpOwogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwotICAg
IHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKworICAgIG1fbnVtUGFy
YW1ldGVycyA9IG90aGVyLm51bVBhcmFtZXRlcnMoKTsKICAgICAKICAgICB2bS5oZWFwLmNvZGVC
bG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTg1MCw3ICs4NTIsNyBAQCBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogICAgIC8vIHRvIHRoZSBDb2RlQmxvY2suIEhvd2V2ZXIsIGl0cyBsaWZlY3lj
bGUgaXMgdGllZCBkaXJlY3RseSB0byB0aGUgQ29kZUJsb2NrLCBhbmQKICAgICAvLyB3aWxsIGJl
IGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIHRoZSBDb2RlQmxvY2sgZGVzdHJ1Y3RzLgogCi0g
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIGppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmNsZWFyV2F0Y2hwb2ludHMoKTsKICNlbmRpZgogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0
KCkucmVtb3ZlKHRoaXMpOwpAQCAtOTY0LDYgKzk2Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRB
bHRlcm5hdGl2ZShWTSYgdm0sIEMKIHsKICAgICBSRUxFQVNFX0FTU0VSVChhbHRlcm5hdGl2ZSk7
CiAgICAgUkVMRUFTRV9BU1NFUlQoYWx0ZXJuYXRpdmUtPmppdENvZGUoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoYWx0ZXJuYXRpdmUtPmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpID09IGFsdGVy
bmF0aXZlKTsKICAgICBtX2FsdGVybmF0aXZlLnNldCh2bSwgdGhpcywgYWx0ZXJuYXRpdmUpOwog
fQogCkBAIC0xMDM3LDcgKzEwNDAsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJv
bmdseShjb25zCiAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tz
IGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAgICAgLy8gdGhlaXIgd2VhayByZWZl
cmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCiAgICAg
Ly8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUu
Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAo
IUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDQ1LDcgKzEwNDgsNyBAQCBib29sIENvZGVCbG9jazo6
c2hvdWxkVmlzaXRTdHJvbmdseShjb25zCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNv
bkR1ZVRvV2Vha1JlZmVyZW5jZShWTSYgdm0pCiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAhdm0uaGVhcC5pc01hcmtl
ZCh0aGlzKTsKIH0KQEAgLTEwNTgsNiArMTA2MSw4IEBAIHN0YXRpYyBTZWNvbmRzIHRpbWVUb0xp
dmUoSklUVHlwZSBqaXRUeXAKICAgICAgICAgICAgIHJldHVybiAxMF9tczsKICAgICAgICAgY2Fz
ZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiAzMF9tczsKKyAgICAg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgICAgICByZXR1cm4gMzVfbXM7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICAgICAgcmV0dXJuIDQwX21zOwogICAg
ICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKQEAgLTEwNzQsNiArMTA3OSw4IEBAIHN0YXRpYyBT
ZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXAKICAgICAgICAgLy8gRWZmZWN0aXZlbHkg
MTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKICAgICAgICAgLy8g
SW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KICAgICAgICAgcmV0dXJuIDE1X3M7
CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAxOF9zOwogICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gMjBfczsKICAgICBjYXNlIEpJVFR5
cGU6OkZUTEpJVDoKQEAgLTExNjksNyArMTE3Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb24KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogI2lmIEVOQUJM
RShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
eworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZH
OjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAg
ICAKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwpAQCAtMTIxNyw3ICsxMjI0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IAogICAgIC8vIEluIHJhcmUgYW5kIHdlaXJkIGNhc2VzLCB0aGlzIGNvdWxkIGJl
IGNhbGxlZCBvbiBhIGJhc2VsaW5lIENvZGVCbG9jay4gT25lIHRoYXQgSSBmb3VuZCB3YXMKICAg
ICAvLyB0aGF0IHdlIG1pZ2h0IGRlY2lkZSB0aGF0IHRoZSBDb2RlQmxvY2sgc2hvdWxkIGJlIGpl
dHRpc29uZWQgZHVlIHRvIG9sZCBhZ2UsIHNvIHRoZQogICAgIC8vIGlzTWFya2VkIGNoZWNrIGRv
ZXNuJ3QgcHJvdGVjdCB1cy4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENv
ZGUtPmRmZ0NvbW1vbigpOwpAQCAtMTUxOSw4ICsxNTI2LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2VuZGlmCiAgICAgCi0gICAgaWYgKEpJVENvZGU6
OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJl
SW50ZXJwcmV0ZWQoaml0VHlwZSgpKSB8fCBqaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKSB7
CisgICAgICAgIC8vIE9PUFM6IFNlcGFyYXRlIHBhcnQgb2YgdGhpcyBvdXQgaW50byBpdHMgb3du
IGZ1bmN0aW9uIGZvciBKSVQgSUNzLiBTaW5jZSBzb21lIG9mIHRoZXNlIGNhY2hlcyBhcmVuJ3Qg
anVzdCBmb3IgTExJbnQuCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAg
ICB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE1MjgsNyAr
MTUzNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkg
ewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZSh2bSk7
CiAgICAgfQpAQCAtMTU0OCw2ICsxNTU3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KAogICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2Vs
aW5lSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgICAgIGNvdW50
ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgpAQCAtMTU5MCw3ICsxNjAwLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbgogICAgICAgICAgICAgICAgIHJlc3VsdC5h
ZGQoQ29kZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBJQ1N0YXR1cygpKS5pdGVy
YXRvci0+dmFsdWUuYnlWYWxJbmZvID0gYnlWYWxJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkgeworICAgICAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAg
ICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9u
KCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3Rh
dHVzZXMuY2FsbHMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0
YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbFN0YXR1cyA9IHBhaXIuc2Vjb25kLmdldCgpOwpA
QCAtMTc3NSw4ICsxNzg1LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRz
KGNvbnMKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CiAgICAgaWYgKGRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBm
b3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMp
IHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVD
b2RlQmxvY2spOworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyYW5zaXRpdmVseSBrZWVwIHRo
ZSBiYXNlbGluZSBjb2RlIGJsb2NrIGFsaXZlLiBJdCdzIGVhc2llciB0byBub3Qgd29ycnkgdGhh
dCB3ZSdyZSByZWx5aW5nIG9uIHRoZSBMT0wgQ29kZUJsb2NrIHNvbWVob3cuCisgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNv
ZGVCbG9jay5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwogICAgICAgICB9CiAgICAg
fQogI2VuZGlmCkBAIC0xODEwLDEyICsxODIyLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0U3Ryb25nUmVmZXIKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3Jk
ZWRTdGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRPU1JFeGl0
VGFyZ2V0cyhsb2NrZXIsIHZpc2l0b3IpOwogICAgIH0KICNlbmRpZgorCisgICAgaWYgKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKG1fYWx0ZXJu
YXRpdmUpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2Vz
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgy
Myw3ICsxODM4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbgog
ICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlm
ICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2Rl
Ojppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xODU5
LDYgKzE4NzQsMjUgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJuYXRpdgog
I2VuZGlmCiB9CiAKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpsb2xPckJhc2VsaW5lQWx0ZXJuYXRp
dmUoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgQ29kZUJsb2NrKiByZXN1bHQgPSB0aGlzOwor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGF1dG8gaml0VHlwZSA9IHJlc3VsdC0+aml0VHlw
ZSgpOworICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQgfHwgSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKK30K
KwogQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB7CiAjaWYgRU5BQkxF
KEpJVCkKQEAgLTE4NjcsNyArMTkwMSw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGlu
ZVZlcnNpb24oKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9
IHJlcGxhY2VtZW50KCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChzZWxmSklUVHlwZSkpIHsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZXNSZXBsYWNlbWVudENvZGVCbG9jayhzZWxmSklUVHlwZSkpIHsKICAgICAgICAgICAgIC8vIFRo
ZSByZXBsYWNlbWVudCBjYW4gYmUgbnVsbCBpZiB3ZSd2ZSBoYWQgYSBtZW1vcnkgY2xlYW4gdXAg
YW5kIHRoZSBleGVjdXRhYmxlCiAgICAgICAgICAgICAvLyBoYXMgYmVlbiBwdXJnZWQgb2YgaXRz
IGNvZGVCbG9ja3MgKHNlZSBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkpLiBSZWdhcmRsZXNz
LAogICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgY29kZUJsb2NrIGlzIHN0aWxsIGxpdmUgb24g
dGhlIHN0YWNrLCBhbmQgYXMgYW4gb3B0aW1pemluZyBKSVQKQEAgLTE5MzEsNyArMTk2NSw3IEBA
IEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCgKIERpc3Bvc2FibGVDYWxs
U2l0ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENh
bGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICBS
RUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKICAgICBB
U1NFUlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKICAgICBD
b2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsK
QEAgLTE5NDksNiArMTk4Myw4IEBAIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVCbG9jazo6
bmV3RXgKIAogdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CisgICAgQVNTRVJU
KGJhc2VsaW5lQWx0ZXJuYXRpdmUoKSA9PSB0aGlzKTsKKwogICAgIGF1dG8mIGluc3RydWN0aW9u
ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgT3BDYXRjaCBvcCA9IGlu
c3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gb3AubWV0YWRh
dGEodGhpcyk7CkBAIC0yMTMwLDkgKzIxNjYsOSBAQCB2b2lkIENvZGVCbG9jazo6bGlua0luY29t
aW5nQ2FsbChDYWxsRnJhCiAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7
CiB9CiAKLUNvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCitDb2RlQmxvY2sq
IENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSkKIHsKLSAg
ICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNw
ZWNpYWxpemF0aW9uS2luZCgpKTsKKyAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1Jl
cGxhY2VtZW50Q29kZUJsb2NrRm9yKGFsdGVybmF0aXZlLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7
CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMjIzMSw1MSArMjI2Nyw1NSBAQCB2b2lkIENvZGVC
bG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDKCpoZWFwKCkpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhp
bmdzIGhlcmU6Ci0gICAgLy8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMg
b24gdGhlIHN0YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAx
KSBJZiB3ZSdyZSBERkcvRlRMLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBv
biB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAogICAgIC8vICAg
IHdlIHNob3VsZCBPU1IgZXhpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3Ry
dWN0aW9uIGFmdGVyIHRoZSByZXR1cm4uCiAgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2Ug
Y2FsbCB0aGUgb3duZXIgZXhlY3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENv
ZGVCbG9jay4KIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBl
KCkpKSB7CiAgICAgICAgIGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNsZWFyV2F0Y2hwb2ludHMo
KTsKLSAgICAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdl
KSB7Ci0gICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KGNvbXBpbGF0aW9uKSkKLSAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNv
bihyZWFzb24sIGRldGFpbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hl
cyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFz
IGFscmVhZHkgaGFwcGVuZWQuCi0gICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+
aW52YWxpZGF0ZSgpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxp
ZGF0ZWQuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkg
fHwgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93
bmVyRXhlY3V0YWJsZSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChy
ZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgICAgIFBy
b2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5jb21waWxhdGlvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjb21waWxhdGlv
bikpCisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNv
biwgZGV0YWlsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNo
ZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhh
cyBhbHJlYWR5IGhhcHBlbmVkLgorICAgICAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1v
bigpLT5pbnZhbGlkYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJl
ZW4gaW52YWxpZGF0ZWQuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSBy
ZXBsYWNlbWVudCgpIHx8ICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhdm0uaGVh
cC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKERGRzo6c2hv
dWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgaW52YWxpZGF0
ZSAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCiAgICAg
Ly8gQ291bnQgdGhlIHJlb3B0aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHdhbnRl
ZC4KICAgICBpZiAobW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBNYXliZSB0aGlzIHNob3VsZCBjYWxsIGFsdGVybmF0aXZlKCkuCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICAgICAgYmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAgIERpZCBjb3VudCByZW9wdGltaXphdGlvbiBmb3IgIiwgKnRoaXMs
ICJcbiIpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmICh0aGlzICE9IHJlcGxhY2VtZW50
KCkpIHsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhlIGVudHJ5
cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKICAgICAgICAgLy8gYmxv
Y2tzLgorICAgICAgICAvLyBPciwgd2UncmUgYW4gTE9MIENvZGVCbG9jayBhbmQgd2VyZSBhbHJl
YWR5IGpldHRpc29uZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYWx0ZXJu
YXRpdmUoKSkKICAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwog
Ci0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSAmJiByZWFz
b24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKQorICAgIGlmIChKSVRDb2RlOjpp
c0RGR09yRlRMKGppdFR5cGUoKSkgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpCiAgICAg
ICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IAogICAgIC8vIEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRv
IGluc3RhbGwgY29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQogICAgIC8vIGJlY2F1c2UgdGhhdCB3
b3VsZCBhZGQgYSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCkBAIC0yMzA2LDcg
KzIzNDYsNyBAQCBKU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9iYWxPYmplY3RGCiAgICAg
YXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdCgpOwot
ICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKIH0KIAogY2xhc3MgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIHsKQEAg
LTIzNjUsNyArMjQwNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoQ2Fs
bEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9m
aWxpbmcoKSkKKyAgICBpZiAoIWhhc0Jhc2VsaW5lT3JMT0xQcm9maWxpbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcykpCkBAIC0y
MzkwLDcgKzI0MzAsNyBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxG
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6
aXNERkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAgbV9zaG91
bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZUNhbGxMaW5rKCksICIgICAgQ2xlYXJpbmcgU0FCSSBiY2F1c2UgY2FsbGVyIHdhcyBh
bHJlYWR5IG9wdGltaXplZC4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ4MywxMiArMjUyMywx
NCBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMoCiB7CiAgICAgQVNT
RVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwogICAgIGlmIChPcHRpb25z
Ojp0ZXN0VGhlRlRMKCkpIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24p
CiAgICAgICAgICAgICByZXR1cm4gMTAwMDAwMDsKICAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5D
b21waWxlZFdpdGhGVEwgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwog
ICAgIH0KICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQoKTsK
LSAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVw
bGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcjsKKyAgICByZXR1cm4gKChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKHJl
cGxhY2VtZW50LT5qaXRUeXBlKCkpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXI7CiB9CiAKIGludDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxp
ZXIoKSBjb25zdApAQCAtMjY0MSw3ICsyNjgzLDcgQEAgYXV0byBDb2RlQmxvY2s6OnVwZGF0ZU9T
UkV4aXRDb3VudGVyQW5kQwogCiAgICAgYm9vbCBkaWRUcnlUb0VudGVySW5Mb29wID0gZmFsc2U7
CiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4aXQubV9jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFt
ZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Ci0g
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CisgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlU
b0VudGVySW5Mb29wKCkpIHsKICAgICAgICAgICAgIGRpZFRyeVRvRW50ZXJJbkxvb3AgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3MDksMjUgKzI3NTEsMzUgQEAg
dm9pZCBDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdAogdm9pZCBDb2RlQmxvY2s6
OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxh
dGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgSklUVHlwZSB0eXBlID0gaml0VHlwZSgpOwotICAg
IGlmICh0eXBlICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgaWYgKHR5cGUgIT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgJiYgdHlwZSAhPSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAgICAg
ZGF0YUxvZ0xuKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNvZGUgYnV0IGhh
dmUgIiwgdHlwZSk7CiAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihqaXRDb2RlKCkuZ2V0KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBlKSk7CiAgICAg
fQogICAgIAogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudCgp
OwotICAgIGJvb2wgaGFzUmVwbGFjZW1lbnQgPSAocmVwbGFjZW1lbnQgJiYgcmVwbGFjZW1lbnQg
IT0gdGhpcyk7CisgICAgYm9vbCBoYXNSZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50ICYmIHJlcGxh
Y2VtZW50ICE9IHRoaXM7CisgICAgYm9vbCByZXBsYWNlbWVudElzSGlnaGVyVGllciA9IGZhbHNl
OworICAgIGlmIChoYXNSZXBsYWNlbWVudCkgeworICAgICAgICByZXBsYWNlbWVudElzSGlnaGVy
VGllciA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudC0+aml0VHlwZSgpLCBqaXRU
eXBlKCkpOworICAgICAgICBoYXNSZXBsYWNlbWVudCAmPSByZXBsYWNlbWVudElzSGlnaGVyVGll
cjsKKyAgICB9CisKICAgICBpZiAoKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpICE9
IGhhc1JlcGxhY2VtZW50KSB7Ci0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IHdlIGhhdmUgcmVz
dWx0ID0gIiwgcmVzdWx0LCAiIGJ1dCAiKTsKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIiAiLCBq
aXRUeXBlKCksICI6IHdlIGhhdmUgcmVzdWx0ID0gIiwgcmVzdWx0LCAiIGJ1dCAiKTsKICAgICAg
ICAgaWYgKHJlcGxhY2VtZW50ID09IHRoaXMpCiAgICAgICAgICAgICBkYXRhTG9nKCJ3ZSBhcmUg
b3VyIG93biByZXBsYWNlbWVudC5cbiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRh
TG9nKCJvdXIgcmVwbGFjZW1lbnQgaXMgIiwgcG9pbnRlckR1bXAocmVwbGFjZW1lbnQpLCAiXG4i
KTsKKyAgICAgICAgICAgIGRhdGFMb2coIm91ciByZXBsYWNlbWVudCBpcyAiLCBwb2ludGVyRHVt
cChyZXBsYWNlbWVudCksICIgIiwgcmVwbGFjZW1lbnQtPmppdFR5cGUoKSwgIlxuIik7CisgICAg
ICAgIGRhdGFMb2dMbigiVXM6ICIsIFJhd1BvaW50ZXIodGhpcyksICIgcmVwbGFjZW1lbnQ6ICIs
IFJhd1BvaW50ZXIocmVwbGFjZW1lbnQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9Ci0gICAgCisKKyAgICBpZiAoaGFzUmVwbGFjZW1lbnQgJiYgIXJlcGxh
Y2VtZW50SXNIaWdoZXJUaWVyKQorICAgICAgICByZXR1cm47CisKICAgICBzd2l0Y2ggKHJlc3Vs
dCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgotICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXBsYWNlbWVudCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQt
PmppdFR5cGUoKSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBsYWNlbWVudCAmJiBKSVRD
b2RlOjppc0RGR09yRlRMKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKICAgICAgICAgb3B0aW1p
emVOZXh0SW52b2NhdGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlv
bkZhaWxlZDoKQEAgLTI3NTYsNyArMjgwOCw4IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGQKICAgICAKIHVpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291
bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKIHsKLSAgICBBU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIC8vQVNTRVJUKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsgLy8gT09QUzogV2UgY2FsbCB0aGlzIGZyb20g
dGhlIExPTCBjb21waWxlciB0aHJlYWQgYmVmb3JlIGluc3RhbGwuCisKICAgICAvLyBDb21wdXRl
IHRoaXMgdGhlIGxhbWUgd2F5IHNvIHdlIGRvbid0IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBp
bmZyZXF1ZW50bHkKICAgICAvLyBlbm91Z2ggdGhhdCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4K
ICAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNpcmVkVGhyZXNob2xkOwpAQCAtMjgzNiw3ICsyODg5
LDcgQEAgREZHOjpDb2RlT3JpZ2luUG9vbCYgQ29kZUJsb2NrOjpjb2RlT3JpZwogCiBzaXplX3Qg
Q29kZUJsb2NrOjpudW1iZXJPZkRGR0lkZW50aWZpZXJzKCkgY29uc3QKIHsKLSAgICBpZiAoIUpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNE
RkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICByZXR1cm4g
bV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmllcnMuc2l6ZSgpOwpAQCAtMjg0Nyw3
ICsyOTAwLDcgQEAgY29uc3QgSWRlbnRpZmllciYgQ29kZUJsb2NrOjppZGVudGlmaWVyKAogICAg
IHNpemVfdCB1bmxpbmtlZElkZW50aWZpZXJzID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRl
bnRpZmllcnMoKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlu
a2VkSWRlbnRpZmllcnMpCiAgICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmll
cihpbmRleCk7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICByZXR1
cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmllcnNbaW5kZXggLSB1bmxpbmtl
ZElkZW50aWZpZXJzXTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKQEAgLTI5MTIsMzAg
KzI5NjUsMzEgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKCkKICAgICB1
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRP
cHRpbWl6ZU5vdygpCitib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVUb0RGR05vdygpCiB7
CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29uc2lkZXJpbmcgb3B0
aW1pemluZyAiLCAqdGhpcywgIi4uLiIpOwogCiAgICAgaWYgKG1fb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyID49IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAKLSAgICB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7CisgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAg
ICBiYXNlbGluZUNvZGVCbG9jay0+dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogICAgIAog
ICAgIHVuc2lnbmVkIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKICAgICB1
bnNpZ25lZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzOwotICAgIHVwZGF0ZUFsbFZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMsIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOworICAgIGJhc2VsaW5lQ29k
ZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3Mo
bnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzKTsKIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0
YUxvZ0YoCiAgICAgICAgICAgICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUpLCAlbGYg
KCV1IC8gJXUpXG4iLAotICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVu
dFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpLAotICAg
ICAgICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZk5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcygpLAotICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJP
Zk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpLAotICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVz
SW5Qcm9maWxlcywgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgKiBudW1iZXJPZk5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpKTsKKyAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZMaXZl
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gYmFzZWxpbmVDb2RlQmxvY2stPm51bWJlck9mTm9u
QXJndW1lbnRWYWx1ZVByb2ZpbGVzKCksCisgICAgICAgICAgICBudW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMsIGJhc2VsaW5lQ29kZUJsb2NrLT5udW1iZXJPZk5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlcygpLAorICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBiYXNlbGluZUNvZGVCbG9j
ay0+bnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAgIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMsIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzICogYmFz
ZWxpbmVDb2RlQmxvY2stPm51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpOwogICAg
IH0KIAotICAgIGlmICgoIW51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgfHwgKGRv
dWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NS
YXRlKCkpCi0gICAgICAgICYmICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91
YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVj
a2V0cyAvIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFBy
b2ZpbGVGdWxsbmVzc1JhdGUoKSkKKyAgICBpZiAoKCFiYXNlbGluZUNvZGVCbG9jay0+bnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlcyAvIGJhc2VsaW5lQ29kZUJsb2NrLT5udW1iZXJPZk5vbkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRl
KCkpCisgICAgICAgICYmICghYmFzZWxpbmVDb2RlQmxvY2stPnRvdGFsTnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBiYXNlbGluZUNvZGVCbG9jay0+dG90YWxOdW1iZXJPZlZh
bHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQog
ICAgICAgICAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIpICsgMSA+PSBPcHRpb25zOjptaW5pbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgCkBAIC0yOTQ4LDEwICszMDAyLDEwIEBAIGJvb2wgQ29kZUJsb2Nr
OjpzaG91bGRPcHRpbWl6ZU5vdygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2b2lkIENvZGVCbG9j
azo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpKSk7CisgICAgLy8gT09QUworICAgIEFTU0VSVChK
SVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpOwogICAgIAotICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
ID0gYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwogICAgIAogICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7
CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6IHsKQEAgLTMwNTAsNiArMzEwNCw3IEBAIHVuc2ln
bmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoK
ICAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKQEAgLTMyMjYsMTQgKzMyODEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6
OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbgogewogICAgIG1fbnVtQnJlYWtwb2ludHMgKz0gbnVt
QnJlYWtwb2ludHM7CiAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMpOwotICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6aXNERkdP
ckZUTChqaXRUeXBlKCkpKQogICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVU
b0RlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01v
ZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGUgbW9kZSkKIHsKICAgICBtX3N0ZXBwaW5nTW9kZSA9
IG1vZGU7Ci0gICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAobW9kZSA9PSBTdGVwcGluZ01vZGVF
bmFibGVkICYmIEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlz
b24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5nKTsKIH0KIApAQCAtMzI5
Niw3ICszMzUxLDcgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAog
CiBib29sIENvZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEFyaXRoRmFzdENhc2UoQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQogewotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmco
KSkKKyAgICBpZiAoIWhhc0Jhc2VsaW5lT3JMT0xQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSA9IGJpbmFyeUFyaXRoUHJv
ZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgaWYgKCFwcm9maWxlKQpA
QCAtMzQyMSw5ICszNDc2LDkgQEAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpi
eXRlYwogewogICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXg7CiAgICAg
SklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOwotICAgIGlmIChqaXRUeXBlID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkKKyAgICBpZiAoSklUQ29kZTo6Y2FsbFNpdGVCaXRzQXJlQnl0Y29kZUluZGV4KGppdFR5cGUp
KQogICAgICAgICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29kZUluZGV4KCk7
Ci0gICAgZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBK
SVRUeXBlOjpGVExKSVQpIHsKKyAgICBlbHNlIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CiAgICAg
ICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKQEAgLTM0
NjYsNyArMzUyMSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3AK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVy
LiBXZSBuZWVkIHRvIGJlCiAgICAgLy8gY2FyZWZ1bCB0byBub3QgY2FsbCBhbnl0aGluZyB0aGF0
IGlzIG5vdCBzaWduYWwgaGFuZGxlciBzYWZlLCBlLmcuCiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBw
ZXJ0dXJiIHRoZSByZWZDb3VudCBvZiBtX2ppdENvZGUuCi0gICAgaWYgKCFKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0
VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX2ppdENvZGUtPmRm
Z0NvbW1vbigpLT5oYXNJbnN0YWxsZWRWTVRyYXBzQnJlYWtwb2ludHMoKTsKICNlbHNlCkBAIC0z
NDgwLDcgKzM1MzUsNyBAQCBib29sIENvZGVCbG9jazo6aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRz
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxl
ci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNhbGwgYW55dGhpbmcgdGhh
dCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8vIHdlIHNob3VsZCBub3Qg
cGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlmICghSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09yRlRMKGpp
dFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBjb21tb25EYXRhID0g
Km1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgY29tbW9uRGF0YS5pbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHModGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBwdWJs
aWM6CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBsb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsK
ICAgICAKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKQEAgLTM0Nyw3ICszNDgsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmco
KSkKKyAgICAgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlSW5kZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKQEAgLTM1Niw3ICszNTcsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKICAgICB7Ci0gICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAg
ICAgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAg
ICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5k
ZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKQEAgLTQxMiw4ICs0MTMsOCBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9u
cygpLnNpemUoKTsgfQogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQ29zdCgpIGNvbnN0IHsgcmV0dXJu
IG1fYnl0ZWNvZGVDb3N0OyB9CiAKLSAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJs
b2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSkKLSAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50
KCk7CisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKGFsdGVybmF0aXZlLCBjb2RlQmxvY2st
PnNwZWNpYWxpemF0aW9uS2luZCgpKQorICAgIENvZGVCbG9jayogbmV3UmVwbGFjZW1lbnQoQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSk7CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFJlZjxKSVRD
b2RlPiYmIGNvZGUpCiAgICAgewpAQCAtNDM2LDkgKzQzNywxMCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2ZpbGlu
ZygpIGNvbnN0CisgICAgYm9vbCBoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Cisg
ICAgICAgIEpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgdHlwZSA9PSBKSVRUeXBlOjpMT0xKSVQ7CiAgICAgfQog
ICAgIAogI2lmIEVOQUJMRShKSVQpCkBAIC01MTEsNiArNTEzLDcgQEAgcHVibGljOgogICAgIFNw
ZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDYXRjaFByb2ZpbGUo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShjb25zdCBGdW5jdG9y
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OwpAQCAtNTM5LDcgKzU0Miw3IEBAIHB1YmxpYzoKICAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5z
IGltcGxpZXMgdGhhdCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wgaGFz
Q29kZU9yaWdpbnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpOworICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNERkdPckZUTChqaXRU
eXBlKCkpOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENhbGxT
aXRlSW5kZXggaW5kZXgpCkBAIC04MDMsNyArODA2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IG51bWJlck9mREZHQ29tcGlsZXMoKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAotICAgIGJvb2wg
c2hvdWxkT3B0aW1pemVOb3coKTsKKyAgICBib29sIHNob3VsZE9wdGltaXplVG9ERkdOb3coKTsK
ICAgICB2b2lkIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAgICAgdm9pZCB1
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7CiAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9u
cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nywx
NSBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAg
ICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAg
IH0gICAKK30KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrOjpm
b3JFYWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmMpCit7CisgICAgaWYgKGF1dG8qIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkg
eworICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNrZXQgOiByYXJlRGF0YS0+bV9jYXRjaFBy
b2ZpbGVzKQorICAgICAgICAgICAgZnVuYygqcHJvZmlsZUJ1Y2tldCk7CisgICAgfQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MSw3ICs3MSw3IEBAIGJvb2wgQ29kZU9yaWdpbjo6aXNBcHByb3hpbWF0ZWx5RXF1YWxUbygKICAg
ICAgICAgaWYgKCFhSGFzSW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIAotICAgICAgICBpZiAoYUlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxv
Y2suZ2V0KCkgIT0gYklubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisg
ICAgICAgIGlmIChhSW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgp
ICE9IGJJbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBhID0gYUlubGluZUNhbGxG
cmFtZS0+ZGlyZWN0Q2FsbGVyOwpAQCAtOTksNyArOTksNyBAQCB1bnNpZ25lZCBDb2RlT3JpZ2lu
OjphcHByb3hpbWF0ZUhhc2goSW5sCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgPT0gdGVy
bWluYWwpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKLSAgICAgICAgcmVz
dWx0ICs9IFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChpbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU0Nl
bGwqPjo6aGFzaChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkp
OwogICAgICAgICAKICAgICAgICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0
Q2FsbGVyOwogICAgIH0KQEAgLTEyMSw3ICsxMjEsNyBAQCBDb2RlQmxvY2sqIENvZGVPcmlnaW46
OmNvZGVPcmlnaW5Pd25lcigpCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gdGhpcy0+aW5s
aW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpOworICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpOwogfQogCiBpbnQgQ29kZU9yaWdpbjo6c3RhY2tPZmZzZXQoKSBjb25z
dApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgQ29kZU9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSAKICAgICAgICAgICAgIG91dC5wcmludCgiIC0tPiAiKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChJbmxpbmVDYWxsRnJhbWUqIGZyYW1lID0gc3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lKCkp
IHsKLSAgICAgICAgICAgIG91dC5wcmludChmcmFtZS0+YnJpZWZGdW5jdGlvbkluZm9ybWF0aW9u
KCksICI6PCIsIFJhd1BvaW50ZXIoZnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwgIj4g
Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoZnJhbWUtPmJyaWVmRnVuY3Rpb25JbmZvcm1hdGlv
bigpLCAiOjwiLCBSYXdQb2ludGVyKGZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgp
KSwgIj4gIik7CiAgICAgICAgICAgICBpZiAoZnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIoY2xvc3VyZSkgIik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdK
SVRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOSBAQCB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpCiAgICAgY2FzZSBFeGl0RnJvbUFueXRoaW5nOgog
ICAgICAgICBvdXQucHJpbnQoIkZyb21Bbnl0aGluZyIpOwogICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBFeGl0RnJvbUxPTDoKKyAgICAgICAgb3V0LnByaW50KCJGcm9tTE9MIik7CisgICAgICAg
IHJldHVybjsKICAgICBjYXNlIEV4aXRGcm9tREZHOgogICAgICAgICBvdXQucHJpbnQoIkZyb21E
RkciKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4aXRpbmdKSVRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIEV4aXRpbmdKSVRUeXBlIDog
dWludDhfdCB7CiAgICAgRXhpdEZyb21Bbnl0aGluZywKKyAgICBFeGl0RnJvbUxPTCwKICAgICBF
eGl0RnJvbURGRywKICAgICBFeGl0RnJvbUZUTAogfTsKQEAgLTM4LDYgKzM5LDggQEAgZW51bSBF
eGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogaW5saW5lIEV4aXRpbmdKSVRUeXBlIGV4aXRpbmdK
SVRUeXBlRm9yKEpJVFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgcmV0dXJuIEV4aXRGcm9tTE9MOwogICAgIGNhc2Ug
SklUVHlwZTo6REZHSklUOgogICAgICAgICByZXR1cm4gRXhpdEZyb21ERkc7CiAgICAgY2FzZSBK
SVRUeXBlOjpGVExKSVQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDE3ICs0NSwxNyBAQCBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUZv
ckNhCiAKIENvZGVCbG9ja0hhc2ggSW5saW5lQ2FsbEZyYW1lOjpoYXNoKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2stPmhhc2goKTsKKyAgICByZXR1cm4gbG9sT3JCYXNl
bGluZUNvZGVCbG9jay0+aGFzaCgpOwogfQogCiBDU3RyaW5nIElubGluZUNhbGxGcmFtZTo6aGFz
aEFzU3RyaW5nSWZQb3NzaWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJs
b2NrLT5oYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCk7CisgICAgcmV0dXJuIGxvbE9yQmFzZWxpbmVD
b2RlQmxvY2stPmhhc2hBc1N0cmluZ0lmUG9zc2libGUoKTsKIH0KIAogQ1N0cmluZyBJbmxpbmVD
YWxsRnJhbWU6OmluZmVycmVkTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihiYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLT5l
Y21hTmFtZSgpLnV0ZjgoKTsKKyAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKS0+ZWNtYU5hbWUoKS51
dGY4KCk7CiB9CiAKIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wQnJpZWZGdW5jdGlvbkluZm9y
bWF0aW9uKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSW5s
aW5lQ2FsbEZyYW1lOjpkdW1wQnJpZWZGdW5jdGlvbkkKIAogdm9pZCBJbmxpbmVDYWxsRnJhbWU6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0CiB7Ci0gICAgb3V0LnByaW50KGJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBS
YXdQb2ludGVyKGJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSk7CisgICAgb3V0LnByaW50KGJyaWVm
RnVuY3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGxvbE9yQmFzZWxpbmVDb2Rl
QmxvY2suZ2V0KCkpKTsKICAgICBpZiAoaXNJblN0cmljdENvbnRleHQoKSkKICAgICAgICAgb3V0
LnByaW50KCIgKFN0cmljdE1vZGUpIik7CiAgICAgb3V0LnByaW50KCIsICIsIGRpcmVjdENhbGxl
ci5ieXRlY29kZUluZGV4KCksICIsICIsIHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIH0KICAgICAKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4g
YXJndW1lbnRzV2l0aEZpeHVwOyAvLyBJbmNsdWRlcyAndGhpcycgYW5kIGFyaXR5IGZpeHVwcy4K
LSAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKKyAgICBXcml0
ZUJhcnJpZXI8Q29kZUJsb2NrPiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVPcmln
aW4gZGlyZWN0Q2FsbGVyOwogCiAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgOiAyMjsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBzLgpAQCAtMjMxLDIwICsyMzEsMjEgQEAg
c3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZy
YW1lOjpyZXR1cm5QQ09mZnNldCgpOyB9CiAKLSAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0lu
U3RyaWN0Q29udGV4dCgpOyB9CisgICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc0luU3Ry
aWN0Q29udGV4dCgpOyB9CiAKICAgICB2b2lkIGR1bXBCcmllZkZ1bmN0aW9uSW5mb3JtYXRpb24o
UHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
ICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OwogCiAgICAgTUFLRV9QUklOVF9NRVRIT0QoSW5saW5lQ2FsbEZyYW1lLCBkdW1wQnJpZWZGdW5j
dGlvbkluZm9ybWF0aW9uLCBicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24pOwotCiB9OwogCiBpbmxp
bmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmxpbmVD
YWxsRnJhbWUpOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpOworICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+
bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+
YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBpbmxpbmUg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUu
aCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRz
PgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApAQCAtMTM0LDcgKzEzNSw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wZXJhbmQpID09IHNp
emVvZigKIAogZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5kc0xpa2UgfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tDYWxsZWUgPSBm
YWxzZT4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKICAgICB1c2luZyBTdG9yYWdlID0gc3Rk
Ojpjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZV92PFQsIGJvb2w+LCBGYXN0Qml0VmVjdG9yLCBW
ZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+PjsKQEAgLTE0MywyMSArMTQ0LDIzIEBA
IHB1YmxpYzoKIAogICAgIE9wZXJhbmRzKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgT3Bl
cmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRt
cHMpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51
bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIHNpemVfdCBudW1Db25zdGFudHMgPSAwKQogICAgICAg
ICA6IG1fbnVtQXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAgICAgLCBtX251bUxvY2Fscyhu
dW1Mb2NhbHMpCisgICAgICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgIHsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBz
OworICAgICAgICBzaXplX3Qgc2l6ZSA9IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bUNv
bnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlOwogICAgICAgICBtX3ZhbHVlcy5ncm93
KHNpemUpOwogICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKQogICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkpOwogICAgIH0KIAotICAgIGV4
cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNp
emVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFu
ZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMs
IHNpemVfdCBudW1Db25zdGFudHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBt
X251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9j
YWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICB7Ci0gICAg
ICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7Cisg
ICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtQ29uc3Rh
bnRzICsgbnVtVG1wcyArICEhdHJhY2tDYWxsZWUpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGlu
aXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIApAQCAtMTY1LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBv
dGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1l
bnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMob3Ro
ZXIubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhvdGhlci5udW1i
ZXJPZkNvbnN0YW50cygpKQogICAgIHsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhvdGhlci5zaXpl
KCkpOwogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CkBAIC0xNzIsMzMgKzE3
Niw1MSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7
IHJldHVybiBtX251bUFyZ3VtZW50czsgfQogICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtTG9jYWxzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVG1wcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1lbnRzKCkgLSBudW1i
ZXJPZkxvY2FscygpOyB9CisgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1Db25zdGFudHM7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9m
TG9jYWxzKCkgLSBudW1iZXJPZkNvbnN0YW50cygpIC0gISF0cmFja0NhbGxlZTsgfQogCisgICAg
dGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZv
byAmJiB0cmFja0NhbGxlZT4+CisgICAgc2l6ZV90IGNhbGxlZUluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSAxOworICAgIH0KICAgICBzaXplX3Qg
dG1wSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBu
dW1iZXJPZlRtcHMoKSk7Ci0gICAgICAgIHJldHVybiBpZHggKyBudW1iZXJPZkFyZ3VtZW50cygp
ICsgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1l
bnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFudHMoKTsKICAgICB9CiAg
ICAgc2l6ZV90IGFyZ3VtZW50SW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChpZHggPCBudW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICAgICAgcmV0dXJuIGlkeDsK
ICAgICB9Ci0gICAgCiAgICAgc2l6ZV90IGxvY2FsSW5kZXgoc2l6ZV90IGlkeCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgcmV0
dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorICAgIHNpemVfdCBjb25zdGFu
dEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVt
YmVyT2ZDb25zdGFudHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsg
bnVtYmVyT2ZMb2NhbHMoKSArIGlkeDsKKyAgICB9CiAKICAgICBSZWZUeXBlIHRtcChzaXplX3Qg
aWR4KSB7IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlw
ZSB0bXAoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07
IH0KICAgICAKICAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFs
dWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07IH0KICAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6
ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQor
CisgICAgdGVtcGxhdGUgPGJvb2wgZm9vID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9p
Zl90PGZvbyAmJiB0cmFja0NhbGxlZT4+CisgICAgUmVmVHlwZSBjYWxsZWUoKSB7IHJldHVybiBt
X3ZhbHVlcy5sYXN0KCk7IH0KKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmb28gPSB0cnVlLCB0eXBlbmFt
ZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8Zm9vICYmIHRyYWNrQ2FsbGVlPj4KKyAgICBDb25zdFJlZlR5
cGUgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CiAgICAgCiAgICAg
UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlk
eCldOyB9CiAgICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKworICAgIFJlZlR5cGUgY29uc3RhbnQoc2l6
ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQorICAgIENv
bnN0UmVmVHlwZSBjb25zdGFudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tj
b25zdGFudEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CiAgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdApAQCAtMjQ4LDcgKzI3MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZMb2NhbHMoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRz
KCkgKyBudW1iZXJPZlRtcHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgbnVtYmVyT2ZDb25zdGFudHMoKSAr
ICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVt
YmVyT2ZMb2NhbHMoKTsKICAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMo
KTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKQEAgLTI2OCw3ICsyOTAsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBt
X3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9
IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZDb25zdGFu
dHMoKSArICEhdHJhY2tDYWxsZWUgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1Np
emUpOwogCiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRy
YWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewpAQCAtMzA1LDggKzMyNywxNSBAQCBwdWJs
aWM6CiAKICAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBj
b25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICBp
ZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodHJh
Y2tDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpICYmIG9w
ZXJhbmQub2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2FsbGVlSW5kZXgoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3Rh
bnRJbmRleChvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGxvY2Fs
SW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKQEAgLTMxOSw4ICszNDgsMTUg
QEAgcHVibGljOgogICAgIAogICAgIFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHRy
YWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSAmJiBv
cGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNhbGxlZSgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
b3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQob3BlcmFu
ZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9j
YWwoKSk7CiAgICAgfQogCkBAIC0zMzgsNiArMzc0LDggQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpIDwgbnVtYmVyT2ZDb25z
dGFudHMoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xv
Y2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9CiAgICAgYm9vbCBoYXNPcGVyYW5kKE9w
ZXJhbmQgb3ApIGNvbnN0CkBAIC0zNjQsOSArNDAyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4KTsKLSAgICAgICAg
ZWxzZSBpZiAoaW5kZXggPCBudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkK
KyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRz
KCkpCiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBu
dW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAt
IChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOworICAgICAgICBpZiAo
aW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9m
Q29uc3RhbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3Rh
bnQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9
PSBjYWxsZWVJbmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gT3BlcmFu
ZDo6dG1wKGluZGV4IC0gKG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpICsg
bnVtYmVyT2ZDb25zdGFudHMoKSkpOwogICAgIH0KIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpA
QCAtMzkzLDEwICs0MzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1l
bnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBs
b2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1
bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJl
IGxvY2FscywgdGhlIG5leHQgbV9udW1Db25zdGFudHMgYXJlIGNvbnN0YW50cywgYW5kIHRoZSBy
ZXN0IGFyZSB0bXBzLgogICAgIFN0b3JhZ2UgbV92YWx1ZXM7CiAgICAgdW5zaWduZWQgbV9udW1B
cmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9udW1Db25zdGFudHMgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVz
LmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQCBpbmxpbmUg
dm9pZCBPcGVyYW5kOjpkdW1wKFByaW50U3RyZWFtJiBvCiAgICAgICAgIG91dC5wcmludCh2aXJ0
dWFsUmVnaXN0ZXIoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRz
PFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3Bl
cmFuZHM8VCwgdHJhY2tDYWxsZWU+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIp
OwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBh
cmd1bWVudEluZGV4LS07KSB7CkBAIC01NywxMCArNTcsMTIgQEAgdm9pZCBPcGVyYW5kczxUPjo6
ZHVtcEluQ29udGV4dChQcmludFN0cgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAodG1wSW5k
ZXgpLCBjb250ZXh0KSk7CiAgICAgfQorICAgIGlmIGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxlZSIsICI6IiwgaW5Db250ZXh0KGNhbGxlZSgp
LCBjb250ZXh0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIE9wZXJhbmRzPFQ+
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29s
IHRyYWNrQ2FsbGVlPgordm9pZCBPcGVyYW5kczxULCB0cmFja0NhbGxlZT46OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKICAgICBm
b3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJ
bmRleC0tOykgewpAQCAtNzgsNiArODAsOCBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CiAgICAgfQorICAgIGlm
IGNvbnN0ZXhwciAodHJhY2tDYWxsZWUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxl
ZSIsICI6IiwgY2FsbGVlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNv
bnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgbV9saXZlUmVn
aXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSA9IGppdC0+Y29kZUJs
b2NrKCktPmppdENvZGUoKS0+bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRs
aW5nQ2FsbFNpdGUoaml0LT5jb2RlQmxvY2soKSwgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgpOwog
ICAgICAgICBtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24gPSBtX2xpdmVSZWdp
c3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLm51bWJlck9mU2V0UmVn
aXN0ZXJzKCkgPiAwOwogICAgICAgICBpZiAobV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhj
ZXB0aW9uKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsK
IAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVn
aXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51
c2VkUmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUo
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTcxMCw3ICs3MTAsNyBAQCBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgICAgIC8vIFdlIHNldCB0aGVzZSB0byBp
bmRpY2F0ZSB0byB0aGUgc3R1YiB0byByZW1vdmUgaXRzZWxmIGZyb20gdGhlIENvZGVCbG9jaydz
CiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIHRhYmxlIHdoZW4gaXQgaXMgZGVhbGxvY2F0
ZWQuCiAgICAgICAgIGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMgPSBjb2RlQmxv
Y2s7Ci0gICAgICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrVGhh
dE93bnNFeGNlcHRpb25IYW5kbGVycy0+aml0VHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChKSVRD
b2RlOjppc0RGR09yRlRMKGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5
cGUoKSkpOwogICAgICAgICBjYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcgPSBzdGF0
ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZp
c2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRl
ZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBpbmxpbmUgYm9vbCBp
c0ludDMyU3BlY3VsYXRpb24oU3BlY3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlICYmICEodmFsdWUg
JiB+U3BlY0ludDMyT25seSk7CiB9CiAKK2lubGluZSBib29sIGlzQnl0ZWNvZGVEb3VibGVTcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgISh2
YWx1ZSAmIH5TcGVjQnl0ZWNvZGVEb3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc05vdEludDMy
U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlICYm
ICEodmFsdWUgJiBTcGVjSW50MzJPbmx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDggKzExOCw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBu
ZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24n
dCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAko
cmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFZpcnR1
YWxSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGludCwgaW50KTsKKyAgICBmcmllbmQg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCk7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsK
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52
YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wg
aXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92
aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4g
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3RlcikgJiYgIWlzQ29uc3Rh
bnQoKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdp
c3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVn
aXN0ZXIgPj0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgp
IGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KQEAgLTExNyw2ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBp
bnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0xIC0gb3BlcmFuZDsgfQog
ICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9w
ZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CiAgICAgc3RhdGljIGlu
dCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQorICAgIHN0YXRpYyBpbnQgY29uc3RhbnRU
b09wZXJhbmQoaW50IGNvbnN0YW50SW5kZXgpIHsgcmV0dXJuIGZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4ICsgY29uc3RhbnRJbmRleDsgfQogCiAgICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOwog
fTsKQEAgLTEzMyw0ICsxMzUsOSBAQCBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvCiAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3Vt
ZW50VG9PcGVyYW5kKGFyZ3VtZW50KSArIG9mZnNldCk7CiB9CiAKK2lubGluZSBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaW50IGNvbnN0YW50SW5kZXgpCit7Cisg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmNvbnN0YW50VG9PcGVy
YW5kKGNvbnN0YW50SW5kZXgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29k
ZUluZGV4IGJ5dAogICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzKQogICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQogICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1U
bXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCBpbnRl
cnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIG51bVRt
cHMsIDAsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50KGV4
ZWN1dGlvbkNvdW50KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkluQnlJZFN0YXR1cy5o
IgogI2luY2x1ZGUgIkluc3RhbmNlT2ZTdGF0dXMuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiSlNBcnJheUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTSW1tdXRhYmxlQnV0dGVyZmx5LmgiCkBAIC05MDUsNyArOTA2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwogICAgICAgICB9OwogCi0gICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uRnJv
bUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUoKSkpOwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgQ29kZU9yaWdpbihieXRlY29k
ZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUoKSkpOwogICAgICAgICBpZiAocHJlZGljdGlvbiAhPSBT
cGVjTm9uZSkKICAgICAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwogCkBAIC05MzksNyArOTQw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdoaWxlIChzdGFjay0+bV9pbmxpbmVDYWxsRnJh
bWUgIT0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgICAgICAgICAgc3Rh
Y2sgPSBzdGFjay0+bV9jYWxsZXI7CiAKLSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVByb2Zp
bGVQcmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5tX3By
b2ZpbGVkQmxvY2ssICpjb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVBy
b2ZpbGVQcmVkaWN0aW9uRnJvbUZvckNvZGVCbG9ja0FuZEJ5dGVjb2RlT2Zmc2V0KHN0YWNrLT5t
X3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgKmNvZGVPcmlnaW4pOwogICAg
ICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTk4Miw4ICs5ODMsOSBAQCBwcml2YXRlOgog
CiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUmIHByb2ZpbGUsIEFycmF5
OjpBY3Rpb24gYWN0aW9uKQogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHBy
b2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrKTsKICAg
ICAgICAgYm9vbCBtYWtlU2FmZSA9IHByb2ZpbGUub3V0T2ZCb3VuZHMobG9ja2VyKTsKICAgICAg
ICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGxvY2tlciwgJnByb2ZpbGUsIGFjdGlv
biwgbWFrZVNhZmUpOwogICAgIH0KQEAgLTE2NjgsNyArMTY3MCw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICBjb25zdCBJbnN0cnVjdGlvbiogc2F2ZWRD
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKICAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lh
bGl6YXRpb25LaW5kRm9yKGtpbmQpOwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
ZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0
aW9uS2luZCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVj
dXRhYmxlKCktPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsK
ICAgICBpbnNlcnRDaGVja3MoY29kZUJsb2NrKTsKIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVz
aCBjb25zdGFudHMhCkBAIC02ODczLDcgKzY4NzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBIYXNoU2V0PHVuc2lnbmVkLCBXVEY6Oklu
dEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2ln
bmVkPj4gc2VlbkFyZ3VtZW50czsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPm1f
bG9jayk7CiAKICAgICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJhbmQpOwpAQCAtODM0NSwyMyArODM0
NywyOCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgewog
ICAgICAgICBtX2V4aXRQcm9maWxlLmluaXRpYWxpemUobV9wcm9maWxlZEJsb2NrLT51bmxpbmtl
ZENvZGVCbG9jaygpKTsKIAotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9sYXp5T3BlcmFuZHMuaW5pdGlhbGl6ZShs
b2NrZXIsIG1fcHJvZmlsZWRCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKGxvY2tlcikp
OworICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiBjb2RlQmxvY2sgPSBtX3Byb2ZpbGVkQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0
aWFsaXplKGxvY2tlciwgY29kZUJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2Vy
KSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvIHRoaXMgd2hpbGUgaG9s
ZGluZyB0aGUgbG9jayBiZWNhdXNlIHdlIHdhbnQgdG8gZW5jb3VyYWdlIFN0cnVjdHVyZVN0dWJJ
bmZvJ3MKICAgICAgICAgLy8gdG8gYmUgcG90ZW50aWFsbHkgYWRkZWQgdG8gb3BlcmF0aW9ucyBh
bmQgYmVjYXVzZSB0aGUgcHJvZmlsZWQgYmxvY2sgY291bGQgYmUgaW4gdGhlCiAgICAgICAgIC8v
IG1pZGRsZSBvZiBMTEludC0+SklUIHRpZXItdXAgaW4gd2hpY2ggY2FzZSB3ZSB3b3VsZCBiZSBh
ZGRpbmcgdGhlIGluZm8ncyByaWdodCBub3cuCi0gICAgICAgIGlmIChtX3Byb2ZpbGVkQmxvY2st
Pmhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2st
PmdldElDU3RhdHVzTWFwKGxvY2tlciwgbV9iYXNlbGluZU1hcCk7CisgICAgICAgIGlmIChtX3By
b2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lT3JMT0xQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIG1f
cHJvZmlsZWRCbG9jay0+Z2V0SUNTdGF0dXNNYXAobV9iYXNlbGluZU1hcCk7CiAgICAgfQogICAg
IAotICAgIENvZGVCbG9jayogb3B0aW1pemVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxh
Y2VtZW50KCk7Ci0gICAgbV9vcHRpbWl6ZWRDb250ZXh0Lm9wdGltaXplZENvZGVCbG9jayA9IG9w
dGltaXplZEJsb2NrOwotICAgIGlmIChPcHRpb25zOjp1c2VQb2x5dmFyaWFudERldmlydHVhbGl6
YXRpb24oKSAmJiBvcHRpbWl6ZWRCbG9jaykgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG9wdGltaXplZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBvcHRpbWl6ZWRCbG9jay0+
Z2V0SUNTdGF0dXNNYXAobG9ja2VyLCBtX29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICB7Cisg
ICAgICAgIENvZGVCbG9jayogb3B0aW1pemVkQmxvY2sgPSBtX3Byb2ZpbGVkQmxvY2stPnJlcGxh
Y2VtZW50KCk7CisgICAgICAgIG1fb3B0aW1pemVkQ29udGV4dC5vcHRpbWl6ZWRDb2RlQmxvY2sg
PSBvcHRpbWl6ZWRCbG9jazsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVBvbHl2YXJpYW50RGV2
aXJ0dWFsaXphdGlvbigpICYmIG9wdGltaXplZEJsb2NrICYmIEpTQzo6SklUQ29kZTo6aXNIaWdo
ZXJUaWVyKG9wdGltaXplZEJsb2NrLT5qaXRUeXBlKCksIG1fcHJvZmlsZWRCbG9jay0+aml0VHlw
ZSgpKSkgeworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihvcHRpbWl6ZWRC
bG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIG9wdGltaXplZEJsb2NrLT5nZXRJQ1N0YXR1c01h
cChsb2NrZXIsIG1fb3B0aW1pemVkQ29udGV4dC5tYXApOworICAgICAgICB9CisgICAgICAgIGJ5
dGVDb2RlUGFyc2VyLT5tX2ljQ29udGV4dFN0YWNrLmFwcGVuZCgmbV9vcHRpbWl6ZWRDb250ZXh0
KTsKICAgICB9Ci0gICAgYnl0ZUNvZGVQYXJzZXItPm1faWNDb250ZXh0U3RhY2suYXBwZW5kKCZt
X29wdGltaXplZENvbnRleHQpOwogICAgIAogICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpc1dpdGhGaXh1cCA9IHN0ZDo6bWF4PGludD4oYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKIApAQCAtODM3NSw3ICs4MzgyLDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogCiAgICAgICAgIC8vIFRoZSBv
d25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgYmFy
cmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCi0gICAgICAg
IG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGluZUNhbGxG
cmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHByb2Zp
bGVkQmxvY2spOyAvLyBPT1BTOiBBc3NlcnQgaXQncyBhIExPTCwgQmFzZWxpbmUsIG9yIExMSW50
IENCLgogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+
bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNl
dCA6IDApICsgbV9jYWxsZXItPm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+c2V0U3RhY2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0
KCkgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBD
b21tb25EYXRhOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29ucwogICAgICAgICAgICAgICAgICAgICB0
cmFja2VkUmVmZXJlbmNlcy5jaGVjayhyZWNvdmVyeS5jb25zdGFudCgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQorICAgICAg
ICAgICAgaWYgKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUt
PmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJl
ZmVyZW5jZXMuY2hlY2soYmFzZWxpbmVDb2RlQmxvY2spOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIAogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VSVChjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChKSVRDb2RlOjpp
c0Jhc2VsaW5lQ29kZShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkgfHwgY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAg
ICBBU1NFUlQoIXByb2ZpbGVkREZHQ29kZUJsb2NrIHx8IHByb2ZpbGVkREZHQ29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKICAgICAKICAgICBpZiAobG9nQ29tcGlsYXRp
b25DaGFuZ2VzKG1vZGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc4LDcgKzE2NzgsNyBAQCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRoCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmluaXRlbHkgbm9kZXMgYXQgb3RoZXIgZW50cnlw
b2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCiAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Tm9k
ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBhcmd1bWVudE5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
ICAgICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IHByb2ZpbGVkQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAmcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE2ODYsMTIgKzE2ODYsMTIgQEAgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aAogCiAgICAgICAgIC8vIGN1cnJl
bnROb2RlIGlzIG51bGwgd2hlbiB3ZSdyZSBkb2luZyBzcGVjdWxhdGlvbiBjaGVja3MgZm9yIGNo
ZWNrQXJndW1lbnRUeXBlcygpLgogICAgICAgICBpZiAoIWN1cnJlbnROb2RlIHx8IG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyAhPSBjdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljIHx8ICFjdXJyZW50
Tm9kZS0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
ayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAg
ICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBwcm9maWxlZENvZGVCbG9ja0Zvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwogCiAgICAgICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFj
aygqdGhpcykpIHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZTo6ZnJvbUxhenlPcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJu
YXRpdmUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
S2V5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCksIG5vZGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgIH0KQEAg
LTE3MDAsNyArMTcwMCw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1l
dGgKICAgICAgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiAmcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRl
eChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKTsKIAotICAgICAgICAgICAg
aWYgKHByb2ZpbGVkQmxvY2stPmhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpIHsKKyAgICAgICAg
ICAgIGlmIChwcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoQmluYXJ5QXJpdGhQcm9maWxlKiByZXN1bHQgPSBwcm9maWxlZEJs
b2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5ieXRlY29kZUluZGV4KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgICAgICAgICAgIGlmIChVbmFyeUFyaXRoUHJvZmlsZSogcmVzdWx0ID0gcHJvZmls
ZWRCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CisgICAgICAgIHJl
dHVybiBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpOwogICAgIH0KICAgICAKICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlRm9y
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCkBAIC00OTIsMTMgKzQ5MiwyMCBAQCBwdWJs
aWM6CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsKKyAgICAgICAgICAgIHJldHVybiBt
X3Byb2ZpbGVkQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAgICAgICAgcmV0dXJuIGJh
c2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CiAgICAg
fQogICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9y
aWdpbiYgY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9j
a0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9j
ayk7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5l
Q29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2
ZSgpKTsKKyAgICB9CisKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrRm9yKGNvbnN0
IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICBpZiAoYXV0byogaW5saW5l
Q2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CisgICAg
ICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgfQogICAgIAogICAgIGJvb2wgbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCB2b2lkIE9TUkVudHJ5
RGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiBTVVBQUkVTU19BU0FOCiB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENv
ZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwog
ICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB2b2lkIE9TUkV4aXRCYXNlOjpjb25zaWRlckFk
ZGluZ0FzRnJlcXVlCiB7CiAgICAgQ29kZUJsb2NrKiBzb3VyY2VQcm9maWxlZENvZGVCbG9jayA9
CiAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2so
Ci0gICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxv
Y2spOworICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29k
ZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOwogICAgIGlmIChzb3VyY2VQcm9maWxlZENv
ZGVCbG9jaykgewogICAgICAgICBFeGl0aW5nSW5saW5lS2luZCBpbmxpbmVLaW5kOwogICAgICAg
ICBpZiAobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuaW5saW5lQ2FsbEZyYW1lKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcg
Kzc5LDcgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZQogICAgICAg
ICAgICAgaml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6
Tm9uWmVybywKICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVz
cygKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPmFkZHJlc3NPZkRpZFRyeVRvRW50ZXJJbkxvb3AoKSkpKTsK
KyAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+YWRkcmVzc09mRGlkVHJ5VG9FbnRlckluTG9vcCgpKSkp
OwogICAgIH0KICAgICAKICAgICBqaXQubW92ZSgKQEAgLTM4NCw4ICszODQsNyBAQCB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZXMpIHsKICAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICpp
bmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKLSAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoCi0gICAgICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihi
YXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICAgICAgICAgIG9zcldyaXRlQmFycmllcih2bSwgaml0
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQzLDcgKzIwNDMsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ3JlYXRlCiAgICAgCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2s7CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpOwogICAgIGVsc2UKICAgICAgICAgY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKICAgICAKQEAgLTM1NzUsMzcgKzM1NzUsMzcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkxpbmtEaQogICAgIGxpbmtEaXJlY3RGb3IoY2FsbEZyYW1lLCAqY2FsbExp
bmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uVHJpZ2dlclJlb3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrLCBPU1JFeGl0QmFzZSogZXhp
dCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlclJlb3B0aW1pemF0
aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiAsIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2Nr
LCBPU1JFeGl0QmFzZSogZXhpdCkpIC8vIE9PUFM6IHJlbW92ZSBhcmcKIHsKICAgICAvLyBJdCdz
IHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdh
eXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKGNvZGVCbG9jay0+dm0oKS5oZWFwKTsKLSAgICAKLSAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0oY29kZUJsb2NrLT52bSgpKTsKKyAgICBDb2RlQmxvY2sqIGxv
bE9yQmFzZWxpbmVDb2RlQmxvY2sgPSBvcHRpbWl6ZWRDb2RlQmxvY2stPmxvbE9yQmFzZWxpbmVB
bHRlcm5hdGl2ZSgpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBsb2xPckJh
c2VsaW5lQ29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgRGVmZXJHQ0ZvckFX
aGlsZSBkZWZlckdDKGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBz
YW5pdGl6ZVN0YWNrRm9yVk0obG9sT3JCYXNlbGluZUNvZGVCbG9jay0+dm0oKSk7CiAKLSAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpjb2RlQmxvY2ssICI6IEVudGVyZWQg
cmVvcHRpbWl6ZSIpOwotICAgIC8vIFdlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJhc2VsaW5l
IGNvZGUgYmxvY2suCi0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9j
ay0+aml0VHlwZSgpKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAq
bG9sT3JCYXNlbGluZUNvZGVCbG9jaywgIjogRW50ZXJlZCByZW9wdGltaXplIik7CiAKICAgICAv
LyBJZiBJIGFtIG15IG93biByZXBsYWNlbWVudCwgdGhlbiByZW9wdGltaXphdGlvbiBoYXMgYWxy
ZWFkeSBiZWVuIHRyaWdnZXJlZC4KICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaW4gcmVjdXJzaXZl
IGZ1bmN0aW9ucy4KICAgICAvLwogICAgIC8vIE5vdGUgdGhhdCBldmVuIGlmIG9wdGltaXplZENv
ZGVCbG9jayBpcyBhbiBGVExGb3JPU1JFbnRyeSBzdHlsZSBDb2RlQmxvY2ssIHRoaXMgY29uZGl0
aW9uIGlzIGEKICAgICAvLyBzdXJlIGJldCB0aGF0IHdlIGRvbid0IGhhdmUgYW55dGhpbmcgZWxz
ZSBsZWZ0IHRvIGRvLgotICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCk7Ci0gICAgaWYgKCFyZXBsYWNlbWVudCB8fCByZXBsYWNlbWVudCA9PSBjb2Rl
QmxvY2spIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY29k
ZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpl
dHRpc29uZWQuIik7CisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGJhc2VsaW5lQ29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpOworICAgIGlmICghcmVwbGFjZW1lbnQgfHwgcmVwbGFjZW1lbnQg
PT0gYmFzZWxpbmVDb2RlQmxvY2spIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCAqYmFzZWxpbmVDb2RlQmxvY2ssICI6IE5vdCByZW9wdGltaXppbmcgYmVjYXVz
ZSB3ZSd2ZSBhbHJlYWR5IGJlZW4gamV0dGlzb25lZC4iKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKICAgICAvLyBPdGhlcndpc2UsIHRoZSByZXBsYWNlbWVudCBtdXN0IGJlIG9wdGlt
aXplZCBjb2RlLiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eQogICAgIC8vIHRvIGNoZWNrIG91
ciBsb2dpYy4KLSAgICBBU1NFUlQoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgp
KTsKKyAgICBBU1NFUlQobG9sT3JCYXNlbGluZUNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFj
ZW1lbnQoKSk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRD
b2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAogICAgIGJvb2wgZGlkVHJ5VG9FbnRlckludG9J
bmxpbmVkTG9vcHMgPSBmYWxzZTsKICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gZXhpdC0+bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxs
RnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlu
bGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7Cisg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsKICAgICAgICAgICAgIGRpZFRy
eVRvRW50ZXJJbnRvSW5saW5lZExvb3BzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0zNjE2LDEyICszNjE2LDEyIEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25UcmlnZ2UKICAgICAvLyAyKSBXZSBleGl0ZWQgYW5kIGdvdCBzdHVjayBpbiBhIGxv
b3AsIGFuZCBub3cgd2UncmUgZXhpdGluZyBhZ2Fpbi4KICAgICBib29sIGRpZEV4aXRBQnVuY2gg
PSBvcHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJlb3B0aW1pemVOb3coKTsKICAgICBib29sIGRp
ZEdldFN0dWNrSW5Mb29wID0KLSAgICAgICAgKGNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlv
blRocmVzaG9sZFJlYWNoZWQoKSB8fCBkaWRUcnlUb0VudGVySW50b0lubGluZWRMb29wcykKKyAg
ICAgICAgKGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKCkgfHwgZGlkVHJ5VG9FbnRlckludG9JbmxpbmVkTG9vcHMpCiAgICAgICAgICYm
IG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCk7CiAgICAg
CiAgICAgaWYgKCFkaWRFeGl0QUJ1bmNoICYmICFkaWRHZXRTdHVja0luTG9vcCkgewotICAgICAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpjb2RlQmxvY2ssICI6IE5vdCBy
ZW9wdGltaXppbmcgIiwgKm9wdGltaXplZENvZGVCbG9jaywgIiBiZWNhdXNlIGl0IGVpdGhlciBk
aWRuJ3QgZXhpdCBlbm91Z2ggb3IgZGlkbid0IGxvb3AgZW5vdWdoIGFmdGVyIGV4aXQuIik7Ci0g
ICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKTsKKyAgICAgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqYmFzZWxpbmVDb2RlQmxvY2ssICI6IE5v
dCByZW9wdGltaXppbmcgIiwgKm9wdGltaXplZENvZGVCbG9jaywgIiBiZWNhdXNlIGl0IGVpdGhl
ciBkaWRuJ3QgZXhpdCBlbm91Z2ggb3IgZGlkbid0IGxvb3AgZW5vdWdoIGFmdGVyIGV4aXQuIik7
CisgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMzY2MCw3ICszNjYwLDcgQEAgc3RhdGlj
IHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZQogICAgIFdvcmtsaXN0OjpTdGF0ZSB3
b3JrbGlzdFN0YXRlOwogICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSBleGlzdGluZ0dsb2Jh
bEZUTFdvcmtsaXN0T3JOdWxsKCkpIHsKICAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0
LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKLSAgICAgICAgICAgIHZtLCBDb21waWxhdGlv
bktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKSk7CisgICAgICAgICAg
ICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5sb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUo
KSwgRlRMTW9kZSkpOwogICAgIH0gZWxzZQogICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xp
c3Q6Ok5vdEtub3duOwogICAgIApAQCAtMzY5MCw3ICszNjkwLDcgQEAgc3RhdGljIHZvaWQgdHJp
Z2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZQogICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJs
b2NrLCAidHJpZ2dlckZUTFJlcGxhY2VtZW50IiwgKCkpOwogICAgIC8vIFdlIG5lZWQgdG8gY29t
cGlsZSB0aGUgY29kZS4KICAgICBjb21waWxlKAotICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdS
ZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIEJ5dGVjb2RlSW5kZXgoKSwKKyAgICAg
ICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoY29kZUJsb2NrLT5sb2xPckJhc2VsaW5l
QWx0ZXJuYXRpdmUoKSksIGNvZGVCbG9jaywgRlRMTW9kZSwgQnl0ZWNvZGVJbmRleCgpLAogICAg
ICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4oKSwgVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKIAogICAgIC8vIElmIHdlIHJlYWNoZWQgaGVyZSwgdGhl
IGNvdW50ZXIgaGFzIG5vdCBiZSByZXNldC4gRG8gdGhhdCBub3cuCkBAIC0zNzQ5LDcgKzM3NDks
NyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyCiAgICAgV29ya2xp
c3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CiAgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IGV4
aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKSkgewogICAgICAgICB3b3JrbGlzdFN0YXRl
ID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAotICAgICAgICAgICAgdm0s
IENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTEZvck9TUkVu
dHJ5TW9kZSkpOworICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+bG9s
T3JCYXNlbGluZUFsdGVybmF0aXZlKCksIEZUTEZvck9TUkVudHJ5TW9kZSkpOwogICAgIH0gZWxz
ZQogICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOwogCkBAIC0zNzk3
LDcgKzM3OTcsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyCiAg
ICAgICAgIH0KIAogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5
RlRMQ29tcGlsZSIsICgiT1NSIGVudHJ5IGZhaWxlZCB0b28gbWFueSB0aW1lcyIpKTsKLSAgICAg
ICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlvbigpOwor
ICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5jb3VudFJlb3B0aW1pemF0aW9u
KCk7IC8vIE9PUFM6IFRoaXMgb3IgTE9MIENCPwogICAgICAgICBqaXRDb2RlLT5jbGVhck9TUkVu
dHJ5QmxvY2tBbmRSZXNldFRocmVzaG9sZHMoY29kZUJsb2NrKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfTsKQEAgLTM5MjgsNyArMzkyOCw3IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBD
b21tb24oVk0mIHZtLCBDYWxsRnIKICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVz
dEhhbmRsZVZhbHVlczsKICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCA9IGppdENvZGUtPmJ5dGVj
b2RlSW5kZXhUb1N0cmVhbUluZGV4LmdldChvcmlnaW5CeXRlY29kZUluZGV4KTsKICAgICBqaXRD
b2RlLT5yZWNvbnN0cnVjdChjYWxsRnJhbWUsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihvcmlnaW5C
eXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOwotICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7
CisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVw
bGFjZW1lbnQoY29kZUJsb2NrLT5sb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiAKICAgICBD
T0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExPU1IiLCAoKSk7CiAgICAg
Q29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBjb21waWxlKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNyAr
NTYwLDcgQEAgYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQogICAgIC8vIGNvZGUgdG8gYmUgcmVw
bGFjZWQgZHVyaW5nIGEgY29tcGlsYXRpb24sIGV4Y2VwdCBpZiB3ZSBkZWxldGUgdGhlIHBsYW4s
IGluIHdoaWNoCiAgICAgLy8gY2FzZSB3ZSB3b3VsZG4ndCBiZSBoZXJlLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI3MDcKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCkgIT0gcmVwbGFjZW1lbnQtPmJhc2VsaW5lVmVyc2lvbigpKQor
ICAgIGlmIChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSAhPSByZXBsYWNlbWVudC0+bG9sT3JC
YXNlbGluZUFsdGVybmF0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1f
d2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02
NDQsOCArNjQ0LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tgog
ICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChjb25zdGFudC5nZXQoKSk7CiAK
ICAgICAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1faW5saW5lQ2FsbEZy
YW1lcykgewotICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpKTsKLSAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQo
aW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7
CisgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGlubGluZUNhbGxGcmFtZS0+
bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgYW55IG90aGVyIHJlZmVyZW5jZXMgdGhhdCB3ZSBoYXZlIGFueXdo
ZXJlIGluIHRoZSBKSVRDb2RlIGFyZSBhbHNvCkBAIC02OTMsOCArNjkzLDggQEAgdm9pZCBQbGFu
OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogCiAgICAgaWYgKG1faW5saW5lQ2FsbEZy
YW1lcykgewogICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICptX2lubGluZUNh
bGxGcmFtZXMpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
aW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAgICBB
U1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKKyAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoaW5saW5lQ2FsbEZyYW1lLT5sb2xP
ckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEdldEFyZ3VtZW50U3RhcgogTWFjcm9Bc3NlbWJsZXI6Okp1bXAgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRPU1JFeGl0RnV6ekNoZWNrKCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9T
UkV4aXRGdXp6KCkKLSAgICAgICAgfHwgIWNhblVzZU9TUkV4aXRGdXp6aW5nKG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9vcmlnaW4uc2VtYW50aWMpKQorICAgICAgICB8fCAh
Y2FuVXNlT1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zvciht
X29yaWdpbi5zZW1hbnRpYykpCiAgICAgICAgIHx8ICFkb09TUkV4aXRGdXp6aW5nKCkpCiAgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpOwogICAgIApAQCAtNDQyOCw5ICs0NDI4
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGJvb2wg
bmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2Zp
bGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvblZhbHVlQWRkOwpAQCAtNDUyMCw5ICs0NTIwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1
ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0Lmdy
YXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBD
b2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVC
bG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5
QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAg
IGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAg
ICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwpAQCAtNTEx
Myw5ICs1MTEzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluY09yRGVjKE5vZAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5vZGUpCiB7CiAg
ICAgLy8gRklYTUU6IGFkZCBhIGZhc3QgcGF0aCwgYXQgbGVhc3QgZm9yIEJpZ0ludDMyLCBidXQg
cHJvYmFibHkgYWxzbyBmb3IgSGVhcEJpZ0ludCBoZXJlLgotICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IG1faml0
LmdyYXBoKCkucHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNl
bGluZUNvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxlZENv
ZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OwogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJh
dGlvbkFyaXRoTmVnYXRlOwpAQCAtNTM2OSw5ICs1MzY5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1
ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0Lmdy
YXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBD
b2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVC
bG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5
QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE11bElDKiBt
dWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAg
IGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAg
ICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDYg
QEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAgIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZhcmlh
YmxlczsKICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVuc2lnbmVk
IFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFibGVzID0g
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBzID0gY29k
ZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAgICB9IGVs
c2UgeworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKTsKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxv
Y2stPm51bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3
ICszNTMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFi
aWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5
TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDcgKzU2Nyw3IEBAIHZvaWQgSGVhcDo6cHJvdGVjdChK
U1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNTRVJU
KGspOwotICAgIEFTU0VSVChtX3ZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwor
ICAgIC8vQVNTRVJUKG1fdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7IC8vIE9P
UFMKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxsRnJh
bWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0
c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwot
ICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuazoKLSAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRUeXBl
OjpIb3N0Q2FsbFRodW5rOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5kZXgo
Y29kZUJsb2NrKCktPmppdFR5cGUoKSk7CiB9CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJp
dHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7
CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rOgorICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAg
Y2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEpJ
VFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC03OSw4ICs3MCw2IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVD
b2RlT3JpZ2kKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDU2LDEwICs0NTYsMTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRF
eAogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAg
ICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVySW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhhbmRs
ZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNlCisg
ICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2stPmpp
dFR5cGUoKSkpCiAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Ynl0
ZWNvZGVJbmRleCgpLm9mZnNldCgpOworICAgIGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxl
ckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0dXJu
IGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWly
ZWRIYW5kbGVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
dGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENh
bGwKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNh
bGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hl
ZEludDMyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7Ci0gICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJh
c2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5s
aW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwogICAgICAgICBtX2Zy
YW1lLm1fYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKIAogICAg
ICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUZvckNhbGxG
cmFtZShjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIEV4ZWN1dGFibGVCYXNlKiBBc3NlbWJseUhlbHBlcnM6OmV4ZWN1dGEKICAgICBhdXRvKiBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2Vs
aW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKIH0KIAogQXNzZW1ibHlIZWxwZXJzOjpK
dW1wIEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZGYXN0VHlwZWRBcnJheShHUFJSZWcgYmFzZUdQ
UikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTIgKzMwLDE4IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBo
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJ
VFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJEaXNhbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9y
LmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNs
dWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1NSw4
IEBACiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Np
bXBsZVN0YXRzLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFt
ZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhwciBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTYwLDYgKzY4LDg5MSBAQCBTZWNvbmRzIHRv
dGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNv
bmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKIAordm9pZCBKSVQ6OnN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGF1dG8gc2V0VHlwZSA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZywgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAg
ICBtX2N1cnJlbnRQcmVkaWN0aW9ucy5vcGVyYW5kKHJlZykgPSB0eXBlOworICAgIH07CisKKyAg
ICBhdXRvIHNldERzdFR5cGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUpIHsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RzdCwgdHlwZSk7CisgICAgfTsKKwor
ICAgIGF1dG8gc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUp
IHsKKyAgICAgICAgLy9zZXREc3RUeXBlKGJ5dGVjb2RlLCBwcm9maWxlcy5nZXQoJmJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX3Byb2ZpbGUpKTsKKyAgICAgICAgLy8gV2UgcmFjaWx5
IHJlYWQgdGhpcywgc2luY2UgaXQgc2hvdWxkIG9ubHkgZ3JvdyBpbiB0aGUgdHlwZXMgaXQgcmVw
cmVzZW50cy4KKyAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgIH07CisKKyAgICBhdXRv
IHR5cGVGb3IgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSAtPiBTcGVjdWxhdGVkVHlw
ZSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlvbnMub3BlcmFuZChvcGVyYW5kKTsK
KyAgICB9OworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNh
c2Ugb3BfZ2V0X2FyZ3VtZW50OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShp
bnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY2FsbF9ldmFsOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y2FsbDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ2FsbD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgor
ICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxs
VmFyYXJncz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFy
Z3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxP
cENvbnN0cnVjdFZhcmFyZ3M+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9i
eV92YWxfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9iaXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQml0b3I+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdHhv
cjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Qml0eG9yPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iaXRub3Q6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0YW5kOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2RpcmVjdDoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdG9fdGhpczogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRl
Y29kZS5tX3NyY0RzdCwgbWV0YWRhdGEubV9wcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgc2V0VHlwZShieXRlY29kZS5tX2l0ZXJhdG9yLCBtZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmls
ZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fbmV4dCwgbWV0YWRh
dGEubV9uZXh0UHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNv
ZGUubV9kb25lLCBtZXRhZGF0YS5tX2RvbmVQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV92YWx1ZSwgbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUubV9wcmVk
aWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF9tb3Y6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLCB0eXBlRm9yKGluc3RydWN0
aW9uLT5hczxPcE1vdj4oKS5tX3NyYykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFy
Z3M6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX3RyeV9nZXRfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxl
KGluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2dldF9wcm90b3R5cGVfb2Y6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9m
aWxlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgc2V0RHN0VHlw
ZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19vYmplY3Q6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgICAgIHNldERzdFR5cGVGcm9t
VmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGVG
cm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3RvX251bWVyaWM6CisgICAgICAgIHNldERzdFR5
cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVm
dCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgIGlmICghKGxlZnQgJiYgcmln
aHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byYgcHJvZmlsZSA9IG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxl
LmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShi
eXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAgICAgICAgaWYgKCEh
KGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVjRG91YmxlUHVyZU5h
TikpCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAg
ICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIEJpZ0ludDMyIGJldHRl
cgorICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0Jp
Z0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0
cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24obGVmdCkgfHwgaXNTdHJpbmdPclN0cmluZ09i
amVjdFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBNYXliZSB3ZSBjYW4gZG8gYmV0dGVyIGhlcmUKKyAgICAgICAgc2V0RHN0VHlw
ZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9w
X3N1YjoKKyAgICBjYXNlIG9wX211bDogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoYXV0
byBieXRlY29kZSkgeworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlw
ZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworCisgICAgICAgICAgICBpZiAoIShsZWZ0ICYmIHJp
Z2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworCisgICAgICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9kaXYgfHwgaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25s
eSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVEb3Vi
bGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNw
ZWNCeXRlY29kZURvdWJsZTsKKyAgICAgICAgICAgICAgICBib29sIG1heVByb2R1Y2VOYU5Gcm9t
Tm9uTmFOID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfZGl2OworICAgICAgICAgICAg
ICAgIGlmIChtYXlQcm9kdWNlTmFORnJvbU5vbk5hTiB8fCAhIShsZWZ0ICYgU3BlY0RvdWJsZVB1
cmVOYU4pIHx8ICEhKHJpZ2h0ICYgU3BlY0RvdWJsZVB1cmVOYU4pKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2Fu
IHByb2JhYmx5IGRvIGJldHRlciB3LyBiaWdpbnQzMgorICAgICAgICAgICAgaWYgKGlzQmlnSW50
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
U3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICAgICAgaWYgKCEhKGxlZnQgJiAoU3BlY0JpZ0lu
dCB8IFNwZWNPYmplY3QpKSB8fCAhIShyaWdodCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVjdCkp
KQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjQmlnSW50OworICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3Bfc3ViKQorICAgICAgICAgICAgaGFuZGxlKGluc3Ry
dWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNv
ZGVJRCgpID09IG9wX211bCkKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+YXM8T3BN
dWw+KCkpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9k
aXYpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX21vZDogeworICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xocyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAm
JiByaWdodCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
IC8vIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaWYgd2UgcHJvZmlsZSBleGl0cyBvbiAlIDAKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjRG91Ymxl
UHVyZU5hTik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVy
U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF91bnNpZ25lZDoKKyAgICAg
ICAgLy8gTWF5YmUgYnVpbGQgaW4gc29tZSBraW5kIG9mIGV4aXQgc2l0ZSBmZWVkYmFjayBmb3Ig
c3BlY3VsYXRpbmcgaW50MzIgcmVzdWx0CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVW5zaWduZWQ+KCksIFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGUpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BVcnNoaWZ0PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9w
X25lZ2F0ZTogeworICAgICAgICBhdXRvIGhhbmRsZSA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNyYywgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUpIHsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGlucHV0ID0gdHlwZUZvcihzcmMpOworICAgICAgICAg
ICAgaWYgKCFpbnB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShk
c3QsIHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSA/IFNwZWNBbnlJbnRBc0RvdWJs
ZSA6IFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihpbnB1dCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFNwZWNEb3VibGVSZWFsOworICAgICAg
ICAgICAgICAgIGlmIChpbnB1dCAmIFNwZWNEb3VibGVQdXJlTmFOKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICAgICAgc2V0VHlw
ZShkc3QsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGlucHV0KSkgewor
ICAgICAgICAgICAgICAgIHNldFR5cGUoZHN0LCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQmln
SW50U3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShkc3QsIFNw
ZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0VHlwZShkc3QsIFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwor
ICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9p
bmMpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJbmM+
KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1fc3Jj
RHN0LCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGUpOworICAg
ICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RlYykgeworICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKKyAgICAg
ICAgICAgIGhhbmRsZShieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbmVnYXRlKSB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpOworICAgICAgICAg
ICAgaGFuZGxlKGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX29wZXJhbmQsIGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0KKworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3BvdzogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgaWYgKCEobGVmdCAgJiYg
cmlnaHQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzQmlnSW50U3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNCaWdJbnRTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAg
IHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNl
dERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29k
ZURvdWJsZSB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGNh
c2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgIGF1dG8gaGFuZGxl
ID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSB0eXBlRm9y
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIGF1dG8gcmlnaHQgPSB0eXBlRm9yKGJ5dGVj
b2RlLm1fcmhzKTsKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJlck9yQm9vbGVhblNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzRnVsbE51bWJlck9yQm9vbGVhblNwZWN1bGF0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNJbnQzMk9ubHkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNl
dERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGJ5dGVjb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAg
aWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2xzaGlmdCkKKyAgICAgICAgICAgIGhh
bmRsZShpbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUnNoaWZ0PigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgICAgICBhdXRvIHR5
cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKworICAgICAgICBpZiAoIXR5cGUpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodHlwZSAmIFNwZWNPYmplY3QpIHsKKyAgICAg
ICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNQcmltaXRpdmUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCB0eXBlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBvcF90b19wcm9wZXJ0eV9rZXk6IHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigp
OworICAgICAgICBhdXRvIHR5cGUgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAg
aWYgKCF0eXBlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghKHR5cGUgJiB+KFNw
ZWNTdHJpbmcgfCBTcGVjU3ltYm9sKSkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHN0
VHlwZShieXRlY29kZSwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKyAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9idWZmZXI7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBN
YXliZSB3ZSBzaG91bGQgZG8gYSB0aGluZyB3aGVyZSB3ZSBkb24ndCBtZXJnZSB3LyBibG9ja3Mg
YWZ0ZXIgdGhpcyBpZiB3ZSd2ZSBuZXZlciBleGVjdXRlZCBzbyB0aGV5IGhhdmUgcHJvcGVyIHBy
b2ZpbGluZy4KKyAgICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQgdG8gZXhl
Y3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhyZWFkLgor
ICAgICAgICB9CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICAgICAgc2V0VHlwZShwcm9maWxlLm1f
b3BlcmFuZCwgcHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICB9KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jay0+bnVtVmFycygpKTsg
KytpKQorICAgICAgICAgICAgc2V0VHlwZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgU3Bl
Y090aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKSwgU3BlY0FycmF5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLCBTcGVjQXJyYXkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKSwgU3Bl
Y0FycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLCBTcGVjQXJyYXkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCks
IFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdPYmplY3Q+KCksIFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdl
IGNvdWxkIGRvIGJldHRlciBiYXNlZCBvbiByZXNvbHZlZCB0eXBlIGlmIHdlIHdhbnQKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCksIFNwZWNPYmpl
Y3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCksIFNwZWNGaW5hbE9iamVj
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fYnlfdmFsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgICAgICBzZXREc3RUeXBl
KGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKSwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3RnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9uZXdfZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3RnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3R2VuZXJhdG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCksIFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNGdW5jPigpLCBTcGVjRnVuY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdBc3luY0Z1bmNFeHA+KCksIFNwZWNGdW5j
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJh
dG9yRnVuYz4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKSwgU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVu
dDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52
aXJvbm1lbnQ+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZ2V0X3BhcmVudF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BHZXRQYXJlbnRTY29wZT4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3Bl
cnR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJs
ZV9wcm9wZXJ0eToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVt
ZXJhYmxlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCksIFNwZWNDZWxsKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCks
IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+
YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKSwgU3BlY1N0cmluZyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCksIFNwZWNJbnQzMk9u
bHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0
aW5nX2Z1bmNfZGVjbF9pbl9ldmFsOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCksIFNwZWNCeXRlY29k
ZVRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFyZ3VtZW50
cz4oKSwgU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Y3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlU2NvcGVkQXJndW1lbnRzPigpLCBTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCks
IFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50c19idXR0ZXJmbHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlQXJndW1lbnRzQnV0dGVyZmx5PigpLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXdfcHJvbWlzZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOZXdQcm9taXNlPigpLCBTcGVjUHJvbWlzZU9iamVjdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfY3JlYXRlX2FzeW5jX2dlbmVyYXRvcjoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKSwgU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0ZUdlbmVyYXRvcj4oKSwg
U3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZ2VuZXJh
dG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld0dlbmVyYXRvcj4o
KSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9hcmd1bWVu
dF9jb3VudDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BBcmd1bWVudENv
dW50PigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zcHJl
YWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFkPigpLCBTcGVj
Q2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKSwgU3BlY1JlZ0V4
cE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZXE6CisgICAgICAgIHNldERz
dFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bfc3Ry
aWN0ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfbGVzczoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BMZXNzPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcExlc3NlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2dyZWF0ZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRl
cj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dyZWF0ZXJl
cToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyZXE+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9iZWxvdzoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvdz4oKSwgU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JlbG93ZXE6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2lzX2VtcHR5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcElzRW1wdHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF90eXBlb2ZfaXNfdW5kZWZpbmVkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcFR5cGVvZklzVW5kZWZpbmVkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkX29yX251bGw6CisgICAgICAgIHNldERzdFR5cGUoaW5z
dHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BJc051bWJlcj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2lzX2JpZ19pbnQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SXNCaWdJbnQ+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9p
c19vYmplY3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNf
b2JqZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzT2Jq
ZWN0PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHlwZW9m
X2lzX2Z1bmN0aW9uOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFR5cGVv
ZklzRnVuY3Rpb24+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9pc19jb25zdHJ1Y3RvcjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJ
c0NvbnN0cnVjdG9yPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfZXFfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+
KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXFfbnVsbDoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdG9fc3RyaW5nOgorICAgICAgICBz
ZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9ub3Q6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wTm90PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOworICAgICAgICBTcGVjdWxh
dGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29k
ZS5tX3RvcFByb2ZpbGUpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVj
b2RlLm1fYm90dG9tUHJvZmlsZSk7CisgICAgICAgIHNldFR5cGUoYnl0ZWNvZGUubV9zcmNEc3Qs
IHNwZWN1bGF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bfb3ZlcnJp
ZGVzX2hhc19pbnN0YW5jZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BP
dmVycmlkZXNIYXNJbnN0YW5jZT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2luc3RhbmNlb2ZfY3VzdG9tOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2ZDdXN0b20+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90eXBlb2Y6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
VHlwZW9mPigpLCBTcGVjU3RyaW5nSWRlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2lzX2NlbGxfd2l0aF90eXBlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxP
cElzQ2VsbFdpdGhUeXBlPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfaW5fYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZGVsX2J5
X2lkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCksIFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpLCBTcGVjQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9pc19jYWxsYWJsZToKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0NhbGxhYmxlPigpLCBTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOgorICAg
IGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6Cisg
ICAgY2FzZSBvcF9wdXRfaW50ZXJuYWxfZmllbGQ6CisgICAgY2FzZSBvcF9ub3A6CisgICAgY2Fz
ZSBvcF9zdXBlcl9zYW1wbGVyX2JlZ2luOgorICAgIGNhc2Ugb3Bfc3VwZXJfc2FtcGxlcl9lbmQ6
CisgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6CisgICAgY2FzZSBvcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKKyAgICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgIGNh
c2Ugb3BfdW5yZWFjaGFibGU6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9wX3Rocm93
X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3BfZW5kOgorICAg
IGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6CisgICAgY2FzZSBv
cF9wdXRfc2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5Ogor
ICAgIGNhc2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5OgorICAgIGNhc2Ugb3Bfam5lcV9w
dHI6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pm
YWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAg
IGNhc2Ugb3BfanVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3Bfam51bmRlZmluZWRfb3Jf
bnVsbDoKKyAgICBjYXNlIG9wX2plcToKKyAgICBjYXNlIG9wX2pzdHJpY3RlcToKKyAgICBjYXNl
IG9wX2puZXE6CisgICAgY2FzZSBvcF9qbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfamxlc3M6Cisg
ICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
Z3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6Cisg
ICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNl
IG9wX2piZWxvdzoKKyAgICBjYXNlIG9wX2piZWxvd2VxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50
OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAg
IGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0Ogor
ICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zs
b3c6CisgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKKyAg
ICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lk
OgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRf
Z2V0dGVyX2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBvcF9jcmVhdGVfZ2VuZXJhdG9yX2ZyYW1lX2Vudmlyb25tZW50Ogor
ICAgIGNhc2Ugb3BfeWllbGQ6IAorICAgIGNhc2Ugb3Bfd2lkZTE2OgorICAgIGNhc2Ugb3Bfd2lk
ZTMyOgorICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CisgICAgY2FzZSBs
bGludF9ldmFsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9n
dWU6CisgICAgY2FzZSBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZToKKyAgICBjYXNl
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6CisgICAgY2FzZSBsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6CisgICAgY2FzZSBsbGludF9nZW5lcmljX3JldHVybl9w
b2ludDoKKyAgICBjYXNlIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1
Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJh
bXBvbGluZToKKyAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFt
cG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90
cmFtcG9saW5lOgorICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAg
IGNhc2UgZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX2Nh
bGxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWxfcmV0
dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX3B1dF9ieV92YWxfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0
b3Jfb3Blbl9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVy
bl9sb2NhdGlvbjoKKyAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CisgICAgY2FzZSBs
bGludF9wcm9ncmFtX3Byb2xvZ3VlOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2Fs
bF9pbmRpcmVjdF9ub190bHM6CisgICAgY2FzZSBub3JtYWxfb3NyX2V4aXRfdHJhbXBvbGluZToK
KyAgICBjYXNlIGxsaW50X2dldF9ob3N0X2NhbGxfcmV0dXJuX3ZhbHVlOgorICAgIGNhc2UgbGxp
bnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfc2xvd19yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAg
ICBjYXNlIG9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3Rh
aWxfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xv
d19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfZXZhbF9zbG93X3JldHVybl9sb2NhdGlv
bjoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbDoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfdGFpbF9jYWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Q6Cisg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2l0ZXJhdG9yX29wZW46CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxf
c2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX3Nsb3c6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jYWxsX3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVj
dF92YXJhcmdzX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfZXZhbF9zbG93
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0X3Nsb3c6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW5fc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1w
b2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdW50YWc6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrX3RhZzoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9hcml0eV9jaGVja190YWc6CisgICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2Fz
bV9jYWxsOgorICAgIGNhc2Ugd2FzbV90cmFtcG9saW5lX3dhc21fY2FsbF9ub190bHM6CisgICAg
Y2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJ1blByZWRpY3Rp
b25Qcm9wYWdhdGlvbigpCit7CisgICAgbV9ncmFwaCA9IFdURjo6bWFrZVVuaXF1ZTxCeXRlY29k
ZUdyYXBoPihtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKyAgICBt
X3ByZWRpY3Rpb25zQXRIZWFkLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9wcmVkaWN0aW9uc0F0SGVhZC5zaXplKCk7ICsraSkKKyAgICAgICAg
bV9wcmVkaWN0aW9uc0F0SGVhZFtpXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiht
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCksIDAsIDAsIFNwZWNOb25lKTsKKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5tX2xvY2spOworICAg
ICAgICBtX2NvZGVCbG9jay0+Zm9yRWFjaFZhbHVlUHJvZmlsZShbJl0gKFZhbHVlUHJvZmlsZSYg
cHJvZmlsZSwgYm9vbCkgeworICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNo
Q2F0Y2hQcm9maWxlKGxvY2tlciwgWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXImIGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBwcm9m
aWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmlz
RW50cnlCbG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLT5hdCgwKS5pbmRleCgp
ID09IDApOworCisgICAgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigpOworCisgICAgZm9yIChzaXplX3QgYXJnID0g
MDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gbV9jb2RlQmxvY2st
PnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIG1fcHJlZGljdGlvbnNBdEhl
YWRbMF0uYXJndW1lbnQoYXJnKSA9IHByb2ZpbGUubV9wcmVkaWN0aW9uOworCisgICAgICAgIGlm
ICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJhcmciLCBhcmcsICIgPSAiKTsKKyAg
ICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIG1fcHJlZGljdGlvbnNB
dEhlYWRbMF0uYXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIG1fcHJlZGljdGlvbnNBdEhlYWRbMF0uY2FsbGVlKCkgPSBTcGVj
RnVuY3Rpb247CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgYm9vbCBjb21wdXRlVXNlQ291bnRz
ID0gdHJ1ZTsKKyAgICBtX3VzZUNvdW50cy5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICBk
byB7CisgICAgICAgIC8vIE9PUFM6IEF0IGxlYXN0IGRvIERGUy4gTWF5YmUgcmV2ZXJzZSBwb3N0
IG9yZGVyLgorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpbXBhY3Qgb2YgaG93IHdlIHRyYXZl
cnNlIGdyYXBoIG9uIGFsZ29yaXRobSdzIHJlc3VsdHMuCisgICAgICAgIC8vIElzIGEgc2ltcGxl
IERGUyBlbm91Z2ggZm9yIHRoZSBieXRlY29kZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZWly
IGlucHV0IG9wZXJhbmQgdHlwZXM/CisgICAgICAgIC8vIE9PUFM6IEhvdyBpcyBjYXRjaCB0cmVh
dGVkIGFzIGEgYmxvY2sgdGhhdCdzIHJlYWNoYWJsZSBpZiB3ZSBkbyBERlMuLi4KKyAgICAgICAg
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sg
OiAqbV9ncmFwaCkgeworICAgICAgICAgICAgbV9jdXJyZW50UHJlZGljdGlvbnMgPSBtX3ByZWRp
Y3Rpb25zQXRIZWFkW2Jsb2NrLmluZGV4KCldOworCisgICAgICAgICAgICBpZiAoY29tcHV0ZVVz
ZUNvdW50cykKKyAgICAgICAgICAgICAgICBtX3VzZUNvdW50c1tibG9jay5pbmRleCgpXSA9IE9w
ZXJhbmRzPHVuc2lnbmVkLCB0cnVlPihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2Nv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5z
aXplKCksIDApOworCisgICAgICAgICAgICBpZiAoIWJsb2NrLmlzRW50cnlCbG9jaygpICYmICFi
bG9jay5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggeyBpICsgYmxvY2subGVhZGVyT2Zmc2V0KCkgfTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXNlQ291bnRzW2Jsb2NrLmluZGV4
KCldLm9wZXJhbmQob3BlcmFuZCkgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3Vy
cmVudEluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgo
bV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChtX2Nv
ZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3Ig
OiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdWNjZXNzb3JP
cGVyYW5kcyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByZWRpY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24oc3VjY2Vz
c29yT3BlcmFuZHNbaV0sIG1fY3VycmVudFByZWRpY3Rpb25zW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGNvbXB1dGVVc2VDb3VudHMgPSBmYWxzZTsKKyAgICB9IHdo
aWxlIChjaGFuZ2VkKTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKKyAg
ICAgICAgbV9ncmFwaC0+ZHVtcChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLCBtX3ByZWRpY3Rpb25zQXRIZWFkKTsKK30KKwogdm9pZCBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbCgKQEAgLTY3LDcgKzk2MCwxMyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJh
dGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK2Jvb2wgSklUOjp1
c2VMT0woKQoreworICAgIG1fY2hlY2tlZFVzZUxPTCA9IHRydWU7CisgICAgcmV0dXJuIG1fdXNl
TE9MOworfQorCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxl
VHlwZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQogICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJl
dGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQpAQCAtNzUsNiArOTc0LDcgQEAgSklUOjpKSVQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9jYW5CZU9wdGltaXplZChm
YWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgICwgbV91
c2VMT0woY29tcGlsZVR5cGUgPT0gQ29tcGlsZVR5cGU6OkxPTCkKIHsKIH0KIApAQCAtMTM3LDEx
ICsxMDM3LDE5IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgICAg
ICArK21fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOyBcCiAgICAgTkVYVF9PUENPREUobmFt
ZSkKIAotI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCisjZGVmaW5lIERFRklORV9TTE9X
X09QKG5hbWUsIGRzdCwgdHlwZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKICAgICAgICAg
aWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAotICAgICAgICAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF8jI25hbWUpOyBcCi0gICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBc
CisgICAgICAgICAgICBtX2NoZWNrZWRVc2VMT0wgPSB0cnVlOyBcCisgICAgICAgICAgICBpZiAo
Z2V0ZW52KCJwcmludFNsb3dDYWxsQ2FzZXMiKSAmJiBhdG9pKGdldGVudigicHJpbnRTbG93Q2Fs
bENhc2VzIikpKSB7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBjYk5hbWU7
IFwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChjYk5hbWUpOyBcCisgICAgICAg
ICAgICAgICAgU3RyaW5nIGtleSA9IGNiTmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3RyaW5n
OjpudW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVzW2N1
cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKV07IFwKKyAgICAgICAgICAgICAgICBwcm9iZShb
PV0oUHJvYmU6OkNvbnRleHQmKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgc2xvd0NhbGxDYXNl
UmFuKGtleSk7IFwKKyAgICAgICAgICAgICAgICB9KTsgXAorICAgICAgICAgICAgfSBcCisgICAg
ICAgICAgICBlbWl0U2xvd09wKHNsb3dfcGF0aF8jI25hbWUsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
ZHN0LCB0eXBlKTsgXAogICAgICAgICB9IFwKICAgICAgICAgTkVYVF9PUENPREVfSU5fTUFJTihv
cF8jI25hbWUpOyBcCiAgICAgfQpAQCAtMTU2LDI2ICsxMDY0LDQ2IEBAIHZvaWQgSklUOjphc3Nl
cnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9PUChuYW1l
KSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlcik7IFwKKyAgICAgICAgZW1pdFNsb3dfIyNuYW1lKGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd0Nhc2UpOyBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCiAgICAg
fQogCiAjZGVmaW5lIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5hbWUpIFwKICAgICBjYXNlIG9w
XyMjbmFtZTogeyBcCi0gICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBzbG93X3BhdGhfIyNuYW1lKTsgXAorICAgICAgICBlbWl0U2xvd0Nhc2VDYWxsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKKyAgICAgICAgaWYgKHVzZUxP
TCgpICYmIHNsb3dDYXNlLnJlc3VsdCkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
bG93Q2FzZS5yZXN1bHQuaXNHUFIoKSk7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNs
b3dDYXNlLmRzdC5pc1ZhbGlkKCkpOyBcCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsgXAorICAgICAgICB9IFwK
ICAgICAgICAgTkVYVF9PUENPREUob3BfIyNuYW1lKTsgXAogICAgIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgU2xvd1BhdGhGdW5jdGlvbiBzdHVi
KQordm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd1BhdGhGdW5jdGlvbiBzdHViKQogewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc3R1Yik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAorc3Rh
dGljIHZvaWQgc2xvd0NhbGxDYXNlUmFuKFN0cmluZyBrZXkpCit7CisgICAgc3RhdGljIExhenlO
ZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgdWludDY0X3Q+PiBzbG93Q2FzZXM7CisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtl
eSwgW10geworICAgICAgICBzbG93Q2FzZXMuY29uc3RydWN0KCk7CisgICAgfSk7CisKKyAgICBh
dXRvJiBtYXAgPSBzbG93Q2FzZXMuZ2V0KCk7CisgICAgdWludDY0X3QgdmFsdWUgPSArK21hcC5h
ZGQoa2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCh2YWx1ZSAlIDEwMDApID09IDAp
CisgICAgICAgIGRhdGFMb2dMbihrZXksICI6ICIsIHZhbHVlKTsKK30KKwogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgcnVu
UHJlZGljdGlvblByb3BhZ2F0aW9uKCk7CisKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAg
IApAQCAtMjMxLDE2ICsxMTU5LDg1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7Ci0gICAg
Zm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAgICAgdW5zaWduZWQgcHJldmlv
dXNTbG93Q2FzZXNTaXplID0gbV9zbG93Q2FzZXMuc2l6ZSgpOwotICAgICAgICBpZiAobV9ieXRl
Y29kZUluZGV4ID09IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBzdGFydEJ5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBwcm92ZW4gYWxsIGJ5dGVjb2RlIGlu
c3RydWN0aW9ucyB1cCB1bnRpbCBoZXJlIGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8v
IExldCdzIGVuc3VyZSB0aGF0IGJ5IGNyYXNoaW5nIGlmIGl0J3MgZXZlciBoaXQuCi0gICAgICAg
ICAgICBicmVha3BvaW50KCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2sgPSBudWxscHRyOworICAgICAgICAvLyBPT1BTCisKKyAgICAgICAgbV9zdGF0ZUF0
RW5kLnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgICAgICBtX3ByZWRlY2Vzc29ycy5yZXNp
emUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBibG9jayA6ICptX2dyYXBo
KSB7CisgICAgICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJsb2NrKCkgfHwgYmxvY2suaXNFeGl0
QmxvY2soKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoYXV0
byBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAg
IGlmICghbV9wcmVkZWNlc3NvcnNbc3VjY2Vzc29ySW5kZXhdLmNvbnRhaW5zKGJsb2NrLmluZGV4
KCkpKQorICAgICAgICAgICAgICAgICAgICBtX3ByZWRlY2Vzc29yc1tzdWNjZXNzb3JJbmRleF0u
YXBwZW5kKGJsb2NrLmluZGV4KCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwo
KSk7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1f
dXNlTE9MKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSA+PSAobV9jdXJyZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJy
ZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVu
dEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVu
dEJsb2NrLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0
YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0YXRl
QXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldKTsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZUF0RW5kW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSA9IFdURk1vdmUobV9jdXJyZW50U3Rh
dGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRl
ID0geyB9OworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLT5maW5k
QmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2NrLT5pc0VudHJ5Qmxv
Y2soKSAmJiAhbV9jdXJyZW50QmxvY2stPmlzRXhpdEJsb2NrKCkpOworCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBtX3ByZWRlY2Vz
c29yc1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
c2V0U3RhdGVGcm9tUHJpb3JCbG9ja3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByZWRlY2Vzc29ycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs
UHJlZGVjZXNzb3JzU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgcHJlZGVjZXNzb3IgOiBwcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAgKCFtX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JdKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29yc1NldCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhbGxQcmVkZWNlc3NvcnNTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRTdGF0ZSA9ICptX3N0YXRlQXRFbmRbcHJlZGVjZXNzb3JzLmZpcnN0KCld
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZS5tZXJnZSgqbV9zdGF0ZUF0RW5kW3ByZWRl
Y2Vzc29yXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFzZXRTdGF0ZUZyb21QcmlvckJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbbV9jdXJyZW50
QmxvY2stPmluZGV4KCldOworCisgICAgICAgICAgICAgICAgbV9jdXJyZW50VXNlQ291bnRzID0g
V1RGTW92ZShtX3VzZUNvdW50c1ttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAg
ICAgICAgIG1fc3BpbGxDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1Nsb3dDYXNlc1NpemUgPSBtX3Nsb3dDYXNl
cy5zaXplKCk7CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUlu
ZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKKyAgICAgICAgICAgIC8v
IFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJl
IHVucmVhY2hhYmxlLgorICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hp
bmcgaWYgaXQncyBldmVyIGhpdC4KKyAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFi
ZWwoKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBp
bnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgQVNTRVJUKGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKIApAQCAtMjc4LDQ2ICsxMjc1LDQzIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogI2VuZGlmCiAKKworICAg
ICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUmVnIGFsbG9jIGJlZm9y
ZSBiYyMiLCBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworICAgICAgICAgICAgZHVtcFJlZ2Fs
bG9jU3RhdGUoKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisKICAgICAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwp
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGxlc3MpCi0gICAgICAgIERFRklORV9TTE9XX09QKGxl
c3NlcSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ3JlYXRlcikKLSAgICAgICAgREVGSU5FX1NM
T1dfT1AoZ3JlYXRlcmVxKQotICAgICAgICBERUZJTkVfU0xPV19PUChpc19jYWxsYWJsZSkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IpCi0gICAgICAgIERFRklORV9TTE9X
X09QKHR5cGVvZikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX29iamVjdCkKLSAg
ICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQotICAgICAgICBERUZJTkVf
U0xPV19PUChzdHJjYXQpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSkK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVf
U0xPV19PUChwdXRfYnlfaWRfd2l0aF90aGlzKQotICAgICAgICBERUZJTkVfU0xPV19PUChwdXRf
YnlfdmFsX3dpdGhfdGhpcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AocmVzb2x2ZV9zY29wZV9m
b3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCi0gICAgICAgIERFRklORV9TTE9XX09QKGRl
ZmluZV9kYXRhX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNz
b3JfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlKQotICAgICAg
ICBERUZJTkVfU0xPV19PUCh0aHJvd19zdGF0aWNfZXJyb3IpCi0gICAgICAgIERFRklORV9TTE9X
X09QKG5ld19hcnJheV93aXRoX3NwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2Fy
cmF5X2J1ZmZlcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJv
cGVydHlfZW51bWVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5n
KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19P
UChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX3Jlc3QpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3Jl
YXRlX2dlbmVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FzeW5jX2dlbmVy
YXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2dlbmVyYXRvcikKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AocG93KQorICAgICAgICBERUZJTkVfU0xPV19PUChpbl9ieV92YWwsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1AoaXNfY29uc3RydWN0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc0NvbnN0cnVjdG9yPigpLm1fZHN0LCBTcGVjQm9vbGVhbikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1Aoc3RyY2F0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpLm1fZHN0LCBT
cGVjU3RyaW5nKQorICAgICAgICBERUZJTkVfU0xPV19PUChwdXNoX3dpdGhfc2NvcGUsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXNoV2l0aFNjb3BlPigpLm1fZHN0LCBTcGVjT2JqZWN0T3Ro
ZXIpCisgICAgICAgIERFRklORV9TTE9XX09QKGdldF9ieV92YWxfd2l0aF90aGlzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhpcz4oKS5tX2RzdCwgU3BlY0hlYXBUb3Ap
CisgICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRoX3RoaXMsIFZpcnR1YWxSZWdp
c3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocHV0X2J5X3ZhbF93aXRo
X3RoaXMsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigp
Lm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFf
cHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3BlY05v
bmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHVucmVhY2hhYmxlLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgU3BlY05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKHRocm93X3N0YXRpY19lcnJvciwg
VmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdf
YXJyYXlfd2l0aF9zcHJlYWQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhT
cHJlYWQ+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2Fy
cmF5X2J1ZmZlciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpLm1f
ZHN0LCBTcGVjQXJyYXkpCisgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCwgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKS5tX2RzdCwgU3BlY0NlbGxPdGhlcikKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHksIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvciwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKS5tX2RzdCwgU3BlY0NlbGwpCisg
ICAgICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZywgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvSW5kZXhTdHJpbmc+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLm1fZHN0LCBTcGVjRGlyZWN0QXJndW1lbnRzKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cywgY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY1Njb3Bl
ZEFyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25lZF9hcmd1bWVu
dHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCkubV9k
c3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2FyZ3Vt
ZW50c19idXR0ZXJmbHksIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNC
dXR0ZXJmbHk+KCkubV9kc3QsIFNwZWNDZWxsT3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9yZXN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKS5tX2Rz
dCwgU3BlY0FycmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcHJvbWlzZSwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVByb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNl
T2JqZWN0KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfcHJvbWlzZSwgY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCkubV9kc3QsIFNwZWNQcm9taXNlT2JqZWN0KQorICAg
ICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVBc3luY0dlbmVyYXRvcj4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfZ2VuZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3R2VuZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERF
RklORV9TTE9XX09QKHBvdywgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBvdz4oKS5tX2RzdCwg
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKIAogICAgICAgICBERUZJTkVfT1Aob3Bf
YWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0bm90KQpAQCAtMzk4LDcgKzEzOTIsMTEgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3Bf
c3VwZXJfc2FtcGxlcl9iZWdpbikKICAgICAgICAgREVGSU5FX09QKG9wX3N1cGVyX3NhbXBsZXJf
ZW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQorI2lmIENQVShYODZfNjQpCiAgICAg
ICAgIERFRklORV9PUChvcF9tb2QpCisjZWxzZQorICAgICAgICBERUZJTkVfU0xPV19PUChtb2Qs
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCkubV9kc3QsIFNwZWNCeXRlY29kZU51bWJl
ciB8IFNwZWNCaWdJbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX09QKG9wX21vdikKICAgICAg
ICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkKQEAgLTQ3
NCwxMCArMTQ3Miw4NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAgICAgIERF
RklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIAorICAgICAgICBERUZJTkVfT1Ao
b3BfaXNfY2FsbGFibGUpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfZnVuY3Rpb24p
CisgICAgICAgIERFRklORV9PUChvcF90eXBlb2ZfaXNfb2JqZWN0KQorICAgICAgICBERUZJTkVf
T1Aob3BfdHlwZW9mKQorCisgICAgICAgIERFRklORV9PUChvcF9sZXNzKQorICAgICAgICBERUZJ
TkVfT1Aob3BfbGVzc2VxKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcikKKyAgICAgICAg
REVGSU5FX09QKG9wX2dyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoKQorCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfbGV4aWNhbF9lbnZp
cm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXgg
Pj0gc3RhcnRCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fY2hlY2tlZFVzZUxP
TCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIG9wX2NoZWNrX3RyYXBzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGhyb3c6Cisg
ICAgICAgICAgICAgICAgY2FzZSBvcF9qbXA6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9pbnN0
YW5jZW9mX2N1c3RvbToKKyAgICAgICAgICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAgICAgICAg
ICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV92
YWw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgICAgICAgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAgICAgICAgICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9ub3A6CisgICAgICAg
ICAgICAgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2ZpbGU6CisgICAgICAgICAgICAgICAg
Y2FzZSBvcF9wcm9maWxlX3R5cGU6CisgICAgICAgICAgICAgICAgY2FzZSBvcF9kZWJ1ZzoKKyAg
ICAgICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZToKKyAgICAg
ICAgICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgorICAgICAgICAgICAg
ICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiRGlkbid0IGNoZWNrIExPTDogIiwgb3Bjb2RlSUQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jaGVja2VkVXNlTE9MID0gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobV91c2VMT0wpIHsKKyAgICAgICAgICAgIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKTsKKworICAgICAgICAgICAgYXV0byBjb3Vu
dCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCYgY291bnRlciA9IG1fY3VycmVudFVzZUNvdW50cy5vcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICAgICAgICAgIC0tY291bnRlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWNvdW50ZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gT09QUzogRG8gdGhpcyBsYXppbHkgaW4gc2xvdyBwYXRo
IGNyZWF0aW9uL3NwaWxsRm9yQ2FsbAorICAgICAgICAgICAgICAgICAgICAvL21fc3BpbGxDYW5k
aWRhdGVzLmFwcGVuZChvcGVyYW5kKTsKKworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gZ3ByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGdwcik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJl
cihmcHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewor
ICAgICAgICAgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywg
Y3VycmVudEluc3RydWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAg
ICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIs
IGJ5dGVjb2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0K
QEAgLTQ5OCw2ICsxNTcwLDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkK
ICAgICBtX2ptcFRhYmxlLmNsZWFyKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb3dDYXNlUmFuKFN0
cmluZyBrZXkpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmlu
ZywgdWludDY0X3Q+PiBzbG93Q2FzZXM7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VL
ZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBzbG93Q2FzZXMu
Y29uc3RydWN0KCk7CisgICAgfSk7CisKKyAgICBhdXRvJiBtYXAgPSBzbG93Q2FzZXMuZ2V0KCk7
CisgICAgdWludDY0X3QgdmFsdWUgPSArK21hcC5hZGQoa2V5LCAwKS5pdGVyYXRvci0+dmFsdWU7
CisgICAgaWYgKCh2YWx1ZSAlIDEwMDApID09IDApCisgICAgICAgIGRhdGFMb2dMbihrZXksICI6
ICIsIHZhbHVlKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIHsK
ICAgICBtX2dldEJ5SWRJbmRleCA9IDA7CkBAIC01MTYsMTQgKzE2MDIsMjUgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJl
ZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAw
OwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93
Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9i
eXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAgZm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBt
X3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29k
ZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKIAotICAgICAgICBCeXRlY29k
ZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBz
WzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9CeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5
dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0
cigpOworCisgICAgICAgIGlmIChnZXRlbnYoInByaW50U2xvd0Nhc2VzIikgJiYgYXRvaShnZXRl
bnYoInByaW50U2xvd0Nhc2VzIikpKSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBu
YW1lOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobmFtZSk7CisgICAgICAgICAgICBT
dHJpbmcga2V5ID0gbmFtZS50b1N0cmluZygpICsgIiBiYyMiICsgU3RyaW5nOjpudW1iZXIobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKSArICIgIiArIG9wY29kZU5hbWVzW2N1cnJlbnRJbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKV07CisgICAgICAgICAgICBwcm9iZShbPV0oUHJvYmU6OkNvbnRleHQm
KSB7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VSYW4oa2V5KTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJv
ZmlsZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCkBAIC01
ODAsNyArMTY3Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hl
Y2tfdHJhcHMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9u
ZWdhdGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXEpCkBAIC01OTksNiArMTY5
NSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfaXRlcmF0b3JfbmV4dCkKIAorI2lmIENQVShYODZfNjQpCisgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKG1vZCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUCh1bnNpZ25lZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5jKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChkZWMpCkBAIC02MzEsMTkgKzE3MzAsMzQgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AocmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1df
T1AoY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0b19wcm9wZXJ0
eV9rZXkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlzX2NhbGxhYmxlKQorICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfZnVuY3Rpb24pCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZl9pc19vYmplY3QpCisgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKHR5cGVvZikKKworICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChsZXNzKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChsZXNzZXEpCisgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdyZWF0ZXIpCisgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKGdyZWF0ZXJlcSkKKworICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19P
UChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKKwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGZp
cnN0VG8sICIgc2xvdzogIiwgaXRlciAtIG1fc2xvd0Nhc2VzLmJlZ2luKCksICJcbiIpOwotCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVu
ZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRlci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdo
IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8ub2Zmc2V0KCkgPT0gKGl0ZXIgLSAxKS0+dG8ub2Zm
c2V0KCksICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Cisg
ICAgICAgIC8vIE9PUFM6CisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0
ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUby5vZmZzZXQoKSAhPSBpdGVyLT50by5v
ZmZzZXQoKSwgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIp
OworICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgp
ID09IChpdGVyIC0gMSktPnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNs
b3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRy
ZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOwogCisgICAgICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICAgICAgLy8gT09QUzogc29tZSBzbG93IHBhdGhzIGFscmVhZHkgZG8gdGhp
cywgc28gd2Ugc2hvdWxkbid0IHJlcGVhdCBpdC4KKyAgICAgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIH0KKwogICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2Fz
ZTsKICAgICB9CkBAIC02ODgsNiArMTgwMiw4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExp
bmtpbmcoSklUQ29tcGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsg
Ly8gT09QUzogaGVscGZ1bCBmb3IgcnVubmluZyBMT0wgdy9vdXQgREZHLgogICAgIAogICAgIHN3
aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKICAgICBjYXNlIEdsb2JhbENvZGU6CkBA
IC03NzgsNiArMTg5NCw4OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENv
bXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwog
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorICAgIGJvb2wgcHJp
bnRFYWNoT1NSID0gZ2V0ZW52KCJwcmludEVhY2hPU1IiKSAmJiAhIWF0b2koZ2V0ZW52KCJwcmlu
dEVhY2hPU1IiKSk7CisKKyAgICBpZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHkoKSkgeworICAgICAg
ICBKdW1wTGlzdCBleGl0Q29tbW9uOworICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRK
dW1wcykgeworICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5maXJzdDsKKyAg
ICAgICAgICAgIGF1dG8ganVtcHMgPSBleGl0LnNlY29uZDsKKyAgICAgICAgICAgIGp1bXBzLmxp
bmsodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChwcmludEVhY2hPU1IpIHsKKyAgICAgICAgICAg
ICAgICBTdHJpbmdQcmludFN0cmVhbSBwcmludFN0cmVhbTsKKyAgICAgICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+ZHVtcChwcmludFN0cmVhbSk7CisgICAgICAgICAgICAgICAgQ1N0cmluZyBzdHIg
PSBwcmludFN0cmVhbS50b0NTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBzdHIuYnVmZmVyKCkt
PnJlZigpOyAvLyBsZWFrIGl0LgorICAgICAgICAgICAgICAgIHByaW50KHN0ci5kYXRhKCksICIg
LT4gZXhpdCBhdCBiYyMiLCAgYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgIlxuIik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAg
ICAgICAgICAgICAgICBicmVha3BvaW50KCk7IC8vIE9PUFM6IGhhbmRsZSBjaGVja3BvaW50IGV4
aXRzLgorCisgICAgICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgICAg
ICBleGl0Q29tbW9uLmFwcGVuZChqdW1wKCkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJU
KCFleGl0Q29tbW9uLmVtcHR5KCkpOworICAgICAgICBleGl0Q29tbW9uLmxpbmsodGhpcyk7CisK
KworICAgICAgICBzdGF0aWNfYXNzZXJ0KExMSW50OjpSZWdpc3RlcnM6OnBjR1BSID09IHJlZ1Q0
KTsKKyAgICAgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29u
dGFpbnMobnVtYmVyVGFnUmVnaXN0ZXIpKTsgLy8gVGhlIGNvZGUgYmVsb3cgcmVsaWVzIG9uIHRo
aXMgYmVpbmcgYSBjYWxsZWUgc2F2ZS4KKworICAgICAgICBhdXRvIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG1fY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwgbnVtYmVyVGFn
UmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRoZSBMTEludCBQ
QyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG1fdm0sIG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3Jp
dGVCYXJyaWVyKSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFyZ0dQUjAsIE9wZXJh
dGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIsIExMSW50OjpSZWdp
c3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVy
VGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsodGhpcyk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKSwgcmVnVDMpOworICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIocmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigpKSwgcmVnVDIp
OworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsKKyAgICAgICAgc3RvcmUz
MihyZWdUMiwgQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVy
KCkpKTsKKworICAgICAgICBhdXRvIHNraXBKZXR0aXNvbiA9IGJyYW5jaDMyKEJlbG93LCByZWdU
MiwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5leGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGlt
aXphdGlvbigpKSk7CisgICAgICAgIG1vdmUoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIsIG51bWJl
clRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZSB0aGlzIGFyb3VuZCB0aGUgY2FsbCBzaW5jZSB0aGUgTExJ
bnQgUEMgcmVnaXN0ZXIgaXMgYSB0ZW1wLgorICAgICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3cpPihtX2NvZGVCbG9jayk7Cisg
ICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKCptX3ZtKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRyaWdnZXJMT0xS
ZW9wdGltaXphdGlvbk5vdykpLCBub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChub25BcmdHUFIw
LCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBtb3ZlKG51bWJlclRhZ1JlZ2lzdGVyLCBMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Ok51bWJlclRhZyksIG51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgc2tpcEpldHRpc29uLmxp
bmsodGhpcyk7CisgICAgICAgIAorICAgICAgICAvL2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgLy9Bc3NlbWJseUhlbHBlcnM6Okp1bXAgcmVvcHRpbWl6ZU5vdyA9IGppdC5icmFu
Y2gzMigKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVyVGhhbk9yRXF1YWws
CisgICAgICAgIC8vICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpLAorICAgICAgICAvLyAgICBB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPE9TUkV4aXRQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6Om5vcm1hbE9TUkV4
aXRUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCkucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKTsKKyAg
ICAgICAgLy8gT09QUworICAgICAgICAvL2lmIChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkK
KyAgICAgICAgLy8gICAgZGVzdGluYXRpb24gPSBMTEludDo6Y2hlY2twb2ludE9TUkV4aXRUcmFt
cG9saW5lVGh1bmsoKS5jb2RlKCk7CisgICAgICAgIC8vZWxzZSAKKyAgICAgICAgLy8gICAgZGVz
dGluYXRpb24gPSBMTEludDo6bm9ybWFsT1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsK
KyAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPm1l
dGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOworICAg
ICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpOworICAgICAgICBt
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihkZXN0aW5hdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBmYXJKdW1wKEdQUkluZm86OnJl
Z1QyLCBPU1JFeGl0UHRyVGFnKTsKKworCisgICAgICAgIC8vIE9PUFM6IAorICAgICAgICAvLyAx
LiBTdG9yZSBMTEludCBjb2RlYmxvY2sgdG8gY2FsbCBmcmFtZQorICAgICAgICAvLyAyLiBqZXR0
aXNvbiBpZiB3ZSBleGNjZWVkIGV4aXQgY291bnQKKyAgICAgICAgLy8gMy4gd3JpdGUgYmFycmll
ciBMTEludCBjb2RlIGJsb2NrCisgICAgfQorCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMp
OwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQpAQCAtOTY3LDcgKzIxNjUsNyBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVz
dWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcs
Ci0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2Nr
V2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsK
KyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tX
aXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRU
eXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFjaGluZUNvZGVC
eXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAtOTc4LDcgKzIxNzYsNyBAQCBDb21waWxh
dGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQo
bG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwogICAgIH0KICAgICBt
X2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRD
b2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkpOworICAg
ICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywg
dXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpKTsKIAog
ICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5l
cmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4
ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwNzIsNiArMjI3MCw5NTEgQEAg
U2Vjb25kcyBKSVQ6OnRvdGFsQ29tcGlsZVRpbWUoKQogewogICAgIHJldHVybiB0b3RhbEJhc2Vs
aW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90YWxGVExDb21waWxlVGlt
ZTsKIH0KK3ZvaWQgSklUOjpzcGVjdWxhdGUoRXhpdEtpbmQsIEp1bXAganVtcCkKK3sKKyAgICAv
LyBPT1BTOiBoYW5kbGUgRXhpdEtpbmQuCisgICAgaWYgKCFtX2V4aXRKdW1wcy5zaXplKCkgfHwg
bV9leGl0SnVtcHMubGFzdCgpLmZpcnN0ICE9IG1fYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgbV9l
eGl0SnVtcHMuYXBwZW5kKHsgbV9ieXRlY29kZUluZGV4LCBKdW1wTGlzdCgpIH0pOworICAgIG1f
ZXhpdEp1bXBzLmxhc3QoKS5zZWNvbmQuYXBwZW5kKGp1bXApOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmFuaz4KK1ZlY3RvcjxSZWcsIDMyPiBjb21wdXRlQWxsb3dlZFJlZ3MoKQoreworICAg
IC8vIE9PUFM6IGdldCBhIGJldHRlciBzdG9yeSBoZXJlLiBXaGVuIHdlIGFsbG9jYXRlIGEgZGlm
ZmVyZW50IGNvZGVibG9jayBmb3IgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwg
d2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAv
LyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIFZlY3RvcjxSZWcs
IDMyPiBhbGxvd2VkOworICAgIFJlZ2lzdGVyU2V0IGFsbG93ZWRDYWxsZWVTYXZlcyA9IFJlZ2lz
dGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIFJlZ2lzdGVy
U2V0IGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgeworICAgICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlm
IChhbGxvd2VkQ2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQu
YXBwZW5kKHJlZyk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGF1dG8gcmVnID0gQmFuazo6dG9SZWdp
c3RlcihpKTsKKyAgICAgICAgaWYgKCFhbGxDYWxsZWVTYXZlcy5jb250YWlucyhyZWcpKQorICAg
ICAgICAgICAgYWxsb3dlZC5hcHBlbmQocmVnKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbG93ZWQ7
Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4mIGFsbG93ZWRHUFJzKCkKK3sKKyAgICAvLyBP
T1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVu
dCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8gY29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBw
cm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5hbmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9P
UFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFybS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVn
LCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAg
IHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93ZWRSZWdzPEdQUkluZm8+KCkpOworICAgIH0p
OworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVnLCAzMj4m
IGFsbG93ZWRGUFJzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3RvcnkgaGVyZS4g
V2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yICB0aGlzCisgICAgLy8g
Y29tcGlsZSBpbiB0aGUgZnV0dXJlLCB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIHNoZW5h
bmlnYW5zIGxpa2UgdGhpcworICAgIC8vIE9PUFM6IFRoaXMgaXMgc29ydGEgaG9rZXkgZm9yIGFy
bS4uLgorCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxWZWN0b3I8UmVnLCAzMj4+IHJlc3VsdDsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHJlc3VsdC5jb25zdHJ1Y3QoY29tcHV0ZUFsbG93
ZWRSZWdzPEZQUkluZm8+KCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9
CisKK3ZvaWQgSklUOjphc3NlcnROb1Nsb3dQYXRoKCkKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGJy
ZWFrcyBjdXJyZW50bHkgdy8gd3JpdGVCYXJyaWVyLiBCdXQgZ2VuZXJhbGx5IHNlZW1zIGxpa2Ug
YSBuaWNlIGFzc2VydC4gTWF5YmUgd2UgY2FuIGZpZ3VyZSBzb21ldGhpbmcgb3V0Li4uCisKKyAg
ICAvL2lmIChtX3Nsb3dDYXNlcy5zaXplKCkgJiYgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2Rl
SW5kZXggPT0gbV9ieXRlY29kZUluZGV4KQorICAgIC8vICAgIENSQVNIKCk7Cit9CisKK0dQUlJl
ZyBKSVQ6OmFsbG9jYXRlR1BSKEdQUlJlZyBoaW50KQoreworICAgIGFzc2VydE5vU2xvd1BhdGgo
KTsKKworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgZm9yIChSZWcg
cmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSBoaW50
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byYgcmVnVmFsdWUg
PSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2Nh
dGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxv
Y2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgYXV0
byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVl
LmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVnLmdwcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7
CisgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNB
bGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0ZQUlJl
ZyBKSVQ6OmFsbG9jYXRlRlBSKCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAv
LyBPT1BTOiBmaXggZHVwbGljYXRpb24gdy8gYWxsb2NhdGVHUFIoKQorICAgIGZvciAoUmVnIHJl
ZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdW
YWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAg
ICAgICByZWdWYWx1ZS5pc0FsbG9jYXRlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVn
LmZwcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQ
UnMoKSkgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7Cisg
ICAgICAgIGlmICghcmVnVmFsdWUubG9ja0NvdW50KSB7CisgICAgICAgICAgICBjbG9iYmVySW1w
bChyZWcpOworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjbG9iYmVySW1wbChSZWcgcmVn
KQoreworICAgIC8vIE9PUFM6IGFkZCBzb21lIGNvbnNpc3RlbmN5IHZhbGlkYXRpb24gaGVyZSB0
aGF0IGJvdGggc2lkZXMgb2YgdGhlIG1hcCBhZ3JlZS4KKworICAgIGF1dG8mIHJlZ1ZhbHVlID0g
dGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBpZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQpIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSByZWdWYWx1ZS5vcGVyYW5kOworICAgICAg
ICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkK
KyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5ncHIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jZWRSZWdG
b3JPcGVyYW5kKG9wZXJhbmQpLmZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gV2UgY2FuJ3QganVzdCBjbGVhciB0aGUgaXNBbGxvY2F0ZWQvbG9ja0NvdW50IHZhbHVl
cyBiZWNhdXNlIHdlIG1pZ2h0CisgICAgICAgIC8vIGhhdmUgY29kZSB0aGF0IGRvZXM6CisgICAg
ICAgIC8vIC0gVmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8gLSBzcGlsbEZvckNhbGwKKyAgICAg
ICAgLy8gLSB+VmFsdWVPcGVyYW5kKCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIHdoZW4g
d2UgZGVhbGxvY2F0ZSBzb21ldGhpbmcgbGlrZSB0aGUgVmFsdWVPcGVyYW5kLCB3ZSB3aWxsIGVu
ZCB1cCBmdWxseQorICAgICAgICAvLyBkZWFsbG9jYXRpbmcgdGhlIHJlZ2lzdGVyLCBlc3NlbnRp
YWxseSBkZWdyYWRpbmcgaXQgaW50byBhIHRlbXAuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2hl
biB+VmFsdWVPcGVyYW5kKCkgcnVucyBhbmQgY2FsbHMgdW5sb2NrKCksIHdlJ2QgZW5kIHVwIGlu
CisgICAgICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICAgICAgcmVnVmFsdWUub3Bl
cmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gZmFsc2U7CisgICAgfQorCit9
CisKK3ZvaWQgSklUOjpzcGlsbEZvckNhbGxJbXBsKCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxs
ZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgYXV0byBk
b0Nsb2JiZXIgPSBbJl0gKGF1dG8gc2V0KSB7CisgICAgICAgIGZvciAoYXV0byByZWcgOiBzZXQp
IHsKKyAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAg
ICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGRvQ2xv
YmJlcihhbGxvd2VkR1BScygpKTsKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEZQUnMoKSk7Cit9CisK
K1NhdmVQbGFuIEpJVDo6c2xvd1BhdGhTYXZlUGxhbigpCit7CisgICAgLy8gT09QUzogdGhpcyBj
b3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTYXZlUGxhbiByZXN1bHQ7CisgICAgYXV0byBhcHBl
bmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRo
aXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCAmJiBy
ZWdWYWx1ZS5vcGVyYW5kLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Rk
OjptYWtlX3R1cGxlKHJlZywgcmVnVmFsdWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdWYWx1ZS5v
cGVyYW5kKSkpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKQor
ICAgICAgICBhcHBlbmRJZk5lZWRlZChyZWcpOworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRH
UFJzKCkpCisgICAgICAgIGFwcGVuZElmTmVlZGVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitTaWxlbnRTcGlsbFJlY29yZCBKSVQ6OnNpbGVudFNwaWxsQmVmb3JlQ2FsbChHUFJS
ZWcgdG9JZ25vcmUsIEZQUlJlZyB0b0lnbm9yZUZQUikKK3sKKyAgICAvLyBPT1BTOiB0aGlzIGNv
dWxkIGJlIGEgbG90IGZhc3RlcgorICAgIFNpbGVudFNwaWxsUmVjb3JkIHJlc3VsdDsKKyAgICBT
YXZlUGxhbiBzYXZlUGxhbjsKKyAgICBhdXRvIGFwcGVuZElmTmVlZGVkID0gWyZdIChSZWcgcmVn
KSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBpZiAocmVnVmFsdWUu
b3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnNhdmVQbGFuLmFwcGVu
ZChzdGQ6Om1ha2VfdHVwbGUocmVnLCByZWdWYWx1ZS5vcGVyYW5kLCBwcm92ZW5UeXBlKHJlZ1Zh
bHVlLm9wZXJhbmQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0
LnNwaWxsZWRSZWdpc3RlcnMuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkgeworICAgICAgICBpZiAocmVnLmZwcigpICE9IHRv
SWdub3JlRlBSKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9CisgICAg
Zm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkgeworICAgICAgICBpZiAocmVnLmdwcigpICE9
IHRvSWdub3JlKQorICAgICAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsKKyAgICB9CisKKyAg
ICByZXN1bHQuc3RhY2tTaXplRm9yU3BpbGwgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnBy
ZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKnRoaXMsIHJlc3VsdC5zcGlsbGVkUmVnaXN0
ZXJzLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6c2lsZW50RmlsbEFm
dGVyQ2FsbChjb25zdCBTaWxlbnRTcGlsbFJlY29yZCYgcmVjb3JkKQoreworICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKnRoaXMs
IHJlY29yZC5zcGlsbGVkUmVnaXN0ZXJzLCB7IH0sIHJlY29yZC5zdGFja1NpemVGb3JTcGlsbCwg
MCk7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCksIHJl
Y29yZC5zYXZlUGxhbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvYWRDb3VudCh1aW50NjRfdCBj
b3VudCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICBmb3IgKHVpbnQ2NF90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlm
IChjb3VudGVyICUgMTAwMDAgPT0gMCkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUnVudGltZSBs
b2FkIGNvdW50OiAiLCBjb3VudGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpyZXN0b3JlRnJv
bVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmRUb0lnbm9y
ZSwgY29uc3QgU2F2ZVBsYW4mIHNhdmVQbGFuKQoreworICAgIHVpbnQ2NF90IGxvYWRDb3VudCA9
IDA7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IHNhdmVQbGFuKSB7CisgICAgICAgIFJlZyByZWcg
PSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
c3RkOjpnZXQ8MT4odHVwbGUpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5UeXBlID0g
c3RkOjpnZXQ8Mj4odHVwbGUpOworCisgICAgICAgIGlmIChyZWcgPT0gcmVnVG9JZ25vcmUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gb3BlcmFuZFRvSWdu
b3JlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCByZWcuZ3ByKCkpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNGUFIoKSk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHNjcmF0Y2hSZWdpc3RlcigpOworICAgICAgICAgICAgQVNT
RVJUKCFhbGxvd2VkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIERpc2Fs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxvd1NjcmF0Y2goKnRoaXMpOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAgICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKSkKKyAgICAg
ICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJ
bnQzMihKU1ZhbHVlUmVncyB7IHNjcmF0Y2ggfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAg
ICAgICAgICAgICB1bmJveERvdWJsZShzY3JhdGNoLCBzY3JhdGNoLCByZWcuZnByKCkpOworICAg
ICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAgICAgICAgIGlzSW50
MzIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3Jh
dGNoLCByZWcuZnByKCkpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytsb2FkQ291bnQ7CisgICAgfQorCisg
ICAgaWYgKGZhbHNlICYmIGxvYWRDb3VudCkgeworICAgICAgICBwcm9iZShbPV0gKFByb2JlOjpD
b250ZXh0JikgeworICAgICAgICAgICAgYWRkTG9hZENvdW50KGxvYWRDb3VudCk7CisgICAgICAg
IH0pOworICAgIH0KK30KKwordm9pZCBKSVQ6OnJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihj
b25zdCBTbG93Q2FzZSYgc2xvd0Nhc2UpCit7CisgICAgcmVzdG9yZUZyb21TYXZlUGxhbihzbG93
Q2FzZS5yZXN1bHQsIHNsb3dDYXNlLmRzdCwgc2xvd0Nhc2Uuc2F2ZVBsYW4pOworfQorCit2b2lk
IEpJVDo6c2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7Cisg
ICAgLy8gT09QUzogQWRkIGRlYnVnIGFzc2VydCB0b3AgYml0cyBhcmUgemVyb2QKKworICAgIFJF
TEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdwcikuaXNBbGxvY2F0ZWQpOworICAgIGJveEludDMyKGdw
ciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChn
cHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgd2lsbERlZihvcGVyYW5kKTsKKyAgICBh
c3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpID0gU3BlY0lu
dDMyT25seTsKK30KKwordm9pZCBKSVQ6OnNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgRlBSUmVnIGZwcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShmcHIpLmlzQWxs
b2NhdGVkKTsKKyAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgIEdQUlJlZyBncHIgPSB0
ZW1wLmdwcigpOworCisgICAgYm94RG91YmxlKGZwciwgSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycyk7CisgICAgc3RvcmU2NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOwor
CisgICAgd2lsbERlZihvcGVyYW5kKTsgLy8gT09QUzogVmFsaWRhdGUgdGhhdCBmb3IgYnl0ZWNv
ZGVzICgvY2hlY2twb2ludHM/KSB0aGF0IGRlZiwgd2lsbERlZiB3YXMgY2FsbGVkLgorICAgIGFz
c2lnblJlZyhncHIsIG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhmcHIsIG9wZXJhbmQpOworCisg
ICAgcHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNCeXRlY29kZURvdWJsZTsKK30KKwordm9pZCBK
SVQ6OnNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyBncHIpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUoZ3ByKS5pc0FsbG9jYXRlZCk7CisgICAgc3RvcmU2
NChncHIsIGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAg
YXNzaWduUmVnKGdwciwgb3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpsb2NrKFJlZyByZWcpCit7
CisgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKTsKKyAgICArK3JlZ1ZhbHVlLmxvY2tDb3VudDsK
K30KKwordm9pZCBKSVQ6OnVubG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0g
dGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9j
YXRlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVnVmFsdWUubG9ja0NvdW50KTsKKyAgICAtLXJl
Z1ZhbHVlLmxvY2tDb3VudDsKKyAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCAmJiAhcmVnVmFs
dWUub3BlcmFuZC5pc1ZhbGlkKCkpCisgICAgICAgIHJlZ1ZhbHVlID0geyB9OworfQorCitKSVQ6
OkdQUlRlbXA6OkdQUlRlbXAoSklUJiBqaXQsIEdQUlJlZyBoaW50KQorICAgIDogbV9qaXQoaml0
KQoreworICAgIGlmIChoaW50ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcihoaW50KTsK
K30KKworR1BSUmVnIEpJVDo6R1BSVGVtcDo6Z3ByKEdQUlJlZyBoaW50KQoreworICAgIGlmICht
X2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2pp
dC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKGhp
bnQpOworICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgcmV0dXJuIG1fZ3ByOworfQorCitK
SVQ6OkdQUlRlbXA6On5HUFJUZW1wKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitKSVQ6OkZQUlRl
bXA6OkZQUlRlbXAoSklUJiBqaXQpCisgICAgOiBtX2ppdChqaXQpCit7Cit9CisKK0ZQUlJlZyBK
SVQ6OkZQUlRlbXA6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisg
ICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKwor
ICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVGUFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsK
KworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpGUFJUZW1wOjp+RlBSVGVtcCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQudW5s
b2NrKG1fZnByKTsKK30KKworSklUOjpJbnQzMk9wZXJhbmQ6OkludDMyT3BlcmFuZChKSVQmIGpp
dCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7
Cit9CisKK0pJVDo6SW50MzJPcGVyYW5kOjp+SW50MzJPcGVyYW5kKCkKK3sKKyAgICBtX2ppdC51
bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMk9wZXJhbmQ6OmdwcigpCit7Cisg
ICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKwor
ICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2ppdC5n
cHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5h
bGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3Bl
cmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFuZCk7
CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAoIWlzSW50MzJTcGVj
dWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVj
dWxhdGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihtX2dwcikpOworCisgICAgbV9q
aXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNJbnQzMk9ubHkpOworICAgIHJldHVybiBtX2dw
cjsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6
OkNlbGxPcGVyYW5kOjp+Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7
Cit9CisKK0dQUlJlZyBKSVQ6OkNlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3Nl
cnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZCht
X29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIg
PSByZWc7CisgICAgZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsK
KyAgICAgICAgbV9qaXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsK
KyAgICAgICAgbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpID0gbV9ncHI7CisgICAgICAg
IG1faml0LnJlZ1ZhbHVlKG1fZ3ByKS5vcGVyYW5kID0gbV9vcGVyYW5kOworICAgIH0KKworICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwg
bV9qaXQuYnJhbmNoSWZOb3RDZWxsKG1fZ3ByLCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisKKyAgICBt
X2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1f
Z3ByOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjpOb3RDZWxsT3BlcmFuZChKSVQmIGppdCwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJh
bmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29w
ZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9
CisKK0pJVDo6Tm90Q2VsbE9wZXJhbmQ6On5Ob3RDZWxsT3BlcmFuZCgpCit7CisgICAgbV9qaXQu
dW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6Tm90Q2VsbE9wZXJhbmQ6OmdwcigpCit7
CisgICAgaWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsK
KworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBtX2dwciA9IHJlZzsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2pp
dC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1f
b3BlcmFuZCwgbV9ncHIpOworICAgICAgICBtX2ppdC5hc3NpZ25SZWcobV9ncHIsIG1fb3BlcmFu
ZCk7CisgICAgfQorCisgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICBpZiAobV9qaXQucHJv
dmVuVHlwZShtX29wZXJhbmQpICYgU3BlY0NlbGxDaGVjaykKKyAgICAgICAgbV9qaXQuc3BlY3Vs
YXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmQ2VsbChtX2dwciwgSGF2ZVRhZ1JlZ2lzdGVycykp
OworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIH5TcGVjQ2VsbENoZWNrKTsKKyAg
ICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6VmFsdWVPcGVyYW5kOjpWYWx1ZU9wZXJhbmQoSklU
JiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwg
bV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJh
bmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdw
cigpOworfQorCitKSVQ6OlZhbHVlT3BlcmFuZDo6flZhbHVlT3BlcmFuZCgpCit7CisgICAgbV9q
aXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJVDo6VmFsdWVPcGVyYW5kOjpncHIoKQor
eworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7
CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9q
aXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICBtX2dwciA9IHJlZzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2dwciA9
IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobV9vcGVyYW5kLCBtX2dwcik7CisKKyAgICAgICAgbV9qaXQuYXNzaWduUmVnKG1fZ3ByLCBt
X29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIHJldHVybiBt
X2dwcjsKK30KKworSklUOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKEpJVCYgaml0LCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQoreworICAgIEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3Bl
cmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30K
KworSklUOjpEb3VibGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5s
b2NrKG1fZnByKTsKK30KKworRlBSUmVnIEpJVDo6RG91YmxlT3BlcmFuZDo6ZnByKCkKK3sKKyAg
ICBpZiAobV9mcHIgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisg
ICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVn
ID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IElu
dmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9q
aXQubG9jayhtX2Zwcik7CisgICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9
OworICAgIEdQUlRlbXAgdGVtcCB7IG1faml0IH07CisgICAgR1BSUmVnIGdwciA9IHZhbHVlT3Bl
cmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBtX2Zw
ciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICBp
ZiAoIWlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFu
ZCkpKSB7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZklu
dDMyKEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9q
aXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQz
MihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0
LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgIH0KKworICAg
IG1faml0LnVuYm94RG91YmxlKGdwciwgdGVtcEdQUiwgbV9mcHIpOworICAgIG1faml0LmFzc2ln
blJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKworICAgIHJldHVybiBtX2ZwcjsKK30KKworSklUOjpO
dW1iZXJPcGVyYW5kOjpOdW1iZXJPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAg
IEZQUlJlZyByZWcgPSBtX2ppdC5mcHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJl
ZyAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICBmcHIoKTsKK30KKworSklUOjpOdW1iZXJPcGVy
YW5kOjp+TnVtYmVyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZnByKTsKK30KKwor
RlBSUmVnIEpJVDo6TnVtYmVyT3BlcmFuZDo6ZnByKCkKK3sKKyAgICBpZiAobV9mcHIgIT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIG1fZnByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9T
bG93UGF0aCgpOworCisgICAgeworICAgICAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgICAgICBpZiAocmVnICE9IEludmFsaWRGUFJSZWcpIHsKKyAg
ICAgICAgICAgIG1fZnByID0gcmVnOworICAgICAgICAgICAgbV9qaXQubG9jayhtX2Zwcik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZU9w
ZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1fb3BlcmFuZCB9OworICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgIG1fZnByID0gbV9qaXQuYWxsb2NhdGVG
UFIoKTsKKyAgICBtX2ppdC5sb2NrKG1fZnByKTsKKworICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuY29udmVydElu
dDMyVG9Eb3VibGUodmFsdWVHUFIsIG1fZnByKTsKKyAgICBlbHNlIGlmIChpc0J5dGVjb2RlRG91
YmxlU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBH
UFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIHRlbXBHUFIsIG1fZnBy
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9OworICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8gaXNJbnQzMiA9IG1f
aml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0
ZXJzKTsKKworICAgICAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihtX2ppdC5w
cm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5
cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IHZh
bHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUo
dmFsdWVHUFIsIHRlbXBHUFIsIG1fZnByKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVt
cCgpOworCisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZUdQUiwgbV9mcHIpOworCisgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgIH0KKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpOworICAgIG1faml0LmFzc2lnblJlZyhtX2ZwciwgbV9vcGVyYW5kKTsKKyAg
ICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFuZDo6SW50MzJD
b252ZXJ0aW5nT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
OiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBHUFJSZWcgcmVn
ID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgZ3ByKCk7Cit9CisKK0pJVDo6SW50MzJDb252ZXJ0aW5nT3BlcmFu
ZDo6fkludDMyQ29udmVydGluZ09wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7
Cit9CisKK0dQUlJlZyBKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6OmdwcigpCit7CisgICAg
aWYgKG1fZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBtX2dwcjsKKworICAg
IG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIGlmIChtX2ppdC5zaG91bGRTcGVjdWxh
dGVJbnQzMihtX29wZXJhbmQpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBvcCB7IG1faml0LCBt
X29wZXJhbmQgfTsKKyAgICAgICAgbV9ncHIgPSBvcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9j
ayhtX2dwcik7CisgICAgfSBlbHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVOdW1iZXIobV9v
cGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsgbV9qaXQsIG1f
b3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7
CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAgICBtX2ppdC5s
b2NrKG1fZ3ByKTsKKworICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyBtX2ppdCB9OworICAgICAg
ICBGUFJSZWcgZnByID0gdGVtcEZQUi5mcHIoKTsKKworICAgICAgICBhdXRvIGlzSW50MzIgPSBt
X2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lz
dGVycyk7CisgICAgICAgIGlmICghaXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKG1faml0LnBy
b3ZlblR5cGUobV9vcGVyYW5kKSkpCisgICAgICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlw
ZSwgbV9qaXQuYnJhbmNoSWZOb3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFs
dWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgICAgIG1faml0LnVuYm94RG91Ymxl
KHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKyNpZiBDUFUo
QVJNNjQpCisgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0RvdWJsZVRv
SW50MzJDb252ZXJzaW9uVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAgICAgICAg
IG1faml0LmNvbnZlcnREb3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKGZwciwg
bV9ncHIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAg
fSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQu
YnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1bmNhdGVT
dWNjZXNzZnVsKSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQuc2lsZW50
U3BpbGxCZWZvcmVDYWxsKG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91YmxlVG9JbnQo
KSA/IG9wZXJhdGlvblRvSW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMyLCBtX2dw
ciwgZnByKTsKKyAgICAgICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3BpbGxSZWNv
cmQpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlzSW50MzIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKHZhbHVl
R1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9q
aXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgfSBlbHNl
IGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVCb29sZWFuKG1fb3BlcmFuZCkpIHsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0g
bV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlQm9vbGVhbihtX29wZXJhbmQsIHZhbHVlR1BSKTsKKworICAgICAg
ICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSLCBtX2dwcik7CisgICAgfSBl
bHNlIGlmIChtX2ppdC5zaG91bGRTcGVjdWxhdGVPdGhlcihtX29wZXJhbmQpKSB7CisgICAgICAg
IFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9
IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAg
ICAgIG1faml0LnNwZWN1bGF0ZU90aGVyKG1fb3BlcmFuZCwgdmFsdWVHUFIpOworCisgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dwcik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3By
ID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAg
ICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRl
bXBGUFIuZnByKCk7CisKKyAgICAgICAgSnVtcExpc3QgZG9uZTsKKworICAgICAgICBhdXRvIGlz
SW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2
ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gbm90RG91YmxlID0gbV9qaXQuYnJhbmNoSWZO
b3REb3VibGVLbm93bk5vdEludDMyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1Jl
Z2lzdGVycyk7CisKKyAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodmFsdWVHUFIsIG1fZ3ByLCBm
cHIpOworI2lmIENQVShBUk02NCkKKyAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN1
cHBvcnRzRG91YmxlVG9JbnQzMkNvbnZlcnNpb25Vc2luZ0phdmFTY3JpcHRTZW1hbnRpY3MoKSkg
eworICAgICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvSW50MzJVc2luZ0phdmFTY3JpcHRT
ZW1hbnRpY3MoZnByLCBtX2dwcik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1w
KCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBkb25l
LmFwcGVuZChtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBtX2dwciwgQnJh
bmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxSZWNvcmQg
PSBtX2ppdC5zaWxlbnRTcGlsbEJlZm9yZUNhbGwobV9ncHIsIGZwcik7CisgICAgICAgICAgICBt
X2ppdC5jYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhjZXB0aW9uQ2hlY2soaGFzU2Vuc2li
bGVEb3VibGVUb0ludCgpID8gb3BlcmF0aW9uVG9JbnQzMlNlbnNpYmxlU2xvdyA6IG9wZXJhdGlv
blRvSW50MzIsIG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuc2lsZW50RmlsbEFmdGVy
Q2FsbChzcGlsbFJlY29yZCk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICB9CisKKyAgICAgICAgbm90RG91YmxlLmxpbmsoJm1faml0KTsKKyAgICAgICAg
YXV0byBub3RPdGhlciA9IG1faml0LmJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1
ZUdQUiB9LCBtX2dwcik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBtX2dw
cik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90T3Ro
ZXIubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zcGVjdWxhdGUoQmFkVHlwZSwgbV9qaXQu
YnJhbmNoSWZOb3RCb29sZWFuKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIpKTsKKyAg
ICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUiwgbV9ncHIpOworICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGlzSW50MzIubGluaygm
bV9qaXQpOworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQodmFsdWVHUFIsIG1fZ3By
KTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5maWx0ZXJU
eXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3BlY0Jvb2xl
YW4pOworICAgIH0KKworICAgIHJldHVybiBtX2dwcjsKK30KKworUmVnaXN0ZXJTZXQgSklUOjp1
bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8gYWRk
SWZOZWVkZWVkID0gWyZdIChSZWcgcmVnKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhp
cy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKQorICAg
ICAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIH07CisKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkRlBScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhZGRJZk5lZWRlZWQocmVnKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3RyaW5nU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBicmFuY2hJZk5vdFN0cmluZyh2YWx1ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY1N0cmluZzsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKQoreworICAgIGlmICghaXNTeW1i
b2xTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90U3ltYm9sKHZhbHVlQXNDZWxsKSk7CisgICAgcHJvdmVuVHlwZShv
cGVyYW5kKSAmPSBTcGVjU3ltYm9sOworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQm9vbGVhbihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCBz
Y3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCb29sZWFuKHZhbHVl
LCBzY3JhdGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0Jv
b2xlYW47Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVPdGhlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3BlcmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGJyYW5jaElmTm90T3RoZXIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBzY3Jh
dGNoR1BSKSk7CisgICAgfQorICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY090aGVyOwor
fQorCit2b2lkIEpJVDo6c3BlY3VsYXRlT2JqZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
b3BlcmFuZCkpKQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RPYmplY3Qo
dmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNPYmplY3Q7Cit9CisKK3Zv
aWQgSklUOjpzcGVjdWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFs
dWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQp
LCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJyYW5jaElmTm90
Q2VsbCh2YWx1ZSkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0NlbGxDaGVjazsK
K30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBH
UFJSZWcgdmFsdWUpCit7CisgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KG9wZXJhbmQpLCBTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGJy
YW5jaElmTm90SW50MzIodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNJ
bnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGJyYW5jaElmTm90TnVtYmVyKHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBT
cGVjQnl0ZWNvZGVOdW1iZXI7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVBbnlCaWdJbnQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBpZiAoaXNCaWdJbnRT
cGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
VVNFKEJJR0lOVDMyKQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJpZ0ludDMyID0gdHJ1ZTsKKyNl
bHNlCisgICAgY29uc3RleHByIGJvb2wgdXNlQmlnSW50MzIgPSBmYWxzZTsKKyNlbmRpZgorCisg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwob3BlcmFuZCkgfHwgIXVzZUJpZ0ludDMyKSB7Cisg
ICAgICAgIHNwZWN1bGF0ZUNlbGwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICBpZiAoIWlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNIZWFwQmlnSW50KSkKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFsdWUp
KTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSGVhcEJpZ0ludDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBpZiAoIWRvbmUpIHsK
KyAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQmlnSW50
MzIob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5v
dEJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBwcm92ZW5UeXBlKG9w
ZXJhbmQpICY9IFNwZWNCaWdJbnQzMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gaXNCaWdJbnQzMiA9IGJyYW5jaElmQmlnSW50MzIodmFsdWUsIHNjcmF0
Y2hHUFIpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RDZWxsKHZhbHVl
KSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEhlYXBCaWdJbnQodmFs
dWUpKTsKKyAgICAgICAgaXNCaWdJbnQzMi5saW5rKHRoaXMpOworICAgICAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNCaWdJbnQ7CisgICAgfQorI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgSklUOjpyZXNldEN1cnJlbnRCbG9j
a1N0YXRlKCkKK3sKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcyA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVl
PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCksIDAsIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIFNwZWNCeXRlY29kZVRv
cCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFN0YXRlLnByb3ZlblR5
cGVzLm51bWJlck9mQ29uc3RhbnRzKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50U3RhdGUucHJv
dmVuVHlwZXMuY29uc3RhbnQoaSkgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyRm9yQ29uc3RhbnQoaSkpKTsKKyAgICBtX2N1cnJl
bnRTdGF0ZS5wcm92ZW5UeXBlcy5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKyAgICBtX2N1cnJl
bnRTdGF0ZS5vcGVyYW5kVG9SZWcgPSBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPihtX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIDAs
IG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5zaXplKCksIEFsbG9jZWRSZWcoKSk7CisgICAgbV9j
dXJyZW50U3RhdGUucmVnaXN0ZXJzID0geyB9OworfQorCit2b2lkIEpJVDo6UmVnVmFsdWU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiLCBvcGVyYW5k
LCAiLCAiLCBsb2NrQ291bnQsICIpIik7Cit9CisKK3ZvaWQgSklUOjpkdW1wUmVnYWxsb2NTdGF0
ZSgpCit7CisgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2Mgc3RhdGUgPSBbIik7CisgICAgZm9yIChh
dXRvIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJlZykuaXNB
bGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAgICBkYXRh
TG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Zm9yIChhdXRvIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgaWYgKHJlZ1ZhbHVlKHJl
ZykuaXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlx0Iik7CisgICAgICAgICAg
ICBkYXRhTG9nTG4ocmVnLCAiID0gIiwgcmVnVmFsdWUocmVnKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZGF0YUxvZ0xuKCJdIik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNyBAQAogI2lu
Y2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJN
YXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8d3RmL1NlZ21lbnRl
ZFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrOworICAgIGNsYXNzIEJ5dGVjb2RlR3JhcGg7CiAgICAgY2xhc3MgQ2Fs
bExpbmtJbmZvOwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1
dGFibGU7CkBAIC0xMDYsMTUgKzExMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgU2xvd0Nhc2VFbnRyeSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZyb207Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggdG87Ci0gICAgICAgIAotICAg
ICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIEJ5dGVjb2RlSW5kZXgg
dCkKLSAgICAgICAgICAgIDogZnJvbShmKQotICAgICAgICAgICAgLCB0byh0KQorICAgIHVzaW5n
IFNhdmVQbGFuID0gVmVjdG9yPHN0ZDo6dHVwbGU8UmVnLCBWaXJ0dWFsUmVnaXN0ZXIsIFNwZWN1
bGF0ZWRUeXBlPj47CisKKyAgICBzdHJ1Y3QgU2lsZW50U3BpbGxSZWNvcmQgeworICAgICAgICBT
YXZlUGxhbiBzYXZlUGxhbjsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc3BpbGxlZFJlZ2lzdGVyczsK
KyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplRm9yU3BpbGw7CisgICAgfTsKKworICAgIHN0cnVj
dCBTbG93Q2FzZSB7CisgICAgICAgIFNsb3dDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7
CiAgICAgICAgIH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QsIDE+IGp1bXBzOyAvLyBVc3VhbGx5
IGp1c3Qgb25lIGVudHJ5LiBCdXQgZm9yIHRoaW5ncyB3aXRoIGNoZWNrcG9pbnRzLCB3ZSBjYW4g
aGF2ZSBtb3JlIHRoYW4gb25lIHNldCBvZiBKdW1wTGlzdHMKKyAgICAgICAgU2F2ZVBsYW4gc2F2
ZVBsYW47IC8vIE9PUFM6IE1heWJlIGhhdmUgYSBkZWx0YSBiYXNlZCBzeXN0ZW0gZm9yIHRoaXMg
YmV0d2VlbiBzbG93IHBhdGhzLgorICAgICAgICBSZWcgcmVzdWx0OworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0OworICAgICAgICBWZWN0b3I8UmVnPiBhcmd1bWVudHM7IC8vIFNvbWUgb3Bz
IHNhdmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBoZXJlIGZvciBjb252ZW5pZW5jZQogICAg
IH07CiAKICAgICBzdHJ1Y3QgU3dpdGNoUmVjb3JkIHsKQEAgLTE5Niw3ICsyMTEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rp
b24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50
ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBK
U0ludGVyZmFjZUpJVCB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUU3R1YkNhbGw7CiAKQEAgLTIwNCwxNCArMjIxLDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbDsKIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlID0gdW51c2VkUG9pbnRlcjsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCA9IDA7Ci0gICAg
ICAgIC8vIE1hZ2ljIG51bWJlciAtIGluaXRpYWwgb2Zmc2V0IGNhbm5vdCBiZSByZXByZXNlbnRh
YmxlIGFzIGEgc2lnbmVkIDhiaXQgdmFsdWUsIG9yIHRoZSBYODZBc3NlbWJsZXIKLSAgICAgICAg
Ly8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxl
IHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwotCiAgICAgcHVibGljOgotICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgICAgICBlbnVtIGNsYXNzIENv
bXBpbGVUeXBlIHsKKyAgICAgICAgICAgIEJhc2VsaW5lLAorICAgICAgICAgICAgTE9MCisgICAg
ICAgIH07CisgICAgICAgIAorICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqLCBDb21waWxlVHlw
ZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5k
ZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpT
SW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMjAsMjIgKzIzNiwyMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZvaWQgZG9N
YWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgICAgIAotICAgICAgICBz
dGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQorCisgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJl
c3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNv
bXBpbGVUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShl
ZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBjb21waWxlVHlw
ZSwgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJh
c2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1
dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5
VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
LCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRl
eCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0yNDMsMjEgKzI1OSwyMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0YXRp
YyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAg
ICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAg
ICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAg
ICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAg
ICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVk
SWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrLCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CiAgICAgICAgIH0KQEAgLTI4Niw2ICszMDIsMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc3BpbGxGb3JDYWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQor
ICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbEltcGwoKTsKKyAgICAgICAgfQorICAgICAgICB2
b2lkIHNwaWxsRm9yQ2FsbEltcGwoKTsKKworICAgICAgICB2b2lkIGNsb2JiZXIoUmVnIHJlZykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNlTE9MKQorICAgICAgICAgICAgICAgIGNs
b2JiZXJJbXBsKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBjbG9iYmVySW1wbChSZWcp
OworCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4g
ZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzIzLDkgKzM1Mywx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsK
IAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lkIGFkZFNsb3dD
YXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgdm9pZCBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wLCBSZWcgcmVzdWx0ID0gUmVnKCksIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB7IH0pOworICAg
ICAgICB2b2lkIGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiwgUmVnIHJlc3VsdCA9IFJlZygp
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgU2xvd0Nhc2UmIGVuc3VyZVNs
b3dDYXNlKFJlZyByZXN1bHQsIFZpcnR1YWxSZWdpc3RlciBkc3QpOwogICAgICAgICB2b2lkIGFk
ZEp1bXAoSnVtcCwgaW50KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0Jiwg
aW50KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdChKdW1wLCBpbnQpOwpAQCAtMzMz
LDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
OworICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9w
OjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0
cnVjdF92YXJhcmdzCkBAIC0zNTAsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKLSAgICAgICAgdm9pZCBjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJik7CiAKQEAgLTM2MCw3
ICszOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwg
Q29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BFcVR5
cGUgeyBFcSwgTkVxIH07Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRhcmdl
dCk7CisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhTbG93Q2FzZSYsIENvbXBpbGVP
cEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50
RG91YmxlKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIAogICAgICAgICBlbnVtIFdyaXRlQmFy
cmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBT
aG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CkBAIC01MDgsOCAr
NTQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRp
b25hbENvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVu
c2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24p
OwpAQCAtNTE3LDEyICs1NDksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbik7CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQs
IFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgU2xvd09wZXJhdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9v
bCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRp
dGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9u
LCBTbG93T3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVf
dCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBp
bnZlcnQsIFNsb3dDYXNlJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAg
dm9pZCBlcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+CisgICAgICAgIHZvaWQgamVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlcU51bGxJbXBsKGNv
bnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAt
NTQ2LDkgKzU4Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaWRl
bnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtNjEwLDcgKzY1MSw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xzaGlmdChjb25zdCBJ
bnN0cnVjdGlvbiopOworI2lmIENQVShYODZfNjQpCiAgICAgICAgIHZvaWQgZW1pdF9vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRfb3BfbW92KGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiop
OwpAQCAtNjc4LDc4ICs3MjEsMTAwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCi0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0
cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAg
IHZvaWQgZW1pdElzQ2FsbGFibGVJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAg
dm9pZCBlbWl0X29wX2lzX2NhbGxhYmxlKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF90eXBlb2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAg
IHZvaWQgZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0Q29tcGFyZU9wSW1wbChj
b25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbik7
CisgICAgICAgIHZvaWQgZW1pdF9vcF9sZXNzKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAg
IHZvaWQgZW1pdF9vcF9sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29w
X2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB2b2lk
IGVtaXRfb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
KworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IElu
c3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0
X2FyZ3VtZW50X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbGVzcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFNs
b3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dD
YXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRTbG93
Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgICAg
ICB2b2lkIGVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lk
IGVtaXRSaWdodFNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCBpc1Vuc2lnbmVkKTsKLSAg
ICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CisgICAgICAg
IHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
JiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB2b2lk
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gVmlydHVhbFJlZ2lzdGVyKCksIEdQUlJlZyByZXN1bHRHUFIgPSBJ
bnZhbGlkR1BSUmVnKTsKKyNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNr
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1p
dFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAg
ICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVn
KTsKQEAgLTc2NCw4ICs4MjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1p
dEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCiAgICAgICAgIHZvaWQgZW1pdFB1dElu
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAog
ICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAt
Nzc4LDM4ICs4NDEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJ
Q0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOwogCiAgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1
bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJv
ZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElD
U2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwg
U2xvd0Nhc2UmKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxl
ZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1h
dGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVk
RnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmKTsKIAotICAgICAgICBKdW1wIGdl
dFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207Ci0gICAgICAgIH0KLSAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKGl0ZXItPmZyb20uaXNTZXQoKSkKLSAgICAgICAg
ICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAg
ICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXIt
PmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9y
Qnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAg
ICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlT2Zmc2V0KTsKLQotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbGlua0Fs
bFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgor
ICAgICAgICB2b2lkIGVtaXRTbG93T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1bGF0ZWRU
eXBlIGRzdFR5cGUpOwogCi0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nhc2VzKFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGJvb2wgaGFzQW55U2xvd0Nh
c2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgIHZvaWQg
bGlua0FsbFNsb3dDYXNlcyhTbG93Q2FzZSYgaXRlcikKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGhhc0FueVNsb3dDYXNlcyhtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICAgICAgICAgIC8vIE9PUFMK
KyAgICAgICAgICAgIGJvb2wgYiA9IHRydWU7CisgICAgICAgICAgICBpZiAoYikKKyAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgLy9saW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNv
ZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQog
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC04OTEsNiArOTM3LDI2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwor
ICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRvIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFuZE5vRXhj
ZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9u
VHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICAg
ICAgICAgIGF1dG8gY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG1v
dmUocmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gY2FsbDsKKyAg
ICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
QXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVy
YXRpb25UeXBlPihhcmdzLi4uKTsKQEAgLTkwMiw2ICs5NjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIE5vUHJvZmlsaW5nCiAgICAgICAgIH07CiAKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CisgICAgICAgIGJvb2wgdHJ5RW1pdExPTEJpdEZhc3RQYXRoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgogICAgICAgICB2b2lkIGVtaXRCaXRC
aW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBy
b2ZpbGluZ1BvbGljeSBzaG91bGRFbWl0UHJvZmlsaW5nID0gUHJvZmlsaW5nUG9saWN5OjpOb1By
b2ZpbGluZyk7CiAKQEAgLTk2MSw2ICsxMDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAor
ICAgICAgICB2b2lkIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworICAgICAgICB2b2lkIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICBzdGF0aWMg
Ym9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNv
bXBpbGVUaW1lcygpOwogICAgICAgICAKQEAgLTk3MSw2ICsxMDQzLDI5MiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiAgICAgICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCisgICAgICAgIGNs
YXNzIEdQUlRlbXAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBHUFJUZW1wKEpJVCYs
IEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICB+R1BSVGVtcCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcihHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcpOworICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJl
ZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBG
UFJUZW1wIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRlBSVGVtcChKSVQmKTsKKyAg
ICAgICAgICAgIH5GUFJUZW1wKCk7CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1f
ZnByIHsgSW52YWxpZEZQUlJlZyB9OworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEludDMy
T3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEludDMyT3BlcmFuZChKSVQm
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJPcGVyYW5kKCk7
CisgICAgICAgICAgICBHUFJSZWcgZ3ByKCk7IC8vIE9ubHkgbG93ZXIgMzIgYml0cyBhcmUgdGhl
IGludDMyLiBVcHBlciBiaXRzIGNhbiBiZSBhbnl0aGluZy4gTWlnaHQgYmUgdGFnZ2VkLCBtaWdo
dCBub3QgYmUuCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0OworICAg
ICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBDZWxs
T3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIENlbGxPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5DZWxsT3BlcmFuZCgpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
SklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIH07CisKKyAg
ICAgICAgY2xhc3MgTm90Q2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBOb3RDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAg
ICAgICB+Tm90Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcg
bV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9v
cGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIFZhbHVlT3BlcmFuZCB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+VmFsdWVPcGVyYW5kKCk7CisgICAgICAgICAgICBH
UFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1faml0Owor
ICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBE
b3VibGVPcGVyYW5kIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRG91YmxlT3BlcmFu
ZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+RG91YmxlT3Bl
cmFuZCgpOworICAgICAgICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRG
UFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAg
IH07CisKKyAgICAgICAgY2xhc3MgTnVtYmVyT3BlcmFuZCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIE51bWJlck9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOwor
ICAgICAgICAgICAgfk51bWJlck9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIoKTsK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBG
UFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIC8vIFNwZWN1bGF0ZSBudW1iZXIr
Ym9vbGVhbitvdGhlciwgYW5kIGNvbnZlcnQgdG8gaTMyLiBVc2VmdWwgZm9yIGJpdG9wcy4KKyAg
ICAgICAgY2xhc3MgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCB7IAorICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kKEpJVCYsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKTsKKyAgICAgICAgICAgIH5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCk7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQmIG1f
aml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSYgcHJvdmVuVHlwZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLm9wZXJh
bmQob3BlcmFuZCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbHRlclR5cGUoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBmaWx0ZXI7CisgICAgICAgIH0KKworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChvcGVyYW5kKSk7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJlZGljdGlv
bnMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyYgZ3ByRm9y
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmdwcjsK
KyAgICAgICAgfQorCisgICAgICAgIEZQUlJlZyYgZnByRm9yT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
Lm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpLmZwcjsKKyAgICAgICAgfQorCisgICAgICAg
IHN0cnVjdCBBbGxvY2VkUmVnOworICAgICAgICBBbGxvY2VkUmVnJiBhbGxvY2VkUmVnRm9yT3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudFN0YXRlLm9wZXJhbmRUb1JlZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RydWN0IFJlZ1ZhbHVlOworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFs
dWUoUmVnIHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRl
LnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9CisKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVl
KEdQUlJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0
ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1
ZShGUFJSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdpbGxEZWYoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV91c2VM
T0wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgR1BSUmVnJiBncHIgPSBncHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgIGlmIChncHIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgICAgICAgICByZWdW
YWx1ZShncHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlBSUmVnJiBmcHIgPSBmcHJGb3JPcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gSW52YWxpZEZQUlJlZykg
eworICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZShmcHIpLm9wZXJhbmQgPSBWaXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFz
c2lnblJlZyhHUFJSZWcgZ3ByLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlZ1ZhbHVlKGdwcikub3BlcmFuZC5pc1ZhbGlk
KCkpOworCisgICAgICAgICAgICBncHJGb3JPcGVyYW5kKG9wZXJhbmQpID0gZ3ByOworICAgICAg
ICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gb3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGFzc2lnblJlZyhGUFJSZWcgZnByLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJl
Z1ZhbHVlKGZwcikub3BlcmFuZC5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICBmcHJGb3JPcGVy
YW5kKG9wZXJhbmQpID0gZnByOworICAgICAgICAgICAgcmVnVmFsdWUoZnByKS5vcGVyYW5kID0g
b3BlcmFuZDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRV
c2VDb3VudHMub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0J5dGVj
b2RlRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJl
ZGljdGlvbkZvcihvcGVyYW5kKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY090aGVyIHwgU3Bl
Y0Jvb2xlYW4pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVOb3RD
ZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXNOb3RDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKHByZWRpY3Rpb25Gb3Iob3Bl
cmFuZCkgJiB+U3BlY0NlbGxDaGVjayk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzU3lt
Ym9sU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHNob3VsZFNwZWN1bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0U3BlY3VsYXRpb24ocHJlZGlj
dGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1
bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlT3RoZXIoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc090aGVyU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlv
bkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVCaWdJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzQmlnSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0
aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VM
T0woKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlU3Ry
aW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0NlbGwpOworICAgICAg
ICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZh
bHVlQXNDZWxsKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1
bGF0ZU9iamVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBHUFJSZWcgdmFsdWUpOworCisgICAgICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5k
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCk7IC8vIE9PUFM6IFdlIHByb2JhYmx5IHdhbnQgbW9yZSBp
bmZvIGhlcmUgZm9yIHVwZGF0aW5nIHByb2ZpbGVzLgorICAgICAgICBHUFJSZWcgYWxsb2NhdGVH
UFIoR1BSUmVnIGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgRlBSUmVnIGFsbG9jYXRl
RlBSKCk7CisgICAgICAgIHZvaWQgc2V0SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOwor
ICAgICAgICB2b2lkIHNldERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUlJlZyk7CisgICAgICAg
IHZvaWQgc2V0SlNWYWx1ZShWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7IC8vIE9PUFM6IE1ha2Ug
dGhpcyB0YWtlIHRoZSByZXN1bHQgcHJvdmVuIHR5cGUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRvIHNl
dCBpdC4KKyAgICAgICAgdm9pZCBsb2NrKFJlZyk7CisgICAgICAgIHZvaWQgdW5sb2NrKFJlZyk7
CisgICAgICAgIFNhdmVQbGFuIHNsb3dQYXRoU2F2ZVBsYW4oKTsKKyAgICAgICAgU2lsZW50U3Bp
bGxSZWNvcmQgc2lsZW50U3BpbGxCZWZvcmVDYWxsKEdQUlJlZyB0b0lnbm9yZSA9IEludmFsaWRH
UFJSZWcsIEZQUlJlZyB0b0lnbm9yZUZQUiA9IEludmFsaWRGUFJSZWcpOworICAgICAgICB2b2lk
IHNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNvcmQmKTsKKyAgICAgICAg
dm9pZCByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmKTsKKyAgICAg
ICAgdm9pZCByZXN0b3JlRnJvbVNhdmVQbGFuKFJlZyByZWdUb0lnbm9yZSwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmRUb0lnbm9yZSwgY29uc3QgU2F2ZVBsYW4mKTsKKyAgICAgICAgUmVnaXN0ZXJT
ZXQgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCk7CisKICAgICAgICAgSW50ZXJwcmV0ZXIq
IG1faW50ZXJwcmV0ZXI7CiAKICAgICAgICAgVmVjdG9yPEZhckNhbGxSZWNvcmQ+IG1fZmFyQ2Fs
bHM7CkBAIC05OTAsNyArMTM0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8
SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29k
ZUluZGV4OwotICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CisgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxTbG93Q2FzZT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3Rv
cjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
dW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7CkBAIC0xMDI3LDYgKzEzODUsODcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAg
ICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OworCisgICAgICAgIHN0cnVjdCBBbGxvY2VkUmVn
IHsKKyAgICAgICAgICAgIC8vIEZvciBkb3VibGVzLCB3ZSBtYXkgaGF2ZSBib3hlZCBhbiB1bmJv
eGVkIHZhcmlhbnRzCisgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgdGltZS4K
KyAgICAgICAgICAgIEdQUlJlZyBncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBG
UFJSZWcgZnByIHsgSW52YWxpZEZQUlJlZyB9OworCisgICAgICAgICAgICB2b2lkIG1lcmdlKGNv
bnN0IEFsbG9jZWRSZWcmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChncHIgIT0gb3RoZXIuZ3ByKQorICAgICAgICAgICAgICAgICAgICBncHIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICAgICAgICAgIGlmIChmcHIgIT0gb3RoZXIuZnByKQorICAgICAgICAgICAg
ICAgICAgICBmcHIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIHN0cnVjdCBSZWdWYWx1ZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCB7IH07CisgICAgICAgICAgICB1aW50OF90IGxvY2tDb3VudCB7IDAgfTsKKyAgICAg
ICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IFJlZ1ZhbHVlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZCAhPSBvdGhlci5vcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHx8IGxv
Y2tDb3VudCAhPSBvdGhlci5sb2NrQ291bnQKKyAgICAgICAgICAgICAgICAgICAgfHwgaXNBbGxv
Y2F0ZWQgIT0gb3RoZXIuaXNBbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICp0aGlzID0g
eyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgTG9nRW50cnkgeworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQ7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmxvY2tTdGF0ZSB7CisgICAgICAg
ICAgICBPcGVyYW5kczxBbGxvY2VkUmVnLCB0cnVlPiBvcGVyYW5kVG9SZWc7CisgICAgICAgICAg
ICBSZWdpc3Rlck1hcDxSZWdWYWx1ZT4gcmVnaXN0ZXJzOworICAgICAgICAgICAgT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGUsIHRydWU+IHByb3ZlblR5cGVzOworCisgICAgICAgICAgICB2b2lkIG1l
cmdlKGNvbnN0IEJsb2NrU3RhdGUmIG90aGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChvcGVyYW5kVG9SZWcuc2l6ZSgpID09IG90aGVyLm9wZXJhbmRUb1JlZy5zaXpl
KCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZFRvUmVn
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9SZWdbaV0ubWVyZ2Uo
b3RoZXIub3BlcmFuZFRvUmVnW2ldKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChwcm92ZW5U
eXBlcy5zaXplKCkgPT0gb3RoZXIucHJvdmVuVHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ZlblR5cGVzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgICAgICBwcm92ZW5UeXBlc1tpXSA9IG1lcmdlU3BlY3VsYXRpb25zKHByb3ZlblR5
cGVzW2ldLCBvdGhlci5wcm92ZW5UeXBlc1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQo
cmVnaXN0ZXJzLnNpemUoKSA9PSBvdGhlci5yZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLm1lcmdlKG90aGVyLnJlZ2lzdGVyc1tpXSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQmxvY2tTdGF0ZSBtX2N1cnJlbnRT
dGF0ZTsKKworICAgICAgICB2b2lkIHJlc2V0Q3VycmVudEJsb2NrU3RhdGUoKTsKKworICAgICAg
ICB2b2lkIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlR3JhcGg+IG1fZ3JhcGg7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogbV9jdXJy
ZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZSwgdHJ1ZT4+IG1fcHJlZGljdGlvbnNBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1
bGF0ZWRUeXBlLCB0cnVlPiBtX2N1cnJlbnRQcmVkaWN0aW9uczsKKyAgICAgICAgVmVjdG9yPE9w
ZXJhbmRzPHVuc2lnbmVkLCB0cnVlPj4gbV91c2VDb3VudHM7CisgICAgICAgIE9wZXJhbmRzPHVu
c2lnbmVkLCB0cnVlPiBtX2N1cnJlbnRVc2VDb3VudHM7CisgICAgICAgIFZlY3RvcjxWaXJ0dWFs
UmVnaXN0ZXIsIDE2PiBtX3NwaWxsQ2FuZGlkYXRlczsKKworICAgICAgICBWZWN0b3I8TG9nRW50
cnk+IG1fZXhpdExvZzsKKworCisgICAgICAgIFZlY3RvcjxPcHRpb25hbDxCbG9ja1N0YXRlPj4g
bV9zdGF0ZUF0RW5kOworICAgICAgICBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4gbV9wcmVkZWNl
c3NvcnM7CisKKyAgICAgICAgYm9vbCBtX3VzZUxPTCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wg
bV9jaGVja2VkVXNlTE9MIHsgZmFsc2UgfTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxCeXRl
Y29kZUluZGV4LCBKdW1wTGlzdD4+IG1fZXhpdEp1bXBzOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4NiArNDIsODggQEAKICNpbmNsdWRl
ICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSklUOjpl
bWl0X29wX2psZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpsZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlv
biwgTGVzc1RoYW4sIERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBM
ZXNzVGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5k
T3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpn
cmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4sIERv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pncmVh
dGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsQW5kT3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8
T3BKbmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJU
aGFuT3JFcXVhbCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3NlcT4oY3VycmVudElu
c3RydWN0aW9uLCBHcmVhdGVyVGhhbik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVz
c2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwpOworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1Ro
YW5PckVxdWFsLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIExlc3NUaGFuKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVh
dGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sICBEb3VibGVMZXNzVGhhbk9yVW5v
cmRlcmVkKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5B
bmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVz
c1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIHNsb3dDYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdzxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVx
dWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBE
b3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCBm
YWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBm
YWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcj4oY3Vy
cmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyLCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmdyZWF0ZXJl
cT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVk
LCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxLCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZh
bHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVt
aXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSm5sZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzcywgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
bGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpubGVzc2VxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9w
Sm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJl
ZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5ncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxP
cEpuZ3JlYXRlcj4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOworICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1
ZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3Ry
dWN0aW9uLCBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ckVxLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3JlYXRl
cmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfYmVsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE0
NiwzNyArMTQ4LDE2MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVj
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJ
VDo6ZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBncENvbXBhcmUsIERvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b21wYXJlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmhzID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNUZW1wLmdwcigp
LCByaHNUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAg
ICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBjb21w
YXJlRG91YmxlKGRvdWJsZUNvbXBhcmUsIGxoc1RlbXAuZnByKCksIHJoc1RlbXAuZnByKCksIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB8fCAhcHJlZGljdGlvbkZvcihsaHMpIHx8
ICFwcmVkaWN0aW9uRm9yKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFyZSwgbGhz
VGVtcC5mcHIoKSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIg
PSByaHNUZW1wLmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIs
IGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOwor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAgICAg
ICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xl
c3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29t
cGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4sIERvdWJsZUxl
c3NUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xlc3NlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBs
PE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NU
aGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdENvbXBhcmVP
cEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuLCBEb3VibGVHcmVh
dGVyVGhhbkFuZE9yZGVyZWQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ncmVhdGVyZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Q29tcGFyZU9w
SW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3Bf
dW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0z
MigwKSkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICBHUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3By
KCk7CisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCByZXN1bHQpOworCisgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpKQorICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzIob3AxLCBpbnB1dEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChpbnB1dEdQUik7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTGVzc1RoYW4sIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50
MzIoaW5wdXRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3Bl
Y0J5dGVjb2RlTnVtYmVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKDApKSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworICAg
IH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgRG91YmxlQ29u
ZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9u
KTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRp
b24sIGRvdWJsZUNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNv
bmRpdGlvbiBkb3VibGVDb25kaXRpb24pCiB7CiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNv
ZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGlu
dCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQg
aW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRv
IGludCBpbW1lZGlhdGUKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAg
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50
MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoY29uZGl0aW9uLCBsaHMuZ3ByKCksIHJocy5ncHIoKSksIHRhcmdldCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShkb3Vi
bGVDb25kaXRpb24sIGxocy5mcHIoKSwgcmhzLmZwcigpKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHx8ICFwcmVkaWN0aW9uRm9yKG9w
MSkgfHwgIXByZWRpY3Rpb25Gb3Iob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBs
aHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlz
LCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlv
biwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgVmFsdWVPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgR1BSUmVnIGxo
c0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJocy5ncHIoKTsKKwor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKFJl
ZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJo
c0dQUik7CisgICAgICAgIH0KKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQobGhz
R1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIGRpc2FsbG93QWxsb2NhdGlvbiA9IGZh
bHNlOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOwpAQCAtMjI5LDE3ICszNTUsNDMgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjbwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAg
IEdQUlJlZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAg
IGF1dG8gZ2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAg
ICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNU
ZW1wLT5ncHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQ
UiA9IHJoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJ
bnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAg
ICB9CisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGdldExIUygp
OwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSkp
LCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCBJ
bW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsK
KyAgICAgICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRp
b24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByaHNHUFIsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVn
VDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgbGhzR1BSLCByaHNHUFIpLCB0
YXJnZXQpOwogICAgIH0KIH0KIApAQCAtMjU1LDQzICs0MDcsODkgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogeworICAgIEdQUlJl
ZyBsaHNHUFI7CisgICAgR1BSUmVnIHJoc0dQUjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGxoc1RlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaHNUZW1wOworICAgIGF1dG8g
Z2V0TEhTID0gWyZdIHsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBsaHNU
ZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgICAgICBsaHNHUFIgPSBsaHNUZW1wLT5n
cHIoKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3AxKSAmPSBTcGVjSW50MzJPbmx5OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGhzR1BSID0gcmVnVDA7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGhzR1BSKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgYXV0byBnZXRSSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
ICAgIHJoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgIHJoc0dQUiA9IHJo
c1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDIpICY9IFNwZWNJbnQzMk9u
bHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaHNHUFIgPSByZWdUMTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByaHNHUFIpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdDsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICByZXN1bHQuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdEdQUiA9IHJlZ1QyOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAg
Z2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0p
LCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIGxoc0dQUiwgSW1tMzIob3Ay
aW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKKyAgICAg
ICAgZ2V0UkhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJ
bW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlv
biksIHJoc0dQUiwgSW1tMzIob3AxaW1tKSwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAg
ICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisgICAgICAg
IGdldExIUygpOworICAgICAgICBnZXRSSFMoKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlv
biwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CiAgICAgfQotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9u
IGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9u
IGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6
ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBpdGVyKTsKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwob3AxLCBvcDIsIHRhcmdldCwgaW5zdHJ1Y3Rpb24tPnNpemUoKSwg
Y29uZGl0aW9uLCBvcGVyYXRpb24sIGludmVydCwgc2xvd0Nhc2UpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0
YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24s
IFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBT
bG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkK
IHsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1sxXS5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgICAgICBhdXRvIGZhbGx0aHJvdWdoID0gYnJhbmNoVGVzdDMyKGludmVydCA/IE5vblplcm8g
OiBaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZl
UGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0
KTsKKyAgICAgICAgZmFsbHRocm91Z2gubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNh
c2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8g
Y29uc3RhbnQgaW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0
byBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjEpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CkBA
IC0zMDAsOCArNDk4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApOwogICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTMy
Niw4ICs1MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7
CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDEpOwpAQCAtMzUxLDEy
ICs1NDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMg
bm90IEludC4KLQogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICBK
dW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwogICAgICAgICBKdW1wIGZhaWwy
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1Qw
KTsKKyAgICAgICAgSnVtcCBmYWlsNCA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwogICAgICAgICBhZGQ2NChudW1iZXJUYWdS
ZWdpc3RlciwgcmVnVDEpOwogICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CkBAIC0zNjksOSArNTYyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICBmYWlsMi5saW5rKHRoaXMp
OwogICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgICAgICBmYWlsNC5saW5rKHRoaXMpOwog
ICAgIH0KIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KQEAgLTM4MSwxMSArNTc0LDUzIEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0
cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
Yz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3Zl
cmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkp
IHsgLy8gT09QUzogZW5zdXJlIGZvciBhbGwgb3Bjb2RlcyBwcm92ZW5UeXBlIGFncmVlcyB3LyB0
aGUgcHJlZGljdGlvbiBwcm9wYWdhdGlvbi4KKyAgICAgICAgICAgICAgICBGUFJUZW1wIHRlbXAg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wLmZwcigpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0R1BSLCBmcHIpOworICAgICAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOworICAgICAgICAgICAgICAg
IGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAgICAgICAg
c2V0RG91YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0Rz
dCkgPSBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93
LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIo
c3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hv
dWxkU3BlY3VsYXRlRG91YmxlKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5wdXQu
ZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAg
ICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7CisgICAgICAgICAg
ICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1
bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGlucHV0LmZwcigpOwor
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBh
ZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZvbmUpLCBmcHIpOworICAgICAgICAgICAgc2V0RG91
YmxlKHNyY0RzdCwgZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0
aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdwcigp
OworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIp
KTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0R1BS
IH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1iZXI7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0zOTMsMTEgKzYyOCw2MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMy
KE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50MzIoc3JjRHN0KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBpZiAocHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxv
dygpKSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVn
IHJlc3VsdEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHRlbXBGUFIg
PSB0ZW1wLmZwcigpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGlucHV0
R1BSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25l
ID0gMS4wOworICAgICAgICAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwg
dGVtcEZQUik7CisgICAgICAgICAgICAgICAgc3ViRG91YmxlKHJlc3VsdEZQUiwgdGVtcEZQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCByZXN1bHRGUFIp
OworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJs
ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRL
aW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5w
dXRHUFIpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3Jj
RHN0KSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3Qg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJS
ZWcgaW5wdXRGUFIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0g
dGVtcC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOwor
ICAgICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAg
ICAgICAgICAgIHN1YkRvdWJsZShpbnB1dEZQUiwgdGVtcEZQUiwgaW5wdXRGUFIpOworICAgICAg
ICAgICAgc2V0RG91YmxlKHNyY0RzdCwgaW5wdXRGUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZU51bWJlcihzcmNEc3QpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5k
IGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAg
ICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1Q
dHIoJm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1w
RlBSLCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkbyBzb21lIEJpZ0ludDMy
Li4uCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGVu
c3VyZVNsb3dDYXNlKGlucHV0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1
YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGlucHV0R1BSKSk7CisgICAgICAgICAgICBi
b3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9KTsKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoc3JjRHN0LCBpbnB1dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKHNy
Y0RzdCkgPSBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAg
ICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICB9CiB9CiAKIC8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwpAQCAtNDA3LDU0ICs2OTMsMTEwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhj
b25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGhzID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9IGJ5dGVjb2RlLm1fcmhzOwor
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICgoc2hvdWxkU3BlY3VsYXRlRG91Ymxl
KGxocykgfHwgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpICYmIHNob3VsZFNwZWN1bGF0ZU51
bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBO
dW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBS
ID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZw
cigpOworCisgICAgICAgICAgICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICAgICAgRlBSVGVt
cCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSBy
ZXN1bHRUZW1wLmZwcigpOworCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdEFu
ZE5vRXhjZXB0aW9uQ2hlY2soTWF0aDo6Zm1vZERvdWJsZSwgcmVzdWx0RlBSLCBsaHNGUFIsIHJo
c0ZQUik7CisKKyAgICAgICAgICAgIHNldERvdWJsZShkc3QsIHJlc3VsdEZQUik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0
ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJl
Z1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVheCA9IFg4NlJlZ2lzdGVyczo6
ZWF4OwogICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgYXV0byBlY3ggPSBY
ODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVnVDAgPT0gZWF4KTsKICAgICBBU1NFUlQo
cmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDQpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOwor
ICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVheFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWR4
VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBlY3hUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJoc1RlbXA7Cisg
ICAgR1BSUmVnIGxoc0dQUjsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjbG9iYmVy
KGVheCk7CisgICAgICAgIGNsb2JiZXIoZWR4KTsKKyAgICAgICAgY2xvYmJlcihlY3gpOworICAg
ICAgICBlYXhUZW1wLmVtcGxhY2UoKnRoaXMsIGVheCk7CisgICAgICAgIGVkeFRlbXAuZW1wbGFj
ZSgqdGhpcywgZWR4KTsKKyAgICAgICAgZWN4VGVtcC5lbXBsYWNlKCp0aGlzLCBlY3gpOworCisg
ICAgICAgIGVheFRlbXAtPmdwcigpOworICAgICAgICBlZHhUZW1wLT5ncHIoKTsKKyAgICAgICAg
ZWN4VGVtcC0+Z3ByKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWF4VGVtcC0+Z3ByKCkg
PT0gZWF4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWR4VGVtcC0+Z3ByKCkgPT0gZWR4KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWN4VGVtcC0+Z3ByKCkgPT0gZWN4KTsKKworICAgICAg
ICBsaHNUZW1wLmVtcGxhY2UoKnRoaXMsIGxocyk7CisgICAgICAgIHJoc1RlbXAuZW1wbGFjZSgq
dGhpcywgcmhzKTsKKyAgICAgICAgbGhzR1BSID0gbGhzVGVtcC0+Z3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHNUZW1wLT5ncHIoKTsKKworICAgICAgICBzcGlsbEZvckNhbGwoKTsg
Ly8gT09QUzogbmV3IG5hbWUsIGxpa2Ugc3BpbGxFeHBlY3RpbmdTbG93UGF0aAorCisgICAgICAg
IGVuc3VyZVNsb3dDYXNlKGVheCwgZHN0KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50MzIobGhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGxocywgbGhzR1BSKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7
CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpCisgICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMihyaHMsIHJoc0dQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyaHNHUFIpOworCisgICAgICAgIG1vdmUobGhzR1BSLCBl
YXgpOworICAgICAgICBtb3ZlKHJoc0dQUiwgZWN4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBs
aHNHUFIgPSByZWdUNDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCBsaHNH
UFIsIHJocywgZWN4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGxoc0dQUik7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworICAgICAgICBtb3ZlKGxo
c0dQUiwgZWF4KTsKKyAgICB9CiAKLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwogICAgIEp1bXAgZGVub21pbmF0b3JOb3RO
ZWcxID0gYnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDct
MSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgZWF4LCBUcnVzdGVkSW1tMzIo
LTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKICAg
ICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKICAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1
bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0
LCBUcnVzdGVkSW1tMzIoMCkpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gz
MihHcmVhdGVyVGhhbk9yRXF1YWwsIGxoc0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUu
bGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwotfQorICAgIGJveEludDMyKGVkeCwg
SlNWYWx1ZVJlZ3MgeyBlYXggfSk7CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLSNlbHNlIC8vIENQVShY
ODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCBlYXgpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShsaHMp
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUo
cmhzKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShsaHMpLCBTcGVjQmlnSW50KSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihw
cm92ZW5UeXBlKHJocyksIFNwZWNCaWdJbnQpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0JpZ0ludDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGVheCk7CiB9CiAKICNlbmRpZiAvLyBDUFUoWDg2
XzY0KQpAQCAtNDY0LDcgKzgwNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewog
ICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwpAQCAt
NDc0LDYgKzgxNiw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKKwogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC01NjIs
MTUgKzkwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rp
b24sIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91Ymxl
Q29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFNsb3dDYXNl
JikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChp
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRM
b2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTcyNCwxMyArMTA2NSw2NiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdh
dGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVE5lZ0lDKiBuZWdJ
QyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3Vy
cmVudEluc3RydWN0aW9uKSk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBj
YWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUg
YSBCaWdJbnQKLSAgICBlbWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKKyAgICBl
bWl0TWF0aElDU2xvdzxPcE5lZ2F0ZT4obmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2Zp
bGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplLCBzbG93Q2FzZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6OnRyeUVtaXRMT0xCaXRGYXN0UGF0aChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisK
KyAgICBhdXRvIGJpdE9wID0gWyZdIChHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PE9wLCBPcEJpdGFuZD4pCisgICAgICAgICAgICBhbmQzMihsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9w
LCBPcEJpdG9yPikKKyAgICAgICAgICAgIG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BCaXR4b3I+
KQorICAgICAgICAgICAgeG9yMzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BMc2hpZnQ+KQorICAgICAg
ICAgICAgbHNoaWZ0MzIobGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BVcnNoaWZ0PikKKyAgICAgICAgICAg
IHVyc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFJzaGlmdD4pCisgICAgICAgICAgICByc2hp
ZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBzZXRJbnQzMihyZXN1
bHQsIHJlc3VsdEdQUik7CisgICAgfTsKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihv
cDEpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgSW50MzJPcGVyYW5k
IGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxocy5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJoc0dQUiA9IHJocy5ncHIoKTsKKyAgICAgICAgYml0T3AobGhzR1BSLCByaHNHUFIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzJD
b252ZXJ0aW5nKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzJDb252ZXJ0aW5nKG9wMikpIHsK
KyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAg
ICAgIEludDMyQ29udmVydGluZ09wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBH
UFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdw
cigpOworICAgICAgICBiaXRPcChsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KQEAgLTc0MSwxNyArMTEzNSw4IEBA
IHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCAKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2Vu
ZGlmCisgICAgaWYgKHRyeUVtaXRMT0xCaXRGYXN0UGF0aDxPcD4oY3VycmVudEluc3RydWN0aW9u
KSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7CiAg
ICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwpAQCAtNzYwLDMzICsxMTQ1LDEwNiBAQCB2
b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiAgICAgICAgIGxlZnRPcGVy
YW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwogICAgIGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRD
b25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQogICAgIFJFTEVBU0VfQVNT
RVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwog
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7Cisg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKworICAg
IC8vIE9PUFM6IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAg
cmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNo
R1BSID0gcmVnVDI7CisKKyAgICAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBp
ZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgIGlm
ICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgbGVmdFJlZ3MpOwogICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisjZW5kaWYKIAotICAg
IFNuaXBwZXRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJl
Z3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwogCisgICAgU25pcHBldEdlbmVy
YXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBM
aXN0KCkubGluayh0aGlzKTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0
KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKICAgICBpZiAocHJvZmlsaW5nUG9saWN5
ID09IFByb2ZpbGluZ1BvbGljeTo6U2hvdWxkRW1pdFByb2ZpbGluZykKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MuZ3ByKCkpOwog
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAg
ICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVj
b2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNC
eXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50
MzJPbmx5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBT
cGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9iaXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGlucHV0IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGJvb2wgcmVzdWx0SXNJbnQz
MiA9IGZhbHNlOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSkgeworICAg
ICAgICAgICAgcmVzdWx0SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9PUFM6
IGFkZCBhIGNhc2UgZm9yIEJpZ0ludDMyLgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RJbnQzMihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG5vdDMyKHJlc3VsdEdQUik7
CisgICAgICAgIGJveEludDMyKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBpZiAocmVzdWx0
SXNJbnQzMikKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNJbnQzMk9ubHk7IAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSW50MzJPbmx5
IHwgU3BlY0JpZ0ludDsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogI2Vs
c2UKQEAgLTgwMyw3ICsxMjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IElu
c3RydWN0aQogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoYnl0
ZWNvZGUpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGxlZnRSZWdzKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgbGVmdFJlZ3MpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9iaXRhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTg0OSwxOSArMTMwNyw4IEBAIHZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNv
bnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0g
ICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsK
LSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1p
dExPTEJpdEZhc3RQYXRoPE9wPihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47
CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQ7CkBAIC04NzMsMjEgKzEzMjAsNzcgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNo
aWZ0RmFzdFBhdGgoY29uc3QgSQogCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAg
IEZQUlJlZyBzY3JhdGNoRlBSOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IEludmFsaWRGUFJS
ZWc7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGxlZnRUZW1wOworICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRl
bXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8RlBS
VGVtcD4gc2NyYXRjaFRlbXBGUFI7CisKKyAgICAvLyBPT1BTOiBnZXQgc29tZSBpMzIgZmFzdCBw
YXRocyBpbiBoZXJlLgorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVt
cGxhY2UoKnRoaXMsIG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIp
OworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUFIuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9Owor
ICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEZQ
UiA9IHNjcmF0Y2hUZW1wRlBSLT5mcHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgICAgIHNjcmF0Y2hH
UFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDA7CisKKyAgICAgICAgaWYg
KCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAg
ICB9CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMDsK
KyAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBmcFJlZ1QyOworCiAgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CiAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgogCiAgICAgSklUUmlnaHRTaGlm
dEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQ
Uiwgc25pcHBldFNoaWZ0VHlwZSk7CisgICAgICAgIHNjcmF0Y2hGUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hGUFIyLCBzbmlwcGV0U2hpZnRUeXBlKTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLQogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwogICAgIGdlbi5l
bmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCks
IHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2Rl
TnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRl
Y29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJP
bmx5IHwgU3BlY0FueUludEFzRG91YmxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0JpZ0ludDsKKyAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcnNo
aWZ0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDIsMTggKzE0
MDUsNjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9m
aWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4o
KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgeworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIEludDMy
T3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisKKyAgICAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgICAgIEZQUlRlbXAg
bGhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJoc0ZQUiB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRGUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGxocy5ncHIoKSwgbGhzRlBSLmZwcigpKTsK
KyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyaHMuZ3ByKCksIHJoc0ZQUi5m
cHIoKSk7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKGxoc0ZQUi5mcHIoKSwgcmhzRlBSLmZw
cigpLCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0RlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGJ5
dGVjb2RlLm1fZHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
ICAgIG1vdmUobGhzLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShFeGl0S2luZDo6T3ZlcmZsb3csIGJyYW5jaEFkZDMyKE92ZXJmbG93LCByaHMuZ3ByKCks
IHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hv
dWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywg
b3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBhZGREb3VibGUobGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBy
aHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigp
OworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSBy
ZXN1bHQuZnByKCk7CisgICAgICAgICAgICBhZGREb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3Vs
dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93
Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUQWRkSUMqIGFk
ZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVy
YXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKKyAgICBl
bWl0TWF0aElDU2xvdzxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplLCBzbG93Q2FzZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtOTI0LDE1ICsxNDc1LDM1IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8g
QXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMg
YW5kIGRzdC4KLSAgICAvLyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBh
dm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFs
dWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QyOworICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c3JjVGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNy
Y1RlbXAuZW1wbGFjZSgqdGhpcywgb3BlcmFuZCk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAg
IHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyB7IHNyY1RlbXAtPmdwcigpIH07CisgICAgICAgIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJlc3VsdFRlbXAtPmdwcigpIH07CisgICAgICAgIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJp
dGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5k
IGRzdC4KKyAgICAgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEg
YXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAg
c3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworICAgIH0KICNlbHNlCiAgICAg
SlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQsIHNyY1JlZ3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTk0
MSwxOSArMTUxMiwyMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8
CiAKICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1Jl
Z3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBz
cmNSZWdzKTsKLQogICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0
YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CiAKICAg
ICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlz
LCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkg
eworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgc3JjUmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHNyY1JlZ3MuZ3ByKCkpOwogICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7Cisg
ICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBs
YWJlbCgpOwpAQCAtOTYzLDcgKzE1MzcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VFVuYXJ5TWF0aElDPAogICAgIH0pOwogI2VuZGlmCiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNl
dEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgaWYgKGlzU3VidHlw
ZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCksIFNwZWNCeXRlY29kZU51bWJlcikpCisg
ICAgICAgICAgICBwcm92ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5v
blByb2ZpbGVkRnVuY3Rpb24+CkBAIC05NzQsMzkgKzE1NTUsODIgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
KyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5m
aXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVy
YW5kVHlwZXMuc2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
CisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAg
IHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsK
KworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVm
dEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQ
OwogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAg
RlBSUmVnIHJpZ2h0RlBSID0gZnBSZWdUMTsKICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVn
VDI7CiAjZW5kaWYKIAotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3Bl
cmFuZCkpIHsKKyAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMSk7CisgICAg
ICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywg
b3AyKTsKKyAgICAgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmlnaHRUZW1wLT5n
cHIoKSB9OworICAgICAgICB9CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkK
LSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAg
cmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwor
ICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAg
ICAgICAgbGVmdFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1w
bGFjZSgqdGhpcyk7CisKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsK
KyAgICAgICAgc2NyYXRjaEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0
RlBSID0gbGVmdFRlbXBGUC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAt
PmZwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEpOworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgICAgIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdU
MzsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgICAgIGxlZnRGUFIgPSBmcFJl
Z1QwOworICAgICAgICByaWdodEZQUiA9IGZwUmVnVDE7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCgh
bGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKKyAgICAg
ICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5k
KSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Cisg
ICAgICAgIGlmICghR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworICAgIH0KIAotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9w
ZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBS
ZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgbWF0aElDLT5tX2dl
bmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdz
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUik7CiAgICAgCiAgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFs
aWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xl
ZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQog
ICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCkBAIC0xMDE1LDE3ICsxNjM5
LDM0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKIAogICAgIGJv
b2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7Ci0g
ICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJp
Z2h0UmVncyk7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKGxlZnRP
cGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICAgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMSk7CisgICAgICAgICAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRU
ZW1wLT5ncHIoKSB9OworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25z
dCgpKSB7CisgICAgICAgICAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRoaXMsIG9wMik7Cisg
ICAgICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigp
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAg
ICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2Zp
bGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byYgc2xv
d0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRSZWdzLmdwcigpLCByZXN1bHQpOworICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxlZnRSZWdzLmdwcigpKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaWdodFJlZ3MuZ3ByKCkpOwogICAgICAgICBhZGRTbG93
Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgfQogCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOwpAQCAt
MTAzNSwxMSArMTY3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0
aElDCiAgICAgfSk7CiAjZW5kaWYKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShy
ZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1
bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAg
IHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZSBp
ZiAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQWRkPikKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVz
dWx0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm92ZW5UeXBl
KHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjSGVhcEJpZ0ludDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQ
cm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNo
RnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5j
dGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmlu
ZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CkBAIC0xMDQ4LDggKzE2OTgsOCBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVn
cyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpIH07CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CiAjZWxz
ZQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwog
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwpA
QCAtMTA4NSw3ICsxNzM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0
aElDPAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24s
IHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRC
aW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24g
cmVwYXRjaEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUm
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwOTUsMTYgKzE3NDUsNiBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRl
Y29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNl
bmRpZgotICAgIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRl
Y29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMTUsMTUgKzE3NTUsMzYgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgQVNTRVJUKCEo
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkgJiYgR2Vu
ZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkpOwogCi0g
ICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQp
KQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGVs
c2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFu
ZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
IHsgc2xvd0Nhc2UucmVzdWx0LmdwcigpIH07CisgICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3Bl
cmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpKSB7CisgICAgICAgIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgICAgIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MgeyByaWdodFJlZ3MuZ3ByKCkgPT0gcmVnVDIgPyByZWdUMyA6IHJl
Z1QyIH07CisgICAgfSBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25z
dGFudChyaWdodE9wZXJhbmQpKSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyBsZWZ0UmVncy5ncHIoKSA9PSByZWdUMCA/IHJlZ1QxIDogcmVnVDAgfTsKKyAgICB9
IGVsc2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgc2xvd0Nh
c2UuYXJndW1lbnRzWzFdLmdwcigpIH07CisgICAgfQorI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7CisjZW5kaWYKKyAgICAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBpZiAo
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgZWxzZSBpZiAo
R2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisKICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
aWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCkBAIC0xMTU2
LDIzICsxODE3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAtMTE4OCw2MiArMTgzMiwyMzggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50RG91YmxlKG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJs
ZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSk7CiAjZW5kaWYKLQogICAgIFJFTEVBU0Vf
QVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
OwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKKyAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUjsKKyAgICBGUFJSZWcgbGVm
dEZQUjsKKyAgICBGUFJSZWcgcmlnaHRGUFI7CisKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IGxlZnRUZW1wOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gcmlnaHRUZW1wOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRj
aFRlbXA7CisgICAgT3B0aW9uYWw8RlBSVGVtcD4gc2NyYXRjaFRlbXBGUDsKKyAgICBPcHRpb25h
bDxGUFJUZW1wPiBsZWZ0VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IHJpZ2h0VGVtcEZQ
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxlZnRUZW1wLmVtcGxhY2UoKnRoaXMs
IG9wMSk7CisgICAgICAgIHJpZ2h0VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICBy
ZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgbGVm
dFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmlnaHRUZW1wRlAuZW1wbGFjZSgqdGhp
cyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5ncHIoKSB9
OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3ByKCkgfTsK
KyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRj
aEZQUiA9IHNjcmF0Y2hUZW1wRlAtPmZwcigpOworICAgICAgICBsZWZ0RlBSID0gbGVmdFRlbXBG
UC0+ZnByKCk7CisgICAgICAgIHJpZ2h0RlBSID0gcmlnaHRUZW1wRlAtPmZwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0g
ZnBSZWdUMjsKKyAgICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0g
ZnBSZWdUMTsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICgh
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVn
IHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEZQUlJlZyBsZWZ0RlBSID0gZnBSZWdUMDsKKyAg
ICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOworCiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyNlbmRpZgorICAgIAorICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERp
dj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBKSVREaXZH
ZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogCiAgICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewogICAgICAg
ICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXBMaXN0KCksIHJlc3VsdFJlZ3MuZ3ByKCksIHJlc3VsdCk7CiAKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgICAgIGlmICh1c2VMT0woKSkK
KyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5l
bXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Rpdik7CiAgICAgICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgICAgIHdpbGxEZWYocmVzdWx0KTsKKyAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3AxKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSAmJiBpc1N1YnR5cGVTcGVjdWxhdGlv
bihwcm92ZW5UeXBlKG9wMiksIFNwZWNCeXRlY29kZU51bWJlcikpCisgICAgICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJ
bnQ7CiAgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE11bD4oKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGFyaXRoUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
SW50MzIob3AyKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEg
fTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAg
ICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQ
UiA9IHJocy5ncHIoKTsKKworICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZl
SW50MzJPdmVyZmxvdygpIHx8IGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgp
KSB7CisgICAgICAgICAgICAgICAgRlBSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgICAgICBGUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9
IGxoc1RlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAu
ZnByKCk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnBy
KCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzR1BSLCBsaHNGUFIp
OworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJoc0dQUiwgcmhzRlBSKTsK
KyAgICAgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICAgICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hNdWwzMihP
dmVyZmxvdywgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUikpOworICAgICAgICAgICAgICAgIGF1
dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihMZXNzVGhhbiwg
bGhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhp
dEtpbmQ6Ok5lZ2F0aXZlWmVybywgYnJhbmNoMzIoTGVzc1RoYW4sIHJoc0dQUiwgVHJ1c3RlZElt
bTMyKDApKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikpIHsKKyAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgRG91
YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
ZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3VibGUobGhzRlBSLCBy
aHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9w
MikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAg
ICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBG
UFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhz
LmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJocy5mcHIoKTsKKyAgICAgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICBtdWxEb3Vi
bGUobGhzRlBSLCByaHNGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0
ZWNvZGUubV9kc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMo
JmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9p
bnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0
aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZU11bE9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRp
b25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplLCBzbG93Q2FzZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJ
Qyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3ViPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIp
KSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAgICAgICAgICAg
ICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhz
RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQUiB7ICp0aGlz
IH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdwcigpLCBsaHNG
UFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJocy5ncHIo
KSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUobGhzRlBSLmZwcigp
LCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgc2V0RG91
YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHBy
b3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoU3ViMzIo
T3ZlcmZsb3csIGxocy5ncHIoKSwgcmhzLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAg
ICAgICAgICBzZXRJbnQzMihieXRlY29kZS5tX2RzdCwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKG9wMikp
IHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAgICAgICAgICBGUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUobGhzLmZwcigpLCBy
aHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMikpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzIHsgKnRoaXMsIG9w
MSB9OworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCByaHMgeyAqdGhpcywgb3AyIH07CisgICAg
ICAgICAgICBGUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBzdWJEb3VibGUo
bGhzLmZwcigpLCByaHMuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBzZXREb3Vi
bGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUU3ViSUMoJmFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3Vi
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVTdWIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCiAgICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJVFN1
YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAg
ICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKKyAgICBlbWl0TWF0aElDU2xvdzxPcFN1Yj4oc3Vi
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXpl
LCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplLCBz
bG93Q2FzZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9Q
X0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24g
MjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIHdpbGxEZWYoZHN0KTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtMTQ1LDEwICsxNDksOCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2Nv
ZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAg
ICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwpAQCAtMjE2LDYg
KzIxOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAg
ICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBD
YWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCisK
KyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7
CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKQEAg
LTI2NCwxMyArMjY5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
U2xvd0Nhc2UmLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9l
dmFsKTsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogCkBAIC0zMzQsNDQgKzMzNyw0NCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1CiAgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVj
dD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9j
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2Fz
ZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOwor
ICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2Up
OwogfQogIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BD
YWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcFRhaWxDYWxsVmFyYXJncz4oY3VycmVudEluc3RydWN0aW9uLCBz
bG93Q2FzZSwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25z
dHJ1Y3RWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTM4Niw2ICszODksMTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgICAgICB9CiAgICAgfSkoKTsKIAorICAg
IC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVlbHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBs
ZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMgd2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFj
aCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4uLgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJl
U2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgIC8vIE9PUFM6IGZpZ3Vy
ZSBvdXQgaG93IHRvIHJlZ2FsbG9jIHRoZSByZXN1bHQgaGVyZT8KKworICAgIHNwaWxsRm9yQ2Fs
bCgpOworCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBpbnN0cnVjdGlv
biwgdHJ5RmFzdEZ1bmN0aW9uKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIEp1bXAg
ZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMp
KSk7CkBAIC0zOTUsMzAgKzQwNSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluCiAgICAgLy8gY2FsbCByZXN1bHQgKGl0ZXJhdG9yKSBpcyBpbiByZWdUMAogCiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0Owot
ICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBKdW1w
TGlzdCBuZXh0Q2hlY2twb2ludFNsb3c7CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwK
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG5leHRDaGVja3BvaW50
U2xvdy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCisgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKG5leHRDaGVja3BvaW50U2xvdyk7CisK
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMs
IHJlZ1QwIH07CisgICAgICAgIEdQUlJlZyBzaG91bGRCZVJlZ1QwID0gcmVzdWx0VGVtcC5ncHIo
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQmVSZWdUMCA9PSByZWdUMCk7CisgICAg
ICAgIHNldEpTVmFsdWUoYnl0ZWNvZGUubV9uZXh0LCByZWdUMCk7CisgICAgICAgIHByb3ZlblR5
cGUoYnl0ZWNvZGUubV9uZXh0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgcmVnVDApOwogCiAgICAgZmFz
dENhc2UubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludChqdW1wKCkpOwogCi0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHNs
b3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAKICAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBy
ZWdUMDsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CkBAIC00NTYsNiArNDc0LDExIEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgfQogICAgIH0pKCk7
CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKworICAgIC8vIE9PUFM6IExvZ2ljYWxseSwgaXQgZmVl
bHMgbGlrZSB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBsZSBzbG93IGNhc2VzIHBlciBieXRlY29kZXMg
d2l0aCBtdWx0aXBsZSBjaGVja3BvaW50cy4gRWFjaCBoYXMgaXRzIG93biByZXN1bHQsIGV0Yy4u
LgorICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBy
ZWdUMCk7CiAgICAgSnVtcCBnZW5lcmljQ2FzZSA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOwog
CkBAIC00NzYsMzcgKzQ5OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluCiAgICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CiAKICAgICB7Ci0gICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAg
SnVtcExpc3QgZG9uZUNoZWNrcG9pbnRTbG93UGF0aDsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRT
bG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKIAotICAgICAg
ICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQodmFsdWVHUFIpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5w
cm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBK
U1ZhbHVlUmVncyhkb25lR1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgZG9uZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7
CisgICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZChkb25lQ2hlY2twb2ludFNsb3dQYXRoKTsK
KworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIGRvbmVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QyOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICAgICAgY29uc3Qg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKICAgICAgICAg
SnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsK
IAorICAgICAgICBKdW1wTGlzdCB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aDsKKwogICAgICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKICAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAg
ICAgdmFsdWVDaGVja3BvaW50U2xvd1BhdGguYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIHNsb3dDYXNlLmp1bXBzLmFwcGVuZCh2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aCk7CiAg
ICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgd2ls
bERlZihieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgdmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhp
cyk7CkBAIC01MTUsMTAgKzU0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW4KICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0Pihp
bnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwpAQCAtNTI2LDcgKzU1NSw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwogICAgICAgICBHUFJSZWcgaXRlclJl
c3VsdEdQUiA9IHJlZ1QyOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAg
ICAgIHNsb3dDYXNlLmp1bXBzWzFdLmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9i
amVjdDsKICAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3Vs
dEdQUikpOwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJS
ZXN1bHRHUFIpKTsKQEAgLTU0OCw3ICs1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zCiAgICAgfQogCiAgICAgeyAgIAotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgICAgICBzbG93Q2FzZS5qdW1wc1syXS5saW5rKHRoaXMpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAg
R1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIApAQCAtNTYxLDcgKzU5MCw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKIAogICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KLQogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBjb25zdCBjaGFyKiBKSVRDb2RlOjp0eXBl
TmFtZShKSVRUeXBlIGppCiAgICAgICAgIHJldHVybiAiTExJbnQiOwogICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAgIGNhc2UgSklU
VHlwZTo6TE9MSklUOgorICAgICAgICByZXR1cm4gIkxPTCI7CiAgICAgY2FzZSBKSVRUeXBlOjpE
RkdKSVQ6CiAgICAgICAgIHJldHVybiAiREZHIjsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoK
QEAgLTEwOCw3ICsxMTAsNyBAQCBKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29kZVJl
ZihDCiAKIEpJVENvZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZigpCiB7Ci0gICAg
aWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpKQorICAgIGlmICgoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKGlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiBPcHRpb25z
OjpkdW1wREZHRGlzYXNzZW1ibHkoKSkpCiAgICAgICAgICYmIG1fcmVmLmV4ZWN1dGFibGVNZW1v
cnkoKSkKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBKSVQgY29kZSBhdCAiLCBwb2ludGVy
RHVtcChtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCkpLCAiXG4iKTsKIH0KQEAgLTIzNyw2ICsyMzks
MTEgQEAgTmF0aXZlRE9NSklUQ29kZTo6TmF0aXZlRE9NSklUQ29kZShDb2RlUgogI2lmIEVOQUJM
RShKSVQpCiBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhj
ZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KQogeworICAg
IC8vIEZvciBCYXNlbGluZSBKSVQsIHRoaXMgaXMgdHJpdmlhbGx5IHRydWUuCisgICAgLy8gRm9y
IExPTCBKSVQsIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBzcGlsbGVkIHRvIHRoZSBzdGFjayBhdCBl
YWNoIG9wY29kZSwgc28gd2hlbiB3ZQorICAgIC8vIGdvIHRvIHRoZSBvcF9jYXRjaCwgdGhlIGxp
dmUgc3RhdGUgbXVzdCBhbHJlYWR5IGJlIGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUgc3RhY2su
CisgICAgLy8gQWxzbywgb3BfY2F0Y2ggaGFzIG5vIGluY29taW5nIHJlZ2lzdGVyL3R5cGUgcHJv
b2Ygc3RhdGUsIHNvIGl0J3MgdHJpdmlhbCB0byBjYXRjaAorICAgIC8vIGFuIGV4Y2VwdGlvbiBp
biBMT0wganVzdCBieSBqdW1waW5nIHRvIG9wX2NhdGNoLgogICAgIHJldHVybiB7IH07CiB9CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90IHsKICAgICBI
b3N0Q2FsbFRodW5rLAogICAgIEludGVycHJldGVyVGh1bmssCiAgICAgQmFzZWxpbmVKSVQsCisg
ICAgTE9MSklULAogICAgIERGR0pJVCwKICAgICBGVExKSVQKIH07CkBAIC02NywzNiArNjgsMjMg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpJVFR5cGUpOwog
Ci0gICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCi0gICAgewotICAgICAgICByZXR1
cm4gSklUVHlwZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBKSVRUeXBl
IHRvcFRpZXJKSVQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRUeXBl
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlwZTo6REZHSklUOwotICAg
ICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBKSVRUeXBlOjpG
VExKSVQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpJVFR5cGU6Ok5vbmU7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCiAgICAgc3RhdGljIGJvb2wgaXNFeGVjdXRhYmxlU2NyaXB0KEpJVFR5cGUg
aml0VHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgewogICAgICAgICBjYXNl
IEpJVFR5cGU6Ok5vbmU6CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKKworICAgICAgICBjYXNl
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxp
bmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9MSklUOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNyw3ICs5NSwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKICAgICAgICAgY2FzZSBK
SVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBk
ZWZhdWx0OgorICAgICAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6CisgICAgICAgIGNhc2UgSklUVHlw
ZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTExNiw2ICsxMDgs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKICAgICAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CiAgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDYgKzExNywyNCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsU2l0ZUJpdHNBcmVC
eXRjb2RlSW5kZXgoSklUVHlwZSBqaXRUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChqaXRU
eXBlKSB7CisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpI
b3N0Q2FsbFRodW5rOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBzdGF0aWMgYm9vbCBp
c0xvd2VyVGllcihKSVRUeXBlIGV4cGVjdGVkTG93ZXIsIEpJVFR5cGUgZXhwZWN0ZWRIaWdoZXIp
CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0V4ZWN1dGFibGVTY3JpcHQoZXhwZWN0
ZWRMb3dlcikpOwpAQCAtMTQ1LDkgKzE1NiwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gaXNMb3dlck9yU2FtZVRpZXIoZXhwZWN0ZWRMb3dlciwgZXhwZWN0ZWRIaWdoZXIpOwog
ICAgIH0KKworICAgIHN0YXRpYyBib29sIHVzZXNSZXBsYWNlbWVudENvZGVCbG9jayhKSVRUeXBl
IGppdFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpMT0xK
SVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpG
VExKSVQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGlzT3B0aW1pemluZ0pJVChKSVRU
eXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpE
RkdKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQgfHwgaml0VHlwZSA9PSBKSVRUeXBl
OjpMT0xKSVQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNERkdPckZUTChKSVRUeXBlIGpp
dFR5cGUpCisgICAgewogICAgICAgICByZXR1cm4gaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQg
fHwgaml0VHlwZSA9PSBKSVRUeXBlOjpGVExKSVQ7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxG
cmFtZSogY2EKICAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFj
aGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCiAgICAgICAgIC8vIGFuZCBjYW4gY2F1
c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdl
dAogICAgICAgICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAgICBpZiAoIUpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQorICAg
ICAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0
VHlwZSgpKSkKICAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CiAj
aWYgRU5BQkxFKEpJVCkKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTE0NSw2ICsxNDYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5j
dGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24g
dGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUgc3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogI2Vsc2UKQEAgLTE1Nyw2ICsxNTksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0
YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0
aGluZ3MgdGhhdCBjYWxsIHRoaXMgb24gdGhlIGZhc3QgcGF0aCBkb24ndCBzcGlsbCB0byB0aGUg
c3RhY2sgdHdpY2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTE2NywyNSArMTcwLDYgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5
dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
LXsKLSAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93
Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYg
aXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50
KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0
aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9u
LCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKQEAgLTIwNywyNyArMTkxLDM2IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGUKICAgICBqdW1wLmxpbmtU
byhpdGVyLT52YWx1ZSwgdGhpcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNs
b3dDYXNlKEp1bXAganVtcCkKK0FMV0FZU19JTkxJTkUgU2xvd0Nhc2UmIEpJVDo6ZW5zdXJlU2xv
d0Nhc2UoUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIAorICAgIGlmICghbV9zbG93Q2FzZXMuc2l6ZSgpIHx8IG1fc2xvd0Nh
c2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ICE9IG1fYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQobV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKG1fdXNlTE9M
KQorICAgICAgICAgICAgbV9zbG93Q2FzZXMubGFzdCgpLnNhdmVQbGFuID0gc2xvd1BhdGhTYXZl
UGxhbigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWRzdC5pc1ZhbGlkKCkgPT0gISFyZXN1
bHQpOworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkucmVzdWx0ID0gcmVzdWx0OworICAgICAg
ICBtX3Nsb3dDYXNlcy5sYXN0KCkuZHN0ID0gZHN0OworICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0
KCkuanVtcHMuYXBwZW5kKEp1bXBMaXN0IHsgfSk7CisgICAgfQorICAgIHJldHVybiBtX3Nsb3dD
YXNlcy5sYXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNv
bnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKEp1bXAganVtcCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldC4KIAotICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBz
KCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0
ZWNvZGVJbmRleCkpOworICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdCwgZHN0KS5qdW1wc1swXS5h
cHBlbmQoanVtcCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1w
TGlzdCwgUmVnIHJlc3VsdCwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KLSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFr
ZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVt
cHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisKKyAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdCwgZHN0KTsKKyAgICBmb3IgKGNvbnN0IEp1bXAmIGp1bXAgOiBqdW1w
TGlzdC5qdW1wcygpKQorICAgICAgICBzbG93Q2FzZS5qdW1wc1swXS5hcHBlbmQoanVtcCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRp
dmVPZmZzZXQpCkBAIC00MDYsMTEgKzM5OSw2IEBAIEFMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6
Z2V0T3BlcmFuZENvbnMKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3Vi
bGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQotewotICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCks
IGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSkKQEAgLTcxNyw2ICs3MDUsMTggQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6
OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRTbG93
T3AoRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZpcnR1YWxSZWdpc3RlciBkc3QsIFNwZWN1bGF0ZWRUeXBlIGRzdFR5cGUpCit7CisgICAg
c3BpbGxGb3JDYWxsKCk7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIGZ1bmN0aW9uKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
ICAgIGlmIChtX3VzZUxPTCAmJiBkc3QuaXNWYWxpZCgpKSB7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IGRzdFR5cGU7CisgICAgICAgIHdpbGxEZWYoZHN0KTsKKyAgICB9Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3
IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICB9OwogCi0gICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpOworICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNERkdP
ckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSk7CiAKICAgICAgICAgaWYgKG1fZ2VuZXJhdGVGYXN0
UGF0aE9uUmVwYXRjaCkgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsx
MDcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKQEAgLTE4Miw4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0yMDAsOCArMTk2LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwpAQCAtNzU2LDggKzc1MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CkBAIC03NjYsOCArNzU4LDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMTI0
Miw4ICsxMjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIK
ICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkRpc2FsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUg
IkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKQEAgLTQxLDYgKzQyLDggQEAKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
IAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01MSw2ICs1NCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBJZiB3ZSBjaGFuZ2UgcmVnYWxs
b2Mgc3VjaCB0aGF0IHRoZXJlIGNhbiBiZSBOIHJlZ2lzdGVycyBwZXIgbG9jYWwsIHdlIGNhbiBt
YWtlIHRoaXMgc3VjaCB0aGF0IHdlIGRvbid0IG5lZWQgdHdvIHJlZ3MuCisgICAgICAgIGlmIChz
cmMuaXNDb25zdGFudCgpICYmIGdwckZvck9wZXJhbmQoc3JjKSA9PSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0g
cHJvdmVuVHlwZShzcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJUZW1wIHJl
c3VsdCB7ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpKQpAQCAtOTAsMzIgKzExNSw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJl
bnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklE
IHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBHUFJSZWcgcmVzdWx0UmVnOworICAgIEdQUlJlZyBh
bGxvY2F0b3JSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWc7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBhbGxvY2F0b3JUZW1wOworICAg
IE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhbGxvY2F0b3JUZW1wLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcC5lbXBsYWNlKCp0aGlzKTsKKworICAg
ICAgICByZXN1bHRSZWcgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVn
ID0gYWxsb2NhdG9yVGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNoVGVt
cC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0UmVnID0gcmVnVDA7CisgICAg
ICAgIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgICAgICBzY3JhdGNoUmVnID0gcmVnVDI7Cisg
ICAgfQogCiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0UmVnKTsKICAgICBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJl
ZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwog
ICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzLCByZXN1bHRSZWcsIGJ5dGVjb2RlLm1fZHN0KTsKICAgICB9CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX2RzdCwg
cmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjRmlu
YWxPYmplY3Q7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkKKyAg
ICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1LDIzICsxNzEsNTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0lu
c3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSOworICAgIEdQUlJlZyBjb25zdHJ1Y3RvckdQUjsKKyAgICBHUFJSZWcgaW5zdGFuY2VH
UFI7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICAvLyBPT1BTOiBpbnZl
bnQgS25vd25DZWxsT3BlcmFuZAorICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBjb25zdHJ1Y3Rv
clRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBoYXNJbnN0YW5jZVRlbXA7CisKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY29uc3RydWN0b3JUZW1wLmVtcGxhY2UoKnRoaXMs
IGNvbnN0cnVjdG9yKTsKKyAgICAgICAgaGFzSW5zdGFuY2VUZW1wLmVtcGxhY2UoKnRoaXMsIGhh
c0luc3RhbmNlVmFsdWUpOworICAgICAgICByZXN1bHRUZW1wLmVtcGxhY2UoKnRoaXMpOworCisg
ICAgICAgIGNvbnN0cnVjdG9yR1BSID0gY29uc3RydWN0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAg
aW5zdGFuY2VHUFIgPSBoYXNJbnN0YW5jZVRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSByZWdUMTsKKyAgICAgICAgaW5zdGFuY2VH
UFIgPSByZWdUMjsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIGluc3RhbmNlR1BSKTsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdl
IGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIGluc3RhbmNlR1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOworICAg
IGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIGNvbnN0cnVjdG9yR1BSKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0lt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQ
SSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKGNvbnN0cnVjdG9y
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1l
bnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogCiAgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MSw0MCArMjI0LDkzIEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9
IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAv
LyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhp
cyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcmVnVDEpOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNl
bGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRf
YnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHByb3RvKTsKLQotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFs
dWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNj
cmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiB2YWx1ZVRl
bXBDZWxsOworICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gcHJvdG9UZW1wQ2VsbDsKKyAg
ICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVRlbXA7CisgICAgICAgIE9wdGlvbmFs
PFZhbHVlT3BlcmFuZD4gcHJvdG9UZW1wOworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7
ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyBwcm90
b0dQUjsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworCisgICAgICAgIHJlc3VsdFRlbXAuZ3By
KCk7CisgICAgICAgIHNjcmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDJUZW1wLmdw
cigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSAmJiBzaG91bGRT
cGVjdWxhdGVDZWxsKHByb3RvKSkgeworICAgICAgICAgICAgdmFsdWVUZW1wQ2VsbC5lbXBsYWNl
KCp0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXBDZWxsLmVtcGxhY2UoKnRoaXMs
IHByb3RvKTsKKworICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVRlbXBDZWxsLT5ncHIoKTsK
KyAgICAgICAgICAgIHByb3RvR1BSID0gcHJvdG9UZW1wQ2VsbC0+Z3ByKCk7CisKKyAgICAgICAg
ICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YWx1ZVRlbXAuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgcHJvdG9UZW1wLmVtcGxhY2UoKnRoaXMsIHByb3RvKTsKKworICAgICAgICAgICAgdmFs
dWVHUFIgPSB2YWx1ZVRlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1Rl
bXAtPmdwcigpOworCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRUZW1wLmdwcigp
LCBkc3QpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVH
UFIsIHZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90
b0dQUiwgcHJvdG8pOworICAgICAgICB9CisKKyAgICAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgICAgICB1bmF2YWls
YWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgICAgIHJlc3VsdFRlbXAuZ3ByKCksCisg
ICAgICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgICAgIHByb3RvR1BSLAorICAgICAgICAgICAg
c2NyYXRjaDFUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7
CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFRlbXAuZ3ByKCkpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBM
b2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkp
IGludG8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2lu
Y2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBp
dCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBt
dXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1i
b2wuaGFzSW5zdGFuY2UuCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MiwgdmFsdWUpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHBy
b3RvKTsKKworICAgICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKKyAgICAgICAgICAg
IHJlZ1QyLCAvLyB2YWx1ZQorICAgICAgICAgICAgcmVnVDEsIC8vIHByb3RvCisgICAgICAgICAg
ICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKKyAgICAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2Y+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2Zz
W21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VP
Zk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBnZW4uc3R1YkluZm8oKS0+YmFzZUdQUiwgZ2VuLnN0dWJJbmZvKCktPnJlZ3MucHJvdG90eXBl
R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0xOTksMTEgKzMyNSwyOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRW1wdHkpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0VtcHR5KSkKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAg
ICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSkpLCByZWdUMCk7CisKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjExLDI4ICszNTUsNzIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwogCi0gICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZp
bmVkKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwu
bGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU5vdENlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNP
dGhlcikpIHsKKyAgICAgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcCB0ZW1w
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAg
ICAgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlucHV0R1BSKTsKKworICAgICAg
ICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBhdXRvIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8s
IEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0
R1BSLCByZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCB0ZW1wR1BSLCByZXN1
bHRHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgfQogCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAg
ICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVu
ZGVmaW5lZCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAK
KyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgICAgICBKdW1w
IG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgICAgIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMjQxLDEzICs0MjksMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
dW5kZWZpbmVkX29yX251bGwoYwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpCisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQorICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9
CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1Qw
KTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVOdWxsKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI1NSwxMiArNDYzLDM1IEBAIHZv
aWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIH5TcGVjQm9vbGVhbikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyNpZiBDUFUoQVJNNjQpCisgICAg
ICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGlucHV0R1BS
LCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHRlc3Q2NChaZXJvLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICB9CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICB0ZXN0NjQoWmVy
bywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMjY4LDExICs0OTksMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IElu
c3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1i
ZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdDY0KE5vblplcm8sIHJl
Z1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHBy
b3ZlblR5cGUodmFsdWUpICYgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ug
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgdGVzdDY0KE5vblplcm8sIGlucHV0R1BSLCBudW1iZXJUYWdSZWdpc3RlciwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICB0ZXN0
NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCkBAIC0y
ODIsMjEgKzUyOSw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0JpZ0ludCkpCisgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBl
bHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY0JpZ0ludCkpCisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWws
IEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAg
ICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGlu
cHV0R1BSKTsKKworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6QmlnSW50
MzJNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChpbnB1dEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpCaWdJbnQz
Mk1hc2spLCByZWdUMSk7Ci0gICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6QmlnSW50MzJUYWcpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVzdWx0R1BSKTsKIAot
ICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRU
eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVn
VDApOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayks
IHJlZ1QxKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVnVDAp
OworICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNDZWxsLmxpbmsodGhpcyk7Cisg
ICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhlYXBCaWdJbnRUeXBlKSwgcmVnVDApOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
fQogfQogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKIE5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTMxMywxOCArNTk1LDQ3IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29k
ZS5tX3R5cGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZUNlbGwodmFsdWUpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BS
KTsKKworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgICAgICAgICAgaXNOb3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTMzMywxOCArNjQ0LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29i
amVjdChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY09i
amVjdCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1
ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAg
ICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY09iamVjdCkp
CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmU4
KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2
YWx1ZSB9OworICAgICAgICAgICAgdmFsdWVUZW1wLmdwcigpOyAvLyBzcGVjdWxhdGUKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlVGVtcCB7
ICp0aGlzLCB2YWx1ZSB9OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRl
bXAuZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHZhbHVlR1BSKTsKKworICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwogCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBjb21wYXJlOChBYm92ZU9y
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisg
ICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzU1LDcgKzcwOSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fdmFsdWUgfTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigpOwor
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXR1cm5WYWx1ZUdQUik7CisgICAgfSBlbHNlCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVH
UFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjksMTUgKzcyOCw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcmltaXRpdmUoY29uc3QgSW5zCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmpl
Y3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghKHByb3ZlblR5cGUoc3JjKSAm
IH5TcGVjUHJpbWl0aXZlKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRo
aXMsIHNyYyB9OworICAgICAgICAgICAgbW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbCh2
YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdCh2YWx1ZUdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUHJp
bWl0aXZlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgaXNJbW0gPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChy
ZWdUMCkpOworICAgICAgICBpc0ltbS5saW5rKHRoaXMpOwogCisgICAgICAgIGlmIChkc3QgIT0g
c3JjKQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zODYsNTIgKzc3MSwyMjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1i
b2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKCEocHJv
dmVuVHlwZShzcmMpICYgfihTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCkpKSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZh
bHVlLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChzcmMpKSB7CisgICAgICAgICAg
ICBDZWxsT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5
bWJvbChzcmMpIHx8IHNob3VsZFNwZWN1bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChzcmMpKQorICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGVTeW1ib2woc3JjLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICAgICAgbW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQUik7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTeW1ib2wodmFsdWVHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3Zl
blR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKKyAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBicmFuY2hJZlN0cmluZyh2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1ZUdQUiks
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5U
eXBlKHNyYykgJiAoU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworCisgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
ZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rp
b25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBy
ZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGZ1bmN0aW9uIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fZnVuY3Rpb24gfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIG5hbWUgeyAqdGhp
cywgYnl0ZWNvZGUubV9uYW1lIH07CisgICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0
aW9uLmdwcigpOworICAgICAgICBHUFJSZWcgbmFtZUdQUiA9IG5hbWUuZ3ByKCk7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBmdW5j
dGlvbkdQUiwgbmFtZUdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwgcmVnVDApOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
dmFsdWUpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dDMyKHZhbHVlKSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlz
LCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWVUZW1wLmdwcigp
OworICAgICAgICAgICAgdGVzdDMyKFplcm8sIHZhbHVlR1BSLCB2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUodmFsdWUp
KSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9
OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyB2YWx1ZUZQUiA9IHZhbHVlVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gdGVtcEZQUi5mcHIoKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYXV0byBub25aZXJv
ID0gYnJhbmNoRG91YmxlTm9uWmVybyh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbm9uWmVyby5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZU51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWVUZW1wLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZwcigpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhdXRvIG5vblplcm8gPSBicmFuY2hEb3VibGVOb25aZXJvKHZhbHVlRlBSLCBzY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBub25aZXJvLmxpbmsodGhpcyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZh
bHVlIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hHUFIgeyAqdGhpcyB9OworICAgICAg
ICAgICAgRlBSVGVtcCB2YWx1ZUZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIHRl
bXBGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBib29s
IGludmVydCA9IHRydWU7CisgICAgICAgICAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCpt
X3ZtLCBKU1ZhbHVlUmVncyB7IHZhbHVlVGVtcC5ncHIoKSB9LCByZXN1bHRHUFIsIHNjcmF0Y2hH
UFIuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW52ZXJ0KTsK
KyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQ
UiB9KTsKKyAgICAgICAgfQogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7
IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxs
IGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAw
IG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhl
biBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJh
Y2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7
Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdUMCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IGFn
YWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVh
biwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhl
IGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyBy
ZXNwZWN0aXZlbHkpLgorICAgICAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1
ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQu
CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDAp
OworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICB4b3I2NChUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oY29uZGl0aW9uLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJ
bnQzMk9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
RXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAg
ICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJH
UFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZw
U2NyYXRjaDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0
Y2gyLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFG
UFIsIHNjcmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworCisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIH0K
K30KIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRp
b24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBjb25k
aXRpb24gPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oY29uZGl0aW9uKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsg
KnRoaXMsIGNvbmRpdGlvbiB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbiwgdmFsdWVHUFIp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWws
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoMCkpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogaGFuZGxlIG1vcmUgY2FzZXMgaW5saW5lCisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBH
UFJUZW1wIHNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDIg
eyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gxIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgZnBTY3JhdGNoMiB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
R1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBz
Y3JhdGNoMi5ncHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoMUZQUiA9IGZwU2NyYXRj
aDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaDJGUFIgPSBmcFNjcmF0Y2gyLmZw
cigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NyYXRjaDFGUFIsIHNj
cmF0Y2gyRlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisgICAgICAgIGFkZEp1
bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00NDAsNDYgKzk5NCwxMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwo
Y29uc3QgSW5zdHJ1YwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPdGhlcihz
cmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBOb3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgICAgICAgICBhdXRvIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgorICAgICAgICAgICAgYXV0byBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Cisg
ICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoUHRyKEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUiksIHRhcmdldCk7CisgICAgICAgICAgICBhdXRvIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgICAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgICAg
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsgICAgICAgICAgICAKKworICAgICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgorICAgICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBKdW1wIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQp
OyAgICAgICAgICAgIAorCisgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRo
aXMpOworICAgIH0KK30KIAotICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBKdW1w
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0K
LSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxs
Ci0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19
Owogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT3Ro
ZXIoc3JjKSkgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9
OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAg
ICBzcGVjdWxhdGVPdGhlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShp
bnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gy
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAgICAgIGF1
dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlucHV0R1BSLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGF1dG8gbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAgICAgICAgIC8vIE5v
dyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAg
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAogCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0g
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRo
ZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKworICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIGFkZEp1
bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQp
OworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Cisg
ICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgIC8vIE5vdyBo
YW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICAgICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVl
OjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
ICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00ODgsMTAgKzExMjUsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5l
ZF9vcl9udWxsKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoIShwcm92ZW5U
eXBlKHZhbHVlKSAmIFNwZWNPdGhlcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8u
CisgICAgICAgIH0gZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjT3RoZXIpKQor
ICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUw
MCwxMCArMTE1MywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNv
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY090aGVyKSkKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAg
ICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNPdGhlcikpIHsKKyAgICAgICAg
ICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2Ny
YXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
NjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUxNSw2NSArMTE4NCw0NDIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1YwogICAgIEFTU0VSVChz
cGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFs
UG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5tX2hhc0p1bXBlZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlw
ZShzcmMpICYgc3BlY3VsYXRpb25Gcm9tVmFsdWUoc3BlY2lhbFBvaW50ZXIpKSkgeworICAgICAg
ICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBhdXRvIGVxdWFsID0g
YnJhbmNoUHRyKEVxdWFsLCBpbnB1dEdQUiwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5h
c0NlbGwoKSkpOworICAgICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRh
Lm1faGFzSnVtcGVkKTsKKyAgICAgICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAg
ICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
c3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigx
KSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CisgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorc3RhdGljIHZv
aWQgY29tcGFyZVN0cmluZ3MoSklUJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgbm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYgc2xvd1BhdGgsIEdQUlJlZyBsaHNHUFIsIEdQUlJlZyByaHNHUFIsIEdQUlJlZyBs
aHNUZW1wR1BSLCBHUFJSZWcgcmhzVGVtcEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEdQUlJlZyBz
Y3JhdGNoMkdQUikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVn
VDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc0dQUiwgSlNTdHJpbmc6Om9mZnNldE9m
VmFsdWUoKSksIGxoc1RlbXBHUFIpOworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJoc0dQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJoc1RlbXBHUFIpOwor
CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZlJvcGVTdHJpbmdJbXBsKGxoc1RlbXBH
UFIpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwocmhz
VGVtcEdQUikpOworCisgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNU
ZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgIAorICAgIG5vdEVxdWFsLmFwcGVuZChqaXQuYnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVt
cEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLAorICAgICAgICBzY3JhdGNo
R1BSKSk7CisgICAgCisgICAgZXF1YWwuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0
LmJyYW5jaFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0
KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZs
YWdJczhCaXQoKSkpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMigKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKyAg
ICAKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsaHNUZW1wR1BSLCBT
dHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBsaHNUZW1wR1BSKTsKKyAgICBqaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0
KCkpLCByaHNUZW1wR1BSKTsKKyAgICAKKyAgICBhdXRvIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAg
ICAKKyAgICBqaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aEdQUik7CisKKyAgICB7CisgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KGxoc1RlbXBHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgYXV0byBtYWNyb1NjcmF0Y2ggPSBqaXQuc2NyYXRjaFJlZ2lz
dGVyKCk7CisgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBkaXNhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgocmhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgbWFj
cm9TY3JhdGNoKTsKKyAgICAgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2gyR1BSLCBtYWNyb1NjcmF0Y2gpKTsKKyAgICB9Cisg
ICAgCisgICAgaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRj
aEdQUikubGlua1RvKGxvb3AsICZqaXQpOworICAgIGVxdWFsLmFwcGVuZChqaXQuanVtcCgpKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCitzdGF0aWMgdm9pZCBjb21wYXJlU3RyaWN0RXFDZWxscyhKSVQmIGppdCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBu
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgR1BSUmVnIGxoc0dQ
UiwgR1BSUmVnIHJoc0dQUiwgR1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyByaHNUZW1wR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgR1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CisgICAgZXF1YWwuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJz
OjpFcXVhbCwgbGhzR1BSLCByaHNHUFIpKTsKKworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJh
bmNoSWZIZWFwQmlnSW50KGxoc0dQUikpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
SWZIZWFwQmlnSW50KHJoc0dQUikpOworCisgICAgYXV0byBsaHNJc1N0cmluZyA9IGppdC5icmFu
Y2hJZlN0cmluZyhsaHNHUFIpOworICAgIG5vdEVxdWFsLmFwcGVuZChqaXQuanVtcCgpKTsKKwor
ICAgIGxoc0lzU3RyaW5nLmxpbmsoJmppdCk7CisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFu
Y2hJZk5vdFN0cmluZyhyaHNHUFIpKTsKKworICAgIGNvbXBhcmVTdHJpbmdzKGppdCwgZXF1YWws
IG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXBHUFIsIHJoc1RlbXBH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KK3ZvaWQgSklUOjplcUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEp0cnVlPigpOworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5
dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgY29uc3RleHBy
IGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcT46OnZhbHVlOworICAgIGF1dG8gZ3BD
b21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBp
c0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsK
KworICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShs
aHMpLCBwcm92ZW5UeXBlKHJocykpKQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0VxID8g
SlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNl
bGwocmhzKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9Owor
ICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1Rl
bXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNo
b3VsZFNwZWN1bGF0ZU9iamVjdChyaHMpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsK
KyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTeW1ib2wobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJo
c0dQUik7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BS
KTsKKworICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2hU
ZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAg
ICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisg
ICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0
aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hU
ZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgs
IHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1
bXAoKTsKKworICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIp
OworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhsaHNHUFIpLCByZXN1
bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhl
YXBCaWdJbnQobGhzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkhlYXBC
aWdJbnQocmhzR1BSKSk7CisgICAgICAgICAgICBjb21wYXJlUHRyKGdwQ29tcGFyZSwgbGhzR1BS
LCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgewor
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50
MzJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIg
PSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsK
KyAgICAgICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNw
ZWN1bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9
OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVn
IHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGNvbXBhcmVEb3VibGUoZnBDb21wYXJl
LCBsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAg
ICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgY29tcGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIp
OworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxh
dGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChs
aHNHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAg
ICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKGxoc0dQUikpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoSWZOb3RJ
bnQzMihyaHNHUFIpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwg
ZHN0KTsKKworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgIH0KKworICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3A+Cit2b2lkIEpJVDo6amVxSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIEFTU0VSVCh1c2VMT0woKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKyAg
ICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEplcT46OnZhbHVlOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBhdXRvIGdwQ29tcGFyZSA9IGlzRXEgPyBFcXVhbCA6
IE5vdEVxdWFsOworICAgIGF1dG8gZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3Jk
ZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgaWYg
KCFpc0VxKQorICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMp
KSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
IENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdl
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hv
dWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChs
aHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOwor
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dD
YXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlU3Ry
aW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQ
Uik7CisKKyAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAg
ICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
VGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlz
IH07CisKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgSnVtcExpc3Qg
bm90RXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAg
Y29tcGFyZVN0cmluZ3MoKnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwg
cmhzR1BSLCBsaHNUZW1wLmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwg
c2NyYXRjaDJUZW1wLmdwcigpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsK
KworICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGVxdWFs
LCB0YXJnZXQpOworICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFkZEp1bXAobm90RXF1YWwsIHRhcmdldCk7
CisgICAgICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2Uo
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50
cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
cmhzR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZTdHJpbmcobGhzR1BS
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZlN0cmluZyhyaHNHUFIpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQp
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgSW50MzJPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Z3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVEb3VibGUobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgewor
ICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIERv
dWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgRlBSUmVnIGxoc0ZQ
UiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBS
KSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgIE51bWJlck9wZXJhbmQgbGhz
VGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgTnVtYmVyT3BlcmFuZCByaHNUZW1wIHsgKnRo
aXMsIHJocyB9OworICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAg
ICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4K
KworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNH
UFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIo
KTsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50
MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJo
c0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlcUltcGw8T3BFcT4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KIAotICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2
YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
Owordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsK
KyAgICBHUFJSZWcgcmhzR1BSID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
IGxoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0g
c2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIGVxSW1wbDxPcE5lcT4oY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2Fz
ZSYgc2xvd0Nhc2UpCit7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBy
aHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xv
d0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CisgICAgfQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsK
KyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKK30KIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
Owordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBqZXFJbXBsPE9wSmVxPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgIGplcUltcGw8T3BKbmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVs
c2UgeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CisgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSBy
ZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJn
dW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0u
Z3ByKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAvLyBPT1BTOiBXZSBjYW4gbWFrZSB0aGlz
IGEgc2luZ2xlIGJyYW5jaCBpZiB0aGUgcmVzdG9yZSBkb2Vzbid0IGNsb2JiZXIgcmV0dXJuVmFs
dWVHUFIuCisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBT
bG93Q2FzZSYgc2xvd0Nhc2UpCit7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cisg
ICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBd
LmdwcigpOworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7Cisg
ICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xv
d0Nhc2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorCiB2
b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhy
b3c+KCk7CkBAIC01ODksNzQgKzE2MzUsMjQwIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cShjb25zdCBJbnN0cnUKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxOworICAgICAgICBhdXRvIGdwQ29tcGFyZSA9IGlz
RXEgPyBFcXVhbCA6IE5vdEVxdWFsOworICAgICAgICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBE
b3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAg
ICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVFcXVhbChwcm92ZW5U
eXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
Mihpc0VxID8gSlNWYWx1ZTo6VmFsdWVGYWxzZSA6IEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGxoc1RlbXAg
eyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBDZWxsT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMs
IHJocyB9OworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU9iamVjdChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU9iamVjdChyaHMp
KSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAg
IGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
U3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocmhz
LCByaHNHUFIpOworICAgICAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNo
b3VsZFNwZWN1bGF0ZVN0cmluZyhsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAg
R1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1Rl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhp
cyB9OworCisgICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICAgICAg
SnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisK
KyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBz
bG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHNj
cmF0Y2hUZW1wLmdwcigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVl
OjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNW
YWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAg
ICAgICAgIEp1bXBMaXN0IGVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFs
OworICAgICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAg
R1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1Rl
bXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhp
cyB9OworICAgICAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKwor
ICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1
YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIo
KSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIoKSk7CisKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVl
OjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFpc0VxID8gSlNW
YWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MihyaHMpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMg
fTsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAg
ICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMp
KSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMp
KSB7CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBy
aHNGUFIgPSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgY29tcGFyZURvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVjdWxhdGl2ZSBjYXNlcyBoZXJl
LgorCisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBsaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhz
U2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9Owor
CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIGxoc1Nj
cmF0Y2hHUFIgPSBsaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc1NjcmF0
Y2hHUFIgPSByaHNTY3JhdGNoLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNy
YzIsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsK
IAogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3Vt
aW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJp
Z2h0IGlzIERvdWJsZSkKLSAgICAgICAgZ290byBzbG93UGF0aDsKLSAgICByZXN1bHQgPSAobGVm
dCA9PSByaWdodCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZ290byBkb25lOwotICAgIGlm
IChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKLSAgICAgICAgZ290byBzbG93UGF0aDsK
LSAgICBkb25lOgotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgKi8KLQotICAgIC8vIFRoaXMgZnJh
Z21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKSwgd2l0
aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5haXZlbHkg
cmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCi0gICAgLy8g
VGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAx
PDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBh
dCAwCi0gICAgLy8gSWYgaXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxs
IGJlIGl0cyBvbmx5IGhpZ2ggYml0IHNldAotICAgIC8vIExlYXZpbmcgb25seSBkb3VibGVzIGFi
b3ZlIG9yIGVxdWFsIDE8PDUwLgotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBtb3ZlKHJl
Z1QxLCByZWdUMyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdo
Qml0cyksIHJlZ1Q1KTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMyk7Ci0gICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7Ci0gICAgb3I2
NChyZWdUMiwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwg
cmVnVDMsIHJlZ1Q1KSk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVn
VDUpOwotICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUNSk7Ci0KLSAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBp
cyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1Qx
LCByZWdUMik7Ci0gICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNp
c2U6IHVubGVzcyB0aGVyZSBpcyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNs
b3cgcGF0aCBpZiBib3RoIGFyZSBzdHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QyKSk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGZhbHNlKTsKKyNlbHNlCiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpOU3RyaWN0RXEpCi0gICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOwotICAg
IGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Q1KTsKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOwor
ICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIGxoc0lzQ2VsbCA9IGJyYW5jaElmQ2VsbChsaHNHUFIpOworICAgICAgICAg
ICAgICAgIGF1dG8gYm90aE5vdENlbGxzID0gYnJhbmNoSWZOb3RDZWxsKHJoc0dQUik7CisgICAg
ICAgICAgICAgICAgbm90RXF1YWwuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBs
aHNJc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHJoc0dQUikpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFsLCBu
b3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNTY3JhdGNoR1BSLCByaHNTY3Jh
dGNoR1BSLCB0ZW1wR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIGJvdGhOb3RDZWxscy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEg
ZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5k
IHRoZW4gdGVzdAorICAgICAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAg
IEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOdW1iZXIobGhzR1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0
aGlzKTsKKyAgICAgICAgICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAg
ICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOworCisgICAgICAgICAgICBpZiAoaXNFcSkKKyAgICAg
ICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgbGhz
R1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgICAgICBKdW1wTGlzdCBkb25l
OworICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgZXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVl
OjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMighaXNFcSA/IEpTVmFsdWU6OlZhbHVl
VHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMsIHJlZ1Qw
LCByaHMsIHJlZ1QxKTsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgLyogQXQgYSBoaWdo
IGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgorICAgICAgICBJ
ZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQorICAgICAgICAgICAgZ290byBz
bG93UGF0aDsKKyAgICAgICAgcmVzdWx0ID0gKGxlZnQgPT0gcmlnaHQpOworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAobGVmdCBpcyBDZWxs
IHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICBk
b25lOgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAqLworCisgICAgICAgIC8vIFRo
aXMgZnJhZ21lbnQgaW1wbGVtZW50cyAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91Ymxl
KSwgd2l0aCBhIHNpbmdsZSBicmFuY2ggaW5zdGVhZCBvZiB0aGUgNCB0aGF0IHdvdWxkIGJlIG5h
aXZlbHkgcmVxdWlyZWQgaWYgd2UgdXNlZCBicmFuY2hJZkludDMyL2JyYW5jaElmTnVtYmVyCisg
ICAgICAgIC8vIFRoZSB0cmljayBpcyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhl
biBhZGRpbmcgMTw8NDkgdG8gaXQgd2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBo
aWdoIGJpdHMgYXQgMAorICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQgYWxsLCB0
aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0CisgICAgICAgIC8vIExlYXZp
bmcgb25seSBkb3VibGVzIGFib3ZlIG9yIGVxdWFsIDE8PDUwLgorICAgICAgICBtb3ZlKHJlZ1Qw
LCByZWdUMik7CisgICAgICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TG93ZXN0T2ZIaWdoQml0cyksIHJlZ1Q1KTsKKyAgICAgICAgYWRk
NjQocmVnVDUsIHJlZ1QyKTsKKyAgICAgICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKKyAgICAgICAg
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUNSk7CisgICAgICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywg
cmVnVDUpKTsKKworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDUp
OworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDUpOworCisg
ICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGF0IGxl
YXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0cmluZ3MgYW5kIEJpZ0ludHMpLgorICAgICAg
ICBhbmQ2NChyZWdUMSwgcmVnVDIpOworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29t
ZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9ubHkg
bmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkK
KyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW02NCgxKSwgcmVnVDUpOworICAgICAgICBib3hC
b29sZWFuKHJlZ1Q1LCBKU1ZhbHVlUmVncyB7IHJlZ1Q1IH0pOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOwogI2Vsc2UgLy8gaWYgIVVTRShCSUdJTlQzMikKLSAg
ICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgotICAg
IG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvcjY0KHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7Ci0KLSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVy
IGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmlu
ZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0
T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJl
cihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRoaXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJy
YW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1Qx
KSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYm90
aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgICAgICBtb3ZlKHJlZ1QwLCByZWdU
Mik7CisgICAgICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKKyAgICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgSnVtcCBs
ZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAgbGVmdE9LLmxpbmsodGhpcyk7CisgICAgICAgIEp1
bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk51bWJlcihyZWdUMSkpOworICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKLSAg
ICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBj
b21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAg
Y29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBpZiAodHlwZSA9PSBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFy
ZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogI2VuZGlmCisg
ICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjc0LDY4ICsxODg2LDIwMyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdU
MCwgc3JjMiwgcmVnVDEpOworICAgIFZpcnR1YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhzID0gYnl0ZWNvZGUubV9yaHM7CiAKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgYm9vbCBpc0VxID0gdHlwZSA9PSBDb21waWxlT3BTdHJpY3RF
cVR5cGU6OlN0cmljdEVxOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGF1dG8g
Z3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8gZnBDb21w
YXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQ7CisKKyAgICAgICAgaWYgKCF2YWx1ZXNDb3VsZEJlRXF1YWwocHJvdmVuVHlwZShsaHMp
LCBwcm92ZW5UeXBlKHJocykpKSB7CisgICAgICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENl
bGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhz
R1BSID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1w
LmdwcigpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYg
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMs
IHJoc0dQUik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBs
aHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGVTeW1ib2wocmhzLCByaHNHUFIpOworICAgICAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoUHRyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxh
dGVTdHJpbmcocmhzKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxo
c0dQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKwor
ICAgICAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSks
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhz
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1w
TGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKworICAg
ICAgICAgICAgICAgIEdQUlRlbXAgbGhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAg
R1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0
Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7
ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFDZWxscygqdGhpcywg
ZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCks
IHJoc1RlbXAuZ3ByKCksIHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAg
IGlmIChpc0VxKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7
CisgICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnQzMihsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIElu
dDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
KSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUobGhz
KSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkgeworICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBy
aHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1Rl
bXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIp
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihsaHMp
ICYmIHNob3VsZFNwZWN1bGF0ZU51bWJlcihyaHMpKSB7CisgICAgICAgICAgICBOdW1iZXJPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVt
cC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIgPSByaHNUZW1wLmZwcigpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiks
IHRhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBk
byBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFu
ZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1Rl
bXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhp
cyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHRlbXAyIHsg
KnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBsaHNTY3JhdGNoR1BSID0gbGhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByaHNTY3JhdGNoR1BSID0gcmhzU2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0
ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAy
LmdwcigpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8g
KGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6Ci0gICAgSWYgKGxlZnQgaXMgRG91Ymxl
IHx8IHJpZ2h0IGlzIERvdWJsZSkKLSAgICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGlmIChsZWZ0
ID09IHJpZ2h0KQotICAgICAgIGdvdG8gdGFrZW47Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCBy
aWdodCBpcyBDZWxsKQotICAgICAgIGdvdG8gc2xvd1BhdGg7Ci0gICAgZ290byBub3RUYWtlbjsK
LSAgICAqLwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJs
ZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRo
ZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50
MzIvYnJhbmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUg
aXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxv
dywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1i
ZXIgYXQgYWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShy
ZWdUMCwgcmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1
LCByZWdUMik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIEp1bXAgYXJl
RXF1YWwgPSBicmFuY2g2NChFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGFyZUVxdWFs
LCB0YXJnZXQpOwotCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIC8vIEp1bXAgc2xvdyBp
ZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdzIGFuZCBCaWdJbnRzKS4K
LSAgICBhbmQ2NChyZWdUMSwgcmVnVDIpOwotICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25seSBu
ZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChmYWxz
ZSk7CisjZWxzZQorICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShS
ZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBM
aXN0IG5vdEVxdWFsOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbGVmdElz
Q2VsbCA9IGJyYW5jaElmQ2VsbChsaHNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gYm90aE5v
dENlbGxzID0gYnJhbmNoSWZOb3RDZWxsKHJoc0dQUik7CisgICAgICAgICAgICAgICAgbm90RXF1
YWwuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBsZWZ0SXNDZWxsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgbm90RXF1YWwuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyaHNH
UFIpKTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVTdHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRo
LCBsaHNHUFIsIHJoc0dQUiwgbGhzU2NyYXRjaEdQUiwgcmhzU2NyYXRjaEdQUiwgdGVtcEdQUiwg
dGVtcDJHUFIpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAg
ICAgICAgICAgICAgIGJvdGhOb3RDZWxscy5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0
IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAg
ICAgICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KKyAgICAgICAgICAgIGF1dG8gbGVmdE9LID0gYnJh
bmNoSWZJbnQzMihsaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIobGhzR1BSKSk7CisgICAgICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgICAg
IGF1dG8gcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmhzR1BSKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJoc0dQUikpOworICAgICAgICAgICAgcmlnaHRPSy5saW5r
KHRoaXMpOworICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaDY0KEVxdWFsLCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgYWRkSnVtcChlcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5saW5r
KHRoaXMpOworICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2g2NChOb3RFcXVhbCwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAobm90RXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgZXF1YWwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMobGhzLCByZWdUMCwgcmhzLCByZWdUMSk7
CiAKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgewot
ICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICAgICAgYXJlRXF1YWwubGluayh0
aGlzKTsKLSAgICB9CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2
ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CisgICAgICAgIElmIChs
ZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUpCisgICAgICAgICAgIGdvdG8gc2xvd1Bh
dGg7CisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICBnb3RvIHRha2VuOwor
ICAgICAgICBpZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCisgICAgICAgICAgIGdv
dG8gc2xvd1BhdGg7CisgICAgICAgIGdvdG8gbm90VGFrZW47CisgICAgICAgICovCisKKyAgICAg
ICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBp
cyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRoYXQgd291
bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJhbmNoSWZO
dW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1ZhbHVlIGlzIGFuIElu
dDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3ZlcmZsb3csIGxlYXZp
bmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIG51bWJlciBh
dCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBzZXQKKyAgICAgICAg
Ly8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOworICAg
ICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwor
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAgICAgICAgb3I2NChy
ZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWws
IHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIEp1bXAgYXJlRXF1YWwgPSBicmFuY2g2NChFcXVh
bCwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7CisK
KyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgYXQg
bGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50cykuCisgICAg
ICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBkbyBz
b21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMgYSBCaWdJbnQzMiwgd2Ugb25s
eSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUgc3RyaW5ncworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkgeworICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOworICAgICAg
ICB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3Ro
IGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwot
ICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVn
VDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRl
c3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAg
Ly8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9L
LmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmso
dGhpcyk7Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
LSAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MCksIHRhcmdldCk7CisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8g
Y292ZXIgc3RyaW5ncykuCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2
NChyZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKKworICAgICAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0
ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAg
ICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElm
SW50MzIocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkp
OworICAgICAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJl
Z1QxKSk7CisgICAgICAgIHJpZ2h0T0subGluayh0aGlzKTsKKyAgICAgICAgaWYgKHR5cGUgPT0g
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7
CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzQ4LDg5ICsyMDk1LDIyOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RyCiAgICAgY29tcGlsZU9wU3Ry
aWN0RXFKdW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BSID0g
cmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFd
LmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIsIHJo
c0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xvd1BhdGhT
YXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgdGFy
Z2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBHUFJS
ZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7
CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBhdXRvIGRvbmUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOworICAgICAgICByZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nh
c2UpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIHRhcmdldCk7CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyYykpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51
bWJlcihzcmMsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYykgJiBTcGVj
Qnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICAgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBK
dW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLSAgICBpc0JpZ0ludC5saW5r
KHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRp
b24ocHJvdmVuVHlwZShzcmMpLCBTcGVjQmlnSW50IHwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgewor
ICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywg
aW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQoc3JjKSkgeworICAgICAgICAgICAgc3BlY3Vs
YXRlQW55QmlnSW50KHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3Jj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEhlYXBCaWdJbnQoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBub3RD
ZWxsLmxpbmsodGhpcyk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICAgICAgYXV0byBpc051
bWJlciA9IGJyYW5jaElmTnVtYmVyKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90QmlnSW50MzIoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpLCByZXN1bHRHUFIsIGRz
dCk7CisgICAgICAgICAgICBpc051bWJlci5saW5rKHRoaXMpOworI2Vsc2UKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworI2VuZGlmCisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50
OworICAgICAgICB9CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOworCisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1Qw
KSk7CisgICAgICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1Qw
KSk7CisgICAgICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAg
ICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJh
bmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZVN0cmluZyhzcmMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsK
LQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHNyYykpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAg
ICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBw
cm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwor
ICAgICAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY09iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAg
IEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIpLCByZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBT
cGVjT2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKworICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAo
c3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogZGVhbCB3aXRoIHRoaXMuCisgICAgcmVz
ZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdlIGNhbiBPU1IgZW50ZXIgd2l0
aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKICAgICByZXN0b3JlQ2FsbGVlU2F2
ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBA
IC04ODgsOSArMjM3NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNv
bnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
YXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgcHJvdmVuVHlwZShjdXJyZW50U2NvcGUpICY9IFNwZWNDZWxsOyAvLyBXZSBr
bm93IGl0J3MgYSBjZWxsLgorCisgICAgICAgIENlbGxPcGVyYW5kIHNjb3BlIHsgKnRoaXMsIGN1
cnJlbnRTY29wZSB9OworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAg
ICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdE90aGVy
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNj
b3BlLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDUsOSArMjQwNSwxNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigm
dm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkyMiw5ICsy
NDMwLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxl
LT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNjcnV0aW5lZSB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQUiwgdGFibGVJbmRleCk7CisgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MzgsOTMgKzI0NTQsMTQ3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBU
YWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlu
cHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgaW5wdXRHUFIsIHRhYmxlSW5kZXgpOworICAg
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IFdl
IGNhbiBkbyBiZXR0ZXIuCiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3Rz
QWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2
bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5v
RGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXFOdWxsPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGNvbnN0ZXhwciBib29sIGlz
RXEgPSBzdGQ6OmlzX3NhbWU8T3AsIE9wRXFOdWxsPjo6dmFsdWU7CisgICAgYXV0byBjb21wYXJl
T3AgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgY29tcGFyZTY0
KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHNyYykp
IHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAg
ICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisK
KyAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0
IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsK
KyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKworICAgICAgICAgICAgSnVt
cCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihp
c0VxID8gMCA6IDEpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgSnVtcCB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IGlucHV0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihjb21wYXJl
T3AsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOworCisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgY29tcGFyZTY0KGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgd2FzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBw
cm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAgOiAxKSwgcmVnVDApOwor
ICAgICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAg
ICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAg
aXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworICAgICAgICBjb21w
YXJlNjQoY29tcGFyZU9wLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IHJlZ1QwKTsKIAotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7CisgICAgICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgfQorfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZXFOdWxsSW1wbDxPcEVxTnVsbD4o
Y3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQot
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlcU51bGxJbXBsPE9wTmVxTnVsbD4oY3VycmVudEluc3RydWN0aW9uKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogeworICAg
IC8vIE9PUFM6IGFzc2VydCB3ZSBoYXZlIG5vIHJlZ2lzdGVyIHN0YXRlIGhlcmUgc2luY2UgZW1p
dFdyaXRlQmFycmllciBjYW4gbWFrZSBDIGNhbGxzLgorCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJ
IGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVn
aXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9s
b25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJl
LgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChz
aXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikgeworICAgICAgICBhdXRvIHZhcmlhYmxlID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaik7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJl
c3NGb3IodmFyaWFibGUpKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgcHJv
dmVuVHlwZSh2YXJpYWJsZSkgPSBTcGVjT3RoZXI7CisgICAgfQogCiAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTEwMzUsMjMgKzI2MDUsOTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NvcGU7CisgICAgT3B0aW9uYWw8R1BSVGVt
cD4gcmVzdWx0OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdC5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgc2NvcGUgPSByZXN1bHQtPmdwcigpOworICAgIH0gZWxzZQorICAg
ICAgICBzY29wZSA9IHJlZ1QwOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY29wZSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjb3Bl
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHNjb3BlKTsKKworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgc2NvcGUpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCBzY29wZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVj
dHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIGF1dG8gaXNTdHJpY3Qg
PSBieXRlY29kZS5tX2VjbWFNb2RlLmlzU3RyaWN0KCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjRHN0KSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwg
c3JjRHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0g
U3BlY0hlYXBUb3A7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlw
ZShzcmNEc3QpID0gU3BlY09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAg
fSBlbHNlIGlmIChpc1N0cmljdCAmJiBzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyY0RzdCkpIHsK
KyAgICAgICAgICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBtb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGUg
cHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRpdHkuCisgICAgICAgIH0gZWxzZSBpZiAo
aXNTdHJpY3QgJiYgIShwcm92ZW5UeXBlKHNyY0RzdCkgJiBTcGVjT2JqZWN0T3RoZXIpKSB7Cisg
ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm92
ZW5UeXBlKHNyY0RzdCkgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgIGF1dG8gbm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSksIHJlc3VsdEdQ
Uiwgc3JjRHN0KTsKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgLy8gTm8gbmVlZCB0byB1cGRhdGUgcHJvdmVuVHlwZSwgc2luY2Ugd2UncmUgYW4gaWRlbnRp
dHkuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKworICAgICAgICAgICAgSnVtcCBub3RDZWxsOworICAgICAgICAgICAgaWYgKGlzU3RyaWN0
KQorICAgICAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChpbnB1dEdQUiksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpLCByZXN1bHRH
UFIsIHNyY0RzdCk7CisKKyAgICAgICAgICAgIGlmIChub3RDZWxsLmlzU2V0KCkpCisgICAgICAg
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKworICAgICAgICAgICAgaWYgKGlzU3RyaWN0KQorICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNIZWFwVG9wOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNPYmplY3Q7IC8vIE9PUFM6IGlz
IHRoaXMgcmlnaHQ/CisgICAgICAgIH0KIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgICAgIHNldEpT
VmFsdWUoc3JjRHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5
cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgICAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1OSw2ICsyNjk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0
YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CkBAIC0xMDY4LDcgKzI3MDksMzEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIFJlZ2lzdGVy
SUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcg
PSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gY2FsbGVlT3BlcmFuZDsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiBncHJUZW1wMTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMjsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiBncHJUZW1wMzsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBncHJU
ZW1wNDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgY2FsbGVlT3BlcmFuZC5lbXBsYWNl
KCp0aGlzLCBjYWxsZWUpOworICAgICAgICBncHJUZW1wMS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgZ3ByVGVtcDIuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXAzLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBncHJUZW1wNC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBjYWxsZWVS
ZWcgPSBjYWxsZWVPcGVyYW5kLT5ncHIoKTsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gZ3ByVGVt
cDEtPmdwcigpOworICAgICAgICBzdHJ1Y3R1cmVSZWcgPSBncHJUZW1wMi0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hSZWcgPSBncHJUZW1wMy0+Z3ByKCk7CisgICAgICAgIHJhcmVEYXRhUmVnID0g
Z3ByVGVtcDQtPmdwcigpOworICAgICAgICBjYWNoZWRGdW5jdGlvblJlZyA9IGdwclRlbXA0LT5n
cHIoKTsKKyAgICAgICAgcmVzdWx0UmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKworICAg
IGlmICh1c2VMT0woKSkKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0UmVnLCBkc3QpOwor
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVP
clJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSkpOwpAQCAtMTA4Niw2NCArMjc1MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdFJlZyk7
CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6Pigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19
Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
ICghIShwcm92ZW5UeXBlKHNyYykgJiBTcGVjRW1wdHkpKSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoaW5w
dXRHUFIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCisgICAgLy8gVGhpcyB3b3JrcyBm
b3IgTE9MIHNpbmNlIHRoZSBzbG93IHBhdGggZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQganVt
cCBoZXJlLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZkN1c3RvbT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTEx
NjIsOCArMjc5NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
CiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCiB7CisgICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOyAvLyBNYWtlIGl0IHNvIHdl
IGNhbiBPU1IgZW50ZXIgd2l0aG91dCBhbnkgcmVnYWxsb2Mgb3IgdHlwZSBzdGF0ZS4KKwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJv
bUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVs
aWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgICAgIC8vIE9PUFM6IGNsZWFy
IHJlZ2lzdGVyIHN0YXRlIGhlcmUgc28gd2UgY2FuIGFsd2F5cyBPU1IgZW50ZXIuCiAgICAgICAg
IHVpbnQ2NF90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVj
dGlvbik7CiAgICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFy
bHlSZXR1cm4gPSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjpl
YXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTE4NywxMyArMjgyNCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBm
b3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkp
IHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGlt
aXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEyMDYsMTEgKzI4NDEs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAg
ICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgLy8gZW1p
dEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IC8vIE9P
UFM6IEkgdGhpbmsgdGhpcyBjYW4ganVzdCBiZSByZW1vdmVkIHNvIGl0IHdvcmtzIGluIExPTCB0
b28uCiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KIApAQCAtMTIzMywxMCArMjg2Nyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnMKICAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1
cGVyU2FtcGxlckNvdW50KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCkBAIC0xMjQ1LDggKzI4NzcsMTggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNv
ZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JD
YWxsKCk7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMsIHJldHVyblZhbHVlR1BSIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY1JlZ0V4cE9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICB9CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTI1NiwyMyArMjg5OCw0MiBAQCB2b2lkIEpJ
VDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogCisgICAgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGU7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAg
ICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlc3VsdC0+Z3ByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAo
IXVzZUxPTCgpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHNjb3BlR1BSKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVH
UFIpOwogI2VuZGlmCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJs
b2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3Bl
R1BSLCBmdW5jRXhlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKKyAgICB9CisKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0
KSA9IFNwZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzMDEsMjQgKzI5NjIsNDYgQEAgdm9p
ZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
c2NvcGU7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgaWYgKHVz
ZUxPTCgpKSB7CisgICAgICAgIHNjb3BlLmVtcGxhY2UoKnRoaXMsIGJ5dGVjb2RlLm1fc2NvcGUp
OworICAgICAgICBzY29wZUdQUiA9IHNjb3BlLT5ncHIoKTsKKyAgICAgICAgc2NvcGUucmVzZXQo
KTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIHJlc3VsdC5lbXBsYWNlKCp0aGlz
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdC0+Z3ByKCk7Cisg
ICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHNjb3BlR1BSKTsKICNlbHNlCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2VuZGlmCiAKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2Rl
SUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0
aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNw
ZWNGdW5jdGlvbjsKICAgICB9CiB9CiAKQEAgLTEzNDksOSArMzAzMiwxOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVj
b2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVn
VDAsIHNpemUpOworICAgIEdQUlJlZyBhcmdHUFIgPSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJU
ZW1wPiB0ZW1wOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzcGlsbEZvckNhbGwoKTsK
KyAgICAgICAgdGVtcC5lbXBsYWNlKCp0aGlzLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGFy
Z0dQUiA9IHRlbXAtPmdwcigpOworICAgIH0KKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVl
c1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBh
cmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGFyZ0dQUiwgc2l6ZSk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5U
eXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMzYwLDE0ICszMDUzLDI5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3Np
emUoY28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworCisgICAgR1BSUmVnIGFy
Z0dQUiA9IHJlZ1QwOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRo
aXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGFyZ0dQUiA9PSByZXR1cm5WYWx1ZUdQUik7CisgICAgfQorCisg
ICAgLy8gT09QUzogSW5saW5lIHRoZSBhbGxvY2F0aW9uIHBhdGggaGVyZSwgaXQgbWF0dGVycyBm
b3Igc3Vuc3BpZGVyLWNyeXB0by1hZXMKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUlu
ZGV4LCBhcmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBhcmdHUFIpOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgYXJnR1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0FycmF5OworICAgIH0KICNlbHNlCi0gICAgZW1pdExvYWQo
c2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEs
IGFyZ0dQUik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
Ci0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgYXJnR1BSKSk7CiAjZW5kaWYKIH0KIApAQCAtMTM4MSwx
NSArMzA4OSwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgZW51
bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVZhbHVlLmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGJhc2VHUFIpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2V0SlNW
YWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29s
ZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qx
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKwor
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51
bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE0MDksNiArMzEzOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX3N0cnVj
dHVyZV9wcm9wZXJ0eSgKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKyAgICAv
LyBPT1BTOgogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIo
KTsKICAgICAKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CkBAIC0xNDM2LDYgKzMxNjcsOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQgSklUOjpl
bWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBzcGlsbEZvckNhbGwoKTsgLy8gT09QUzogTWF5
YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTQ2MSwxNSArMzE5NCwxNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBj
aG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAg
IFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1v
ZGUsIGJhZFR5cGUpOworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlN
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZUp1bXApOwogICAgIAogICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDAp
OwogCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZUp1
bXApOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTGFiZWwgZG9uZSA9
IGxhYmVsKCk7CkBAIC0xNDc4LDEzICszMjExLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19l
bnVtZXJhYmxlX2luZGV4ZWQKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAg
ICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5m
byhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUlu
ZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGVKdW1wLCBtb2RlLCBwcm9maWxlLCBkb25lLCBu
ZXh0SG90UGF0aCkpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJh
YmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKQEAgLTE1MTAsMzcgKzMyNDQsODEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVj
dF9wbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7CiAKLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1
bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAg
ICBWYWx1ZU9wZXJhbmQgZW51bWVyYXRvclZhbHVlIHsgKnRoaXMsIGVudW1lcmF0b3IgfTsKKyAg
ICAgICAgSW50MzJPcGVyYW5kIGluZGV4VmFsdWUgeyAqdGhpcywgaW5kZXggfTsKKyAgICAgICAg
VmFsdWVPcGVyYW5kIGJhc2VWYWx1ZSB7ICp0aGlzLCBiYXNlIH07CisKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvclZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRl
eFZhbHVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAvLyBDaGVj
ayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRo
YW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBp
bmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKIAotICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhp
cyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5lZzMy
KHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBs
b2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisKKyAgICAgICAgLy8gSWYg
aW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdl
LCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAK
KyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdz
IG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
IHN1YjMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG5lZzMy
KHNjcmF0Y2hHUFIpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3Vs
dEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVj
ayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAg
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7CisgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKKyAgICAgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWln
aHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICAgICAg
CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgbmVn
MzIocmVnVDEpOworICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAg
ICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDApOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1NTAsMjEgKzMzMjgsNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9z
dHJ1Y3R1cmVfcAogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9
IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcg
aW5kZXhHUFI7CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRU
ZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPElu
dDMyT3BlcmFuZD4gaW5kZXhUZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgaW5kZXhUZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51
bWVyYXRvclRlbXAuZW1wbGFjZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOwor
CisgICAgICAgIGluZGV4R1BSID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRv
ckdQUiA9IGVudW1lcmF0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VGVtcC0+Z3ByKCk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRv
ckdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRl
eEdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVy
YXRvckdQUik7CisgICAgfQorICAgIAorICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxv
dywgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNF
aWdodCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCks
IHJlc3VsdEdQUik7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3NCwyMSAr
MzM4Miw1MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3cs
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVy
aWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgR1BS
UmVnIGVudW1lcmF0b3JHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2hUZW1wOworICAgIE9wdGlvbmFsPEludDMyT3BlcmFuZD4gaW5kZXhU
ZW1wOyAvLyBPT1BTOiBLbm93bkludDMyT3BlcmFuZAorICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gZW51bWVyYXRvclRlbXA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaW5kZXhU
ZW1wLmVtcGxhY2UoKnRoaXMsIGluZGV4KTsKKyAgICAgICAgZW51bWVyYXRvclRlbXAuZW1wbGFj
ZSgqdGhpcywgZW51bWVyYXRvcik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGluZGV4R1BS
ID0gaW5kZXhUZW1wLT5ncHIoKTsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3JU
ZW1wLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC0+Z3ByKCk7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVGVtcC0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaW5kZXhHUFIgPSByZWdUMDsKKyAgICAgICAgZW51bWVyYXRvckdQUiA9IHJlZ1QxOworICAg
ICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CisgICAgfQor
CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSksIHJlc3VsdEdQUik7CiAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAg
ICAgaW5Cb3VuZHMubGluayh0aGlzKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIHNpZ25FeHRl
bmQzMlRvUHRyKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmcgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE1OTgsNiArMzQzNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2Zp
bGVfdHlwZShjb25zdCBJbnMKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9
IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCisgICAgc3BpbGxGb3JD
YWxsKCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdU
MCk7CiAKICAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CkBAIC0xNjU4LDYgKzM0OTgsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisK
KyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0
YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAi
d2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4o
KTsKQEAgLTE2NzIsNiArMzUxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl9wcm8KIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS5zaGFkb3dDaGlja2VuKCkpOworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICB1cGRh
dGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAg
JiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlz
IHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BM
b2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKQEAgLTE2ODQsNiArMzUzMCwxOTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0SXNDYWxsYWJsZUltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRo
aXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwoaW5wdXRHUFIpOworICAgICAgICBhdXRvIGlzRnVuY3Rpb24gPSBicmFuY2hJZkZ1bmN0aW9u
KGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBub3RPYmplY3QgPSBicmFuY2hJZk5vdE9iamVjdChp
bnB1dEdQUik7CisgICAgICAgIAorICAgICAgICBhdXRvIHNsb3dQYXRoID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IE92ZXJyaWRlc0dldENhbGxE
YXRhKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7Cisg
ICAgICAgIAorICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAgIG5vdE9iamVjdC5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAKKyAg
ICAgICAgaXNGdW5jdGlvbi5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2Fs
bGFibGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0
SXNDYWxsYWJsZUltcGw8T3BJc0NhbGxhYmxlPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfZnVuY3Rpb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0SXNDYWxsYWJsZUltcGw8T3BUeXBlb2ZJc0Z1
bmN0aW9uPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90eXBl
b2ZfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc09iamVj
dD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRH
UFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBhdXRvIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChpbnB1dEdQUik7CisgICAg
ICAgIAorICAgICAgICBhdXRvIGlzTnVsbCA9IGJyYW5jaElmRXF1YWwoSlNWYWx1ZVJlZ3MgeyBp
bnB1dEdQUiB9LCBqc051bGwoKSk7CisgICAgICAgIGF1dG8gaXNOb25OdWxsTm9uQ2VsbCA9IGp1
bXAoKTsKKyAgICAgICAgCisgICAgICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBhdXRv
IGlzRnVuY3Rpb24gPSBicmFuY2hJZkZ1bmN0aW9uKGlucHV0R1BSKTsKKyAgICAgICAgYXV0byBu
b3RPYmplY3QgPSBicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQUik7CisgICAgICAgIAorICAgICAg
ICBhdXRvIHNsb3dQYXRoID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCB8IE92ZXJyaWRlc0dldENhbGxEYXRhKSk7CisgICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRoLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIAorICAgICAgICBpc051bGwubGlu
ayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICAg
ICAgaXNOb25OdWxsTm9uQ2VsbC5saW5rKHRoaXMpOworICAgICAgICBpc0Z1bmN0aW9uLmxpbmso
dGhpcyk7CisgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTCit9CisKK3ZvaWQgSklUOjplbWl0
X29wX3R5cGVvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fdmFsdWU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIG9wZXJhbmQgfTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBKdW1wTGlzdCBkb25lOworICAgICAgICBKdW1wIHNsb3dQYXRoOworICAgICAgICBlbWl0VHlw
ZU9mKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgeyBpbnB1dEdQUiB9LCByZXN1bHRHUFIsCisg
ICAgICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Rocm91Z2gpIHsKKyAg
ICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bS0+c21hbGxTdHJpbmdzLnR5cGVT
dHJpbmcodHlwZSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGlmICghZmFsbHNUaHJv
dWdoKQorICAgICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIFsmXSAoSnVtcCB0aGVTbG93UGF0aCkgeworICAgICAgICAgICAg
ICAgIHNsb3dQYXRoID0gdGhlU2xvd1BhdGg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworCisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoLCByZXN1bHRHUFIs
IGRzdCk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNTdHJpbmc7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2VudW1lcmFibGVfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVt
ZXJhYmxlTGVuZ3RoPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgYmFzZSB9Owor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGlucHV0R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldElu
dDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2xleGljYWxfZW52
aXJvbm1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZp
cm9ubWVudD4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSkpOworICAgIEpTVmFsdWUgaW5pdGlhbFZh
bHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKTsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc3ltYm9sVGFibGUtPnNpbmdsZXRv
bigpLmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBlbWl0U2xvd09wKHNsb3dfcGF0aF9j
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCwgY3VycmVudEluc3RydWN0aW9uLCBkc3QsIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBW
YWx1ZU9wZXJhbmQgc2NvcGVUZW1wIHsgKnRoaXMsIHNjb3BlIH07CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaDFUZW1wIHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMlRlbXAgeyAqdGhpcyB9OworCisgICAgICAg
IEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNj
cmF0Y2gxVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDJU
ZW1wLmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBhdXRvIGJ1
dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0V2l0aEtub3duU2l6ZTxKU0xleGljYWxFbnZpcm9ubWVudD4oCisgICAgICAgICAgICAq
bV92bSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKSwgYnV0dGVyZmx5LCBzY3JhdGNoMUdQUiwgc2NyYXRj
aDJHUFIsCisgICAgICAgICAgICBzbG93UGF0aCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9j
YXRpb25TaXplKHN5bWJvbFRhYmxlKSk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgs
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBEb24ndCBuZWVkIGEg
bWVtb3J5IGJhcnJpZXJzIHNpbmNlIHdlIGp1c3QgZmFzdC1jcmVhdGVkIHRoZSBhY3RpdmF0aW9u
LCBzbyB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbiBtdXN0IGJlIHlvdW5nLgorICAgICAgICBz
dG9yZVB0cihzY29wZUdQUiwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc3ltYm9sVGFibGUpLCBBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mU3ltYm9sVGFibGUo
KSkpOworICAgICAgICAgICAgCisgICAgICAgIC8vIE11c3QgaW5pdGlhbGl6ZSBhbGwgbWVtYmVy
cyB0byB1bmRlZmluZWQgb3IgdGhlIFREWiBlbXB0eSB2YWx1ZS4KKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsgKytpKQorICAgICAgICAg
ICAgc3RvcmVUcnVzdGVkVmFsdWUoaW5pdGlhbFZhbHVlLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUoU2NvcGVPZmZzZXQoaSkpKSk7Cisg
ICAgICAgIAorICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworCisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0
T3RoZXI7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIE9PUFMKK30KKwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNzAyLDExICszNzM1LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50
X2NvdW50KGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZh
aWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAg
ICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHNldEludDMy
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKKyAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEp
OworICAgICAgICBib3hJbnQzMihyZWdUMCwgcmVzdWx0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE3MTQsMjkgKzM3NTYsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNv
bnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UmVz
dExlbmd0aD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9T
a2lwOwotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
OwotICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAs
IEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwotICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tp
cCksIHJlZ1QwKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CisKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1Ro
YW5PckVxdWFsLCByZXN1bHRHUFIsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBz
dWIzMihJbW0zMihudW1QYXJhbXNUb1NraXApLCByZXN1bHRHUFIpOworICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICAgICAgemVyb0xlbmd0aC5saW5rKHRoaXMpOworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworCisgICAgICAgIHNldEludDMyKGRzdCwgcmVzdWx0R1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
CisgICAgICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVn
VDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOworICAgICAgICBzdWIzMihJbW0zMihudW1QYXJh
bXNUb1NraXApLCByZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJbnQzMihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CiAjZW5kaWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKKyAgICAgICAg
emVyb0xlbmd0aC5saW5rKHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIHJlZ1QwKTsK
ICNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSwgcmVnVDEpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTc0NCw0OSArMzgwNSw5OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1l
bnQoY29uc3QgSW5zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZXN1bHRHUFIpOworICAg
ICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgICAgIGxvYWRWYWx1ZShhZGRy
ZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRl
eCkpLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOwor
CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAgICAgIHNl
dEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVj
Qnl0ZWNvZGVUb3A7CisgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlZ1QwKTsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CiAjZW5kaWYK
IAotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDIpOwotICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5j
aDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxv
YWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0K
LSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5k
ZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwgcmVnVDIpOworICAgICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFu
Y2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAg
ICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOworICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAg
ICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlw
ZU9mPigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbCh2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVH
UFIpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QodmFs
dWVHUFIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMp
OworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdEdQUiwgZHN0KTsKKworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgfSBlbHNl
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUMzsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDM7CiAjZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0g
c2NyYXRjaEdQUik7CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFn
R1BSKCkgPT0gc2NyYXRjaEdQUik7CiAjZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHZhbHVlUmVncyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7Cisg
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90
b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc2xvd0Nhc2VzKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0
TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI0LDYgKzE0MjQsOCBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGFyCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CisKKyAgICAvL2RhdGFMb2dMbigiY29tcGFyZUxlc3MsIGxoczogIiwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCAiIHJoczogIiwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDIpKTsKICAgICAKICAgICByZXR1cm4ganNMZXNzPHRydWU+KGdsb2JhbE9iamVjdCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQpA
QCAtMTQ5MSw2ICsxNDkzLDggQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNv
bXBhcgogICAgIEpTVmFsdWUgc3JjMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICBKU1ZhbHVlIHNyYzIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKKyAgICAvL2Rh
dGFMb2dMbigic3RyaWN0ZXEsIGxoczogIiwgc3JjMSwgIiByaHM6ICIsIHNyYzIpOworCiAgICAg
cmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGdsb2JhbE9iamVjdCwgc3JjMSwgc3JjMik7CiB9
CiAKQEAgLTE2OTEsNyArMTY5NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25EZWJ1ZywKICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFsbFByZWRp
Y3Rpb25zQW5kT3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAg
ICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgY29kZUJsb2NrLT5iYXNl
bGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAgICAgY29kZUJsb2Nr
LT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiB9CiAKQEAgLTE3MTksNyArMTcyMyw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICBEZWZlckdDRm9yQVdoaWxl
IGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPmppdFR5cGUo
KSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgY29kZUJsb2NrLT5qaXRUeXBl
KCkgIT0gSklUVHlwZTo6TE9MSklUKSkgewogICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNv
ZGUgYmxvY2sgaW4gQmFzZWxpbmUtPkRGRyB0aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNzQ1LDcg
KzE3NDksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAKICAg
ICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkg
ewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0aW1pemVU
b0RGRyIsICgiY291bnRlciA9ICIsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIoKSkpOwot
ICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgICAgIGNvZGVC
bG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDaG9vc2luZyBub3QgdG8g
b3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQsIGJlY2F1c2UgdGhlIHRocmVzaG9sZCBoYXNu
J3QgYmVlbiByZWFjaGVkLiIpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIs
IG51bGxwdHIpOwogICAgIH0KQEAgLTE4MTQsNyArMTgxOCw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICAgICAgLy8gbm90aGluZyBsZWZ0IHRvIGRvLgog
ICAgICAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogICAg
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheU9wdGltaXplVG9E
RkciLCAoImNvbXBpbGVkIGFuZCBmYWlsZWQiKSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnVw
ZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lQWx0
ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3
YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQu
Iik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG51bGxwdHIpOwog
ICAgICAgICB9CkBAIC0xODQzLDcgKzE4NDcsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uT3B0aW1pCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIs
IG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjb2RlQmxv
Y2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3Vs
ZE9wdGltaXplVG9ERkdOb3coKSkgewogICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChj
b2RlQmxvY2ssICJkZWxheU9wdGltaXplVG9ERkciLCAoImluc3VmZmljaWVudCBwcm9maWxpbmci
KSk7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksCiAgICAg
ICAgICAgICAgICAgIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywKQEAg
LTE4NjcsNyArMTg3MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRp
bWkKICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVw
bGFjZW1lbnQoKTsKKyAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoY29kZUJsb2NrKTsKICAgICAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAogICAgICAgICAgICAgdm0sIHJlcGxhY2VtZW50
Q29kZUJsb2NrLCBudWxscHRyLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAg
ICAgICBtdXN0SGFuZGxlVmFsdWVzLCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
azo6Y3JlYXRlKCkpOwpAQCAtMTg3OSw3ICsxODgzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbk9wdGltaQogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIG9wdGltaXpl
ZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKLSAgICBBU1NFUlQob3B0aW1p
emVkQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOworICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29k
ZTo6aXNERkdPckZUTChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAogICAg
IGlmICh2b2lkKiBkYXRhQnVmZmVyID0gREZHOjpwcmVwYXJlT1NSRW50cnkodm0sIGNhbGxGcmFt
ZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKG9wdGltaXplZENvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCBiYyMiLCBi
eXRlY29kZUluZGV4KSk7CkBAIC0xOTcyLDcgKzE5NzYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uVHJ5T1NSCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNvZGVC
bG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOworICAgIGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5lbnN1cmVD
YXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJ
bmRleCktPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShjb2RlQmxvY2spOwogICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CkBAIC0zNDMzLDYgKzM0Mzcs
NDIgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrSQogICAgIHJldHVy
biAwOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlckxPTFJl
b3B0aW1pemF0aW9uTm93LCB2b2lkLCAoQ29kZUJsb2NrKiBsb2xDb2RlQmxvY2spKQoreworICAg
IC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVy
ZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJs
ZS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MobG9sQ29kZUJsb2NrLT52bSgpLmhlYXAp
OworCisgICAgaWYgKGdldGVudigicHJpbnRFYWNoSmV0dGlzb24iKSAmJiAhIWF0b2koZ2V0ZW52
KCJwcmludEVhY2hKZXR0aXNvbiIpKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJqZXR0aXNvbiwgZm9y
Y2luZyByZW9wdCBub3c6ICIsICpsb2xDb2RlQmxvY2spOworICAgIGxvbENvZGVCbG9jay0+YmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAgIAorICAgIC8v
IE9PUFM6IHByb2Nlc3MgdmFsdWUgcHJvZmlsZXMgaGVyZSwgc2luY2Ugd2UncmUgamV0dGlzb25p
bmcsIGhvcGVmdWxseSB0aGV5IHVwZGF0ZSB3LyB0aGluZ3Mgd2UgY2FyZSBhYm91dC4KKworICAg
IHNhbml0aXplU3RhY2tGb3JWTShsb2xDb2RlQmxvY2stPnZtKCkpOworCisgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbG9sQ29kZUJsb2NrLCAiOiBFbnRlcmVkIHJlb3B0
aW1pemUgZnJvbSBMT0wiKTsKKworICAgIENvZGVCbG9jayogbGxpbnRDb2RlQmxvY2sgPSBsb2xD
b2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgLy8gV2UgbXVzdCBiZSBjYWxsZWQgd2l0aCB0
aGUgYmFzZWxpbmUgY29kZSBibG9jay4KKyAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUobGxpbnRDb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisgICAgQ29kZUJsb2NrKiByZXBsYWNl
bWVudCA9IGxsaW50Q29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOworICAgIGlmICghcmVwbGFjZW1l
bnQgfHwgcmVwbGFjZW1lbnQgPT0gbGxpbnRDb2RlQmxvY2spIHsKKyAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqbGxpbnRDb2RlQmxvY2ssICI6IE5vdCByZW9wdGlt
aXppbmcgTE9MIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHRoZSByZXBsYWNlbWVudCBt
dXN0IGJlIG9wdGltaXplZCBjb2RlLiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eQorICAgIC8v
IHRvIGNoZWNrIG91ciBsb2dpYy4KKyAgICBBU1NFUlQobGxpbnRDb2RlQmxvY2stPmhhc09wdGlt
aXplZFJlcGxhY2VtZW50KCkpOworICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
bG9sQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworCisgICAgLy8gT09QUzogZmlndXJlIG91dCBz
dHVjayBpbiBhIGxvb3AgbG9naWMKKyAgICBsb2xDb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVy
OjpKZXR0aXNvbkR1ZVRvT1NSRXhpdCwgQ291bnRSZW9wdGltaXphdGlvbik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiBJR05PUkVfV0FSTklOR1NfRU5ECkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
OSw2ICszMTksOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblZhbHVlCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2cs
IHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vz
c1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsKIAorSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxv
Y2sqIGxvbENvZGVCbG9jaykpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4NSw4ICsxODUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RyCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwpAQCAtMjExLDggKzIwOSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMjgxLDggKzI3Nyw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CiAgICAgICAgICsrbV9nZXRC
eVZhbEluZGV4OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CkBAIC01NTgsNyArNTUyLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAgICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4
XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJl
bCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlv
biBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KQEAg
LTU5OCw4ICs1OTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC02MzksOCArNjMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwpAQCAtNjg2LDggKzY3NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtNzI5LDggKzcxNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY28KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwpAQCAtNzc4LDggKzc2Myw2IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKQEAgLTgxOSw4ICs4MDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CkBAIC0xMTAwLDggKzEwODEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKQEAgLTEyNTcsOCArMTIzNiw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19zY29wZShjb25zdCBJbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+
KCk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVj
b2RlKS5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1
ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0u
aD4KIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlND
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCkBAIC01Miw1MSArNTQsMTE3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
KyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1
ZU9wZXJhbmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFs
dWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQ
UlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUjsKKworICAgIGlmICht
X3VzZUxPTCkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAg
ICAgIHByb3BlcnR5VmFsdWUuZW1wbGFjZSgqdGhpcywgcHJvcGVydHkpOworICAgICAgICByZXN1
bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5n
cHIoKTsKKyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlc3VsdEdQUjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBpbmRleGluZ1R5cGVHUFIgPSByZWdUMjsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAog
ICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0
QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICAgICAgbm90Q2VsbC5saW5rKHRo
aXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIEp1bXAgbm90
Q2VsbDsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBub3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCBwcm9maWxlKTsKKyAgICAgICAgaWYgKG5v
dENlbGwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5
R1BSKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChwcm9wZXJ0eUdQUik7CisgICAgICAgIH0K
IAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVD
ZWxsKGJhc2UpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7
CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSkpCisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhwcm9wZXJ0eSkgfHwgc2hvdWxk
U3BlY3VsYXRlU3ltYm9sKHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUNl
bGwocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3Ry
aW5nKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgIWlzU3Vi
dHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUoYmFzZSksIFNwZWNDZWxsQ2hlY2spKQorICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BS
LCBwcm9maWxlKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHVzZUxPTCgpKSB7CisgICAgICAg
ICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNJ
bnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50
MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJv
dmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocHJvcGVydHkpLCBTcGVjU3ltYm9sKSkKKyAg
ICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Cisg
ICAgICAgIH0KICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSkK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogICAg
IH0KIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0
R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfQogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGlmIChoYXNBbnlTbG93
Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwotCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRl
eF07Ci0gICAgICAgICsrbV9nZXRCeVZhbEluZGV4OwotICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5h
cmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKKyAgICArK21fZ2V0QnlWYWxJbmRleDsKKyAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGlm
ICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0
LmdwcigpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTA1LDQxICsxNzMsNzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIEdQUlJlZyBi
YXNlR1BSOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOwor
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBwcm9wZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZh
bHVlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0
eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVu
ZChwcm9wZXJ0eUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpICYmIHNob3VsZFNwZWN1
bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncyk7CisgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0
ZXJzRm9yU3R1YigpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotCi0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93Q2FzZS5hcmd1
bWVudHNbMV0uZ3ByKCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICArK21fZ2V0QnlWYWxJbmRleDsKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBp
ZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3Vs
dC5ncHIoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU3LDYgKzI1Nyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKKyAgICBzcGls
bEZvckNhbGwoKTsgLy8gT09QUzogTWF5YmUgZG8gYmV0dGVyIGhlcmU/CisKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBib29sIHByb3BlcnR5TmFtZUlzSW50
ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwogICAgIGlmIChw
cm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKQEAgLTMxOSw4ICs0MjEsMTEgQEAgSklUUHV0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIHJlbG9hZCB0aGUgcmVn
aXN0ZXJzLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwg
cmVnVDEpOwogCisgICAgYXV0byB1bmF2YWlsYWJsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1bmF2YWlsYWJsZVJlZ2lzdGVycy5tZXJn
ZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgcHJvcGVydHlOYW1lLAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNv
ZGUpLCBwdXRLaW5kKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgpAQCAtMzM5LDcgKzQ0NCw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjpl
bWl0UHV0QnlWYWxXaXQKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nh
c2UmKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2U7CkBA
IC0zNDcsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVD
TUFNb2RlOjpzdHJpY3QoKTsKIAotICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7
CisgICAgYXV0byBnZXRTdGF0ZSA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtMzU1LDEzICs0NjAsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIH07CiAKICAg
ICBpZiAoaXNEaXJlY3QpCi0gICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5VmFsRGlyZWN0PigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKICAgICBlbHNlCi0gICAgICAgIGxvYWQoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKyAgICAgICAgZ2V0U3RhdGUoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJ
bmZvOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICBMYWJlbCBzbG93UGF0aCA9
IGxhYmVsKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAg
LTM4MSw2ICs0ODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRl
Y29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBEbyBiZXR0ZXIgaWYg
d2UgY2FuIQorCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogCkBAIC0zOTQsMTMgKzUw
MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZv
LCBtX2J5dGVjb2RlSW5kZXgsIGZhc3RQYXRoSm1wLCBkb25lLCBkb25lKSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKICAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLmJ5VmFsSW5mbzsKICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29k
ZS5tX3B1dEtpbmQ7CiAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNs
b3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CkBAIC00MjAs
NDkgKzUyNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0
aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsK
KyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VH
UFIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgYWNjZXNzb3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRT
ZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5dGVjb2Rl
Lm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywgYnl0ZWNv
ZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxsRm9yQ2Fs
bCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBhY2Nl
c3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJT
ZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgZ2V0dGVyIHsgKnRoaXMs
IGJ5dGVjb2RlLm1fZ2V0dGVyIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBzZXR0ZXIgeyAqdGhp
cywgYnl0ZWNvZGUubV9zZXR0ZXIgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOworICAgICAgICBHUFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOworICAgICAgICBH
UFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0
ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBnZXR0ZXJHUFIs
IHNldHRlckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5k
IGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBw
cm9wZXJ0eSB7ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3Bl
cmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdw
cigpOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVy
QnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAq
dGhpcywgYnl0ZWNvZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBwcm9wZXJ0eSB7
ICp0aGlzLCBieXRlY29kZS5tX3Byb3BlcnR5IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nl
c3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2FjY2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHku
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAg
ICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAg
IHNwaWxsRm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VH
UFIsIHByb3BlcnR5R1BSLCBhdHRyaWJ1dGVzLCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdU
MSk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
Mik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3MiwxOCArNjMzLDUy
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJl
ZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcmVzdWx0
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2guZW1wbGFjZSgqdGhpcyk7CisK
KyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9
IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgIHNwZWN1bGF0
ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3Rl
cnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNC
b29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ug
c2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdy
aXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNDkyLDI1ICs2ODcsMjcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BS
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSKSk7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHNsb3dDYXNlLnJlc3VsdC5ncHIoKTsKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUyMCwxOSArNzE3LDcwIEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNl
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgT3B0aW9uYWw8
VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm9w
ZXJ0eVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNl
KCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9w
ZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3Jh
dGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+
Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJl
Z1QxOworICAgICAgICBwcm9wZXJ0eUdQUiA9IHJlZ1QwOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMzsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8m
IHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVu
dHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwocHJvcGVydHkpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisgICAg
fQorCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDIpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9y
U3R1YigpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQg
dGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVy
cy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01NDEsMjIxICs3ODksMzY4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlWYWxzW21f
ZGVsQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5R1BS
ID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUiwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVH
UFIsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSKSk7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKwogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgCisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKworICAgIGlmICh1c2VMT0wo
KSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0LmdwcigpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFj
ZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVz
dWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsK
KyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVu
c3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRz
LmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7Ci0gICAgCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VH
UFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBs
YWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
YXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAg
ICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUg
PSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFk
YXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6
OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFy
cmF5UHJvZmlsZSk7CisgICAgICAgIEdQUlJlZyBpbmRleGluZ1R5cGVHUFIgPSB1c2VMT0woKSA/
IHJlc3VsdEdQUiA6IHJlZ1QxOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYmFzZUdQUiwgaW5kZXhpbmdUeXBlR1BSLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJy
YXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5s
aW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRS
ZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2
YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hlYXBUb3A7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRH
UFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3Vs
dFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcpOworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB0aGlzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
cmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHRoaXNHUFI7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZh
bHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICB0aGlzVmFsdWUuZW1wbGFjZSgqdGhp
cywgdGhpc1ZSZWcpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHRoaXNHUFIgPSB0aGlzVmFs
dWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAgICB0aGlzR1BSID0gcmVn
VDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRo
aXNWUmVnLCB0aGlzR1BSKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KHRoaXNHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwg
YmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bCh0aGlzVlJlZykpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHRoaXNWUmVnLCB0aGlzR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisgICAgfQogCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
IGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUikpOworICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1sxXS5ncHIoKTsKKwogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29k
ZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIC8vIElu
IG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9i
amVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIg
dGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVn
aW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJl
ICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJl
Z1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZh
bHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFs
dWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHZhbHVlR1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFs
dWUpOworICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJhc2VH
UFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdw
cigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHZhbHVlR1BSID0gcmVnVDE7
CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZSwgYmFzZUdQUiwgdmFsdWUsIHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZCh2YWx1ZUdQUik7CisgICAgfQorCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQor
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBlY21hTW9k
ZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6
Ok5vdERpcmVjdCk7CiAgICAgCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAt
NzY1LDc3ICsxMTYwLDk1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnUKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQotICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAg
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRl
eCsrXTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsK
KyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CiAKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luKHRoaXMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8
R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2Uo
KnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAg
ICAgYmFzZUdQUiA9IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYg
c2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dD
YXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAg
c3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICB9CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJ
VEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgSklUSW5C
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKIAorICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Ci0KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5q
ZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJl
Z2lzdGVyIGRzdCwgR1BSUmVnIHJlc3VsdEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0
aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
OChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSwgcmVzdWx0R1BSLCBkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04
NDcsMTcgKzEyNjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsK
ICAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCisgICAg
T3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRk
cmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRy
ZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZXN1bHRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC04NjcsMjEgKzEy
ODgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
OgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBPcHRpb25hbDxDZWxsT3BlcmFuZD4gc2Nv
cGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2Nv
cGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBpZiAoZGVwdGggPiAwKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1vZHVs
ZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxF
bnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xl
eGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eToKQEAgLTg5NCw5ICsxMzMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUs
IHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZXN1bHRH
UFIpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC05MDksMjkgKzEzNDUsMjkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVz
b2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIs
IGRzdCk7CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC05NDAsMTUgKzEzNzYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbgogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwg
cmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNj
cmF0Y2hHUFIpCiB7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSkpOworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgc2NyYXRjaEdQUik7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgbG9hZDMy
KEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2Nv
cGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcg
cmVnKQpAQCAtOTYyLDEyICsxNDAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKAogICAgIGxvYWRQdHIocmVnLCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdl
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSAr
IG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwpAQCAtOTc4LDUxICsxNDEzLDg0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwogICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCisgICAgT3B0
aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDA7CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFs
bHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24u
Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICAgICAgICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IG9mZnNl
dFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgR1BSUmVn
IG9mZnNldEdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAg
IHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIG9mZnNl
dFZhbHVlLmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29w
ZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+
Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
cmVnVDE7CisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSID0gcmVnVDI7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisKKyAgICAg
ICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZVNsb3QsIHNjb3BlR1BS
LCByZXN1bHRHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxK
dW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAg
ICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXRHUFIpOwogICAgICAgICAgICAgaWYgKEFT
U0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5j
aDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIo
R3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXRHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGlu
ZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05v
dE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7
Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldEdQUik7Cisg
ICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXRHUFIsIG9mZnNldEdQUik7CisgICAg
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgb2Zmc2V0R1BSLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBH
bG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkc3QsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihv
cGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlc3VsdEdQUiksIHJlc3VsdEdQUiwg
ZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOwor
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBHUFJS
ZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAg
ICBzY29wZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBzY29w
ZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzY29wZUdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BS
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNs
b3QpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRz
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAg
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTAzNiwxMCArMTUwNCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1bHRHUFIpOworICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUsIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogCkBAIC0xMDUy
LDI3ICsxNTIwLDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVzdWx0R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSwgcmVzdWx0R1BSLCBkc3QpOwog
CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwogICAgICAgICBicmVhazsKQEAgLTEwODIs
NDAgKzE1NTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlc3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpT
VmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0
ZWNvZGVUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nh
c2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFs
dWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQot
ewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90
aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJ
VDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hw
b2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAg
IHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVn
VDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9w
ZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTExMjksMjEgKzE1NzksNDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5t
X3N0cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBHUFJSZWcg
dmFsdWVHUFI7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICB2YWx1ZVZhbHVlLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsK
KyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB2YWx1ZUdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgfQorCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwor
ICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAg
ICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7CisgICAgICAgICAgICBPcHRpb25hbDxH
UFJUZW1wPiBidXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29wZUdQUjsKKyAg
ICAgICAgICAgIEdQUlJlZyBvZmZzZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcgYnV0dGVyZmx5
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUuZW1wbGFjZSgq
dGhpcyk7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBvZmZzZXRHUFIgPSBvZmZzZXRWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5R1BSID0gYnV0dGVyZmx5VmFsdWUtPmdwcigpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICAgICAg
ICAgIG9mZnNldEdQUiA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseUdQUiA9IHJl
Z1QzOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIG9mZnNldEdQUik7IC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVz
IGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZl
X3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogICAgICAgICAg
ICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAg
ICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRy
KHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYnV0dGVyZmx5R1BSKTsKKyAgICAgICAgICAgIGxv
YWRQdHIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CisgICAgICAgICAgICBuZWdQdHIob2Zmc2V0
R1BSKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBCYXNlSW5kZXgoYnV0dGVyZmx5
R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE1NCwyOCArMTYzMiw1NyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAg
ICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFj
ZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3By
KCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVn
VDA7CisKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRp
YWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsK
ICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVz
ZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGlj
YWxseS4KICAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKCZtZXRhZGF0YS5tX3dhdGNo
cG9pbnRTZXQsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZShz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3RvcmU2NCh2
YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGVtaXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAg
ICAgICAgIHN0b3JlNjQodmFsdWVHUFIsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICEhKHBy
b3ZlblR5cGUodmFsdWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2Nv
cGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAg
ICAgICAgICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY29wZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAg
ICAgICAgIHNjb3BlVmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gc2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGUobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAg
ICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArICgqb3BlcmFuZFNsb3QpICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CkBAIC0xMTkwLDEyICsxNjk3LDIxIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVmFsdWU7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLnJlc2V0
KCk7IC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGlubmVycyBvZiBlbWl0Q29kZSBmcm9t
IGFsbG9jYXRpbmcgdGhpcyBzYW1lIHJlZ2lzdGVyLCBzaW5jZSB3ZSBpZiB3ZSBnbyBkb3duIGFu
eSBlbWl0Q29kZSBwYXRoLCB3ZSB3b24ndCB1c2Ugc2NyYXRjaEdQUiBhZ2Fpbi4KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgc2NyYXRjaEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBl
CiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOworICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhp
Y2FsVmFyKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNh
biBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxp
emVkIGNvbnN0IGJpbmRpbmcuCiAKICAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhp
cyk7CkBAIC0xMjA5LDIzICsxNzI1LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICB9CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIE9w
dGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgc2NyYXRjaFZhbHVlLmVtcGxh
Y2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7
CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBi
bG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2NhdGluZyB0aGlzIHNhbWUgcmVn
aXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRDb2RlIHBhdGgsIHdlIHdvbid0
IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
c2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CkBAIC0xMjQyLDEwICsxNzY3LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4o
KTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNv
ZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpA
QCAtMTI2MSw2MSArMTc4NCwxNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1l
bnRzKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4g
YXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAg
R1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBhcmd1bWVudHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMp
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYXJndW1lbnRz
R1BSID0gYXJndW1lbnRzVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRW
YWx1ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gcmVnVDA7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50cywgYXJndW1lbnRzR1BSKTsKKyAgICB9CiAgICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRz
OjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGFyZ3VtZW50c1ZhbHVlOworICAg
IE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gdmFsdWVWYWx1ZTsKKyAgICBHUFJSZWcgYXJndW1lbnRz
R1BSOworICAgIEdQUlJlZyB2YWx1ZUdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YXJndW1lbnRzVmFsdWUuZW1wbGFjZSgqdGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgdmFsdWVW
YWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3Vt
ZW50c1ZhbHVlLT5ncHIoKTsKKyAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVlLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAgICAgdmFs
dWVHUFIgPSByZWdUMTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IGFyZ3VtZW50c0dQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICB9CisgICAgCisgICAgc3RvcmU2NCh2YWx1ZUdQUiwgQWRkcmVzcyhhcmd1
bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJv
dmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJn
dW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogeworICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3
ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWlnaHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4g
SWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQgaXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mg
c3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMgdG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAv
LyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxsb2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1h
eSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisgICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0
byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxsICsgc2lsZW50IGZpbGwKKwogICAgIC8vIHZhbHVl
IG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlKSB7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKG93bmVyKSAmIFNwZWNDZWxs
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlwZSh2YWx1
ZSkgJiB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiB2YWx1ZVZh
bHVlOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdwckZvck9wZXJhbmQodmFsdWUpICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9yT3BlcmFuZCh2
YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFs
dWVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCBy
ZWdUMCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gb3duZXJWYWx1ZTsKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiBzY3JhdGNoVmFsdWU7CisgICAgR1BSUmVnIG93bmVyR1BSOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzY3JhdGNoVmFsdWUuZW1w
bGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOwor
CisgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKG93bmVyKSAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgb3duZXJHUFIgPSBncHJGb3JPcGVyYW5kKG93bmVyKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBvd25lclZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgb3du
ZXJHUFIgPSBvd25lclZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3duZXIsIG93bmVyR1BSKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IG93bmVyR1BSID0gcmVnVDA7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIH0KKwogICAgIEp1bXAg
b3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkgeworICAgICAgICBpZiAoIXVzZUxPTCgp
IHx8ICEhKHByb3ZlblR5cGUob3duZXIpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG93bmVy
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChvd25lckdQUik7CisgICAgfQogCi0gICAgSnVtcCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2
bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
b3duZXJHUFIsIHNjcmF0Y2hHUFIpOworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBz
aWxlbnRTcGlsbFJlY29yZDsKKyAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8gTm8gbmVlZCB0
byBzaWxlbnQgc2F2ZSB0aGlzLgorICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgc2lsZW50U3Bp
bGxSZWNvcmQgPSBzaWxlbnRTcGlsbEJlZm9yZUNhbGwoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXJHUFIpOworICAgIGlmICh1
c2VMT0woKSkKKyAgICAgICAgc2lsZW50RmlsbEFmdGVyQ2FsbCgqc2lsZW50U3BpbGxSZWNvcmQp
OwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZSkKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhp
cyk7CisgICAgaWYgKG93bmVyTm90Q2VsbC5pc1NldCgpKQogICAgICAgICBvd25lck5vdENlbGwu
bGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgp
KSAKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoYXQgd2U6CisgICAgLy8gLSBLbm93IGlm
IHdlIG1pZ2h0IGJyYW5jaCBhcm91bmQgdGhpcyBvciBub3QuIElmIHdlIGRvbid0IGJyYW5jaCBh
cm9vdW5kIGl0LCBpdCBjYW4gZmVlZCBpbnRvIHJlZ2FsbG9jIHN0YXRlLiBPdGhlcndpc2UsIGl0
IG5lZWRzIHRvIGJlIGNhcmVmdWwgdG8gc2F5IGl0CisgICAgLy8gICBkb2Vzbid0IHBvcHVsYXRl
IHJlZ2FsbG9jIHN0YXRlIHNpbmNlIHJ1bnRpbWUgY29kZSBtYXkgbm90IGFsd2F5cyBleGVjdXRl
IGl0LgorICAgIC8vIC0gTWFrZSBpdCBzbyB3ZSBicmFuY2ggdG8gb3V0IG9mIGxpbmUgY29kZSBm
b3IgY2FsbCArIHNpbGVudCBmaWxsCisKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7CisgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUjsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBpZiAoZ3ByRm9yT3Bl
cmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9
IGdwckZvck9wZXJhbmQodmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9
IHZhbHVlVmFsdWUtPmdwcigpOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHZhbHVlR1BSID0gcmVnVDA7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXVzZUxP
TCgpIHx8ICEhKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHZh
bHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQogCiAgICAgZW1p
dFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSkgCisgICAgaWYgKHZhbHVlTm90Q2VsbC5pc1NldCgpKSAKICAgICAgICAgdmFsdWVOb3RDZWxs
LmxpbmsodGhpcyk7CiB9CiAKQEAgLTEzMjcsMTEgKzE5NjcsMjYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFs
RmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZVRlbXAuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgLy8gT09Q
UzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJvdmVuVHlwZShiYXNlKSAmPSBTcGVjQ2Vs
bDsKKworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCBy
ZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTM0MSwxMCArMTk5Niwy
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6
b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgVmFsdWVPcGVyYW5kIGJhc2VUZW1wIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAgVmFsdWVP
cGVyYW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2VUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAu
Z3ByKCk7CisKKyAgICAgICAgLy8gT09QUzogS25vd25DZWxsT3BlcmFuZCEKKyAgICAgICAgcHJv
dmVuVHlwZShiYXNlKSAmPSBTcGVjQ2VsbDsKKworICAgICAgICBzdG9yZVB0cih2YWx1ZUdQUiwg
QWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50
ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkp
KTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOworICAgIH0KIH0KIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxP
cFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMTQ0Nyw4ICsyMTE1LDI1IEBAIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3QKIAogdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7CisgICAgSnVtcCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuOworICAgIHsKKyAgICAgICAgT3B0aW9uYWw8R1BSVGVt
cD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgaWYg
KHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDA7CisgICAgICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzY3JhdGNoR1BSKTsK
KyAgICB9CisKKyAgICBPcHRpb25hbDxTaWxlbnRTcGlsbFJlY29yZD4gc2lsZW50U3BpbGxSZWNv
cmQ7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29yZCA9IHNpbGVu
dFNwaWxsQmVmb3JlQ2FsbCgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBz
aWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CisKICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0NjYsNiArMjE1MSw4IEBAIHZv
aWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXMKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3VzZUxPTCA9IGZhbHNlOwor
CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIApAQCAt
MTU2Nyw2ICsyMjU0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVX
aQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBBU1NFUlQoKHB1dEtpbmQgPT0g
UHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkg
fHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9w
dXRfYnlfdmFsKSk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgp
LnB0cigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAgICBBU1NFUlRfVU5VU0VE
KHByb2ZpbGVkREZHQ29kZUJsb2NrLCAhcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VS
VChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAgICAgCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZU9TUigpLCAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAi
IGRpZCBiZWNvbWUgcmVhZHkuIik7CiAgICAgCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
KQogewogICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25z
Ojp2ZXJib3NlT1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ss
ICIgcmVzdWx0OiAiLCByZXN1bHQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEs
MjIgQEAKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKIAorI2luY2x1
ZGUgPHd0Zi9TY29wZS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUV29ya2xpc3Q6
OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsK
IHB1YmxpYzoKLSAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQotICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQorICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29t
cGlsZVR5cGUgY29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkKKyAgICAgICAgOiBtX2xsaW50Q29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBt
X2NvZGVCbG9ja1RvQ29tcGlsZShjb21waWxlVHlwZSA9PSBKSVQ6OkNvbXBpbGVUeXBlOjpMT0wg
PyBtX2xsaW50Q29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudChtX2xsaW50Q29kZUJsb2NrKSA6IG1f
bGxpbnRDb2RlQmxvY2spIAorICAgICAgICAsIG1faml0KG1fY29kZUJsb2NrVG9Db21waWxlLT52
bSgpLCBtX2NvZGVCbG9ja1RvQ29tcGlsZSwgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUNvbXBpbGUoKTsKKyAgICAgICAgLy8gT09QUzogdmlzaXQgdGhpcyBpbiBjb25jdXJyZW50
IGdjCisgICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2Nr
KSB7CisgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnByb3RlY3Qo
bV9jb2RlQmxvY2tUb0NvbXBpbGUpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUluVGhyZWFkKCkKQEAgLTUzLDE3ICs2MCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aW5hbGl6ZSgpCiAgICAgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2pp
dC5saW5rKCk7CisKKyAgICAgICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7
CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tUb0NvbXBpbGUgIT0gbV9sbGludENvZGVCbG9j
aykKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja1RvQ29tcGlsZS0+dm0oKS5oZWFwLnVucHJv
dGVjdChtX2NvZGVCbG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0pOworCiAgICAgICAgIHN3aXRj
aCAocmVzdWx0KSB7CiAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJj
b21waWxhdGlvbiBmYWlsZWQiKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1f
bGxpbnRDb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIp
KTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBK
SVQgY29tcGlsYXRpb24gZmFpbGVkLiIpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRK
SVRBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENv
bXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGxpbnRDb2RlQmxvY2stPmRvbnRKSVRB
bnl0aW1lU29vbigpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+bV9kaWRGYWlsSklU
Q29tcGlsYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2RlQmxv
Y2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgICAgIG1f
Y29kZUJsb2NrVG9Db21waWxlLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobV9jb2Rl
QmxvY2tUb0NvbXBpbGUpOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+aml0U29vbigp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcxLDggKzg0LDggQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4g
bV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsg
fQorICAgIENvZGVCbG9jayogY29kZUJsb2NrS2V5KCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9j
azsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fbGxpbnRDb2RlQmxvY2stPnZtKCk7IH0KICAg
ICAKICAgICBib29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTgwLDE1ICs5Mywx
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7CiAgICAg
fQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICBzdGF0aWMgdm9p
ZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlIGNvbXBp
bGVUeXBlLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewot
ICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsK
KyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwogICAgICAgICBw
bGFuLmZpbmFsaXplKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9sbGludENvZGVCbG9jazsKKyAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrVG9Db21waWxlOwogICAgIEpJVCBtX2ppdDsKICAgICBMb2NrIG1fbG9j
azsKICAgICBib29sIG1faXNGaW5pc2hlZENvbXBpbGluZyB7IGZhbHNlIH07CkBAIC0yMzMsOSAr
MjQ3LDExIEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAg
ICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKworICAgIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUgPSBPcHRpb25zOjpmb3JjZUxP
TCgpID8gSklUOjpDb21waWxlVHlwZTo6TE9MIDogSklUOjpDb21waWxlVHlwZTo6QmFzZWxpbmU7
CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKLSAgICAgICAg
UGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjQ5
LDcgKzI2NSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAg
ICAgICAgCiAgICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsKICAgICAgICAgICAg
IG1fcGxhbm5lZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFu
ID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNv
ZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKICAgICAg
ICAgICAgIG1fcGxhbnMuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQo
cGxhbik7CiAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7CkBAIC0y
NzMsMTQgKzI4OSwyNCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2Nr
CiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29uY3VycmVudCBK
SVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8vIHRocmVhZCBj
b21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBoYWQgbXVsdGlw
bGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29tZWRheS4KLSAg
ICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7
CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGNvbXBpbGVUeXBlLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKIH0KIAorLyoKIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3co
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKQorCisgICAgYXV0byBpc0NvbXBpbGVkID0gWyZdIHsKKyAgICAgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1p
emVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfTsKKworICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBib29sIGlzUGxhbm5lZDsKQEAgLTI5NiwxNyArMzIyLDI0IEBAIHZvaWQg
SklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiAKICAgICB9CiAgICAgCiAgICAgLy8g
Tm93IGl0IG1pZ2h0IGJlIGNvbXBpbGVkIQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQorICAgIGlmIChpc0NvbXBpbGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHByZXZp
b3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUKLSAg
ICAvLyBiYXNlbGluZSBKSVQuCi0gICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKLSAgICAK
LSAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKLSAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxv
Y2spOworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlTE9MKCkpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBsb2xDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIEpJ
VDo6Y29tcGlsZSh2bSwgbG9sQ29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZSwg
SklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIGxvbENvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGxvbENv
ZGVCbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBpbiBjYXNlIHdl
IGhhZCBwcmV2aW91c2x5IGF0dGVtcHRlZCwgYW5kIHRoZW4gZmFpbGVkLCB0byBjb21waWxlIHdp
dGggdGhlCisgICAgICAgIC8vIGJhc2VsaW5lIEpJVC4KKyAgICAgICAgY29kZUJsb2NrLT5yZXNl
dEpJVERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9LLCBqdXN0IGNvbXBpbGUgaXQuCisg
ICAgICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNl
bGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNv
ZGVCbG9jayk7CisgICAgfQogfQorKi8KIAogdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQbGFu
cyhQbGFucyYgbXlQbGFucykKIHsKQEAgLTMxNCw3ICszNDcsNyBAQCB2b2lkIEpJVFdvcmtsaXN0
OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBtCiAgICAgICAgIHBsYW4tPmZpbmFsaXplKCk7CiAgICAg
ICAgIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAgICAgbV9wbGFu
bmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7CisgICAgICAgIG1fcGxhbm5lZC5yZW1vdmUo
cGxhbi0+Y29kZUJsb2NrS2V5KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVM
YXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApKTsKLSAgICB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0
ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgCiAgICAgc3RhdGljIEpJVFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdCgpOwog
ICAgIHN0YXRpYyBKSVRXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpOwpA
QCAtNjYsNiArNjUsNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZDsKICAgICBmcmllbmQg
Y2xhc3MgVGhyZWFkOwogICAgIAorICAgIC8vdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkp
OwogICAgIHZvaWQgZmluYWxpemVQbGFucyhQbGFucyYpOwogICAgIAogICAgIFBsYW5zIG1fcXVl
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
bWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGZwcildOwogICAgIH0KIAorICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgVCYgb3BlcmF0
b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9tYXBbaV07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRv
cltdKHNpemVfdCBpKSAgY29uc3QgeyByZXR1cm4gbV9tYXBbaV07IH0KKwogcHJpdmF0ZToKICAg
ICBzdGQ6OmFycmF5PFQsIE1hY3JvQXNzZW1ibGVyOjp0b3RhbE51bWJlck9mUmVnaXN0ZXJzKCk+
IG1fbWFwIHsgeyB9IH07CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRy
LmNvZGVQdHIpKTsKICNlbmRpZgogICAgIH0KLSAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgIGlm
IChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6OmlzREZHT3JGVEwoY2FsbGVyQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLmxhYmVs
QXRPZmZzZXQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENh
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQ
YXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBwdWJsaWM6CiAKICAg
ICBKSVQ6OkNhbGwgY2FsbCgpCiAgICAgeworICAgICAgICAvLyBPT1BTPworICAgICAgICAvLyBX
ZSBqdXN0IHdhbm5hIGRvIHRoaXMgb24gZmFzdCwgbm90IHNsb3cgcGF0aC4KKyAgICAgICAgLy8g
bV9qaXQtPnNwaWxsRm9yQ2FsbCgpOworCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgaWYgKG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIG1faml0LT5zYW1wbGVJbnN0cnVjdGlvbigm
bV9qaXQtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2ppdC0+bV9ieXRlY29kZU9mZnNl
dF0sIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOCArMzYzLDEw
IEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KIH0KIAogLy8gUmV0
dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wgaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKK2lubGlu
ZSBDb2RlQmxvY2sqIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCkpCiB7CisgICAgLy8gT09QUzogSW1wbGVtZW50IHRoaXMgdy5yLnQgTE9M
LgorCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJz
IGRvbid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQg
YWxsLgogICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgCkBAIC0zNzMsMjkgKzM3
NSw0NSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgaWYg
KCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9s
ZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRl
cigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBK
SVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIEpJVFdvcmtsaXN0Ojpl
bnN1cmVHbG9iYWxXb3JrbGlzdCgpLnBvbGwodm0pOwotICAgIAorCisgICAgYXV0byBsb2xDb2Rl
QmxvY2sgPSBbJl0oKSAtPiBDb2RlQmxvY2sqIHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogcmVw
bGFjZW1lbnQgPSBjb2RlQmxvY2stPm9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAg
ICAgIGlmIChyZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfTsKKworICAgIGlmIChhdXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2so
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRU
eXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CiAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBp
bGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIGNhc2UgSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuazogewogICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUOworICAgICAgICBpZiAoYXV0byogcmVzdWx0ID0gbG9sQ29kZUJsb2NrKCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZGF0
YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4i
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9CisgICAgZGF0YUxvZygiVW5leHBlY3RlZCBj
b2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgU2xv
d1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFy
ICpuYW1lLCBFbnRyeUtpbmQga2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlP
U1IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFy
ICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksCiAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRo
IGV4ZWN1dGVDb3VudGVyID0gIiwKQEAgLTQwNiwxOCArNDI0LDIxIEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUIKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxs
cHRyLCBudWxscHRyKTsKICAgICB9CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAg
IGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaykpCisgICAgQ29k
ZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZt
LCBjb2RlQmxvY2spOworICAgIGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5U
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19F
VkVOVChjb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xvZ3VlIikpOworICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJPU1IgZW50cnkiLCAoImluIHByb2xv
Z3VlIikpOworCisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2soY29tcGlsZWRDb2RlQmxvY2sp
OwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQotICAgICAgICBMTElOVF9SRVRVUk5f
VFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsK
KyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5l
eGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNo
ZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNz
Rm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7Cisg
ICAgTExJTlRfUkVUVVJOX1RXTyhjb21waWxlZENvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNz
Rm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiB9
CiAjZWxzZSAvLyBFTkFCTEUoSklUKQotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9T
UihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5S2luZCkKK3N0YXRpYyBT
bG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29kZUJsb2NrLT5kb250SklUQW55
dGltZVNvb24oKTsKICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwpAQCAt
NDI3LDMxICs0NDgsMzEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2Rl
QgogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQogewogICAgIFVOVVNFRF9QQVJBTShw
Yyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJlbnRyeV9v
c3IiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19Q
QVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsKQogewogICAgIFVOVVNFRF9QQVJB
TShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5
X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1Io
Y2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpz
RXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NhbGwiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9m
dW5jdGlvbl9mb3JfY29uc3RydWN0KQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0
dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+
anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxG
cmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1
dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBj
KTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpz
Q2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3Ny
X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAgICByZXR1cm4g
ZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9X
X1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrKQog
ewogICAgIFVOVVNFRF9QQVJBTShwYyk7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlD
aGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNv
ZGVCbG9ja0ZvckNvbnN0cnVjdCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
YXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChsb29w
X29zcikKQEAgLTQ4MCwxOSArNTAxLDIyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3Ny
KQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KICAg
ICAKLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKQorICAgIENvZGVCbG9jayogY29tcGlsZWRDb2RlQmxv
Y2sgPSBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKKyAgICBpZiAoIWNvbXBpbGVkQ29kZUJsb2NrKQogICAgICAgICBM
TElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIAotICAgIENPREVCTE9DS19M
T0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvbXBpbGVkQ29kZUJsb2NrLCAi
b3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKIAotICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAg
QVNTRVJUKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgfHwgY29tcGlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpOwog
Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgp
OworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb21waWxlZENvZGVCbG9jay0+aml0
Q29kZU1hcCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2Nh
dGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBBU1NF
UlQoY29kZUxvY2F0aW9uKTsKIAogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBBU1NFUlQoanVtcFRhcmdldCk7CisKKyAgICBjYWxs
RnJhbWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgTExJTlRf
UkVUVVJOX1RXTyhqdW1wVGFyZ2V0LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CiAjZWxzZSAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT3JpZ2luU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIE9yaWdpblN0YWNrOjpPcmlnaW5TdGFjayhEYXRh
YmFzZSYgZGF0YWIKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc3RhY2suc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgYXBwZW5kKE9yaWdpbigKLSAgICAgICAgICAgIGRhdGFiYXNl
LmVuc3VyZUJ5dGVjb2Rlc0ZvcihzdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUoKS0+YmFzZWxpbmVD
b2RlQmxvY2suZ2V0KCkpLAorICAgICAgICAgICAgZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9y
KHN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSgpLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgp
KSwKICAgICAgICAgICAgIHN0YWNrW2ldLmJ5dGVjb2RlSW5kZXgoKSkpOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcs
MjAgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGVkZ2UtPmNvZGVCbG9jaygpLT5iYXNl
bGluZUFsdGVybmF0aXZlKCkpOwogfQogCitGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVj
dXRhYmxlOjpsb2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKK3sKKyAgICBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiBlZGdlOworICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICBlZGdlID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdl
dCgpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpOworICAgICAgICBlZGdlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7
CisgICAgfQorICAgIGlmICghZWRnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmxv
bE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKK30KKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNCwxMyArMTE0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29kZUJsb2NrRm9yQ29u
c3RydWN0KCk7CiAgICAgfQogCisgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGxvbE9yQmFzZWxpbmVD
b2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgRnVuY3Rpb25Db2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAg
ICAKLSAgICBGdW5jdGlvbkNvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJs
b2NrRm9yKGtpbmQpOwotICAgIH0KLQogICAgIFJlZlB0cjxUeXBlU2V0PiByZXR1cm5TdGF0ZW1l
bnRUeXBlU2V0KCkgCiAgICAgewogICAgICAgICBSYXJlRGF0YSYgcmFyZURhdGEgPSBlbnN1cmVS
YXJlRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEwIEBAIHN0YXRpYyB2b2lk
IGRpc2FibGVBbGxKSVRPcHRpb25zKCkKIAogdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKCkKIHsKKyAgICAvL09wdGlvbnM6OnVzZURGR0pJVCgpID0gMDsKKyAgICBPcHRp
b25zOjpmb3JjZUxPTCgpID0gMTsKKyAgICBPcHRpb25zOjp1c2VMTEludCgpID0gMTsKKwogI2lm
ICFkZWZpbmVkKE5ERUJVRykKICAgICBPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRs
aW5nKCkgPSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNyw2ICs1Mjcs
NyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KEJvb2ws
IHVzZUpJVENhZ2UsIGNhblVzZUpJVENhZ2UoKSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihC
b29sLCB1c2VQdWJsaWNTdGF0aWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwg
dGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgcHVibGljIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNp
ZGUgY2xhc3Nlcy4iKSBcCiAgICAgdihCb29sLCB1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMs
IHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHByaXZh
dGUgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAgICB2KEJvb2wsIGZv
cmNlTE9MLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKQogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNl
IHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52
ZXJpZmllZAogICAgICAgICAgICAgb3JpZ2luLndhbGtVcElubGluZVN0YWNrKFsmXSAoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikgewogICAgICAgICAgICAgICAgIG1hY2hpbmVPcmlnaW4g
PSBjb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJs
b2NrKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCkgOiBtYWNoaW5lQ29kZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNh
bGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSA6IG1hY2hpbmVDb2RlQmxvY2ss
IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdFNhbXBsaW5nUHJvZmlsZXJEYXRhRm9ySlNDU2hlbGwo
KSkgewpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1Vu
dmVyaWZpZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgbGxpbnRfaGFu
ZGxlX3VjYXVnaHRfZXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAg
ICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAgICAgICAgICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKLSAgICAgICAgICAgICAg
ICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
ayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICAgICAgICAgIGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUIHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkg
ewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBD
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUlu
ZGV4KGJpdHMsIHRvcENvZGVCbG9jayk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQ0LDQ5ICszNDQsMzMgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRh
YmxlOjpuZXdDb2RlQmxvYwogfQogCiBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1Jl
cGxhY2VtZW50Q29kZUJsb2NrRm9yKAotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
KyAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBpZiAoY2xhc3NJbmZvKHZtKSA9PSBF
dmFsRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNhbGwpOwotICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBFdmFsQ29kZUJsb2NrKiBiYXNlbGlu
ZSA9IHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2sqPigKLSAgICAgICAgICAgIGV4ZWN1dGFibGUt
PmNvZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sq
IHJlc3VsdCA9IEV2YWxDb2RlQmxvY2s6OmNyZWF0ZSh2bSwKLSAgICAgICAgICAgIENvZGVCbG9j
azo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOwotICAgICAgICByZXN1bHQtPnNldEFsdGVy
bmF0aXZlKHZtLCBiYXNlbGluZSk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIHJlc3VsdCA9IEV2
YWxDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssIHN0YXRp
Y19jYXN0PEV2YWxDb2RlQmxvY2smPigqYWx0ZXJuYXRpdmUpKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRBbHRlcm5hdGl2ZSh2bSwgYWx0ZXJuYXRpdmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KICAgICAKICAgICBpZiAoY2xhc3NJbmZvKHZtKSA9PSBQcm9ncmFtRXhlY3V0YWJsZTo6
aW5mbygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwot
ICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhl
Y3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0
YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPigKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmNv
ZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2sq
IHJlc3VsdCA9IFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSh2bSwKLSAgICAgICAgICAgIENvZGVC
bG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOwotICAgICAgICByZXN1bHQtPnNldEFs
dGVybmF0aXZlKHZtLCBiYXNlbGluZSk7CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIHJlc3Vs
dCA9IFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSh2bSwgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxv
Y2ssIHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2smPigqYWx0ZXJuYXRpdmUpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYWx0ZXJuYXRpdmUpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjbGFzc0luZm8odm0pID09IE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ2FsbCk7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7Ci0gICAgICAgIE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8TW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayo+KAotICAgICAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5l
VmVyc2lvbigpKTsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0ID0gTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLAotICAgICAgICAgICAgQ29kZUJsb2NrOjpD
b3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRp
dmUodm0sIGJhc2VsaW5lKTsKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0
ID0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBDb2RlQmxvY2s6OkNvcHlQYXJz
ZWRCbG9jaywgc3RhdGljX2Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayY+KCphbHRlcm5hdGl2
ZSkpOworICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBhbHRlcm5hdGl2ZSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3NJ
bmZvKHZtKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7Ci0gICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOwot
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29k
ZUJsb2NrKj4oCi0gICAgICAgIGV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKS0+YmFzZWxp
bmVWZXJzaW9uKCkpOwotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBGdW5jdGlvbkNv
ZGVCbG9jazo6Y3JlYXRlKHZtLAotICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywg
KmJhc2VsaW5lKTsKLSAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBiYXNlbGluZSk7Cisg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUo
dm0sIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVC
bG9jayY+KCphbHRlcm5hdGl2ZSkpOworICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUodm0sIGFs
dGVybmF0aXZlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zOTgsNyArMzgyLDggQEAg
c3RhdGljIHZvaWQgc2V0dXBMTEludChDb2RlQmxvY2sqIGNvZGVCbAogc3RhdGljIHZvaWQgc2V0
dXBKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQot
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAvLyBPT1BTOiBGaWd1cmUgb3V0IHdo
YXQgd2Ugd2FudCB0byBkbyB3aXRoIHRoZSBubyBMTEludCBvcHRpb24uLi4uCisgICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29t
cGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY3JpcHRFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnN0YWxsQ29kZShDb2RlQmxvY2sqKTsK
ICAgICB2b2lkIGluc3RhbGxDb2RlKFZNJiwgQ29kZUJsb2NrKiwgQ29kZVR5cGUsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOwogICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQsIEpTRnVuY3Rpb24qLCBKU1Njb3BlKiwgRXhjZXB0aW9uKiYpOwotICAg
IENvZGVCbG9jayogbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CisgICAgQ29kZUJsb2NrKiBuZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihDb2RlQmxv
Y2sqIGFsdGVybmF0aXZlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAogICAgIHZvaWQgY2xl
YXJDb2RlKElzb0NlbGxTZXQmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVzdFJ1bm5lclV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw2ICs2NSw5IEBAIEpTVmFsdWUgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVl
IHRoZUYKIHsKICAgICBib29sIHByZXRlbmRUb0hhdmVNYW55Q29tcGlsZXMgPSBmYWxzZTsKICNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAg
ICByZXR1cm4ganNOdW1iZXIoMCk7IC8vIE9PUFMKKwogICAgIGlmICghT3B0aW9uczo6dXNlSklU
KCkgfHwgIU9wdGlvbnM6OnVzZUJhc2VsaW5lSklUKCkgfHwgIU9wdGlvbnM6OnVzZURGR0pJVCgp
KQogICAgICAgICBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1ZTsKICNlbHNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFw
QnJlYWtwb2ludHMoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJ
VENvZGU6OmlzREZHT3JGVEwoZm91bmRDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKICAgICAgICAg
YXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jaygqbV9sb2NrKTsKICAgICAgICAgaWYgKCFsb2NrZXIp
CiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBs
YXRlci4KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxv
Y2tzT25TdGFjCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKGNvZGVCbG9j
ayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAg
ICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzREZHT3JGVEwoY29kZUJsb2NrLT5qaXRU
eXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25EdWVUb1ZNVHJhcHMpOwogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZy
YW1lKGVudHJ5RnJhbWUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1
bHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCShyZXZpc2lv
biAyNzEzNzYpCisrKyBUb29scy9TY3JpcHRzL2NvbXBhcmUtcmVzdWx0cwkod29ya2luZyBjb3B5
KQpAQCAtMTgyLDggKzE4Miw4IEBAIGRlZiBjb21wdXRlTXVsdGlwbGVIeXBvdGhlc2VzU2lnbmlm
aWNhbmMKIAogZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIpOgogICAgIG5hbWVMZW5ndGggPSBsZW4o
InN1YnRlc3QiKQotICAgIGFMZW5ndGggPSBsZW4oYVt1bml0TWFya2VyXSkKLSAgICBiTGVuZ3Ro
ID0gbGVuKGFbdW5pdE1hcmtlcl0pCisgICAgYUxlbmd0aCA9IGxlbihhW3VuaXRNYXJrZXJdKSAr
IDMKKyAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pICsgMwogICAgIHJhdGlvTGVuZ3Ro
ID0gbGVuKCJiIC8gYSIpCiAKICAgICBwVmFsdWVIZWFkZXIgPSAicFZhbHVlIChzaWduaWZpY2Fu
Y2UgdXNpbmcgRmFsc2UgRGlzY292ZXJ5IFJhdGUpIgpAQCAtMjEyLDcgKzIxMiw3IEBAIGRlZiBk
dW1wQnJlYWtkb3ducyhhLCBiKToKICAgICBwTGVuZ3RoICs9IDIKIAogICAgIHN0cmluZ3MgPSBb
XQotICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpee25hbWVMZW5ndGh9fXx7YVNjb3JlOl57YUxl
bmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7Y29tcGFyZTpee3JhdGlvTGVuZ3RofX18e3BN
YXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5PSJzdWJ0ZXN0IiwgYVNjb3JlPWFbdW5pdE1h
cmtlcl0sIGJTY29yZT1iW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5n
dGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0
aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCisg
ICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxlbmd0aH19fHthU2NvcmU6XnthTGVuZ3Ro
fX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJlOl57cmF0aW9MZW5ndGh9fXx7cE1hcmtl
cjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRlc3QiLCBhU2NvcmU9ImE6ICIgKyBhW3Vu
aXRNYXJrZXJdLCBiU2NvcmU9ImI6ICIgKyBiW3VuaXRNYXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVM
ZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29tcGFyZT0iYiAvIGEi
LCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9
cExlbmd0aCkpCiAgICAgZm9yIGtleSBpbiBhLmtleXMoKToKICAgICAgICAgaWYga2V5ID09IHVu
aXRNYXJrZXI6CiAgICAgICAgICAgICBjb250aW51ZQpJbmRleDogTGF5b3V0VGVzdHMvcmVzb3Vy
Y2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Jlc291cmNl
cy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgTGF5b3V0VGVzdHMvcmVz
b3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsMjEgQEAg
dmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRlc3RSdW5uZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVG
dW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlvbiwKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVzOiBu
dW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51bWJlck9mREZHQ29tcGlsZXM6IChmdW5jdGlvbigp
IHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAgICAgcmV0dXJuIChmKSA9PiB7CisgICAgICAgICAg
ICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mREZH
Q29tcGlsZXMoZik7CisKKyAgICAgICAgICAgIC8vIEVtdWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0
aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0aWVyaW5nIGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4K
KyAgICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBXZWFrTWFw
OworICAgICAgICAgICAgbGV0IGNvdW50ID0gbWFwLmdldChmKSB8fCAwOworICAgICAgICAgICAg
Y291bnQgKz0gMTsKKyAgICAgICAgICAgIG1hcC5zZXQoZiwgY291bnQpOworICAgICAgICAgICAg
cmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsKKyAgICAgICAgfTsKKyAgICB9KSgpLAogICAgIGZh
aWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4dE5ld0NvZGVCbG9jawogfTsKIApAQCAtMTQ5LDgg
KzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRoZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFs
dWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUg
KCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQorICAgIHdoaWxlICghZGZnQ29tcGlsZWQo
e2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAgdmFsdWVzLnB1c2goZXZhbChfYSkpOworICAgIH0K
ICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgIH0gY2F0Y2ggKGUpIHsKICAgICBleGNlcHRp
b24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBAIGZ1bmN0aW9uIGRmZ0luY3JlbWVudChhcmd1bWVu
dCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0cykKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7
CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkpCisgICAgaWYgKCFkZmdDb21w
aWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAic3RhcnQi
IGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3RhcnQgOiAwOwogICAgIAogICAgIHJldHVybiBhcmd1
bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419094</attachid>
            <date>2021-02-02 18:51:30 -0800</date>
            <delta_ts>2021-02-03 11:53:44 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>641168</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0xNjQ2
LDEzICsxNjQ4LDEzIEBAIGxldCBydW5XYXNtID0gdHJ1ZTsKIGlmICh0eXBlb2YgV2ViQXNzZW1i
bHkgPT09ICJ1bmRlZmluZWQiKQogICAgIHJ1bldhc20gPSBmYWxzZTsKIAotaWYgKGZhbHNlKSB7
CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZhbHNlOwogICAgIHJ1bkFSRVMgPSBmYWxz
ZTsKICAgICBydW5XU0wgPSBmYWxzZTsKICAgICBydW5SZXhCZW5jaCA9IGZhbHNlOwogICAgIHJ1
bldUQiA9IGZhbHNlOwotICAgIHJ1blN1blNwaWRlciA9IGZhbHNlOworICAgIHJ1blN1blNwaWRl
ciA9IHRydWU7CiAgICAgcnVuU2ltcGxlID0gZmFsc2U7CiAgICAgcnVuQ0RKUyA9IGZhbHNlOwog
ICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9j
bGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9j
bGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgaWYgKGlzRDgpCiBpZiAodHlw
ZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0TGlzdCA9IHVuZGVmaW5lZDsK
IAorLy90ZXN0TGlzdCA9IFsndGFnY2xvdWQtU1AnXTsKKwogaWYgKHR5cGVvZiB0ZXN0SXRlcmF0
aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJdGVyYXRpb25Db3VudCA9IHVuZGVm
aW5lZDsKIApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvYmVu
Y2htYXJrLXJ1bm5lci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBQ
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsOCBAQAogLy8gRklYTUU6IFVzZSB0aGUgcmVhbCBw
cm9taXNlIGlmIGF2YWlsYWJsZS4KIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBpbnRlcmZhY2Ug
aXMgY29tcGF0aWJsZSB3aXRoIHRoZSByZWFsIFByb21pc2UuCisKK19fZGlzYWJsZVNhbXBsaW5n
UHJvZmlsZXIoKTsKKwogZnVuY3Rpb24gU2ltcGxlUHJvbWlzZSgpIHsKICAgICB0aGlzLl9jaGFp
bmVkUHJvbWlzZSA9IG51bGw7CiAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsOwpAQCAtMTI4LDE3
ICsxMzEsMjEgQEAgQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS5fcnVuVGVzdCA9IGZ1bgogCiAg
ICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicgKyB0ZXN0Lm5hbWUgKyAnLXN0YXJ0
Jyk7CiAgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAgIF9fZW5hYmxlU2FtcGxpbmdQcm9m
aWxlcigpOwogICAgIHRlc3QucnVuKHByZXBhcmVSZXR1cm5WYWx1ZSwgY29udGVudFdpbmRvdywg
Y29udGVudERvY3VtZW50KTsKKyAgICBfX2Rpc2FibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAg
dmFyIGVuZFRpbWUgPSBub3coKTsKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcu
JyArIHRlc3QubmFtZSArICctc3luYy1lbmQnKTsKIAogICAgIHZhciBzeW5jVGltZSA9IGVuZFRp
bWUgLSBzdGFydFRpbWU7CiAKICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7CisgICAgX19lbmFi
bGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAg
ICAgIC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3QgaW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBsYXlvdXQg
Zm9yIHBhaW50LgogICAgICAgICAvLyBGb3JjZSB0aGUgbGF5b3V0IGhlcmUgdG8gZW5zdXJlIHdl
J3JlIG1lYXN1cmluZyB0aGUgbGF5b3V0IHRpbWUuCiAgICAgICAgIHZhciBoZWlnaHQgPSBzZWxm
Ll9mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWln
aHQ7CisgICAgICAgIF9fZGlzYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICAgICAgdmFyIGVu
ZFRpbWUgPSBub3coKTsKICAgICAgICAgc2VsZi5fZnJhbWUuY29udGVudFdpbmRvdy5fdW51c2Vk
SGVpZ2h0VmFsdWUgPSBoZWlnaHQ7IC8vIFByZXZlbnQgZGVhZCBjb2RlIGVsaW1pbmF0aW9uLgog
ICAgICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICct
YXN5bmMtZW5kJyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2
ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvCiAKIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25B
c0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9uQXNEb3VibGVOdW1i
ZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFibGVkIiwgZnVuY3Rp
b25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHJvcEFsbExv
Y2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjpl
eHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkpIHsKQEAgLTI2NTMs
NiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0pKTsKIH0KIAorSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFs
T2JqZWN0KTsKQEAgLTM0NDMsNyArMzQ1MSw5IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFuZExp
bmUmIG9wdGlvbnMsIGIKICAgICAgICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnku
a2V5KTsKICAgICAgICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxl
VGltZUtleXMuZW5kKCkpOwogICAgICAgICBmb3IgKGNvbnN0IENTdHJpbmcmIGtleSA6IGNvbXBp
bGVUaW1lS2V5cykgewotICAgICAgICAgICAgaWYgKGtleS5kYXRhKCkpCisgICAgICAgICAgICBp
ZiAoa2V5LmRhdGEoKSAmJiBTdHJpbmcoa2V5LmRhdGEoKSkuY29udGFpbnMoIkNvbXBpbGVzIikp
CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlNDBzOiAlbGx1XG4iLCBrZXkuZGF0YSgpLCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oY29tcGlsZVRpbWVTdGF0cy5nZXQoa2V5KS52YWx1ZSgpKSk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChrZXkuZGF0YSgpKQogICAgICAgICAgICAgICAgIHByaW50Zigi
JTQwczogJS4zbGYgbXNcbiIsIGtleS5kYXRhKCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSku
bWlsbGlzZWNvbmRzKCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBzaG91bGREdW1wRGlz
YXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgaWYgKGNvZGVCbG9jayAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlv
bnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fz
c2VtYmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAg
LTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBI
ZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnBy
aW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlv
bnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDog
WyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0
SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEo
IiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fscygp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAg
ICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAg
ICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewog
ICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkg
KyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFz
cyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxC
bG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAm
ID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Cisg
ICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYg
b3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgp
KTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdy
YXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQg
ZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBz
cGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkp
CisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9
IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlz
LCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgogICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgY2Fz
ZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1w
bChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAgcmV0dXJuOwogCisgICAgVVNF
UyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAgICBVU0VTKE9wVG9UaGlzLCBz
cmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAg
VVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBl
KFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5w
cmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0
aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBpZiAoKHRoaXMtPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIg
KFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5l
dmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTIz
NCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAg
ICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7
CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0g
ICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGlu
c3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3Jh
cGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpS
ZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAtMjk1LDYgKzI5NSw3IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgp
KQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAsIG1fYXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQogICAgICwgbV9jb25zdGFudFJl
Z2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAgICwgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQpAQCAt
MzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAK
ICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAKICAgICBBU1NFUlQoc291
cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0
ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIubnVtUGFyYW1ldGVycygpOwog
ICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAtODUwLDcg
Kzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gdG8gdGhlIENvZGVCbG9j
ay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBDb2RlQmxv
Y2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIHdoZW4gdGhlIENv
ZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAg
ICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwogI2VuZGlmCiAg
ICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7CkBAIC05NjQsNiArOTY2LDcg
QEAgdm9pZCBDb2RlQmxvY2s6OnNldEFsdGVybmF0aXZlKFZNJiB2bSwgQwogewogICAgIFJFTEVB
U0VfQVNTRVJUKGFsdGVybmF0aXZlKTsKICAgICBSRUxFQVNFX0FTU0VSVChhbHRlcm5hdGl2ZS0+
aml0Q29kZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhbHRlcm5hdGl2ZS0+bG9sT3JCYXNlbGlu
ZUFsdGVybmF0aXZlKCkgPT0gYWx0ZXJuYXRpdmUpOwogICAgIG1fYWx0ZXJuYXRpdmUuc2V0KHZt
LCB0aGlzLCBhbHRlcm5hdGl2ZSk7CiB9CiAKQEAgLTEwMzcsNyArMTA0MCw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJbnRlcnByZXRlciBhbmQg
QmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4K
ICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhp
cyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDUsNyArMTA0
OCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKIAogYm9vbCBD
b2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJiB2bSkKIHsKLSAg
ICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1OCw2ICsxMDYxLDggQEAg
c3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0
dXJuIDEwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAg
ICAgcmV0dXJuIDMwX21zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAg
ICAgIHJldHVybiAzNV9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAg
ICAgICByZXR1cm4gNDBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3
NCw2ICsxMDc5LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAog
ICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2Vs
aW5lSklUIGFuZAogICAgICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2Nr
LgogICAgICAgICByZXR1cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAg
ICAgcmV0dXJuIDE4X3M7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVy
biAyMF9zOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2OSw3ICsxMTc2LDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0
VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29k
ZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3Rh
dHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEyMjQsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2Vp
cmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBP
bmUgdGhhdCBJIGZvdW5kIHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQgZGVjaWRlIHRoYXQgdGhl
IENvZGVCbG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xkIGFnZSwgc28gdGhlCiAg
ICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgotICAgIGlmICghSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09y
RlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1vbkRh
dGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xNTE5LDggKzE1MjYs
MTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAjZW5kaWYK
ICAgICAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCisg
ICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpIHx8IGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzogU2VwYXJhdGUgcGFydCBv
ZiB0aGlzIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJQ3MuIFNpbmNlIHNvbWUg
b2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAgICAgICAgZmluYWxpemVM
TEludElubGluZUNhY2hlcygpOworICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEh
aml0Q29kZSgpKQpAQCAtMTUyOCw3ICsxNTM3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6
aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRl
ZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYgKzE1NTcsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICBjb3VudCA9
IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9M
SklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CkBAIC0xNTkw
LDcgKzE2MDAsNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uCiAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87
CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjppc0RGR09y
RlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9u
ID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6
IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAgICAgICAgICAgICByZXN1
bHQuYWRkKHBhaXIuZmlyc3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsU3RhdHVz
ID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBAIC0xNzc1LDggKzE3ODUsMTAgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICBpZiAoZGZnQ29tbW9uLT5pbmxpbmVD
YWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKmRmZ0Nv
bW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxG
cmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoaW5s
aW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAgICAgICAvLyBUaGlzIHdp
bGwgdHJhbnNpdGl2ZWx5IGtlZXAgdGhlIGJhc2VsaW5lIGNvZGUgYmxvY2sgYWxpdmUuIEl0J3Mg
ZWFzaWVyIHRvIG5vdCB3b3JyeSB0aGF0IHdlJ3JlIHJlbHlpbmcgb24gdGhlIExPTCBDb2RlQmxv
Y2sgc29tZWhvdy4KKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaW5saW5lQ2Fs
bEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jayk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVC
bG9jayk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTE4MTAsMTIgKzE4MjIsMTUgQEAg
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAg
IERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAg
ICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgfQog
I2VuZGlmCisKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAgICAg
dmlzaXRvci5hcHBlbmQobV9hbHRlcm5hdGl2ZSk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJv
bmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkBAIC0xODIzLDcgKzE4MzgsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ry
b25nbHlWaXNpdFdlYWtSZWZlcmVuCiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCiAjaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2Rl
LT5kZmdDb21tb24oKTsKQEAgLTE4NTksNiArMTg3NCwyNSBAQCBDb2RlQmxvY2sqIENvZGVCbG9j
azo6YmFzZWxpbmVBbHRlcm5hdGl2CiAjZW5kaWYKIH0KIAorQ29kZUJsb2NrKiBDb2RlQmxvY2s6
OmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBDb2Rl
QmxvY2sqIHJlc3VsdCA9IHRoaXM7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYXV0byBq
aXRUeXBlID0gcmVzdWx0LT5qaXRUeXBlKCk7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVFR5
cGU6OkxPTEpJVCB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUo
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworI2Vsc2UKKyAgICBy
ZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVW
ZXJzaW9uKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtMTg2Nyw3ICsxOTAxLDcgQEAgQ29kZUJs
b2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkg
ewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgewor
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBl
KSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3Zl
IGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8v
IGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpj
bGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2Rl
QmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJ
VApAQCAtMTkzMSw3ICsxOTY1LDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZv
ckluZGV4KAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKQogewog
I2lmIEVOQUJMRShERkdfSklUKQotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09y
RlRMKGppdFR5cGUoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3Jp
Z2luYWxDYWxsU2l0ZSkpOwogICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENh
bGxTaXRlLmJpdHMoKSkpOwogICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3Jp
Z2luKG9yaWdpbmFsQ2FsbFNpdGUpOwpAQCAtMTk0OSw2ICsxOTgzLDggQEAgRGlzcG9zYWJsZUNh
bGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeAogCiB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0
Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKIHsKKyAgICBBU1NFUlQoYmFzZWxpbmVBbHRlcm5hdGl2ZSgpID09IHRoaXMpOwor
CiAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KTsKICAgICBPcENhdGNoIG9wID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBvcC5tZXRhZGF0YSh0aGlzKTsKQEAgLTIxMzAsOSArMjE2Niw5IEBAIHZv
aWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmEKICAgICBtX2luY29taW5nTExJ
bnRDYWxscy5wdXNoKGluY29taW5nKTsKIH0KIAotQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1Jl
cGxhY2VtZW50KCkKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudChDb2RlQmxv
Y2sqIGFsdGVybmF0aXZlKQogewotICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVw
bGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIHJldHVybiBv
d25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoYWx0ZXJuYXRpdmUs
IHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0yMjMxLDUx
ICsyMjY3LDU1IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKICAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CiAgICAgCiAgICAgLy8gV2Ugd2Fu
dCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAvLyAxKSBNYWtlIHN1cmUgdGhh
dCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdl
IHJldHVybiB0byBpdAorICAgIC8vIDEpIElmIHdlJ3JlIERGRy9GVEwsIG1ha2Ugc3VyZSB0aGF0
IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2Ug
cmV0dXJuIHRvIGl0CiAgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2Yg
dGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KICAgICAvLyAy
KSBNYWtlIHN1cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdl
IHNob3VsZG4ndCBjYWxsIHRoaXMgQ29kZUJsb2NrLgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21t
b24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmls
ZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQotICAgICAgICAgICAgY29tcGls
YXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBp
bmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KLSAgICAgICAgaWYgKCFq
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkg
JiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09s
ZEFnZSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9
IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+
c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVw
aW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCisgICAgICAgICAgICBp
ZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgeworICAgICAgICAgICAg
ICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXNDdXJyZW50
VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
ICAgICAKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0
YUxvZygiICAgIERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6YXRpb24gaWYgdGhh
dCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6
YXRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGNhbGwgYWx0ZXJu
YXRpdmUoKS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMzY3NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNvdW50UmVvcHRpbWl6
YXRpb24oKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0
aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAg
aWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
d2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZvciBPU1IgZW50
cnkgY29kZQogICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8vIE9yLCB3ZSdyZSBhbiBMT0wg
Q29kZUJsb2NrIGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAgICBhbHRlcm5hdGl2ZSgpLT5v
cHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJh
cHMpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiByZWFzb24gIT0g
UHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvVk1UcmFwcykKICAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgLy8gSmV0dGlzb24gY2FuIGhhcHBlbiBkdXJp
bmcgR0MuIFdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVhZCBleGVjdXRhYmxl
CiAgICAgLy8gYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0IHRvIHRoZSByZW1l
bWJlcmVkIHNldC4KQEAgLTIzMDYsNyArMjM0Niw3IEBAIEpTR2xvYmFsT2JqZWN0KiBDb2RlQmxv
Y2s6Omdsb2JhbE9iamVjdEYKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICBy
ZXR1cm4gZ2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUt
PmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogfQogCiBjbGFzcyBSZWN1
cnNpb25DaGVja0Z1bmN0b3IgewpAQCAtMjM2NSw3ICsyNDA1LDcgQEAgdm9pZCBDb2RlQmxvY2s6
Om5vdGljZUluY29taW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgIGlmICghaGFzQmFzZWxpbmVPckxP
TFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIURGRzo6bWlnaHRJbmxp
bmVGdW5jdGlvbih0aGlzKSkKQEAgLTIzOTAsNyArMjQzMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgp
KSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNvZGVCbG9jay0+aml0VHlw
ZSgpKSkgewogICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwogICAgICAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSwgIiAgICBDbGVhcmluZyBT
QUJJIGJjYXVzZSBjYWxsZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLiIpOwogICAgICAgICByZXR1
cm47CkBAIC0yNDgzLDEyICsyNTIzLDE0IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZE
RkdDb21waWxlcygKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlw
ZSgpKSk7CiAgICAgaWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICht
X2RpZEZhaWxGVExDb21waWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAg
ICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXI7CiAgICAgfQogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQg
PSB0aGlzLT5yZXBsYWNlbWVudCgpOwotICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYmIEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYm
IEpJVENvZGU6OmlzREZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsg
bV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKIH0KIAogaW50MzJfdCBDb2RlQmxvY2s6OmNv
ZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0CkBAIC0yNjQxLDcgKzI2ODMsNyBAQCBh
dXRvIENvZGVCbG9jazo6dXBkYXRlT1NSRXhpdENvdW50ZXJBbmRDCiAKICAgICBib29sIGRpZFRy
eVRvRW50ZXJJbkxvb3AgPSBmYWxzZTsKICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNh
bGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIu
aW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsK
KyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkgewogICAgICAgICAgICAgZGlk
VHJ5VG9FbnRlckluTG9vcCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMjcwOSwyNSArMjc1MSwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25T
bG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBKSVRUeXBl
IHR5cGUgPSBqaXRUeXBlKCk7Ci0gICAgaWYgKHR5cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
IHsKKyAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiB0eXBlICE9IEpJVFR5
cGU6OkxPTEpJVCkgewogICAgICAgICBkYXRhTG9nTG4oKnRoaXMsICI6IGV4cGVjdGVkIHRvIGhh
dmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlKTsKICAgICAgICAgQ1JBU0hfV0lUSF9J
TkZPKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGppdENvZGUoKS5nZXQoKSksIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHR5cGUpKTsKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCA9IHRoaXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgYm9vbCBoYXNSZXBsYWNlbWVudCA9IChyZXBs
YWNlbWVudCAmJiByZXBsYWNlbWVudCAhPSB0aGlzKTsKKyAgICBib29sIGhhc1JlcGxhY2VtZW50
ID0gcmVwbGFjZW1lbnQgJiYgcmVwbGFjZW1lbnQgIT0gdGhpczsKKyAgICBib29sIHJlcGxhY2Vt
ZW50SXNIaWdoZXJUaWVyID0gZmFsc2U7CisgICAgaWYgKGhhc1JlcGxhY2VtZW50KSB7CisgICAg
ICAgIHJlcGxhY2VtZW50SXNIaWdoZXJUaWVyID0gSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxh
Y2VtZW50LT5qaXRUeXBlKCksIGppdFR5cGUoKSk7CisgICAgICAgIGhhc1JlcGxhY2VtZW50ICY9
IHJlcGxhY2VtZW50SXNIaWdoZXJUaWVyOworICAgIH0KKwogICAgIGlmICgocmVzdWx0ID09IENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bCkgIT0gaGFzUmVwbGFjZW1lbnQpIHsKLSAgICAgICAgZGF0YUxv
ZygqdGhpcywgIjogd2UgaGF2ZSByZXN1bHQgPSAiLCByZXN1bHQsICIgYnV0ICIpOworICAgICAg
ICBib29sIGIgPSB0cnVlOworICAgICAgICBpZiAoYikgcmV0dXJuOworCisgICAgICAgIGRhdGFM
b2coKnRoaXMsICIgIiwgaml0VHlwZSgpLCAiOiB3ZSBoYXZlIHJlc3VsdCA9ICIsIHJlc3VsdCwg
IiBidXQgIik7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSB0aGlzKQogICAgICAgICAgICAg
ZGF0YUxvZygid2UgYXJlIG91ciBvd24gcmVwbGFjZW1lbnQuXG4iKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZGF0YUxvZygib3VyIHJlcGxhY2VtZW50IGlzICIsIHBvaW50ZXJEdW1wKHJl
cGxhY2VtZW50KSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJvdXIgcmVwbGFjZW1lbnQg
aXMgIiwgcG9pbnRlckR1bXAocmVwbGFjZW1lbnQpLCAiICIsIHJlcGxhY2VtZW50LT5qaXRUeXBl
KCksICJcbiIpOworICAgICAgICBkYXRhTG9nTG4oIlVzOiAiLCBSYXdQb2ludGVyKHRoaXMpLCAi
IHJlcGxhY2VtZW50OiAiLCBSYXdQb2ludGVyKHJlcGxhY2VtZW50KSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotICAgIAorCisgICAgaWYgKGhhc1JlcGxh
Y2VtZW50ICYmICFyZXBsYWNlbWVudElzSGlnaGVyVGllcikKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVw
bGFjZW1lbnQgJiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7
CiAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CkBAIC0yNzU2LDcgKzI4MTEsOCBAQCB2b2lkIENvZGVC
bG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiB1aW50MzJfdCBDb2RlQmxvY2s6
OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAv
L0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7IC8vIE9PUFM6IFdl
IGNhbGwgdGhpcyBmcm9tIHRoZSBMT0wgY29tcGlsZXIgdGhyZWFkIGJlZm9yZSBpbnN0YWxsLgor
CiAgICAgLy8gQ29tcHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4g
VGhpcyBpcyBjYWxsZWQgaW5mcmVxdWVudGx5CiAgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29w
IHdvbid0IGh1cnQgdXMuCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsK
QEAgLTI4MzYsNyArMjg5Miw3IEBAIERGRzo6Q29kZU9yaWdpblBvb2wmIENvZGVCbG9jazo6Y29k
ZU9yaWcKIAogc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0
CiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBp
ZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzLnNp
emUoKTsKQEAgLTI4NDcsNyArMjkwMyw3IEBAIGNvbnN0IElkZW50aWZpZXImIENvZGVCbG9jazo6
aWRlbnRpZmllcigKICAgICBzaXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQogICAgICAgICByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSk7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJz
W2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkBAIC0yOTEyLDMwICsyOTY4LDMxIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVk
aWN0aW9ucygpCiAgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogfQogCi1ib29sIENv
ZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQorYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGlt
aXplVG9ERkdOb3coKQogewogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
IkNvbnNpZGVyaW5nIG9wdGltaXppbmcgIiwgKnRoaXMsICIuLi4iKTsKIAogICAgIGlmIChtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVs
YXkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgdXBkYXRlQWxsQXJyYXlQcmVk
aWN0aW9ucygpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CisgICAgYmFzZWxpbmVDb2RlQmxvY2stPnVwZGF0ZUFsbEFycmF5UHJlZGlj
dGlvbnMoKTsKICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXM7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlczsKLSAgICB1
cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MobnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsK
KyAgICBiYXNlbGluZUNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVt
YmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KSB7CiAgICAgICAgIGRhdGFMb2dGKAogICAgICAgICAgICAgIlByb2ZpbGUgaG90bmVzczogJWxm
ICgldSAvICV1KSwgJWxmICgldSAvICV1KVxuIiwKLSAgICAgICAgICAgIChkb3VibGUpbnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXMoKSwKLSAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcywgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAgIChk
b3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZC
dWNrZXRzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAg
IG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMsIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRz
ICogbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSk7CisgICAgICAgICAgICAoZG91
YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIGJhc2VsaW5lQ29kZUJs
b2NrLT5udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpLAorICAgICAgICAgICAgbnVt
YmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBiYXNlbGluZUNvZGVCbG9jay0+bnVt
YmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAgIChkb3VibGUpbnVt
YmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8g
YmFzZWxpbmVDb2RlQmxvY2stPm51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCksCisg
ICAgICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzLCBWYWx1ZVByb2ZpbGU6Om51bWJl
ck9mQnVja2V0cyAqIGJhc2VsaW5lQ29kZUJsb2NrLT5udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoKCFudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVz
IC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVk
UHJvZmlsZUxpdmVuZXNzUmF0ZSgpKQotICAgICAgICAmJiAoIXRvdGFsTnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpID49IE9w
dGlvbnM6OmRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCisgICAgaWYgKCghYmFzZWxpbmVD
b2RlQmxvY2stPm51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSlu
dW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBiYXNlbGluZUNvZGVCbG9jay0+
bnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJv
ZmlsZUxpdmVuZXNzUmF0ZSgpKQorICAgICAgICAmJiAoIWJhc2VsaW5lQ29kZUJsb2NrLT50b3Rh
bE51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gYmFzZWxpbmVDb2RlQmxvY2st
PnRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVG
dWxsbmVzc1JhdGUoKSkKICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRl
bGF5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIApAQCAtMjk0OCwxMCArMzAwNSwxMCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogI2lmIEVOQUJMRShERkdfSklU
KQogdm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKQogewotICAgIEFTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgQVNTRVJUKEpJVENv
ZGU6OmlzQmFzZWxpbmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOworICAgIC8vIE9P
UFMKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICAKLSAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2ZSgpOworICAgIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAgICAKICAgICBzd2l0
Y2ggKGppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOiB7CkBAIC0zMDUwLDYg
KzMxMDcsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNp
ZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBK
SVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0zMjI2LDE0ICszMjg0LDE0IEBA
IHZvaWQgQ29kZUJsb2NrOjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJy
ZWFrcG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOwogICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRz
KTsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYg
KEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmls
ZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9j
azo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAg
bV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJs
ZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUg
PT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkp
CiAgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGlu
Zyk7CiB9CiAKQEAgLTMyOTYsNyArMzM1NCw3IEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxv
Y2s6OnVuYXJ5QXJpdGgKIAogYm9vbCBDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZh
c3RDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBpZiAoIWhhc0Jhc2Vs
aW5lSklUUHJvZmlsaW5nKCkpCisgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUg
PSBiaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IGlmICghcHJvZmlsZSkKQEAgLTM0MjEsOSArMzQ3OSw5IEBAIE9wdGlvbmFsPEJ5dGVjb2RlSW5k
ZXg+IENvZGVCbG9jazo6Ynl0ZWMKIHsKICAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRl
Y29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBp
ZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNv
ZGVJbmRleChqaXRUeXBlKSkKICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGNhbGxTaXRlSW5kZXgu
Ynl0ZWNvZGVJbmRleCgpOwotICAgIGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklU
IHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7CisgICAgZWxzZSB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNp
dGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNp
dGVJbmRleCk7CkBAIC0zNDY2LDcgKzM1MjQsNyBAQCBib29sIENvZGVCbG9jazo6aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20g
YSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNh
bGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8v
IHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlm
ICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2Rl
Ojppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+aGFzSW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9pbnRz
KCk7CiAjZWxzZQpAQCAtMzQ4MCw3ICszNTM4LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omluc3RhbGxW
TVRyYXBCcmVha3BvaW50cwogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9t
IGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAgICAvLyBjYXJlZnVsIHRvIG5vdCBj
YWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5kbGVyIHNhZmUsIGUuZy4KICAgICAv
LyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50IG9mIG1faml0Q29kZS4KLSAgICBp
ZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29k
ZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0
byYgY29tbW9uRGF0YSA9ICptX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgIGNvbW1vbkRhdGEu
aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYs
NiArMTk2LDcgQEAgcHVibGljOgogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRp
c29uKCk7ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRl
cm5hdGl2ZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogbG9sT3JCYXNlbGlu
ZUFsdGVybmF0aXZlKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkBAIC0z
NDcsNyArMzQ4LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2Vs
aW5lSklUUHJvZmlsaW5nKCkpCisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9m
aWxlQ291bnRGb3JCeXRlY29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC0zNTYs
NyArMzU3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklU
UHJvZmlsaW5nKCkpCisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291
bnRGb3JCeXRlY29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC00MTIsOCArNDEz
LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJl
dHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KICAgICB1bnNpZ25lZCBieXRlY29kZUNvc3Qo
KSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlQ29zdDsgfQogCi0gICAgLy8gRXhhY3RseSBlcXVp
dmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29k
ZUJsb2NrRm9yKGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCi0gICAgQ29kZUJsb2Nr
KiBuZXdSZXBsYWNlbWVudCgpOworICAgIC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihhbHRlcm5h
dGl2ZSwgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSkKKyAgICBDb2RlQmxvY2sqIG5l
d1JlcGxhY2VtZW50KENvZGVCbG9jayogYWx0ZXJuYXRpdmUpOwogICAgIAogICAgIHZvaWQgc2V0
SklUQ29kZShSZWY8SklUQ29kZT4mJiBjb2RlKQogICAgIHsKQEAgLTQzNiw5ICs0MzcsMTAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGJvb2wgaGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSBjb25zdAorICAgIGJvb2wgaGFzQmFzZWxpbmVPckxPTFByb2Zp
bGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUOworICAgICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgICAg
IHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6
TE9MSklUOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMyw3IEBA
IHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0
ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShj
b25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JF
YWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2Zp
bGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3ICs1NDIsNyBAQCBwdWJsaWM6CiAgICAgLy8gSGF2
aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmlu
Zy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgY2FuR2V0
Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQpAQCAtODAzLDcgKzgwNiw3IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQogI2Vu
ZGlmCiAKLSAgICBib29sIHNob3VsZE9wdGltaXplTm93KCk7CisgICAgYm9vbCBzaG91bGRPcHRp
bWl6ZVRvREZHTm93KCk7CiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9u
cygpOwogICAgIHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogICAgIHZvaWQgdXBk
YXRlQWxsUHJlZGljdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUo
Y29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwog
ICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1f
cmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFy
ZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBib29sIENvZGVPcmlnaW46OmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oCiAgICAgICAgIGlmICghYUhhc0lubGluZUNhbGxGcmFtZSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKGFJbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpICE9IGJJbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKQorICAgICAgICBpZiAoYUlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay5nZXQoKSAhPSBiSW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJs
b2NrLmdldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAg
YSA9IGFJbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKQEAgLTk5LDcgKzk5LDcgQEAgdW5z
aWduZWQgQ29kZU9yaWdpbjo6YXBwcm94aW1hdGVIYXNoKElubAogICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lID09IHRlcm1pbmFsKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgCi0gICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2goaW5saW5l
Q2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIHJlc3VsdCArPSBX
VEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2goaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgCiAgICAgICAgIGNvZGVPcmlnaW4gPSBpbmxpbmVD
YWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICB9CkBAIC0xMjEsNyArMTIxLDcgQEAgQ29kZUJs
b2NrKiBDb2RlT3JpZ2luOjpjb2RlT3JpZ2luT3duZXIoKQogICAgIGF1dG8qIGlubGluZUNhbGxG
cmFtZSA9IHRoaXMtPmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1l
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJ
bmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKIH0KIAogaW50IENvZGVPcmlnaW46OnN0
YWNrT2Zmc2V0KCkgY29uc3QKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIENvZGVPcmlnaW46OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAtLT4gIik7CiAg
ICAgICAgIAogICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lKiBmcmFtZSA9IHN0YWNrW2ldLmlu
bGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoZnJhbWUtPmJyaWVmRnVu
Y3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGZyYW1lLT5iYXNlbGluZUNvZGVC
bG9jay5nZXQoKSksICI+ICIpOworICAgICAgICAgICAgb3V0LnByaW50KGZyYW1lLT5icmllZkZ1
bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihmcmFtZS0+bG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay5nZXQoKSksICI+ICIpOwogICAgICAgICAgICAgaWYgKGZyYW1lLT5pc0Nsb3N1
cmVDYWxsKQogICAgICAgICAgICAgICAgIG91dC5wcmludCgiKGNsb3N1cmUpICIpOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5n
SklUVHlwZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhp
dEZyb21Bbnl0aGluZzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tQW55dGhpbmciKTsKICAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRXhpdEZyb21MT0w6CisgICAgICAgIG91dC5wcmludCgiRnJv
bUxPTCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAg
b3V0LnByaW50KCJGcm9tREZHIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBF
eGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhp
dEZyb21MT0wsCiAgICAgRXhpdEZyb21ERkcsCiAgICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2
ICszOSw4IEBAIGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5n
SklUVHlwZSBleGl0aW5nSklUVHlwZUZvcihKSVRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJv
bUxPTDsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9t
REZHOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNyArNDUsMTcgQEAgSlNGdW5jdGlvbiogSW5saW5lQ2Fs
bEZyYW1lOjpjYWxsZWVGb3JDYQogCiBDb2RlQmxvY2tIYXNoIElubGluZUNhbGxGcmFtZTo6aGFz
aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5oYXNoKCk7CisgICAg
cmV0dXJuIGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmhhc2goKTsKIH0KIAogQ1N0cmluZyBJbmxp
bmVDYWxsRnJhbWU6Omhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdAogewotICAgIHJldHVy
biBiYXNlbGluZUNvZGVCbG9jay0+aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpOworICAgIHJldHVy
biBsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5oYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCk7CiB9CiAK
IENTdHJpbmcgSW5saW5lQ2FsbEZyYW1lOjppbmZlcnJlZE5hbWUoKSBjb25zdAogewotICAgIHJl
dHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oYmFzZWxpbmVDb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpKS0+ZWNtYU5hbWUoKS51dGY4KCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSktPmVjbWFOYW1lKCkudXRmOCgpOwogfQogCiB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEJy
aWVmRnVuY3Rpb25JbmZvcm1hdGlvbihQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNjUsNyAr
NjUsNyBAQCB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEJyaWVmRnVuY3Rpb25JCiAKIHZvaWQg
SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAogewotICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3Jt
YXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihiYXNlbGluZUNvZGVCbG9jay5nZXQoKSkpOworICAg
IG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihs
b2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSk7CiAgICAgaWYgKGlzSW5TdHJpY3RDb250ZXh0
KCkpCiAgICAgICAgIG91dC5wcmludCgiIChTdHJpY3RNb2RlKSIpOwogICAgIG91dC5wcmludCgi
LCAiLCBkaXJlY3RDYWxsZXIuYnl0ZWNvZGVJbmRleCgpLCAiLCAiLCBzdGF0aWNfY2FzdDxLaW5k
PihraW5kKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2Fs
bEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUNhbGxGcmFtZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsx
NzYsNyBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICB9CiAgICAgCiAgICAgVmVjdG9y
PFZhbHVlUmVjb3Zlcnk+IGFyZ3VtZW50c1dpdGhGaXh1cDsgLy8gSW5jbHVkZXMgJ3RoaXMnIGFu
ZCBhcml0eSBmaXh1cHMuCi0gICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVDb2Rl
QmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbG9sT3JCYXNlbGluZUNvZGVCbG9j
azsKICAgICBDb2RlT3JpZ2luIGRpcmVjdENhbGxlcjsKIAogICAgIHVuc2lnbmVkIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KQEAgLTIz
MSwyMCArMjMxLDIxIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHB0cmRpZmZfdCBj
YWxsZXJGcmFtZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJl
Z2lzdGVyKSArIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKTsgfQogICAgIHB0cmRpZmZf
dCByZXR1cm5QQ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJl
Z2lzdGVyKSArIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKTsgfQogCi0gICAgYm9vbCBpc0lu
U3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKS0+aXNJblN0cmljdENvbnRleHQoKTsgfQorICAgIGJvb2wgaXNJblN0cmljdENv
bnRleHQoKSBjb25zdCB7IHJldHVybiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+aXNJblN0cmljdENvbnRleHQoKTsgfQogCiAgICAgdm9pZCBkdW1wQnJpZWZGdW5j
dGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKIAogICAgIE1BS0VfUFJJTlRfTUVUSE9EKElubGluZUNhbGxGcmFt
ZSwgZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbiwgYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9u
KTsKLQogfTsKIAogaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBp
bmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisgICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihPcGVyYW5kKSA9PSBzaXplb2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNM
aWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29s
IHRyYWNrQ2FsbGVlID0gZmFsc2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwg
RmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0x
NDMsMjEgKzE0NCwyMyBAQCBwdWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAot
ICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2Nh
bHMsIHNpemVfdCBudW1UbXBzKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1
bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3Rh
bnRzID0gMCkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAg
ICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNv
bnN0YW50cykKICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVt
TG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBu
dW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAgICAg
ICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxU
Pjo6bmVlZHNJbml0aWFsaXphdGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsK
ICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXpl
X3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAg
IGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMs
IHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1f
bnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFu
dHMpCiAgICAgewotICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2Fs
cyArIG51bVRtcHMpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxv
Y2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAg
bV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgs
NyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25z
dCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAg
ICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAs
IG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1Db25z
dGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVz
Lmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUp
OwpAQCAtMTcyLDMzICsxNzYsNTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJn
dW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVt
YmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAgIHNpemVfdCBu
dW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFy
Z3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0
YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJl
ck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1l
bnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tD
YWxsZWU7IH0KIAorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3Rk
OjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAg
ICB9CiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4
KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZU
eXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50
SW5kZXgoaWR4KV07IH0KKworICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1l
ID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2Fs
bGVlKCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9v
ID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+
CisgICAgQ29uc3RSZWZUeXBlIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3Qo
KTsgfQogICAgIAogICAgIFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1
ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZU
eXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgo
aWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRl
PE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAg
LTI0OCw3ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9j
YWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBu
dW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJl
ck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9s
ZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBz
ID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0y
NjgsNyArMjkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNp
emVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9
IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAg
c2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSAr
IG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8
fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4
ICszMjcsMTUgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBp
ZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0YW50SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAg
ICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBA
IC0zMTksOCArMzQ4LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAg
aWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGNvbnN0YW50KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9j
YWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgp
KSA8IG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJv
b2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
bmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJl
ck9mQXJndW1lbnRzKCkpCisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBu
dW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVy
YW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkp
KTsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlckZvckNvbnN0YW50KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9m
TG9jYWxzKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPT0gY2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lk
IGZpbGwoVCB2YWx1ZSkKQEAgLTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBm
aXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBt
X251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhl
IGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0
IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25z
dGFudHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAg
IHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxz
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDgg
KzM4LDggQEAgaW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAg
ICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tD
YWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBDb21tYVBy
aW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZv
aWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNv
bnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIg
KHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGlu
Q29udGV4dChjYWxsZWUoKSwgY29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
dm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxs
ZWU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1l
bnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5k
czxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkp
OwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NCw3ICsxMDQsNyBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAg
ICAgICAgIG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNp
dGUgPSBqaXQtPmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZl
QXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLT5j
YWxsU2l0ZUluZGV4KTsKICAgICAgICAgbV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0
aW9uID0gbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0
ZS5udW1iZXJPZlNldFJlZ2lzdGVycygpID4gMDsKICAgICAgICAgaWYgKG1fbmVlZHNUb1Jlc3Rv
cmVSZWdpc3RlcnNJZkV4Y2VwdGlvbikKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0LT5jb2RlQmxvY2so
KS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lz
dGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNp
dGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJz
Rm9yQ2FsbC5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC03MTAsNyArNzEwLDcg
QEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAvLyBX
ZSBzZXQgdGhlc2UgdG8gaW5kaWNhdGUgdG8gdGhlIHN0dWIgdG8gcmVtb3ZlIGl0c2VsZiBmcm9t
IHRoZSBDb2RlQmxvY2sncwogICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciB0YWJsZSB3aGVu
IGl0IGlzIGRlYWxsb2NhdGVkLgogICAgICAgICBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhh
bmRsZXJzID0gY29kZUJsb2NrOwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOworICAg
ICAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlv
bkhhbmRsZXJzLT5qaXRUeXBlKCkpKTsKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlv
bkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEg
QEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2
YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5
dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0
dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5l
IGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAg
IHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBh
bmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAot
ICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBl
IGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRz
OyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVn
aXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmly
dHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGlu
dCk7CisgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFu
dChpbnQpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3Rl
ciA9IDB4M2ZmZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVh
bFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2Fs
KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0
ZXIpICYmICFpc0NvbnN0YW50KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAg
ICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFu
ZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAt
MSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVy
YW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsg
fQogICAgIHN0YXRpYyBpbnQgYXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVy
biBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0
aWMgaW50IGNvbnN0YW50VG9PcGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3Zp
cnR1YWxSZWdpc3RlcjsKIH07CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitp
bmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25z
dGFudEluZGV4KQoreworICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
Ojpjb25zdGFudFRvT3BlcmFuZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1
bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMs
IG51bUxvY2FscywgbnVtVG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVh
ZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRv
cCgpKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzLCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBl
eGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRl
ICJJbkJ5SWRTdGF0dXMuaCIKICNpbmNsdWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCisjaW5jbHVk
ZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIgpAQCAtOTA1LDcg
KzkwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKICAgICAg
ICAgfTsKIAotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9m
aWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lKCkpKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFZh
bHVlUHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIENv
ZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKCkpKTsKICAgICAgICAgaWYg
KHByZWRpY3Rpb24gIT0gU3BlY05vbmUpCiAgICAgICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsK
IApAQCAtOTM5LDcgKzk0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB3aGlsZSAoc3RhY2st
Pm1faW5saW5lQ2FsbEZyYW1lICE9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpKQogICAg
ICAgICAgICAgICAgIHN0YWNrID0gc3RhY2stPm1fY2FsbGVyOwogCi0gICAgICAgICAgICByZXR1
cm4gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9m
ZnNldChzdGFjay0+bV9wcm9maWxlZEJsb2NrLCAqY29kZU9yaWdpbik7CisgICAgICAgICAgICBy
ZXR1cm4gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29k
ZU9mZnNldChzdGFjay0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksICpj
b2RlT3JpZ2luKTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CkBAIC05ODIsOCArOTgz
LDkgQEAgcHJpdmF0ZToKIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxl
JiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbikKICAgICB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xv
Y2spOwotICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jayk7CisgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVy
bmF0aXZlKCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOworICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIs
IGNvZGVCbG9jayk7CiAgICAgICAgIGJvb2wgbWFrZVNhZmUgPSBwcm9maWxlLm91dE9mQm91bmRz
KGxvY2tlcik7CiAgICAgICAgIHJldHVybiBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIs
ICZwcm9maWxlLCBhY3Rpb24sIG1ha2VTYWZlKTsKICAgICB9CkBAIC0xNjY4LDcgKzE2NzAsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIHNhdmVkQ3VycmVudEluc3RydWN0aW9uID0gbV9jdXJyZW50SW5zdHJ1Y3Rpb247
CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVD
YWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKIAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9j
a0ZvcihzcGVjaWFsaXphdGlvbktpbmQpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNp
YWxpemF0aW9uS2luZCk7CiAgICAgaW5zZXJ0Q2hlY2tzKGNvZGVCbG9jayk7CiAKICAgICAvLyBG
SVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRzIQpAQCAtNjg3Myw3ICs2ODc1LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgSGFzaFNldDx1
bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1bnNpZ25lZD4+IHNlZW5Bcmd1bWVudHM7CiAKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVB
bHRlcm5hdGl2ZSgpLT5tX2xvY2spOwogCiAgICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsK
QEAgLTgzNDUsMjMgKzgzNDcsMjggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZQogICAgIHsKICAgICAgICAgbV9leGl0UHJvZmlsZS5pbml0aWFsaXplKG1fcHJvZmls
ZWRCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAKLSAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fbGF6eU9wZXJh
bmRzLmluaXRpYWxpemUobG9ja2VyLCBtX3Byb2ZpbGVkQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQ
cm9maWxlcyhsb2NrZXIpKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogY29kZUJsb2Nr
ID0gbV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgbV9s
YXp5T3BlcmFuZHMuaW5pdGlhbGl6ZShsb2NrZXIsIGNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVzKGxvY2tlcikpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBk
byB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgYmVjYXVzZSB3ZSB3YW50IHRvIGVuY291cmFn
ZSBTdHJ1Y3R1cmVTdHViSW5mbydzCiAgICAgICAgIC8vIHRvIGJlIHBvdGVudGlhbGx5IGFkZGVk
IHRvIG9wZXJhdGlvbnMgYW5kIGJlY2F1c2UgdGhlIHByb2ZpbGVkIGJsb2NrIGNvdWxkIGJlIGlu
IHRoZQogICAgICAgICAvLyBtaWRkbGUgb2YgTExJbnQtPkpJVCB0aWVyLXVwIGluIHdoaWNoIGNh
c2Ugd2Ugd291bGQgYmUgYWRkaW5nIHRoZSBpbmZvJ3MgcmlnaHQgbm93LgotICAgICAgICBpZiAo
bV9wcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAg
bV9wcm9maWxlZEJsb2NrLT5nZXRJQ1N0YXR1c01hcChsb2NrZXIsIG1fYmFzZWxpbmVNYXApOwor
ICAgICAgICBpZiAobV9wcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkp
CisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2stPmdldElDU3RhdHVzTWFwKG1fYmFzZWxpbmVN
YXApOwogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIG9wdGltaXplZEJsb2NrID0gbV9wcm9m
aWxlZEJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIG1fb3B0aW1pemVkQ29udGV4dC5vcHRpbWl6
ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRCbG9jazsKLSAgICBpZiAoT3B0aW9uczo6dXNlUG9seXZh
cmlhbnREZXZpcnR1YWxpemF0aW9uKCkgJiYgb3B0aW1pemVkQmxvY2spIHsKLSAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihvcHRpbWl6ZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
b3B0aW1pemVkQmxvY2stPmdldElDU3RhdHVzTWFwKGxvY2tlciwgbV9vcHRpbWl6ZWRDb250ZXh0
Lm1hcCk7CisgICAgeworICAgICAgICBDb2RlQmxvY2sqIG9wdGltaXplZEJsb2NrID0gbV9wcm9m
aWxlZEJsb2NrLT5yZXBsYWNlbWVudCgpOworICAgICAgICBtX29wdGltaXplZENvbnRleHQub3B0
aW1pemVkQ29kZUJsb2NrID0gb3B0aW1pemVkQmxvY2s7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24oKSAmJiBvcHRpbWl6ZWRCbG9jayAmJiBKU0M6
OkpJVENvZGU6OmlzSGlnaGVyVGllcihvcHRpbWl6ZWRCbG9jay0+aml0VHlwZSgpLCBtX3Byb2Zp
bGVkQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIob3B0aW1pemVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBvcHRpbWl6ZWRCbG9j
ay0+Z2V0SUNTdGF0dXNNYXAobG9ja2VyLCBtX29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICAg
ICAgfQorICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9pY0NvbnRleHRTdGFjay5hcHBlbmQoJm1f
b3B0aW1pemVkQ29udGV4dCk7CiAgICAgfQotICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2ljQ29udGV4
dFN0YWNrLmFwcGVuZCgmbV9vcHRpbWl6ZWRDb250ZXh0KTsKICAgICAKICAgICBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXNXaXRoRml4dXAgPSBzdGQ6Om1heDxpbnQ+KGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAKQEAgLTgzNzUs
NyArODM4Miw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKIAog
ICAgICAgICAvLyBUaGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFs
cmVhZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZp
bmlzaGVzLgotICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0
V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdy
aXRlQmFycmllcihwcm9maWxlZEJsb2NrKTsgLy8gT09QUzogQXNzZXJ0IGl0J3MgYSBMT0wsIEJh
c2VsaW5lLCBvciBMTEludCBDQi4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFRtcE9m
ZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9jYWxsZXItPm1faW5saW5lQ2Fs
bEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2NvZGVCbG9jay0+bnVtVG1wcygp
KTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxG
cmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwog
ICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcg
KzE1NCw3IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAg
ICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2socmVjb3ZlcnkuY29uc3RhbnQo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSkKKyAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
aW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQogICAgICAgICAg
ICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zlcnku
aXNDb25zdGFudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBDb21waWxhdGlv
blJlc3VsdCBjb21waWxlSW1wbCgKICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkpKTsKKyAgICBB
U1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5q
aXRUeXBlKCkpIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkxPTEpJVCk7CiAgICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayB8fCBwcm9maWxl
ZERGR0NvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CiAgICAgCiAgICAg
aWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhtb2RlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3OCw3ICsxNjc4LDcg
QEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVz
IGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQogICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudE5vZGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gYXJndW1l
bnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkgewotICAgICAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sg
PSBwcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNjg2LDEy
ICsxNjg2LDEyIEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKIAog
ICAgICAgICAvLyBjdXJyZW50Tm9kZSBpcyBudWxsIHdoZW4gd2UncmUgZG9pbmcgc3BlY3VsYXRp
b24gY2hlY2tzIGZvciBjaGVja0FyZ3VtZW50VHlwZXMoKS4KICAgICAgICAgaWYgKCFjdXJyZW50
Tm9kZSB8fCBub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gY3VycmVudE5vZGUtPm9yaWdpbi5zZW1h
bnRpYyB8fCAhY3VycmVudE5vZGUtPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gcHJvZmlsZWRD
b2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogICAgICAgICAgICAgaWYgKG5v
ZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2ZpbGVkQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2Nr
LT5iYXNlbGluZUFsdGVybmF0aXZlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNzAwLDcgKzE3MDAsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlIEdyYXBoOjptZXRoCiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rp
b24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7
CiAKLSAgICAgICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGlu
ZygpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZWRCbG9jay0+aGFzQmFzZWxpbmVPckxPTFBy
b2ZpbGluZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEJpbmFyeUFyaXRoUHJvZmlsZSogcmVz
dWx0ID0gcHJvZmlsZWRCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChu
b2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBpZiAoVW5hcnlBcml0aFByb2ZpbGUq
IHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRl
eChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDgxLDcgKzQ4MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgICAgICAKLSAgICAgICAg
cmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpOworICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICB9CiAgICAgCiAgICAgU2NyaXB0RXhlY3V0YWJs
ZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQpAQCAtNDkyLDEz
ICs0OTIsMjAgQEAgcHVibGljOgogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3Io
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2s7CisgICAg
ICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CiAg
ICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVD
YWxsRnJhbWUpOwogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICByZXR1cm4g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2lu
LCBtX3Byb2ZpbGVkQmxvY2spOworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKSk7CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJs
b2NrLmdldCgpOworICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOwogICAgIH0KICAgICAK
ICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKGNv
bnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkg
QEAgdm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNB
Tgogdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAg
QVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwor
ICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdm9pZCBPU1JFeGl0
QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZQogewogICAgIENvZGVCbG9jayogc291cmNlUHJv
ZmlsZWRDb2RlQmxvY2sgPQogICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKAotICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUs
IHByb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlLCBwcm9maWxlZENvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAo
c291cmNlUHJvZmlsZWRDb2RlQmxvY2spIHsKICAgICAgICAgRXhpdGluZ0lubGluZUtpbmQgaW5s
aW5lS2luZDsKICAgICAgICAgaWYgKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmlubGluZUNh
bGxGcmFtZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIEND
YWxsSGVscGUKICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBB
c3NlbWJseUhlbHBlcnM6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5hZGRyZXNzT2ZEaWRUcnlUb0Vu
dGVySW5Mb29wKCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+bG9s
T3JCYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmFkZHJlc3NPZkRpZFRyeVRv
RW50ZXJJbkxvb3AoKSkpKTsKICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoCkBAIC0zODQsOCAr
Mzg0LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIGlm
IChpbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICAgICAgaml0Lm1vdmUo
Ci0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKAotICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5l
Q2FsbEZyYW1lKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICBvc3JXcml0
ZUJhcnJpZXIodm0sIGppdCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0Myw3ICsy
MDQzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNyZWF0ZQogICAgIAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSk7CisgICAgICAgIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JC
YXNlbGluZUNvZGVCbG9jay5nZXQoKTsKICAgICBlbHNlCiAgICAgICAgIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgCkBAIC0zNTc1LDM3ICszNTc1LDM3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rRGkKICAgICBsaW5rRGlyZWN0Rm9yKGNh
bGxGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKIH0KIAotSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJSZW9wdGltaXphdGlvbk5vdywgdm9p
ZCwgKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jaywg
T1NSRXhpdEJhc2UqIGV4aXQpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRy
aWdnZXJSZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogLCBDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4aXQpKSAvLyBPT1BTOiByZW1vdmUgYXJn
CiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGls
ZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAogICAgIC8vIHJlYWxseSBiZSBw
cm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhjb2RlQmxvY2stPnZtKCku
aGVhcCk7Ci0gICAgCi0gICAgc2FuaXRpemVTdGFja0ZvclZNKGNvZGVCbG9jay0+dm0oKSk7Cisg
ICAgQ29kZUJsb2NrKiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrID0gb3B0aW1pemVkQ29kZUJsb2Nr
LT5sb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbG9sT3JCYXNlbGluZUNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwor
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT52bSgp
LmhlYXApOworCisgICAgc2FuaXRpemVTdGFja0ZvclZNKGxvbE9yQmFzZWxpbmVDb2RlQmxvY2st
PnZtKCkpOwogCi0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY29kZUJs
b2NrLCAiOiBFbnRlcmVkIHJlb3B0aW1pemUiKTsKLSAgICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3
aXRoIHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrLgotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgKmxvbE9yQmFzZWxpbmVDb2RlQmxvY2ssICI6IEVudGVyZWQgcmVvcHRp
bWl6ZSIpOwogCiAgICAgLy8gSWYgSSBhbSBteSBvd24gcmVwbGFjZW1lbnQsIHRoZW4gcmVvcHRp
bWl6YXRpb24gaGFzIGFscmVhZHkgYmVlbiB0cmlnZ2VyZWQuCiAgICAgLy8gVGhpcyBjYW4gaGFw
cGVuIGluIHJlY3Vyc2l2ZSBmdW5jdGlvbnMuCiAgICAgLy8KICAgICAvLyBOb3RlIHRoYXQgZXZl
biBpZiBvcHRpbWl6ZWRDb2RlQmxvY2sgaXMgYW4gRlRMRm9yT1NSRW50cnkgc3R5bGUgQ29kZUJs
b2NrLCB0aGlzIGNvbmRpdGlvbiBpcyBhCiAgICAgLy8gc3VyZSBiZXQgdGhhdCB3ZSBkb24ndCBo
YXZlIGFueXRoaW5nIGVsc2UgbGVmdCB0byBkby4KLSAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
ID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIGlmICghcmVwbGFjZW1lbnQgfHwgcmVw
bGFjZW1lbnQgPT0gY29kZUJsb2NrKSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgKmNvZGVCbG9jaywgIjogTm90IHJlb3B0aW1pemluZyBiZWNhdXNlIHdlJ3Zl
IGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIpOworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQg
PSBiYXNlbGluZUNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlcGxhY2VtZW50
IHx8IHJlcGxhY2VtZW50ID09IGJhc2VsaW5lQ29kZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmJhc2VsaW5lQ29kZUJsb2NrLCAiOiBOb3QgcmVv
cHRpbWl6aW5nIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1l
bnQgbXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKICAg
ICAvLyB0byBjaGVjayBvdXIgbG9naWMuCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+aGFzT3B0aW1p
emVkUmVwbGFjZW1lbnQoKSk7CisgICAgQVNTRVJUKGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAKICAgICBib29sIGRp
ZFRyeVRvRW50ZXJJbnRvSW5saW5lZExvb3BzID0gZmFsc2U7CiAgICAgZm9yIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4aXQtPm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50
ZXJJbkxvb3AoKSkgeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5l
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CiAg
ICAgICAgICAgICBkaWRUcnlUb0VudGVySW50b0lubGluZWRMb29wcyA9IHRydWU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzYxNiwxMiArMzYxNiwxMiBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlCiAgICAgLy8gMikgV2UgZXhpdGVkIGFuZCBn
b3Qgc3R1Y2sgaW4gYSBsb29wLCBhbmQgbm93IHdlJ3JlIGV4aXRpbmcgYWdhaW4uCiAgICAgYm9v
bCBkaWRFeGl0QUJ1bmNoID0gb3B0aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93
KCk7CiAgICAgYm9vbCBkaWRHZXRTdHVja0luTG9vcCA9Ci0gICAgICAgIChjb2RlQmxvY2stPmNo
ZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkgfHwgZGlkVHJ5VG9FbnRlckludG9J
bmxpbmVkTG9vcHMpCisgICAgICAgIChsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5jaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpIHx8IGRpZFRyeVRvRW50ZXJJbnRvSW5saW5lZExv
b3BzKQogICAgICAgICAmJiBvcHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJlb3B0aW1pemVGcm9t
TG9vcE5vdygpOwogICAgIAogICAgIGlmICghZGlkRXhpdEFCdW5jaCAmJiAhZGlkR2V0U3R1Y2tJ
bkxvb3ApIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY29k
ZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nICIsICpvcHRpbWl6ZWRDb2RlQmxvY2ssICIgYmVj
YXVzZSBpdCBlaXRoZXIgZGlkbid0IGV4aXQgZW5vdWdoIG9yIGRpZG4ndCBsb29wIGVub3VnaCBh
ZnRlciBleGl0LiIpOwotICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCk7CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmJhc2VsaW5l
Q29kZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nICIsICpvcHRpbWl6ZWRDb2RlQmxvY2ssICIg
YmVjYXVzZSBpdCBlaXRoZXIgZGlkbid0IGV4aXQgZW5vdWdoIG9yIGRpZG4ndCBsb29wIGVub3Vn
aCBhZnRlciBleGl0LiIpOworICAgICAgICBiYXNlbGluZUNvZGVCbG9jay0+b3B0aW1pemVBZnRl
ckxvbmdXYXJtVXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTM2NjAsNyAr
MzY2MCw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUKICAgICBX
b3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKICAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0
ID0gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpKSB7CiAgICAgICAgIHdvcmtsaXN0
U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAg
ICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9k
ZSkpOworICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+bG9sT3JCYXNl
bGluZUFsdGVybmF0aXZlKCksIEZUTE1vZGUpKTsKICAgICB9IGVsc2UKICAgICAgICAgd29ya2xp
c3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKICAgICAKQEAgLTM2OTAsNyArMzY5MCw3IEBA
IHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUKICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExSZXBsYWNlbWVudCIsICgpKTsKICAgICAv
LyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAgdm0s
IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBCeXRlY29k
ZUluZGV4KCksCisgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KGNvZGVCbG9j
ay0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZlKCkpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIEJ5dGVj
b2RlSW5kZXgoKSwKICAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+KCksIFRvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CiAKICAgICAvLyBJZiB3ZSBy
ZWFjaGVkIGhlcmUsIHRoZSBjb3VudGVyIGhhcyBub3QgYmUgcmVzZXQuIERvIHRoYXQgbm93LgpA
QCAtMzc0OSw3ICszNzQ5LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENh
bGxGcgogICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOwogICAgIGlmIChXb3JrbGlz
dCogd29ya2xpc3QgPSBleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkpIHsKICAgICAg
ICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgK
LSAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsKKyAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktl
eShjb2RlQmxvY2stPmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBGVExGb3JPU1JFbnRyeU1v
ZGUpKTsKICAgICB9IGVsc2UKICAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RL
bm93bjsKIApAQCAtMzc5Nyw3ICszNzk3LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihW
TSYgdm0sIENhbGxGcgogICAgICAgICB9CiAKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChj
b2RlQmxvY2ssICJkZWxheUZUTENvbXBpbGUiLCAoIk9TUiBlbnRyeSBmYWlsZWQgdG9vIG1hbnkg
dGltZXMiKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmNvdW50UmVv
cHRpbWl6YXRpb24oKTsKKyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291
bnRSZW9wdGltaXphdGlvbigpOyAvLyBPT1BTOiBUaGlzIG9yIExPTCBDQj8KICAgICAgICAgaml0
Q29kZS0+Y2xlYXJPU1JFbnRyeUJsb2NrQW5kUmVzZXRUaHJlc2hvbGRzKGNvZGVCbG9jayk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH07CkBAIC0zOTI4LDcgKzM5MjgsNyBAQCBzdGF0
aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyCiAgICAgT3BlcmFuZHM8T3B0aW9u
YWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgc3RyZWFtSW5kZXgg
PSBqaXRDb2RlLT5ieXRlY29kZUluZGV4VG9TdHJlYW1JbmRleC5nZXQob3JpZ2luQnl0ZWNvZGVJ
bmRleCk7CiAgICAgaml0Q29kZS0+cmVjb25zdHJ1Y3QoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4ob3JpZ2luQnl0ZWNvZGVJbmRleCksIHN0cmVhbUluZGV4LCBtdXN0SGFuZGxlVmFs
dWVzKTsKLSAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5u
ZXdSZXBsYWNlbWVudCgpOworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KGNvZGVCbG9jay0+bG9sT3JCYXNlbGluZUFsdGVybmF0
aXZlKCkpOwogCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJ0cmlnZ2VyRlRM
T1NSIiwgKCkpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gY29tcGls
ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNiArOTQsOCBAQCBleHRlcm4gU2Vjb25kcyB0b3RhbERGR0NvbXBpbGVUaW1l
OwogZXh0ZXJuIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIGV4dGVybiBTZWNvbmRzIHRv
dGFsRlRMREZHQ29tcGlsZVRpbWU7CiBleHRlcm4gU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGlsZVRp
bWU7CitleHRlcm4gQXRvbWljPHVpbnQ2NF90PiB0b3RhbERGR0NvbXBpbGVzOworZXh0ZXJuIEF0
b21pYzx1aW50NjRfdD4gdG90YWxGVExDb21waWxlczsKIAogfQogCkBAIC0xOTksOCArMjAxLDEx
IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqIHQKICAgICAgICAgICAg
ICAgICB0b3RhbEZUTENvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOwogICAgICAgICAgICAg
ICAgIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRMIC0gYmVmb3JlOwog
ICAgICAgICAgICAgICAgIHRvdGFsRlRMQjNDb21waWxlVGltZSArPSBhZnRlciAtIG1fdGltZUJl
Zm9yZUZUTDsKLSAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRvdGFsRlRMQ29t
cGlsZXMuZXhjaGFuZ2VBZGQoMSk7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIHRvdGFsREZHQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBiZWZvcmU7CisgICAgICAgICAgICAg
ICAgdG90YWxERkdDb21waWxlcy5leGNoYW5nZUFkZCgxKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KICAgICBjb25zdCBjaGFyKiBwYXRoTmFtZSA9IG51bGxwdHI7CkBAIC01NjAs
NyArNTY1LDcgQEAgYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQogICAgIC8vIGNvZGUgdG8gYmUg
cmVwbGFjZWQgZHVyaW5nIGEgY29tcGlsYXRpb24sIGV4Y2VwdCBpZiB3ZSBkZWxldGUgdGhlIHBs
YW4sIGluIHdoaWNoCiAgICAgLy8gY2FzZSB3ZSB3b3VsZG4ndCBiZSBoZXJlLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI3MDcKLSAgICBpZiAobV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkgIT0gcmVwbGFjZW1lbnQtPmJhc2VsaW5lVmVyc2lvbigp
KQorICAgIGlmIChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSAhPSByZXBsYWNlbWVudC0+bG9s
T3JCYXNlbGluZUFsdGVybmF0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IW1fd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC02NDQsOCArNjQ5LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0
TgogICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChjb25zdGFudC5nZXQoKSk7
CiAKICAgICAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1faW5saW5lQ2Fs
bEZyYW1lcykgewotICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5h
ZGQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQo
KSk7CisgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGlubGluZUNhbGxGcmFt
ZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgYW55IG90aGVyIHJlZmVyZW5jZXMgdGhhdCB3ZSBoYXZlIGFu
eXdoZXJlIGluIHRoZSBKSVRDb2RlIGFyZSBhbHNvCkBAIC02OTMsOCArNjk4LDggQEAgdm9pZCBQ
bGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogCiAgICAgaWYgKG1faW5saW5lQ2Fs
bEZyYW1lcykgewogICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICptX2lubGlu
ZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsK
KyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoaW5saW5lQ2FsbEZyYW1lLT5s
b2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEdldEFyZ3VtZW50U3RhcgogTWFjcm9Bc3NlbWJsZXI6Okp1bXAgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPU1JFeGl0RnV6ekNoZWNrKCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnVz
ZU9TUkV4aXRGdXp6KCkKLSAgICAgICAgfHwgIWNhblVzZU9TUkV4aXRGdXp6aW5nKG1faml0Lmdy
YXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9vcmlnaW4uc2VtYW50aWMpKQorICAgICAgICB8
fCAhY2FuVXNlT1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zv
cihtX29yaWdpbi5zZW1hbnRpYykpCiAgICAgICAgIHx8ICFkb09TUkV4aXRGdXp6aW5nKCkpCiAg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpOwogICAgIApAQCAtNDQyOCw5ICs0
NDI4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGJv
b2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHBy
b2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3Bl
cmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9
IG9wZXJhdGlvblZhbHVlQWRkOwpAQCAtNDUyMCw5ICs0NTIwLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0g
dHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwog
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsK
ICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwpAQCAt
NTExMyw5ICs1MTEzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluY09yRGVjKE5v
ZAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5vZGUpCiB7
CiAgICAgLy8gRklYTUU6IGFkZCBhIGZhc3QgcGF0aCwgYXQgbGVhc3QgZm9yIEJpZ0ludDMyLCBi
dXQgcHJvYmFibHkgYWxzbyBmb3IgSGVhcEJpZ0ludCBoZXJlLgotICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IG1f
aml0LmdyYXBoKCkucHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpOwotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxl
ZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpOwogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
QXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvbkFyaXRoTmVnYXRlOwpAQCAtNTM2OSw5ICs1MzY5LDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0g
dHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE11bElD
KiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwog
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsK
ICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIx
LDYgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAgIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZh
cmlhYmxlczsKICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFibGVz
ID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBzID0g
Y29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAgICB9
IGVsc2UgeworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2Nr
LT5iYXNlbGluZVZlcnNpb24oKTsKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2Rl
QmxvY2stPm51bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
Myw3ICszNTMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4K
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDcgKzU2Nyw3IEBAIHZvaWQgSGVhcDo6cHJvdGVj
dChKU1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNT
RVJUKGspOwotICAgIEFTU0VSVChtX3ZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OworICAgIC8vQVNTRVJUKG1fdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7IC8v
IE9PUFMKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxs
RnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRl
Qml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkp
OwotICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRU
eXBlOjpIb3N0Q2FsbFRodW5rOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5k
ZXgoY29kZUJsb2NrKCktPmppdFR5cGUoKSk7CiB9CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0
ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2so
KSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Cisg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNl
IEpJVFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC03OSw4ICs3MCw2IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNB
cmVDb2RlT3JpZ2kKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU2LDEwICs0NTYsMTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZp
bmRFeAogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsK
ICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVySW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhh
bmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNl
CisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCiAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOworICAgIGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFu
ZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0
dXJuIGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVx
dWlyZWRIYW5kbGVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1l
KENhbGwKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5i
b3hlZEludDMyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7Ci0gICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
aW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwogICAgICAgICBt
X2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKIAog
ICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUZvckNh
bGxGcmFtZShjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIEV4ZWN1dGFibGVCYXNlKiBBc3NlbWJseUhlbHBlcnM6OmV4ZWN1dGEKICAgICBhdXRv
KiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJh
c2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKIH0KIAogQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZGYXN0VHlwZWRBcnJheShHUFJSZWcgYmFz
ZUdQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTIgKzMwLDE4IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdy
YXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYu
aCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0
aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJEaXNh
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNp
bmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUg
Ik1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1
NSw4IEBACiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1NpbXBsZVN0YXRzLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTU5LDYgKzY3LDg5NCBAQCBTZWNvbmRz
IHRvdGFsREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNv
bmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGlt
ZTsKK0F0b21pYzx1aW50NjRfdD4gdG90YWxCYXNlbGluZUNvbXBpbGVzOworQXRvbWljPHVpbnQ2
NF90PiB0b3RhbERGR0NvbXBpbGVzOworQXRvbWljPHVpbnQ2NF90PiB0b3RhbEZUTENvbXBpbGVz
OworCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9w
ZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAo
YXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUo
Ynl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
cHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91
bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1f
cHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3Vt
ZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0
aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Rp
cmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BU
b1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5t
X3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRl
cmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4
dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JO
ZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9u
ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVl
LCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2Fs
bDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRl
TmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5h
bF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Rv
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9t
X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
OworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xo
cyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jo
cyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3co
KSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3Vi
bGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFO
KSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxh
dGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBk
byBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwg
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7
CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7
CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRh
dGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlm
IChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50
QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAg
ICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9t
Tm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVj
RG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91Ymxl
UHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJp
Z2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Jp
Z0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgICAgICBpZiAoISEobGVmdCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVjdCkpIHx8ICEhKHJp
Z2h0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkpCisgICAgICAgICAgICAgICAgcmVzdWx0
IHw9IFNwZWNCaWdJbnQ7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQp
OworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9zdWIpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAg
ICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShp
bnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfbW9kOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRl
ciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9uICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0ludDMyT25seSB8IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21l
IGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRiYWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0lu
dDMyT25seSB8IFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF91cnNoaWZ0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hp
ZnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5j
OgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBV
bmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
aW5wdXQgPSB0eXBlRm9yKHNyYyk7CisgICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1
dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50
MzJPdmVyZmxvdygpID8gU3BlY0FueUludEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNC
eXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3Bl
Y0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91Ymxl
UHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShk
c3QsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsK
KyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3Bl
Y0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1f
c3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3Qs
IGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBv
cF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsK
KyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAg
ICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAg
aWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxs
TnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
Ynl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExz
aGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+
YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Rv
X3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
VG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9z
cmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0
Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigp
OworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFi
dWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5n
IHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVy
IGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJl
YWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2Fu
IGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7
CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9w
X2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBl
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwg
U3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Nj
b3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9u
IHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rp
b24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3Jf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJh
dG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19l
eHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0
b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQ
dXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJh
YmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51
bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5h
bWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3Rp
bmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVu
dHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+
KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9t
aXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCks
IFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
YXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BF
cT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExl
c3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
YmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRf
b3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5l
ZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFu
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2Zp
bGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5
V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3Rh
dGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBz
dGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAg
ICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVu
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhf
dGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9m
aWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46
CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgor
ICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBj
YXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ug
b3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBv
cF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAg
IGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNz
b3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAg
ICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251
bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251
bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgor
ICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2pu
c3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAg
Y2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9q
bmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3Bf
amJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1t
OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVf
dHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVy
X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ug
b3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0
ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAg
Y2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAg
Y2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2No
ZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoK
KyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhy
b3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmlu
Z19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5l
OgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2Ug
bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
aW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVj
a3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5
X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2Fz
bV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6Cisg
ICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0X25vX3RsczoKKyAgICBj
YXNlIG5vcm1hbF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3Rf
Y2FsbF9yZXR1cm5fdmFsdWU6CisgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0
aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF9ldmFsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jYWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
aXRlcmF0b3JfbmV4dDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF90YWlsX2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3Ry
dWN0X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnc19zbG93Ogor
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdzoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9ldmFsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2l0ZXJhdG9yX25leHRfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0
b3Jfb3Blbl9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9s
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3Rh
ZzoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGw6CisgICAgY2FzZSB3YXNtX3Ry
YW1wb2xpbmVfd2FzbV9jYWxsX25vX3RsczoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNt
X2NhbGxfaW5kaXJlY3Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBt
X2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rp
b25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0g
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisg
ICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5iYXNl
bGluZUFsdGVybmF0aXZlKCktPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNo
VmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAg
ICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9
KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAg
ICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
Z0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1
ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQo
YXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJv
ZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAg
IGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9u
KFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsK
KyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVk
aWN0aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hh
bmdlZDsKKyAgICBib29sIGNvbXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRz
LnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQg
bGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6
IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3Mg
cmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVj
b2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAg
ICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVh
Y2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
IGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAg
ICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgo
KV07CisKKyAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAg
IG1fdXNlQ291bnRzW2Jsb2NrLmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAg
IGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgo
KTsgKSB7CisgICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7
IGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zl
ckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbXB1dGVVc2VDb3VudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291
bnQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV91c2VDb3VudHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAx
OworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9m
Q2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3Ry
dWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3Ry
dWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0
SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50
UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29t
cHV0ZVVzZUNvdW50cyA9IGZhbHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYg
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29k
ZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQp
OworfQogCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVu
Y3Rpb24pCiB7CkBAIC02Nyw3ICs5NjMsNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlv
blB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK0pJVDo6SklUKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgm
dm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAg
LCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6
IDApCkBAIC03NSw2ICs5NzEsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCCiAgICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0
UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21w
aWxlVHlwZTo6TE9MKQogewogfQogCkBAIC0xMzcsMTEgKzEwMzQsMTggQEAgdm9pZCBKSVQ6OmFz
c2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9X
X09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAg
ICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0
YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCi0gICAgICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKLSAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7IFwKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpwcmludExPTFNsb3dQYXRoQ2FsbHMoKSkpIHsgXAorICAgICAgICAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIGNiTmFtZTsgXAorICAgICAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5kdW1wKGNiTmFtZSk7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gY2JOYW1lLnRv
U3RyaW5nKCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpICsgIiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsg
XAorICAgICAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsgXAorICAgICAg
ICAgICAgICAgICAgICBzbG93Q2FsbENhc2VSYW4oa2V5KTsgXAorICAgICAgICAgICAgICAgIH0p
OyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgIGVtaXRTbG93T3Aoc2xvd19wYXRoXyMj
bmFtZSwgY3VycmVudEluc3RydWN0aW9uLCBkc3QsIHR5cGUpOyBcCiAgICAgICAgIH0gXAogICAg
ICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7IFwKICAgICB9CkBAIC0xNTYsMjYg
KzEwNjAsNjAgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZp
bmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAg
ICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBl
bWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAg
TkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dD
YXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisg
ICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNu
YW1lKTsgXAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUp
OyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0
dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCitzdGF0aWMgdm9pZCBzbG93Q2FsbENhc2VSYW4oU3RyaW5n
IGtleSkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1
aW50NjRfdD4+IHNsb3dDYXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25z
dHJ1Y3QoKTsKKyAgICB9KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAg
ICB1aW50NjRfdCB2YWx1ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBpZiAoKHZhbHVlICUgMTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwg
dmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBzbG93Q2FzZVJhbihTdHJpbmcga2V5KQoreworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90Pj4gc2xv
d0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgpOworICAg
IH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2NF90IHZh
bHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgodmFsdWUg
JSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7Cit9CisK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKICAgICAKQEAgLTIzMSwyMCArMTE2OSw4OSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVu
c2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRl
Y29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFs
bCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0g
ICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIg
aGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAg
ICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVk
ZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxv
Y2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8
IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlu
cyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3Vj
Y2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIGxhYmVsKCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAg
IEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJy
ZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
ZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
c3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJl
bnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgt
PmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50
cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJl
ZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmly
c3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRb
cHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1
cnJlbnRCbG9jay0+aW5kZXgoKV07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRVc2VDb3Vu
dHMgPSBXVEZNb3ZlKG1fdXNlQ291bnRzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAg
ICAgICAgICAgICAgbV9zcGlsbENhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xv
d0Nhc2VzLnNpemUoKTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVj
b2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAgICAgICAg
ICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVy
ZSBhcmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBj
cmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
LCBsYWJlbCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBBU1NF
UlQoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworCisgICAgICAgIG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKIAogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2J5dGVj
b2RlSW5kZXggPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIg
dHdpY2UuCkBAIC0yNzgsNDYgKzEyODUsNDMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAg
ICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVf
U0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChp
c19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBE
RUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0
eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19P
UChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0
X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRo
X3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xf
aW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93
X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3By
ZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJh
YmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAg
ICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25l
ZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0
dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19w
cm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVf
U0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChpc19j
b25zdHJ1Y3RvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCkubV9k
c3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERF
RklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
c2hXaXRoU2NvcGU+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVy
KCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9o
b2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lz
dGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3Jf
cHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3Bl
Y05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0Fy
cmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFk
PigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51
bWVyYWJsZV9wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQ
cm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVy
dHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4o
KS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVu
dHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
U2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3Bl
Y0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklO
RV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlz
ZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+
KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2Vu
ZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09Q
KG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCku
bV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9P
UChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTQwMiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQog
ICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9P
UChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkK
KyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRp
ZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQog
ICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc0LDEwICsxNDgyLDUzIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19z
aGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKQogCisgICAgICAgIERFRklORV9PUChvcF9pc19jYWxsYWJsZSkKKyAgICAg
ICAgREVGSU5FX09QKG9wX3R5cGVvZl9pc19mdW5jdGlvbikKKyAgICAgICAgREVGSU5FX09QKG9w
X3R5cGVvZl9pc19vYmplY3QpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2YpCisKKyAgICAg
ICAgREVGSU5FX09QKG9wX2xlc3MpCisgICAgICAgIERFRklORV9PUChvcF9sZXNzZXEpCisgICAg
ICAgIERFRklORV9PUChvcF9ncmVhdGVyKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcmVx
KQorCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisKKyAgICAg
ICAgREVGSU5FX09QKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQorCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBzdGVwT3Zlckluc3Ry
dWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgIGF1dG8gY291bnQgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQm
IGNvdW50ZXIgPSBtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAtLWNvdW50ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFjb3VudGVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE9PUFM6IERvIHRoaXMgbGF6aWx5IGluIHNsb3cgcGF0aCBjcmVh
dGlvbi9zcGlsbEZvckNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy9tX3NwaWxsQ2FuZGlkYXRl
cy5hcHBlbmQob3BlcmFuZCk7CisKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvYmJlcihncHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBm
cHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwciAh
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZnBy
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3VycmVudElu
c3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAg
ICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBj
aGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBp
ZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRl
Y29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01
MTYsMTQgKzE1NjcsMjUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+
KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRl
Y29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dD
YXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAg
Zm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVj
b2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9C
eXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworCisgICAgICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpwcmludExPTFNsb3dQYXRocygpKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRT
dHJlYW0gbmFtZTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKG5hbWUpOworICAgICAg
ICAgICAgU3RyaW5nIGtleSA9IG5hbWUudG9TdHJpbmcoKSArICIgYmMjIiArIFN0cmluZzo6bnVt
YmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgKyAiICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50
SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCldOworICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpD
b250ZXh0JikgeworICAgICAgICAgICAgICAgIHNsb3dDYXNlUmFuKGtleSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJl
Q2FzZVByb2ZpbGUgPSBudWxscHRyOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KQpAQCAtNTgwLDcgKzE2NDIsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2NoZWNrX3RyYXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfbmVnYXRlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk5
LDYgKzE2NjAsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlu
YykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjMxLDE5ICsxNjk1
LDM0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKGNoZWNrX3RkeikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodG9f
cHJvcGVydHlfa2V5KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpc19jYWxsYWJs
ZSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQor
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2YpCisKKyAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AobGVzcykKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobGVzc2Vx
KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChncmVhdGVyKQorICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChncmVhdGVyZXEpCisKKyAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCisKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJB
dCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4i
KTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSkt
PnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2Vu
LiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRl
ci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29k
ZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5v
ZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtl
ZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29s
dXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5
IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2U7CiAgICAgfQpAQCAtNjg4LDYgKzE3NjcsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9
IHRydWU7IC8vIE9PUFM6IGhlbHBmdWwgZm9yIHJ1bm5pbmcgTE9MIHcvb3V0IERGRy4KICAgICAK
ICAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CiAgICAgY2FzZSBHbG9iYWxD
b2RlOgpAQCAtNzc4LDYgKzE4NTksODUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2lu
ZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJl
bCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCks
IFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBp
ZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHkoKSkgeworICAgICAgICBKdW1wTGlzdCBleGl0Q29tbW9u
OworICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICAgICAg
YXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5maXJzdDsKKyAgICAgICAgICAgIGF1dG8ganVtcHMg
PSBleGl0LnNlY29uZDsKKyAgICAgICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hMT0xPU1JFeGl0KCkpKSB7CisgICAg
ICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gcHJpbnRTdHJlYW07CisgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmR1bXAocHJpbnRTdHJlYW0pOworICAgICAgICAgICAgICAgIENTdHJp
bmcgc3RyID0gcHJpbnRTdHJlYW0udG9DU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgc3RyLmJ1
ZmZlcigpLT5yZWYoKTsgLy8gbGVhayBpdC4KKyAgICAgICAgICAgICAgICBwcmludChzdHIuZGF0
YSgpLCAiIC0+IGV4aXQgYXQgYmMjIiwgIGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksICJcbiIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2tw
b2ludCBleGl0cy4KKworICAgICAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAg
ICAgICAgICAgZXhpdENvbW1vbi5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IEFTU0VSVCghZXhpdENvbW1vbi5lbXB0eSgpKTsKKyAgICAgICAgZXhpdENvbW1vbi5saW5rKHRo
aXMpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0g
cmVnVDQpOworICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMo
KS5jb250YWlucyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMg
b24gdGhpcyBiZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1i
ZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExM
SW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpOworICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25P
U1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwg
T3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcpLCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCBy
ZWdUMik7CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBz
dG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENv
dW50ZXIoKSkpOworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3cs
IHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJl
b3B0aW1pemF0aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwg
bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRo
ZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dl
ckxPTFJlb3B0aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFy
Z0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIs
IExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlz
b24ubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0
LmJyYW5jaDMyKAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JF
cXVhbCwKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8v
ICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFs
T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigp
OworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKQorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhp
dFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAg
ICBkZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29k
ZSgpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7
CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAg
ICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5m
bzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAg
IC8vIDEuIFN0b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIu
IGpldHRpc29uIGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBi
YXJyaWVyIExMSW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93Lmxpbmso
dGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC04MjgsOCArMTk4OCwxMCBAQCB2b2lk
IEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgaWYgKFVOTElLRUxZKGNv
bXB1dGVDb21waWxlVGltZXMoKSkpIHsKICAgICAgICAgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKIAotICAgICAgICBpZiAoT3B0aW9uczo6cmVwb3J0VG90YWxDb21waWxlVGltZXMoKSkK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKICAgICAg
ICAgICAgIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsKKyAgICAg
ICAgICAgIHRvdGFsQmFzZWxpbmVDb21waWxlcy5leGNoYW5nZUFkZCgxKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICBpZiAoVU5MSUtFTFkocmVwb3J0Q29tcGlsZVRpbWVzKCkpKSB7CiAgICAgICAg
IENTdHJpbmcgY29kZUJsb2NrTmFtZSA9IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spOwpAQCAtOTY3
LDcgKzIxMjksNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0
Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3Ig
JXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkg
PyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAg
CiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklU
LT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAt
OTc4LDcgKzIxNDAsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBt
X2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6Okxh
dGVTaHJpbmspOwogICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAg
YWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
cmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRU
eXBlOjpCYXNlbGluZUpJVCkpKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4i
LCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dl
ZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsK
QEAgLTEwNjQsNiArMjIyNiw5IEBAIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21w
aWxlVGkKICAgICAgICAgcmVzdWx0LmFkZCgiRlRMIChCMykgQ29tcGlsZSBUaW1lIiwgdG90YWxG
VExCM0NvbXBpbGVUaW1lKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKyAgICAgICAgcmVzdWx0LmFkZCgiTnVtYmVyIEJhc2VsaW5lIENvbXBp
bGVzIiwgU2Vjb25kcyh0b3RhbEJhc2VsaW5lQ29tcGlsZXMubG9hZCgpKSk7CisgICAgICAgIHJl
c3VsdC5hZGQoIk51bWJlciBERkcgQ29tcGlsZXMiLCBTZWNvbmRzKHRvdGFsREZHQ29tcGlsZXMu
bG9hZCgpKSk7CisgICAgICAgIHJlc3VsdC5hZGQoIk51bWJlciBGVEwgQ29tcGlsZXMiLCBTZWNv
bmRzKHRvdGFsRlRMQ29tcGlsZXMubG9hZCgpKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC0xMDcyLDYgKzIyMzcsOTUxIEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVUaW1l
KCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21w
aWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4
aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgLy8gT09QUzogaGFuZGxlIEV4aXRLaW5kLgorICAg
IGlmICghbV9leGl0SnVtcHMuc2l6ZSgpIHx8IG1fZXhpdEp1bXBzLmxhc3QoKS5maXJzdCAhPSBt
X2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fZXhpdEp1bXBzLmFwcGVuZCh7IG1fYnl0ZWNvZGVJ
bmRleCwgSnVtcExpc3QoKSB9KTsKKyAgICBtX2V4aXRKdW1wcy5sYXN0KCkuc2Vjb25kLmFwcGVu
ZChqdW1wKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitWZWN0b3I8UmVnLCAzMj4g
Y29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBWZWN0b3I8UmVnLCAzMj4gYWxsb3dlZDsKKyAgICBSZWdpc3RlclNl
dCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5r
Ojp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5z
KHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAgIH0KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAg
ICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2Fs
bGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYXBwZW5kKHJlZyk7
CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgVmVjdG9yPFJlZywgMzI+
JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUu
IFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8v
IGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVu
YW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBh
cm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPFJlZywgMzI+PiByZXN1bHQ7CisgICAgc3RkOjpjYWxs
X29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxv
d2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOwor
fQorCitzdGF0aWMgVmVjdG9yPFJlZywgMzI+JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09Q
UzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQg
Y29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJv
YmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BT
OiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPFJlZywg
MzI+PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBy
ZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsK
KyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0
aCgpCit7CisgICAgLy8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmll
ci4gQnV0IGdlbmVyYWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBm
aWd1cmUgc29tZXRoaW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYm
IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAg
ICAvLyAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGlu
dCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAg
ICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVn
KTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAg
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFs
bG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBj
b25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdy
ZWUuCisKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYg
KHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gcmVnVmFsdWUub3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7Cisg
ICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zv
ck9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZh
bGlkRlBSUmVnOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhl
IGlzQWxsb2NhdGVkL2xvY2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAv
LyBoYXZlIGNvZGUgdGhhdCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAg
ICAgIC8vIC0gc3BpbGxGb3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2Ug
dGhlIFZhbHVlT3BlcmFuZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxv
Y2F0aW5nIHRoZSByZWdpc3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1w
LgorICAgICAgICAvLyBPdGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNh
bGxzIHVubG9jaygpLCB3ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQg
c3RhdGUuCisgICAgICAgIHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICByZWdWYWx1ZS5pc0Fs
bG9jYXRlZCA9IGZhbHNlOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1w
bCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgewor
ICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNh
dmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9D
bG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBs
YW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2
ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9w
ZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUub3BlcmFuZCkpKTsKKyAgICB9OworCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRl
ZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklU
OjpzaWxlbnRTcGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlLCBGUFJSZWcgdG9JZ25vcmVG
UFIpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxl
bnRTcGlsbFJlY29yZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBh
cHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkg
eworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFs
dWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdWYWx1ZS5vcGVyYW5kKSkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgaWYgKHJlZy5mcHIoKSAhPSB0b0lnbm9yZUZQUikKKyAgICAgICAgICAgIGFwcGVu
ZElmTmVlZGVkKHJlZyk7CisgICAgfQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSB0b0lnbm9yZSkKKyAgICAgICAgICAgIGFwcGVu
ZElmTmVlZGVkKHJlZyk7CisgICAgfQorCisgICAgcmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0g
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNv
cmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdp
c3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9
LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4o
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpLCByZWNvcmQuc2F2ZVBsYW4pOworfQorCitzdGF0aWMg
dm9pZCBhZGRMb2FkQ291bnQodWludDY0X3QgY291bnQpCit7CisgICAgc3RhdGljIHVpbnQ2NF90
IGNvdW50ZXI7CisgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgKytjb3VudGVyOworICAgICAgICBpZiAoY291bnRlciAlIDEwMDAwID09IDApCisgICAg
ICAgICAgICBkYXRhTG9nTG4oIlJ1bnRpbWUgbG9hZCBjb3VudDogIiwgY291bnRlcik7CisgICAg
fQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikK
K3sKKyAgICB1aW50NjRfdCBsb2FkQ291bnQgPSAwOworICAgIGZvciAoYXV0byYgdHVwbGUgOiBz
YXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gc3RkOjpnZXQ8MD4odHVwbGUpOworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHN0ZDo6Z2V0PDE+KHR1cGxlKTsKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZSA9IHN0ZDo6Z2V0PDI+KHR1cGxlKTsKKworICAgICAg
ICBpZiAocmVnID09IHJlZ1RvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmIChvcGVyYW5kID09IG9wZXJhbmRUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlQocmVnLmlzRlBSKCkpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNo
UmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhz
Y3JhdGNoKSk7CisgICAgICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
ZGlzYWxsb3dTY3JhdGNoKCp0aGlzKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KHByb3ZlblR5cGUpKQorICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0
Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0J5dGVjb2RlRG91YmxlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRj
aCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBzY3JhdGNoIH0s
IEhhdmVUYWdSZWdpc3RlcnMpOworCisgICAgICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRj
aCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKworICAgICAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgICsrbG9hZENvdW50OworICAgIH0KKworICAgIGlmIChmYWxzZSAmJiBsb2FkQ291bnQpIHsK
KyAgICAgICAgcHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgIGFkZExv
YWRDb3VudChsb2FkQ291bnQpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewor
ICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5kc3QsIHNs
b3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQg
dG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlz
QWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKwor
ICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzZXRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsg
KnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShm
cHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7IC8vIE9P
UFM6IFZhbGlkYXRlIHRoYXQgZm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykgdGhhdCBkZWYs
IHdpbGxEZWYgd2FzIGNhbGxlZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBh
c3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVj
Qnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdw
cikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsK
KyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQor
Cit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7
CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJl
ZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAg
ICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBH
UFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6Omdw
cihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDog
bV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBS
KCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJ
VDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJP
cGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fklu
dDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJ
VDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
YXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29w
ZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
Tm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
SW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNl
bGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFu
ZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlm
ICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwg
SGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNw
ZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFu
ZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90
Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxs
Q2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNl
bGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZh
bHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6
On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAg
ICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2pp
dC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFu
ZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
OiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVn
ID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJs
ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6
OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBt
X2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAg
cmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVl
T3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9
OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAg
IG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZl
VGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5i
cmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBH
UFIsIG1fZnByKTsKKyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAg
ICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6TnVtYmVyT3BlcmFuZDo6TnVtYmVyT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAg
ZnByKCk7Cit9CisKK0pJVDo6TnVtYmVyT3BlcmFuZDo6fk51bWJlck9wZXJhbmQoKQoreworICAg
IG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6Ok51bWJlck9wZXJhbmQ6OmZw
cigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAg
RlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYg
KHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAg
ICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAg
ICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBt
X29wZXJhbmQgfTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisK
KyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7
CisKKyAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSkpCisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7
CisgICAgZWxzZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5
cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgICAgIG1faml0LnVuYm94RG91
YmxlKHZhbHVlR1BSLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BS
VGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OworICAgICAgICBhdXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgaWYgKCFpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtu
b3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCB0ZW1wR1BSLCBtX2Zwcik7Cisg
ICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBpc0ludDMyLmxpbmso
Jm1faml0KTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1f
ZnByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB9CisKKyAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICBtX2ppdC5hc3Np
Z25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Oklu
dDMyQ29udmVydGluZ09wZXJhbmQ6OkludDMyQ29udmVydGluZ09wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6On5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMkNvbnZl
cnRpbmdPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlSW50MzIobV9vcGVyYW5kKSkgeworICAgICAg
ICBJbnQzMk9wZXJhbmQgb3AgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIG1fZ3ByID0g
b3AuZ3ByKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIH0gZWxzZSBpZiAobV9q
aXQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAgRlBSVGVt
cCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGUFIuZnByKCk7
CisKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBpZiAoIWlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAg
ICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25v
d25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7CisgICAg
ICAgIEp1bXBMaXN0IGRvbmU7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXJBUk02NDo6c3VwcG9ydHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlw
dFNlbWFudGljcygpKSB7CisgICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVz
aW5nSmF2YVNjcmlwdFNlbWFudGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihm
cHIsIG1fZ3ByLCBCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0
byBzcGlsbFJlY29yZCA9IG1faml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsK
KyAgICAgICAgICAgIG1faml0LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25D
aGVjayhoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVT
bG93IDogb3BlcmF0aW9uVG9JbnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5z
aWxlbnRGaWxsQWZ0ZXJDYWxsKHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0
KTsKKyAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgbV9ncHIpOworCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpOworICAgIH0gZWxzZSBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbihtX29wZXJhbmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBt
X2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFu
ZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIG1faml0LnNwZWN1bGF0ZUJvb2xlYW4obV9v
cGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEp
LCB2YWx1ZUdQUiwgbV9ncHIpOworICAgIH0gZWxzZSBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRl
T3RoZXIobV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsg
bV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJh
bmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5zcGVjdWxhdGVPdGhlcihtX29w
ZXJhbmQsIHZhbHVlR1BSKTsKKworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
bV9ncHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQg
eyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3Bl
cmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAg
ICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0
IH07CisgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIEp1bXBM
aXN0IGRvbmU7CisKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihK
U1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRv
IG5vdERvdWJsZSA9IG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVl
UmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworCisgICAgICAgIG1faml0LnVu
Ym94RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAg
IGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0RvdWJsZVRvSW50MzJDb252ZXJzaW9u
VXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRE
b3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKGZwciwgbV9ncHIpOworICAgICAg
ICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYK
KyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoVHJ1bmNhdGVE
b3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1bmNhdGVTdWNjZXNzZnVsKSk7Cisg
ICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQuc2lsZW50U3BpbGxCZWZvcmVDYWxs
KG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRB
bmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91YmxlVG9JbnQoKSA/IG9wZXJhdGlvblRv
SW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMyLCBtX2dwciwgZnByKTsKKyAgICAg
ICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3BpbGxSZWNvcmQpOworICAgICAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vdERv
dWJsZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGF1dG8gbm90T3RoZXIgPSBtX2ppdC5icmFuY2hJ
Zk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgbV9ncHIpOworICAgICAgICBkb25lLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworCisgICAgICAgIG5vdE90aGVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9q
aXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Qm9vbGVhbihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIG1fZ3ByKSk7CisgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0z
MigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKworICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuemVyb0V4
dGVuZDMyVG9Xb3JkKHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNPdGhlciB8IFNwZWNCb29sZWFuKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkK
K3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
IChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAg
ICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZO
ZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAg
YWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6
c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0Nl
bGwpCit7CisgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkp
KQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0Nl
bGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQg
SklUOjpzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1
ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVy
KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVj
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNP
YmplY3RTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBTcGVjT2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7Cisg
ICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkp
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lk
IEpJVDo6c3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5k
KSkpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIg
Ym9vbCB1c2VCaWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJp
Z0ludDMyID0gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9w
ZXJhbmQpIHx8ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQs
IHZhbHVlKTsKKyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpLCBTcGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
YnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBi
cmFuY2hJZkJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGlu
ayh0aGlzKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAg
IH0KKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQor
Cit2b2lkIEpJVDo6cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7CisgICAgaWYgKCF1c2VMT0wo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRzKCkuc2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0YW50cygpOyArK2kp
CisgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3Vs
YXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZv
ckNvbnN0YW50KGkpKSk7CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY2FsbGVlKCkg
PSBTcGVjRnVuY3Rpb247CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFu
ZHM8QWxsb2NlZFJlZywgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6
ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVycyA9IHsgfTsK
K30KKwordm9pZCBKSVQ6OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0NvdW50LCAiKSIpOworfQor
Cit2b2lkIEpJVDo6ZHVtcFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRhdGFMb2dMbigiUmVnIGFs
bG9jIHN0YXRlID0gWyIpOworICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJl
ZykpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1Zh
bHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dMbigiXSIpOworfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdp
bk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRl
ci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9j
YXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBC
eXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxv
Y2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTA2LDE1ICsxMTAsMjYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNl
RW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRl
Y29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAg
ICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnR1cGxl
PFJlZywgVmlydHVhbFJlZ2lzdGVyLCBTcGVjdWxhdGVkVHlwZT4+OworCisgICAgc3RydWN0IFNp
bGVudFNwaWxsUmVjb3JkIHsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgICAgIFJl
Z2lzdGVyU2V0IHNwaWxsZWRSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZUZv
clNwaWxsOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2Fz
ZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0LCAxPiBqdW1wczsgLy8gVXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZvciB0aGlu
Z3Mgd2l0aCBjaGVja3BvaW50cywgd2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgSnVt
cExpc3RzCisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEg
ZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAg
UmVnIHJlc3VsdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9y
PFJlZz4gYXJndW1lbnRzOyAvLyBTb21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3Rh
dGUgaGVyZSBmb3IgY29udmVuaWVuY2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29y
ZCB7CkBAIC0xOTYsNyArMjExLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19B
TElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NM
QVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2lu
ZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQ
YXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0yMDQsMTQg
KzIyMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVy
ZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0
QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFs
IG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBv
ciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNl
bWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1
NjsKLQogICAgIHB1YmxpYzoKLSAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIs
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4
KDApKTsKKyAgICAgICAgZW51bSBjbGFzcyBDb21waWxlVHlwZSB7CisgICAgICAgICAgICBCYXNl
bGluZSwKKyAgICAgICAgICAgIExPTAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgSklU
KFZNJiwgQ29kZUJsb2NrKiwgQ29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwogCiAg
ICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQpAQCAtMjIw
LDIyICsyMzYsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IGxpbmsoKTsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKKwor
ICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBjb21waWxlVHlwZSwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRl
Y29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBK
SVQodm0sIGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29t
cGlsZShlZmZvcnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBj
b21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9i
eXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAg
ICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7
CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0
Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAg
fQpAQCAtMjQzLDIxICsyNTksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29t
cGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5k
LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGls
ZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
LCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRl
eCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2Vs
aW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0y
ODYsNiArMzAyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTMyMyw5ICszNTMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZv
aWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMzMyw3ICszNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzUwLDcgKzM4Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYpOwogCkBAIC0zNjAsNyArMzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAg
ICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwpAQCAtNTA4LDggKzU0MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2Vu
ZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJl
bGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJl
bGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTUxNywxMiArNTQ5LDIxIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVD
b25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9u
PgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0
cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9u
Kik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+
CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAg
IHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0
b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTU0Niw5ICs1ODcsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKQEAgLTYxMCw3ICs2NTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
X29wX3N1cGVyX3NhbXBsZXJfYmVnaW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9sc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBDUFUoWDg2XzY0
KQogICAgICAgICB2b2lkIGVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKik7CisjZW5kaWYK
ICAgICAgICAgdm9pZCBlbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY3OCw3OCArNzIxLDEwMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9h
cmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVtaXRJc0NhbGxhYmxlSW1wbChjb25z
dCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9pc19jYWxsYWJsZShjb25z
dCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlwZW9mX2lzX29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlwZW9mX2lzX2Z1bmN0
aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90eXBlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAg
ICAgIHZvaWQgZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfb3BfbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKGNvbnN0IElu
c3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50KGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
c3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVj
dGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdp
c3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAgICAg
ICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwor
ICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9w
ZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODI5LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODQxLDIxIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1
bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1
bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNs
b3dDYXNlJik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisr
LT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChp
dGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMp
OwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15
U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAg
KytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAg
ICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNl
RW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBs
aW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1f
c2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9CisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICAgICAgdm9pZCBlbWl0U2xvd09wKEZ1bmN0
aW9uIGZ1bmN0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBTcGVjdWxhdGVkVHlwZSBkc3RUeXBlKTsKIAotICAgICAgICBib29s
IGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQp
OwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoU2xvd0Nhc2UmIGl0
ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0o
aXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVlOwor
ICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
IC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1f
Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4pOwpAQCAtODkxLDYgKzkzNywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFt
ZSgpOworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAg
ICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBjYWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAgICAgICAgICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRvIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZhbHVlRlBSLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CkBAIC05MDIs
NiArOTY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBOb1Byb2ZpbGluZwogICAg
ICAgICB9OwogCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBib29sIHRy
eUVtaXRMT0xCaXRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KTsKKwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVy
YXRvcj4KICAgICAgICAgdm9pZCBlbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgc2hvdWxkRW1pdFByb2Zp
bGluZyA9IFByb2ZpbGluZ1BvbGljeTo6Tm9Qcm9maWxpbmcpOwogCkBAIC05NjEsNiArMTAzMCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3Ry
dWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05
NzEsNiArMTA0MywyOTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9m
aWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcp
OworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVn
IGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAg
ICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAg
ICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOwor
ICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAv
LyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55
dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAg
ICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQm
IG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAg
ICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZh
bHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE51bWJlck9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5OdW1iZXJPcGVyYW5kKCk7
CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyBTcGVjdWxhdGUgbnVtYmVyK2Jvb2xlYW4rb3RoZXIsIGFuZCBjb252ZXJ0IHRv
IGkzMi4gVXNlZnVsIGZvciBiaXRvcHMuCisgICAgICAgIGNsYXNzIEludDMyQ29udmVydGluZ09w
ZXJhbmQgeyAKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJDb252ZXJ0aW5nT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJD
b252ZXJ0aW5nT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVk
VHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
bkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
IH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcm
IGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5k
KS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAg
QWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1
ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0K
KworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCB3aWxsRGVmKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdQUlJlZyYgZ3ByID0gZ3ByRm9yT3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEZQUlJlZyYgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFs
dWUoZnByKS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAg
IGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFy
ZWdWYWx1ZShncHIpLm9wZXJhbmQuaXNWYWxpZCgpKTsKKworICAgICAgICAgICAgZ3ByRm9yT3Bl
cmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9
IG9wZXJhbmQ7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3Np
Z25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWdWYWx1ZShmcHIpLm9wZXJhbmQuaXNWYWxpZCgp
KTsKKworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICAgICAgICAgIGlmICghbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCkpCisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyQ29udmVy
dGluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCksIFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNPdGhlciB8IFNwZWNCb29sZWFuKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Io
b3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KyNlbmRpZgorCisgICAgICAgIGlubGluZSBib29sIHVzZUxPTCgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlTE9MOyB9CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhl
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0
S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1v
cmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9j
YXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxv
Y2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVn
KTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAg
ICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBN
YWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0
byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhS
ZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVu
dFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUgPSBJbnZh
bGlkR1BSUmVnLCBGUFJSZWcgdG9JZ25vcmVGUFIgPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
dm9pZCBzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAg
ICAgIHZvaWQgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJl
dGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxGYXJDYWxsUmVjb3JkPiBtX2Zh
ckNhbGxzOwpAQCAtOTkwLDcgKzEzNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVj
dG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0
ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwor
ICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBW
ZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtMTAyNyw2ICsxMzg1LDg2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUlu
ZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2Nl
ZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4g
dW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJn
ZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAg
ICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07Cisg
ICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9p
ZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8
fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlz
QWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhp
cyA9IHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1h
dCBmb3JtYXQ7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAg
ICAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAg
ICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9p
ZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcu
c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRU
b1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1l
cmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJv
dmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92
ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNT
RVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0p
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJy
ZW50U3RhdGU7CisKKyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAg
ICAgICAgdm9pZCBkdW1wUmVnYWxsb2NTdGF0ZSgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1f
Y3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGUsIHRydWU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZSwgdHJ1ZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIFZlY3Rv
cjxPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4+IG1fdXNlQ291bnRzOworICAgICAgICBPcGVyYW5k
czx1bnNpZ25lZCwgdHJ1ZT4gbV9jdXJyZW50VXNlQ291bnRzOworICAgICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCAxNj4gbV9zcGlsbENhbmRpZGF0ZXM7CisKKyAgICAgICAgVmVjdG9yPExv
Z0VudHJ5PiBtX2V4aXRMb2c7CisKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0
ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJl
ZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBW
ZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDg2
ICs0Miw4OCBAQAogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTbG93UGF0aENh
bGwuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4s
IERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5v
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwg
IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxz
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNz
LCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5k
T3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2Up
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTQ2LDM3ICsxNDgsMTYxIEBAIHZvaWQgSklUOjplbWl0X29wX2pi
ZWxvd2VxKGNvbnN0IEluc3RydWMKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0Q29tcGFyZU9wSW1wbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGdwQ29tcGFyZSwgRG91
YmxlQ29uZGl0aW9uIGRvdWJsZUNvbXBhcmUpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENv
bXBhcmUsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFyZSwgbGhzVGVtcC5mcHIo
KSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmICgoc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHx8ICFw
cmVkaWN0aW9uRm9yKGxocykgfHwgIXByZWRpY3Rpb25Gb3IocmhzKSkgeworICAgICAgICAgICAg
TnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVy
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgY29tcGFyZURvdWJs
ZShkb3VibGVDb21wYXJlLCBsaHNUZW1wLmZwcigpLCByaHNUZW1wLmZwcigpLCByZXN1bHRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICB9CisKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVh
dGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQor
CiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFu
LCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1Qw
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigw
KSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVz
c1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBX
ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFz
dCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0
YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChz
aG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkg
fHwgIXByZWRpY3Rpb25Gb3Iob3AxKSB8fCAhcHJlZGljdGlvbkZvcihvcDIpKSB7CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlz
YWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yMjksMTcgKzM1
NSw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvCiAKIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAg
ICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShv
cDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNH
UFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIp
OworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBy
ZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBv
cDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1t
MzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgICAgICBnZXRMSFMo
KTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9u
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBAIC0yNTUsNDMgKzQwNyw4
OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiAKIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAg
IGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJo
c0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJo
c0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJl
c3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
cmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlv
biwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0g
PSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pLCByZXN1bHRHUFIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVn
VDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAg
ICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKICAgICB9
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBp
bnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2Fz
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNv
bmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcg
cmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUg
Zm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0
aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25z
dGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxv
YXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0OTgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdp
c3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzUyMiw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChz
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMSk7CkBAIC0zNTEsMTIgKzU0NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7
CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAg
IEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9
IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQz
MihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAg
ICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs1NjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAg
ICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAg
IGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBS
SFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1NzQsNTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBi
eXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAg
IGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYg
cHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2Jz
ZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1cmUgZm9yIGFsbCBvcGNvZGVzIHBy
b3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uLgorICAgICAgICAg
ICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5w
dXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAx
LjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnBy
KTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAg
ICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25l
KSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcg
ZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9
IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7
CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQ
Uiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpT
VmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwg
aW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8
IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92
ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNjI4LDYyIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0
ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsK
LSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1
dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAg
ICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUo
cmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJs
ZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNy
Y0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIo
Jm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBS
LCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAg
ICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0RlBSID0g
aW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7Cisg
ICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGxv
YWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICBzdWJE
b3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJs
ZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRH
UFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0
R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0K
IH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzY5MywxMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKChz
aG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSB8fCBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkg
JiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJo
cykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhNYXRoOjpmbW9kRG91YmxlLCBy
ZXN1bHRGUFIsIGxoc0ZQUiwgcmhzRlBSKTsKKworICAgICAgICAgICAgc2V0RG91YmxlKGRzdCwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAogICAg
IC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0
aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8g
ZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVk
eDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9
PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBl
Y3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAg
ICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAg
ICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxh
Y2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRl
bXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FT
U0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhU
ZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIo
KSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAg
ICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1w
LT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFtZSwgbGlrZSBzcGlsbEV4cGVjdGlu
Z1Nsb3dQYXRoCisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50
MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAg
ICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVj
eCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQs
IHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAg
SnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVk
SW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFs
LCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90
TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4
NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0
b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVk
SW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAg
ICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19
CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
LX0KLQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwot
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsK
LSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0K
IAogI2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArODA2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAog
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBk
b3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExp
c3Qgbm90SW50MzJPcDI7CkBAIC00NzQsNiArODE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVn
VDEsIHJlZ1QwKTsKQEAgLTU2MiwxNSArOTA1LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBT
bG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9w
ZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24g
Kmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICsx
MDY1LDY2IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBl
bWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQg
d291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNl
IHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRl
PihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUsIHNs
b3dDYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+Citib29sIEpJVDo6dHJ5RW1pdExP
TEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKworICAgIGF1dG8gYml0T3AgPSBbJl0gKEdQUlJlZyBsaHNHUFIs
IEdQUlJlZyByaHNHUFIpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0YW5kPikKKyAgICAgICAgICAgIGFu
ZDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0b3I+KQorICAgICAgICAgICAgb3IzMihsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PE9wLCBPcEJpdHhvcj4pCisgICAgICAgICAgICB4b3IzMihsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9w
LCBPcExzaGlmdD4pCisgICAgICAgICAgICBsc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFVy
c2hpZnQ+KQorICAgICAgICAgICAgdXJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wUnNoaWZ0
PikKKyAgICAgICAgICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICB9OworCisgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAgICBiaXRPcChs
aHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MkNvbnZlcnRpbmcob3AyKSkgeworICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpA
QCAtNzQxLDE3ICsxMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNv
bnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNl
bHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9w
PihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAKICAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBAIC03
NjAsMzMgKzExNDUsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25z
dCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAg
ICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikp
OwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4g
aGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNl
CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7
CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAg
IGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmls
aW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRl
Y29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwg
cmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlz
dCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzEyNjEsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0
UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDE5ICsxMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7
Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNl
bmRpZgorICAgIGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlv
bikpCisgICAgICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwog
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTg3MywyMSArMTMyMCw3NyBAQCB2
b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
IAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0
Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVm
dFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVt
cDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6
IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsg
bGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmln
aHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1
bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBS
ZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisK
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlm
CiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRj
aEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFz
dFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
cmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVj
QmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTkwMiwxOCArMTQwNSw2NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAg
ICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdw
cigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhz
RlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIo
T3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkg
eworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZw
cigpOworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIGFkZERvdWJsZShs
aHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNT
bG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUg
KzE0NzUsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBz
YW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVu
dEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBz
bG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1l
IHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1l
bnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUg
c2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAg
ICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7
CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxNTEyLDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElD
RmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRl
JiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0
ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+
Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFn
ZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAg
IFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgp
OwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAg
ICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
c3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTUzNywxNCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOwor
ICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3NCwzOSArMTU1NSw4
MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0
RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVm
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9w
ZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0
VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdl
dE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQ
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+
ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmln
aHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAg
ICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAot
ICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlk
Q29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRv
ciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
KTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0
RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6
OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAg
aWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAo
IUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5k
aWYKQEAgLTEwMTUsMTcgKzE2MzksMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJp
bmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5l
cmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVy
YXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAg
IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAg
bGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2Ug
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3By
KCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3Mu
Z3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIo
KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGlu
ZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNjc2LDIwIEBAIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJl
cikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNI
ZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJv
ZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
biByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5l
cmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCAr
MTY5OCw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVl
UmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkg
fTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE3MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
IHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7
CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAt
MTA5NSwxNiArMTc0NSw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9w
ZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAt
MTExNSwxNSArMTc1NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAo
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9
PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNS
aWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAg
ICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVn
VDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxz
ZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7
CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE4MTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYy
ICsxODMyLDIzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRP
cGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNl
bmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdo
dFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
IHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAg
IGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRl
bXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7Cisg
ICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsK
KyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxl
ZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBp
ZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAg
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBS
ZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVm
dEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRG
YXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVz
dWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3Vs
dFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJU
KGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICAgICAgd2lsbERl
ZihyZXN1bHQpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYm
IGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVy
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKICAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBt
dWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgICAgICBpZiAoYXJp
dGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwgYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVOZWdaZXJvRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc1RlbXAg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0
RlBSID0gcmVzdWx0VGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShsaHNHUFIsIGxoc0ZQUik7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmhzR1BSLCByaHNGUFIpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJo
c0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3Zl
cmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKSk7
CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8s
IGJyYW5jaDMyKExlc3NUaGFuLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihMZXNzVGhh
biwgcmhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNG
UFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAg
IG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsK
KyAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNl
X2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVs
T3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9j
b2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1
YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50
QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1
YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRN
YXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNv
ZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9u
Rm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0
ZXIoKSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihi
eXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgd2lsbERlZihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJv
b2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxM
aW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxs
LCByZWdUMCk7CkBAIC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29k
ZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRl
ciByZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQog
ICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChv
cGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3
LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21w
aWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndh
cmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVu
dHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4
OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAg
IH0KICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdl
IHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRp
cGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
CisgICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJl
PworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRl
cmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0
b3IpIGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnBy
b3BlcnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hl
Y2twb2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4
dENoZWNrcG9pbnRTbG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25leHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVn
VDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJl
Z1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1Qw
KTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0
LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVu
PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1
Niw2ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgog
ICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09Q
UzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cg
Y2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBp
dHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNo
SWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0
R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJS
ZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAg
ICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJl
c3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3Mu
YWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1
ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVn
aXN0ZXJzLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQ
YXRoLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVD
aGVja3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAg
ICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QzOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNs
b3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hl
Y2twb2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVl
R1BSIH0pOworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0
ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBA
IC01MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
cwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAg
ICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAg
ICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJd
LmxpbmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01
NjEsNyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAg
ICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGNvbnN0
IGNoYXIqIEpJVENvZGU6OnR5cGVOYW1lKEpJVFR5cGUgamkKICAgICAgICAgcmV0dXJuICJMTElu
dCI7CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgcmV0dXJuICJCYXNl
bGluZSI7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAiTE9MIjsK
ICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuICJERkciOwogICAgIGNh
c2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA4LDcgKzExMCw3IEBAIEpJVENvZGVXaXRoQ29kZVJl
Zjo6SklUQ29kZVdpdGhDb2RlUmVmKEMKIAogSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdp
dGhDb2RlUmVmKCkKIHsKLSAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHko
KSkpCisgICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNERkdPckZUTChq
aXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKSkKICAgICAgICAgJiYg
bV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpKQogICAgICAgICBkYXRhTG9nKCJEZXN0cm95aW5nIEpJ
VCBjb2RlIGF0ICIsIHBvaW50ZXJEdW1wKG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSksICJcbiIp
OwogfQpAQCAtMjM3LDYgKzIzOSwxMSBAQCBOYXRpdmVET01KSVRDb2RlOjpOYXRpdmVET01KSVRD
b2RlKENvZGVSCiAjaWYgRU5BQkxFKEpJVCkKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdp
c3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENh
bGxTaXRlSW5kZXgpCiB7CisgICAgLy8gRm9yIEJhc2VsaW5lIEpJVCwgdGhpcyBpcyB0cml2aWFs
bHkgdHJ1ZS4KKyAgICAvLyBGb3IgTE9MIEpJVCwgZXZlcnl0aGluZyBpcyBhbHJlYWR5IHNwaWxs
ZWQgdG8gdGhlIHN0YWNrIGF0IGVhY2ggb3Bjb2RlLCBzbyB3aGVuIHdlCisgICAgLy8gZ28gdG8g
dGhlIG9wX2NhdGNoLCB0aGUgbGl2ZSBzdGF0ZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIHJpZ2h0
IHBsYWNlIG9uIHRoZSBzdGFjay4KKyAgICAvLyBBbHNvLCBvcF9jYXRjaCBoYXMgbm8gaW5jb21p
bmcgcmVnaXN0ZXIvdHlwZSBwcm9vZiBzdGF0ZSwgc28gaXQncyB0cml2aWFsIHRvIGNhdGNoCisg
ICAgLy8gYW4gZXhjZXB0aW9uIGluIExPTCBqdXN0IGJ5IGp1bXBpbmcgdG8gb3BfY2F0Y2guCiAg
ICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklUVHlw
ZSA6IHVpbnQ4X3QgewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVuaywK
ICAgICBCYXNlbGluZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJVAog
fTsKQEAgLTY3LDM2ICs2OCwyMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciog
dHlwZU5hbWUoSklUVHlwZSk7CiAKLSAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKSVRUeXBlOjpCYXNlbGluZUpJVDsKLSAgICB9Ci0gICAg
CiAgICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCiAgICAgewogICAgICAgICByZXR1cm4g
SklUVHlwZTo6RlRMSklUOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGll
ckpJVChKSVRUeXBlIGppdFR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsK
LSAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBK
SVRUeXBlOjpERkdKSVQ7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICAg
ICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlw
ZTo6Tm9uZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBzdGF0aWMgYm9vbCBpc0V4ZWN1
dGFibGVTY3JpcHQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChqaXRU
eXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAgICAgICAgY2FzZSBKSVRUeXBl
OjpIb3N0Q2FsbFRodW5rOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZh
dWx0OgorCisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA3
LDcgKzk1LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToK
KyAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTE2LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
aml0VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBj
YXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MjQsNiArMTE3LDI0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBi
b29sIGNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChKSVRUeXBlIGppdFR5cGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBj
YXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgorICAg
ICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIHN0YXRpYyBib29sIGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklU
VHlwZSBleHBlY3RlZEhpZ2hlcikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhl
Y3V0YWJsZVNjcmlwdChleHBlY3RlZExvd2VyKSk7CkBAIC0xNDUsOSArMTU2LDE5IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBpc0xvd2VyT3JTYW1lVGllcihleHBlY3RlZExvd2Vy
LCBleHBlY3RlZEhpZ2hlcik7CiAgICAgfQorCisgICAgc3RhdGljIGJvb2wgdXNlc1JlcGxhY2Vt
ZW50Q29kZUJsb2NrKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRU
eXBlID09IEpJVFR5cGU6OkxPTEpJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBq
aXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wg
aXNPcHRpbWl6aW5nSklUKEpJVFR5cGUgaml0VHlwZSkKICAgICB7CisgICAgICAgIHJldHVybiBq
aXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCB8
fCBqaXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBp
c0RGR09yRlRMKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBl
ID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKICAgICB9
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhj
ZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBnZW5lcmlj
VW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYQogICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNv
ZGUgb2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKICAg
ICAgICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhp
dHMgdG8gaGFuZGxlci0+dGFyZ2V0CiAgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0g
ICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmppdFR5cGUoKSkpCisgICAgICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY2F0Y2hQQ0ZvckludGVy
cHJldGVyID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxl
ci0+dGFyZ2V0KS5wdHIoKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBjYXRjaFJvdXRpbmUg
PSBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ1LDYgKzE0Niw3IEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5n
cyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFj
ayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3LDYgKzE1OSw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAv
LyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRo
IGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY3LDI1ICsx
NzAsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdp
c3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9
IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRl
Y29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpA
QCAtMjA3LDI3ICsxOTEsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93
Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNl
cy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29k
ZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2
ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0
LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1
bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAg
ICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9
CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBq
dW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2Uo
Y29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2lu
ZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29u
c3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBz
WzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChK
dW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTQwNiwxMSArMzk5LDYgQEAgQUxXQVlT
X0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVk
VmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpAQCAtNzE3LDYgKzcwNSwxOCBAQCBBTFdBWVNf
SU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpz
dHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFNsb3dPcChGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCwgU3BlY3VsYXRlZFR5
cGUgZHN0VHlwZSkKK3sKKyAgICBzcGlsbEZvckNhbGwoKTsKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZnVuY3Rpb24pOworICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgaWYgKG1fdXNlTE9MICYmIGRzdC5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gZHN0VHlwZTsKKyAgICAgICAgd2lsbERlZihkc3Qp
OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIH07CiAKLSAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjb2RlQmxvY2stPmppdFR5cGUoKSk7CisgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGlu
ZyA9ICFKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKIAogICAgICAg
ICBpZiAobV9nZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoKSB7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAg
LTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4
ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkJh
c2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5j
bHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FzdC5oIgpA
QCAtNDEsNiArNDIsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgi
CisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzU0LDI4
IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6
IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJz
IHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28g
cmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMp
ID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0
YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE1LDUz
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0
ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJl
Z1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1
bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1
bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNj
cmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRS
ZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciks
IGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0
Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNv
ZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVj
b2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3Rh
bmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3
MSw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVn
VDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOwor
ICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1w
OworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2Vs
bE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhh
c0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3Rv
clRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRl
bXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRl
bXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1Qx
OworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8v
IFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBk
by4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFz
SW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFu
Y2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0
cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sg
dGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUg
b2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8s
IEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOwor
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmso
dGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDAp
OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTUxLDQwICsyMjQsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2Fk
IHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGlu
dG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3
aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0
aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hl
Y2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlz
IGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0g
ICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAg
cmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8
Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVt
cDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAg
R1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRl
bXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisK
KyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAg
ICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAg
ICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2
YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVt
cENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxs
LT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwg
ZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8p
OworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAg
ICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dD
YXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBK
SVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwK
KyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAg
cmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJv
dG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIo
KSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVt
cC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5k
IHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSBy
ZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBh
bmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8g
YXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRo
ZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8v
IHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwg
Ly8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVu
ZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Im
IGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdU
MSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1Yklu
Zm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI1
LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1
NSw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgp
OwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAg
ICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
dXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIo
RXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOSwzMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MjU1LDEyICs0NjMsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0
cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFu
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
I2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVz
dDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OSwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVt
YmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRh
Z1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lm
IFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI5LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmln
SW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVl
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0Nl
bGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVn
VDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
aWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5
cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2Vs
bCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDAp
OworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBp
c0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5
cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9f
UkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpA
QCAtMzEzLDE4ICs1OTUsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUo
Y29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAg
ICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
dHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
Mih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDQsNjEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNP
YmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7
IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA5LDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVl
YXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BS
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI4LDQxIEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0K
LSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdw
cigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1t
ID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJ
bW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAg
ICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAK
KyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcxLDIy
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3lt
Ym9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNy
YykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMs
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVl
R1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1
ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJy
YW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJp
bmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0
KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJ
ZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJl
Z1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRz
dCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVn
IGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0g
bmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5k
LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIs
IHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZURvdWJsZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWVUZW1wLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZwcigpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhdXRvIG5vblplcm8gPSBicmFuY2hEb3VibGVOb25aZXJvKHZhbHVlRlBSLCBzY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBub25aZXJvLmxpbmsodGhpcyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAgICAg
TnVtYmVyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgdGVtcEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2
YWx1ZVRlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHRlbXBGUFIu
ZnByKCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm9uWmVybyA9IGJyYW5jaERvdWJsZU5v
blplcm8odmFsdWVGUFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5vblplcm8u
bGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaEdQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIHZhbHVlRlBSIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgICAg
ICAgICAgY29uc3RleHByIGJvb2wgaW52ZXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVtaXRDb252
ZXJ0VmFsdWVUb0Jvb2xlYW4oKm1fdm0sIEpTVmFsdWVSZWdzIHsgdmFsdWVUZW1wLmdwcigpIH0s
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUi5ncHIoKSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnBy
KCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBpbnZlcnQpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdh
aW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFu
LCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cg
Yml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVj
dGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNo
IHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKwor
ICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdh
cyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8g
Y2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZh
bHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0
IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBh
bmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7
CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxz
ZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
Qm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlv
bikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24g
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9y
ZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1w
IGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsg
KnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBS
UmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBz
Y3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNj
cmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
Y29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFs
LCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNl
cyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2Ny
YXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMg
fTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNo
MkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gy
R1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZh
bHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTk0LDEyOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlu
cHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVm
aW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAg
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFu
Y2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIo
KTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQot
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEyNSwyNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAg
ICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTUzLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNTE1LDY1ICsxMTg0LDQ0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFs
UG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
UHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCitzdGF0aWMgdm9pZCBjb21wYXJlU3RyaW5ncyhKSVQmIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBub3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgR1BSUmVnIGxoc0dQUiwgR1BS
UmVnIHJoc0dQUiwgR1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyByaHNUZW1wR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUiwgR1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzR1BS
LCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgbGhzVGVtcEdQUik7CisgICAgaml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1
ZSgpKSwgcmhzVGVtcEdQUik7CisKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9w
ZVN0cmluZ0ltcGwobGhzVGVtcEdQUikpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
SWZSb3BlU3RyaW5nSW1wbChyaHNUZW1wR1BSKSk7CisKKyAgICBqaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgCisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2gz
MigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQo
KSksCisgICAgICAgIHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOworICAgIAorICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzVGVtcEdQUiwgU3Ry
aW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChq
aXQuYnJhbmNoVGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZz
ZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6
ZmxhZ0lzOEJpdCgpKSkpOworICAgIAorICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIGxoc1RlbXBHUFIp
OworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHJoc1RlbXBHUFIpOworICAgIAorICAgIGF1dG8gbG9v
cCA9IGppdC5sYWJlbCgpOworICAgIAorICAgIGppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKworICAgIHsKKyAgICAgICAgaml0LmxvYWQ4KE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobGhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzT25lKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBhdXRvIG1hY3JvU2NyYXRj
aCA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubG9hZDgoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNPbmUpLCBtYWNyb1NjcmF0Y2gpOworICAgICAgICBub3RFcXVhbC5hcHBlbmQo
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaDJHUFIsIG1hY3Jv
U2NyYXRjaCkpOworICAgIH0KKyAgICAKKyAgICBqaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAgZXF1YWwu
YXBwZW5kKGppdC5qdW1wKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3N0YXRpYyB2b2lkIGNvbXBhcmVTdHJpY3RF
cUNlbGxzKEpJVCYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QmIG5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNs
b3dQYXRoLCBHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSLCBHUFJSZWcgbGhzVGVtcEdQUiwg
R1BSUmVnIHJoc1RlbXBHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBHUFJSZWcgc2NyYXRjaDJHUFIp
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJy
YW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBsaHNHUFIsIHJoc0dQUikpOworCisgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisKKyAgICBhdXRvIGxo
c0lzU3RyaW5nID0gaml0LmJyYW5jaElmU3RyaW5nKGxoc0dQUik7CisgICAgbm90RXF1YWwuYXBw
ZW5kKGppdC5qdW1wKCkpOworCisgICAgbGhzSXNTdHJpbmcubGluaygmaml0KTsKKyAgICBub3RF
cXVhbC5hcHBlbmQoaml0LmJyYW5jaElmTm90U3RyaW5nKHJoc0dQUikpOworCisgICAgY29tcGFy
ZVN0cmluZ3Moaml0LCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwg
bGhzVGVtcEdQUiwgcmhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJo
cyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6
dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAg
ICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVO
b3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhz
KSkgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICBKdW1wTGlz
dCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgSnVt
cExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVh
bCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhz
VGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlcXVh
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFs
dWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1
ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xv
d0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZw
cigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29t
cGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVO
dW1iZXIocmhzKSkgeworICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBD
b3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9
IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8
T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGF1dG8gZ3BDb21w
YXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0Vx
ID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKwor
ICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShy
aHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmpl
Y3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7Cisg
ICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworCisgICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFs
LCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCks
IHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICBpZiAoaXNFcSkgeworICAgICAgICAg
ICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgbm90RXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkSnVt
cChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJo
c0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAg
ICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRh
cmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVj
dWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5h
cHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
KTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQog
Ci0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BS
UmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJ
bXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0g
cmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7
CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1
ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7Cisg
ICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9P
UFM6IFdlIGNhbiBtYWtlIHRoaXMgYSBzaW5nbGUgYnJhbmNoIGlmIHRoZSByZXN0b3JlIGRvZXNu
J3QgY2xvYmJlciByZXR1cm5WYWx1ZUdQUi4KKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVz
dDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVn
IHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNH
UFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTYzNSwyNDAgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
bGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBy
aHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29s
IGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAg
IGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8g
ZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVz
Q291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhz
LCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVh
bDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlz
LCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIo
KSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICAg
ICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7
CisKKyAgICAgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMo
KnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1w
LmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdw
cigpKTsKKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAg
ICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBj
b21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBj
b21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNw
ZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgdGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgbGhzU2NyYXRjaEdQUiA9IGxoc1NjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzU2NyYXRjaEdQUiA9IHJoc1NjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGln
aCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAo
bGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRo
OwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAg
ICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAg
ICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAq
LwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCBy
aWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRo
YXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJh
bmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4g
SW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVh
dmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQg
YWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVh
dmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwg
cmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdU
Mik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5v
blplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNs
b3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50
cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8g
c29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9u
bHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
ZmFsc2UpOworI2Vsc2UKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdU
NSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICAg
ICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKworICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbGhzSXNDZWxsID0gYnJhbmNoSWZDZWxs
KGxoc0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5v
dENlbGwocmhzR1BSKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsK
KworICAgICAgICAgICAgICAgIGxoc0lzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAg
IG5vdEVxdWFsLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmhzR1BSKSk7CisKKyAgICAgICAgICAg
ICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFD
ZWxscygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxo
c1NjcmF0Y2hHUFIsIHJoc1NjcmF0Y2hHUFIsIHRlbXBHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgYm90aE5v
dENlbGxzLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEg
ZG91YmxlLgorICAgICAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgSnVtcCByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisKKyAgICAgICAg
ICAgIGlmIChpc0VxKQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29t
cGFyZTY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwor
CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAg
ICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFp
c0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyNlbmRpZgorICAgICAgICB9CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUp
CisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSBy
aWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAg
ICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8g
c2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJs
ZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRo
ZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50
MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1Zh
bHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3Zl
cmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5v
dCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBz
ZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
CisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwg
cmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdU
NSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAg
ICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChO
b25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAv
LyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBh
bmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJ
WE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMg
YSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUg
c3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCBy
ZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBp
ZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8g
Y292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEs
IHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8v
IEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBp
bnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRv
dWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0g
ICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAg
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91
YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGlu
ayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0
T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE4ODYs
MjAzIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29k
ZS5tX3JoczsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsK
KyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDog
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVF
cXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlm
ICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
Q2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNH
UFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOwor
ICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBM
aXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVT
dHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJo
c0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNj
cmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgp
OworCisgICAgICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRk
SnVtcChlcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbm90RXF1YWwubGluayh0
aGlzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhZGRK
dW1wKG5vdEVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhz
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21w
YXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAg
ICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9
IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgbGhzU2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHJoc1NjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgdGVtcDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIGxoc1NjcmF0Y2hHUFIgPSBsaHNTY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc1NjcmF0Y2hHUFIgPSByaHNTY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHRlbXAyR1BSID0gdGVtcDIuZ3ByKCk7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0
IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAg
ICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xv
d1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBp
ZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsK
LSAgICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxl
bWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUg
YnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlm
IHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBp
cyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQg
d2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8v
IElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25s
eSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwot
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdU
NSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEp
OwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAg
ICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0
cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklY
TUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBh
IEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBz
dHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGZhbHNlKTsKKyNlbHNlCisgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFs
OworICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYXV0byBsZWZ0SXNDZWxsID0gYnJhbmNoSWZDZWxsKGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgYXV0byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5vdENlbGwocmhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgICAg
IGxlZnRJc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHJoc0dQUikpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xv
d1BhdGg7CisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFs
LCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNTY3JhdGNoR1BSLCByaHNT
Y3JhdGNoR1BSLCB0ZW1wR1BSLCB0ZW1wMkdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgYm90aE5vdENlbGxzLmxpbmsodGhpcyk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMg
YSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBh
bmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICAg
ICAgYXV0byBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRPSy5saW5r
KHRoaXMpOworICAgICAgICAgICAgYXV0byByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyaHNHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7CisgICAg
ICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgICAgICBpZiAoaXNFcSkgeworICAg
ICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGVxdWFsLCB0YXJnZXQpOworICAgICAgICAg
ICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeyAKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiksIHRh
cmdldCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMs
IHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAg
ICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmlj
dEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAg
ICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAg
ICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMg
Q2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsK
KyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3Rl
YWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJh
bmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYg
aXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhp
Z2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1Qx
LCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGln
aEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFk
ZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVn
VDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVF
cXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChh
cmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdz
IGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8g
RklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBp
cyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFy
ZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisg
ICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Cisg
ICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFs
LmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAg
Ly8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBp
cyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUs
IGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFu
Y2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkp
OwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdU
MSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIg
aXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5l
LCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1
bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
NDgsODkgKzIwOTUsMjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQor
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJp
Z0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENl
bGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRj
aEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7
CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsK
KworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlu
cHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworCisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFs
IHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28g
d2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAog
ICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMzc0LDIzIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBj
dXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2Rl
Lm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkg
Jj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJh
bmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQ
UiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsy
NDA1LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxl
LT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsK
KyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtOTIyLDkgKzI0MzAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFi
bGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJs
ZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJp
bmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjQ1
NCwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0
cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1
bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQ
UiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Rl
YnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZv
ckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBsb2FkMzIoY29kZUJsb2Nr
KCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdn
ZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1
Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Cisg
ICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1
ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAg
OiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
Uiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3Jh
dGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAg
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAg
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9w
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVt
cCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAot
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0Vx
ID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJl
T3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9
IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29w
X2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
cU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0
ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJ
bnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIg
c3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAg
ICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIg
Y29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9p
ZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGlu
Y3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51
bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAg
ICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUo
anNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9
CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSwyMyArMjYw
NSw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJl
Z1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3By
KCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwg
c2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBz
Y29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKICAgICBTdHJ1
Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJ
RDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7
CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNU
b1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0
aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAv
LyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4K
KyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNw
ZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAg
ICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlk
ZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBz
aW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJp
ZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENl
bGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJp
Y3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3Bl
Y09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2Fk
MzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzI2OTks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBj
YWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklE
IGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsK
QEAgLTEwNjgsNyArMjcwOSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVP
cGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBj
YWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
Z3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBh
bGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdw
clRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAg
ICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0
aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+
Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVl
LCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9u
KGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNzUxLDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVj
dHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFs
T2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
PigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
KyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRv
IGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsyNzk2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRl
KCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBv
ciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVC
bG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAg
ICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlz
IE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVj
dXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwog
ICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1
c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7
CkBAIC0xMTg3LDEzICsyODI0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8g
RW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBp
ZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwpAQCAtMTIwNiwxMSArMjg0MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50
KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0g
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQg
c28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQog
CkBAIC0xMjMzLDEwICsyODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9l
bmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdp
c2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCAr
Mjg3NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIz
ICsyODk4LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNv
ZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
RXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAg
QVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMw
MSwyNCArMjk2Miw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IElu
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNj
b3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxp
ZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhp
cywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOwor
ICAgICAgICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
cmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNl
TE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
c2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7
CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9j
ay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsz
MDMyLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUu
bV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1Qw
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBz
aXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzMwNTMsMjkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5n
dGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
dGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIg
PSB0ZW1wLT5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJnR1BSID09IHJldHVyblZh
bHVlR1BSKTsKKyAgICB9CisKKyAgICAvLyBPT1BTOiBJbmxpbmUgdGhlIGFsbG9jYXRpb24gcGF0
aCBoZXJlLCBpdCBtYXR0ZXJzIGZvciBzdW5zcGlkZXItY3J5cHRvLWFlcworCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQog
I2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExv
YWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5t
X2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNl
bmRpZgogfQogCkBAIC0xMzgxLDE1ICszMDg5LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9
IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFs
dWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0
R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICszMTM4LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3Vz
ZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
QEAgLTE0MzYsNiArMzE2Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1
ICszMTk0LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBK
SVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFi
bGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQg
QXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
ID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBl
SnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBh
ZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAg
ICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzMyMTEsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogCiAgICAgTGFiZWwgbmV4dEhv
dFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFi
bGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Cisg
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlW
YWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1v
ZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMzI0NCw4MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNl
bGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhp
cywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlz
LCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2Ug
fTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUg
b2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVn
VDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qx
LCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAg
IEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwg
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXgg
aXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVu
IGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAg
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vz
cy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7
CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzMyOCw1MSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsK
LSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZz
ZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3du
SW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywg
aW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9y
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigp
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQo
KSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5s
aW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5k
ZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3Jh
dGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTc0LDIxICszMzgyLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3Vu
ZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJl
ZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8
SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBl
bnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJh
dG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJh
dG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGlu
ZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVt
ZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3cs
IGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdU
MCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0
KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVz
dWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszNDM2LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiog
Y2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2
NTgsNiArMzQ5OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMK
IHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCku
c2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9w
Q2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5v
bkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVl
LiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hh
ZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszNTE1LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZv
ckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTY4NCw2ICsz
NTMwLDE5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhy
ZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
KTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRJc0NhbGxhYmxl
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8gbm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIGF1dG8gaXNGdW5jdGlv
biA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAgICBhdXRvIG5vdE9iamVjdCA9
IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gc2xv
d1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgs
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgCisgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0Z1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9pc19jYWxsYWJsZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxhYmxlSW1wbDxPcElzQ2FsbGFibGU+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19mdW5jdGlvbihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxh
YmxlSW1wbDxPcFR5cGVvZklzRnVuY3Rpb24+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFR5cGVvZklzT2JqZWN0PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZD
ZWxsKGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gaXNOdWxsID0gYnJhbmNoSWZF
cXVhbChKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0sIGpzTnVsbCgpKTsKKyAgICAgICAgYXV0byBp
c05vbk51bGxOb25DZWxsID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIGF1dG8gaXNGdW5jdGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRH
UFIpOworICAgICAgICBhdXRvIG5vdE9iamVjdCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BS
KTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gc2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
CisgICAgICAgIGlzTnVsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIAorICAgICAgICBpc05vbk51bGxOb25DZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUeXBlb2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV92YWx1ZTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3Bl
cmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgIEp1bXAgc2xvd1Bh
dGg7CisgICAgICAgIGVtaXRUeXBlT2YoCisgICAgICAgICAgICBKU1ZhbHVlUmVncyB7IGlucHV0
R1BSIH0sIHJlc3VsdEdQUiwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlLCBib29s
IGZhbGxzVGhyb3VnaCkgeworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Zt
LT5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgaWYgKCFmYWxsc1Rocm91Z2gpCisgICAgICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChKdW1wIHRoZVNsb3dQ
YXRoKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGggPSB0aGVTbG93UGF0aDsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICB9IGVs
c2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoaW5wdXRHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOworICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJs
ZSo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7Cisg
ICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNv
ZGUubV9pbml0aWFsVmFsdWUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
eW1ib2xUYWJsZS0+c2luZ2xldG9uKCkuaXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVt
aXRTbG93T3Aoc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGRzdCwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBzY29wZVRlbXAgeyAqdGhpcywgc2NvcGUg
fTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7
ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGVUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPEpTTGV4aWNhbEVudmlyb25t
ZW50PigKKyAgICAgICAgICAgICptX3ZtLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpLCBidXR0ZXJmbHks
IHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwKKyAgICAgICAgICAgIHNsb3dQYXRoLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpKTsKKworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgCisgICAg
ICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNy
ZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQorICAgICAgICAvLyBhY3RpdmF0aW9uIG11c3Qg
YmUgeW91bmcuCisgICAgICAgIHN0b3JlUHRyKHNjb3BlR1BSLCBBZGRyZXNzKHJlc3VsdEdQUiwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihzeW1ib2xUYWJsZSksIEFkZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZTeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gTXVzdCBp
bml0aWFsaXplIGFsbCBtZW1iZXJzIHRvIHVuZGVmaW5lZCBvciB0aGUgVERaIGVtcHR5IHZhbHVl
LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3ltYm9sVGFibGUtPnNjb3BlU2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWUsIEFk
ZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShT
Y29wZU9mZnNldChpKSkpKTsKKyAgICAgICAgCisgICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MDIsMTEgKzM3MzUsMjAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNW
YWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50
MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFi
bGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzc1Niw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29k
ZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIo
SW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5n
dGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1z
VG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAg
IHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5s
aW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkp
KSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszODA1LDk5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5j
aDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAg
ICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVu
dE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZElt
bTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsK
LSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1l
bnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJ
bW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRz
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdz
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAg
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
dmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVl
R1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExv
YWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNj
cmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNw
ZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
MywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZh
bHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAg
QVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1
ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7
CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0K
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjQsNiAr
MTQyNCw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXIKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIC8vZGF0YUxvZ0xuKCJjb21wYXJl
TGVzcywgbGhzOiAiLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksICIgcmhzOiAiLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogICAgIAogICAgIHJldHVybiBqc0xlc3M8dHJ1ZT4o
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKSk7CiB9CkBAIC0xNDkxLDYgKzE0OTMsOCBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uQ29tcGFyCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgc3JjMiA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKTsKIAorICAgIC8vZGF0YUxvZ0xuKCJzdHJpY3RlcSwgbGhzOiAiLCBzcmMxLCAiIHJo
czogIiwgc3JjMik7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFsT2Jq
ZWN0LCBzcmMxLCBzcmMyKTsKIH0KIApAQCAtMTY5MSw3ICsxNjk1LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRlYnVnLAogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGlj
IHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRPcHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9j
ayogY29kZUJsb2NrKQogewotICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsK
KyAgICBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlv
bnMoKTsKICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIH0KIApAQCAtMTcx
OSw3ICsxNzIzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQog
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKFVOTElLRUxZ
KGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgeworICAgIGlm
IChVTkxJS0VMWShjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiBjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpMT0xKSVQpKSB7CiAgICAgICAgIGRh
dGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBCYXNlbGluZS0+REZHIHRpZXItdXA6ICIs
ICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KQEAgLTE3NDUsNyArMTc0OSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25PcHRpbWkKIAogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9u
VGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJs
b2NrLCAiZGVsYXlPcHRpbWl6ZVRvREZHIiwgKCJjb3VudGVyID0gIiwgY29kZUJsb2NrLT5qaXRF
eGVjdXRlQ291bnRlcigpKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlv
bnMoKTsKKyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFs
bFByZWRpY3Rpb25zKCk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldCwgYmVjYXVz
ZSB0aGUgdGhyZXNob2xkIGhhc24ndCBiZWVuIHJlYWNoZWQuIik7CiAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQpAQCAtMTgxNCw3ICsxODE4LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAgICAvLyBu
b3RoaW5nIGxlZnQgdG8gZG8uCiAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7CiAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9j
aywgImRlbGF5T3B0aW1pemVUb0RGRyIsICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwog
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29kZSBibG9j
ayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9w
dGltaXplZCByZXBsYWNlbWVudC4iKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
bnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KQEAgLTE4NDMsNyArMTg0Nyw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgeworICAgICAgICBp
ZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVUb0RGR05vdygpKSB7CiAgICAgICAgICAgICBD
T0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0aW1pemVUb0RGRyIsICgiaW5z
dWZmaWNpZW50IHByb2ZpbGluZyIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwKICAgICAgICAgICAgICAgICAiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZv
ciAiLCAqY29kZUJsb2NrLApAQCAtMTg2Nyw3ICsxODcxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVl
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOworICAgICAgICBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudChjb2RlQmxvY2spOwog
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUoCiAgICAgICAg
ICAgICB2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIG51bGxwdHIsIERGRzo6REZHTW9kZSwgYnl0
ZWNvZGVJbmRleCwKICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CkBAIC0xODc5LDcgKzE4ODMsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAg
IENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
OwotICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXpl
ZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0
VHlwZSgpKSk7CiAgICAgCiAgICAgaWYgKHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVP
U1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgp
KSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3Ny
RW50cnkiLCAoImF0IGJjIyIsIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTE5NzIsNyArMTk3Niw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcnlPU1IKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CisgICAgY29kZUJsb2NrLT5iYXNlbGluZUFs
dGVybmF0aXZlKCktPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgbWV0YWRhdGEubV9idWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUp
IHsKQEAgLTM0MzMsNiArMzQzNyw0MSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxv
bENvZGVCbG9jaykpCit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBk
b24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAorICAgIC8v
IHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xD
b2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRF
YWNoTE9MSmV0dGlzb24oKSkpCisgICAgICAgIGRhdGFMb2dMbigiamV0dGlzb24sIGZvcmNpbmcg
cmVvcHQgbm93OiAiLCAqbG9sQ29kZUJsb2NrKTsKKyAgICBsb2xDb2RlQmxvY2stPmJhc2VsaW5l
QWx0ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAKKyAgICAvLyBPT1BT
OiBwcm9jZXNzIHZhbHVlIHByb2ZpbGVzIGhlcmUsIHNpbmNlIHdlJ3JlIGpldHRpc29uaW5nLCBo
b3BlZnVsbHkgdGhleSB1cGRhdGUgdy8gdGhpbmdzIHdlIGNhcmUgYWJvdXQuCisKKyAgICBzYW5p
dGl6ZVN0YWNrRm9yVk0obG9sQ29kZUJsb2NrLT52bSgpKTsKKworICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxvbENvZGVCbG9jaywgIjogRW50ZXJlZCByZW9wdGltaXpl
IGZyb20gTE9MIik7CisKKyAgICBDb2RlQmxvY2sqIGxsaW50Q29kZUJsb2NrID0gbG9sQ29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIC8vIFdlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJh
c2VsaW5lIGNvZGUgYmxvY2suCisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGxs
aW50Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQg
PSBsbGludENvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlcGxhY2VtZW50IHx8
IHJlcGxhY2VtZW50ID09IGxsaW50Q29kZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxsaW50Q29kZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5n
IExPTCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1lbnQgbXVzdCBi
ZSBvcHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKKyAgICAvLyB0byBj
aGVjayBvdXIgbG9naWMuCisgICAgQVNTRVJUKGxsaW50Q29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGxvbENv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IHN0dWNrIGlu
IGEgbG9vcCBsb2dpYworICAgIGxvbENvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9PU1JFeGl0LCBDb3VudFJlb3B0aW1pemF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMx
OSw4IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVmFsdWUKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwg
KFZNKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93
Q2hpY2tlbkxvZywgdm9pZCwgKFZNKikpOwogCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9s
Q29kZUJsb2NrKSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1
LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yODEsOCArMjc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93
IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTk4LDgg
KzU5MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYz
OSw4ICs2MzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC02ODYsOCArNjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC03MjksOCArNzE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC03NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtODE5LDggKzgwMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTExMDAsOCArMTA4MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwpAQCAtMTI1Nyw4ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJl
c29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8d3Rm
L1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lm
IFVTRShKU1ZBTFVFNjQpCiAKQEAgLTUyLDUxICs1NCwxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJv
cGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgaW5kZXhpbmdUeXBlR1BSID0gcmVzdWx0R1BSOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDA7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYg
KG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElD
TWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOwor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
YXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5p
c1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwor
ICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQogCi0gICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAg
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxh
dGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
dHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2Zp
bGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25s
eSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAg
fQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3MyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3Bl
cnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNl
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hl
YXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTcsNiArMjU3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2Fs
bCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMu
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7
CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1
dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCkBAIC0zMzksNyArNDQ0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRC
eVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Nyw3
ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6
OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBh
dXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
ICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2MCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxE
aXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzgxLDYg
KzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5k
ZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IERvIGJldHRlciBpZiB3ZSBjYW4h
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5NCwxMyArNTAwLDEyIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgZmFzdFBhdGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlW
YWxJbmZvOwogICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0
S2luZDsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGgg
PSBsYWJlbCgpOwogCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKQEAgLTQyMCw0OSArNTI1
LDEwNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywg
Ynl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2Fj
Y2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNv
ZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNv
ZGUubV9nZXR0ZXIgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRl
Y29kZS5tX3NldHRlciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
ZXR0ZXJHUFIgPSBzZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVy
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2dldHRlciwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2V0dGVyLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0
ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
cmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywg
cmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7
ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFj
Y2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7Cisg
ICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBi
eXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMs
IGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWws
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAg
ICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMs
IHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2MzMsNTIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdp
dGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQg
ZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFy
cmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC00OTIsMjUgKzY4NywyNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIp
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xv
d0Nhc2UucmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcsNzAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHBy
b3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7Cisg
ICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChwcm9wZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAg
ICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KQEAgLTU0MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZh
bEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9
IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
c3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJl
ZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERp
cmVjdE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwog
ICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5j
aDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9k
ZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlM
ZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9m
aWxlKTsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0
R1BSIDogcmVnVDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNl
R1BSLCBpbmRleGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0
aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhp
cyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlz
VlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHRoaXNHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQ
Uik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNW
UmVnKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxh
Z3MuaXNEaXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIg
dG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9m
ZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJn
dW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFu
ZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZz
ZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwot
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
YXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVj
b2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGly
ZWN0KTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03NjUsNzcg
KzExNjAsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdy
aXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25D
aGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRj
aHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVu
c2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0NywxNyAr
MTI2MCwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVu
c2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZH
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTg2NywyMSArMTI4OCwzNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChk
ZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgot
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25t
ZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgpAQCAtODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsK
ICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTk0MCwxNSArMTM3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBA
IC05NjIsMTIgKzE0MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+
KCk7CkBAIC05NzgsNTEgKzE0MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRH
UFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0g
cmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3Vs
dEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9p
ZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVx
dWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwog
Ci0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBs
b2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VO
QUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVy
VGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRz
dCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRT
bG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBy
ZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29w
ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3Bl
VmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
c2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CkBAIC0xMDM2LDEwICsxNTA0LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAogCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAg
aXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTEwNTIsMjcgKzE1
MjAsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1
bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Miw0MCArMTU1
MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmVnVDApOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShy
ZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQ
dHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTEyOSwyMSArMTU3OSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0
dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7Cisg
ICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zm
c2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
dHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9m
ZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwog
ICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNh
bid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5Lgog
ICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAg
c3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihj
b25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9w
ZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3Rv
cmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKQEAgLTExOTAsMTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8g
V2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2Nh
dGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRD
b2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBl
biBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29u
c3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAg
LTEyMDksMjMgKzE3MjUsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRo
ZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwg
c2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNj
cmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNo
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjYx
LDYxICsxNzg0LDE3OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVu
dHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBh
cmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpLCByZXN1bHRHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7Cisg
ICAgR1BSUmVnIHZhbHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVu
dHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFs
dWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9
IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1l
bnRzR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgIH0KKyAgICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQ
UiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAg
IC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBk
b24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4g
T3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9l
c24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBh
bHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBv
ZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJl
IGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2Vs
bCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2Up
IHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVO
b3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjQ2VsbCkpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAg
ICAgaWYgKGdwckZvck9wZXJhbmQob3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICBvd25lckdQUiA9IGdwckZvck9wZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG93bmVyVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9
IG93bmVyVmFsdWUtPmdwcigpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
d25lciwgb3duZXJHUFIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJH
UFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5v
dENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEo
cHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJl
Z1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNw
aWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVu
dCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29y
ZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAg
ICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWln
aHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQg
aXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMg
dG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxs
b2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisg
ICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxs
ICsgc2lsZW50IGZpbGwKKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOwor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZh
bHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9y
T3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
ISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVC
YXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAg
ICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0
aGlzKTsKIH0KIApAQCAtMTMyNywxMSArMTk2NywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChp
bmRleCkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93
bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5
dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsxOTk2LDIzIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRP
ZkludGVybmFsRmllbGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBl
KGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNz
KGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZp
ZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QxKTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgfQogfQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlW
YWw+KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUsMjUgQEAgdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW47CisgICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0K
KworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxC
ZWZvcmVDYWxsKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZp
bGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUxLDggQEAgdm9pZCBKSVQ6
OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNTY3LDYg
KzIyNTQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7
CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5k
OjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0
S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92
YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrKQogewogICAgIEFTU0VSVF9VTlVTRUQocHJvZmls
ZWRERkdDb2RlQmxvY2ssICFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgZGlkIGJl
Y29tZSByZWFkeS4iKTsKICAgICAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAg
ICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1
bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwyMiBAQAog
I2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3Rm
L1Njb3BlLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6UGxhbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4gewogcHVibGlj
OgotICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAg
ICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCisgICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlw
ZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQor
ICAgICAgICA6IG1fbGxpbnRDb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1fY29kZUJs
b2NrVG9Db21waWxlKGNvbXBpbGVUeXBlID09IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA/IG1fbGxp
bnRDb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KG1fbGxpbnRDb2RlQmxvY2spIDogbV9sbGludENv
ZGVCbG9jaykgCisgICAgICAgICwgbV9qaXQobV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCksIG1f
Y29kZUJsb2NrVG9Db21waWxlLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkKICAgICB7CiAgICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOworICAgICAgICAvLyBPT1BTOiB2aXNpdCB0aGlzIGluIGNvbmN1cnJlbnQgZ2MKKyAg
ICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRDb2RlQmxvY2spIHsKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAucHJvdGVjdChtX2NvZGVC
bG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
SW5UaHJlYWQoKQpAQCAtNTMsMTcgKzYwLDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXpl
KCkKICAgICB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0Lmxpbmso
KTsKKworICAgICAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2NrKQorICAg
ICAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAudW5wcm90ZWN0KG1f
Y29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgc3dpdGNoIChyZXN1
bHQpIHsKICAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAgICAgICAgIENPREVC
TE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0
aW9uIGZhaWxlZCIpKTsKKyAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9sbGludENv
ZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwogICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21w
aWxhdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZG9udEpJVEFueXRp
bWVTb29uKCk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRp
b24gPSB0cnVlOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVT
b29uKCk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxh
dGlvbiA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQ29tcGlsYXRp
b25TdWNjZXNzZnVsOgogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIpOwotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShtX2NvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBtX2NvZGVCbG9jay0+aml0U29vbigpOworICAgICAgICAgICAgbV9jb2RlQmxv
Y2tUb0NvbXBpbGUtPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShtX2NvZGVCbG9ja1Rv
Q29tcGlsZSk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5qaXRTb29uKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzEsOCArODQsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVC
bG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2tLZXkoKSB7IHJldHVybiBtX2xsaW50Q29kZUJsb2NrOyB9Cisg
ICAgVk0mIHZtKCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jay0+dm0oKTsgfQogICAgIAogICAg
IGJvb2wgaXNGaW5pc2hlZENvbXBpbGluZygpCiAgICAgewpAQCAtODAsMTUgKzkzLDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNGaW5pc2hlZENvbXBpbGluZzsKICAgICB9CiAgICAg
Ci0gICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
ZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUs
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAg
IFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICBQbGFuIHBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7CiAgICAgICAgIHBsYW4uZmlu
YWxpemUoKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CisgICAgQ29kZUJsb2NrKiBtX2xsaW50Q29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2tUb0NvbXBpbGU7CiAgICAgSklUIG1faml0OwogICAgIExvY2sgbV9sb2NrOwogICAg
IGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nIHsgZmFsc2UgfTsKQEAgLTIzMyw5ICsyNDcsMTEg
QEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgICAgICBjb2Rl
QmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisg
ICAgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSA9IE9wdGlvbnM6OmZvcmNlTE9MKCkgPyBK
SVQ6OkNvbXBpbGVUeXBlOjpMT0wgOiBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZTsKICAgICAK
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgewotICAgICAgICBQbGFuOjpj
b21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNDksNyArMjY1
LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgICAgICAK
ICAgICAgICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewogICAgICAgICAgICAgbV9wbGFu
bmVkLmFkZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9w
dFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2Nr
LCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAg
bV9wbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsK
ICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKQEAgLTI3MywxNCAr
Mjg5LDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAv
LyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUuIElmIHRoZSBjb25jdXJyZW50IEpJVCB0aHJl
YWQgaXMgY29udm95ZWQsIHdlIHJldmVydCB0byBtYWluCiAgICAgLy8gdGhyZWFkIGNvbXBpbGVz
LiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhcyBnb29kIGFzIGlmIHdlIGhhZCBtdWx0aXBsZSBKSVQg
dGhyZWFkcy4gTWF5YmUgd2UKICAgICAvLyBjYW4gZG8gdGhhdCBzb21lZGF5LgotICAgIFBsYW46
OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBQ
bGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOwogfQogCisvKgogdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQog
ewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bmspCisKKyAgICBhdXRvIGlzQ29tcGlsZWQgPSBbJl0geworICAgICAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBs
YWNlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9OworCisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGJvb2wgaXNQbGFubmVkOwpAQCAtMjk2LDE3ICszMjIsMjQgQEAgdm9pZCBKSVRXb3Jr
bGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIAogICAgIH0KICAgICAKICAgICAvLyBOb3cgaXQg
bWlnaHQgYmUgY29tcGlsZWQhCi0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bmspCisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBh
dHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRoIHRoZQotICAgIC8vIGJh
c2VsaW5lIEpJVC4KLSAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0YSgpOwotICAgIAotICAgIC8v
IE9LLCBqdXN0IGNvbXBpbGUgaXQuCi0gICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAg
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisK
KyAgICBpZiAoT3B0aW9uczo6Zm9yY2VMT0woKSkgeworICAgICAgICBDb2RlQmxvY2sqIGxvbENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAgICAgICAgSklUOjpjb21w
aWxlKHZtLCBsb2xDb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAg
bG9sQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobG9sQ29kZUJsb2Nr
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHBy
ZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUK
KyAgICAgICAgLy8gYmFzZWxpbmUgSklULgorICAgICAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0
YSgpOworICAgICAgICAKKyAgICAgICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KKyAgICAgICAg
SklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAg
ICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2Nr
KTsKKyAgICB9CiB9CisqLwogCiB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5z
JiBteVBsYW5zKQogewpAQCAtMzE0LDcgKzM0Nyw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmZpbmFs
aXplUGxhbnMoUGxhbnMmIG0KICAgICAgICAgcGxhbi0+ZmluYWxpemUoKTsKICAgICAgICAgCiAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAgICBtX3BsYW5uZWQucmVt
b3ZlKHBsYW4tPmNvZGVCbG9jaygpKTsKKyAgICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5j
b2RlQmxvY2tLZXkoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFdvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgcG9sbChWTSYpOwogICAgIAogICAgIHZvaWQgY29tcGlsZUxhdGVyKENv
ZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCkpOwotICAgIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAK
ICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0KCk7CiAgICAgc3Rh
dGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxsKCk7CkBAIC02Niw2
ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgVGhyZWFkOwogICAgIGZyaWVuZCBjbGFzcyBU
aHJlYWQ7CiAgICAgCisgICAgLy92b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
dm9pZCBmaW5hbGl6ZVBsYW5zKFBsYW5zJik7CiAgICAgCiAgICAgUGxhbnMgbV9xdWV1ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFj
cm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNp
emVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6
ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6
YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAg
eyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2Rl
UHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0
cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgaWYgKGlzV2Vi
QXNzZW1ibHkgfHwgSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUo
KSkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNl
dCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6
Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qg
d2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+
c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBp
ZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4ICszNjMsMTQgQEAgaW5s
aW5lIGJvb2wgc2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsbwogfQogCiAvLyBSZXR1cm5zIHRy
dWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCi1pbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0
SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKQoraW5saW5lIENvZGVC
bG9jayogaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKSkKIHsKKyAgICBpZiAoQ29kZUJsb2NrKiBhbHJlYWR5T3B0aW1pemVkID0gY29kZUJs
b2NrLT5vcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgIGFscmVhZHlPcHRpbWl6ZWQg
PSBhbHJlYWR5T3B0aW1pemVkLT5sb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICAgICAg
aWYgKEpJVENvZGU6OmlzSklUKGFscmVhZHlPcHRpbWl6ZWQtPmppdFR5cGUoKSkpCisgICAgICAg
ICAgICByZXR1cm4gYWxyZWFkeU9wdGltaXplZDsKKyAgICB9CisKICAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJh
bWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlv
bnM6OnVzZUpJVCgpKTsKICAgICAKQEAgLTM3MywyOSArMzc5LDQ1IEBAIGlubGluZSBib29sIGpp
dENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJ
VFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVy
ID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJl
IGxpZnRlZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCiAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCku
cG9sbCh2bSk7Ci0gICAgCisKKyAgICBhdXRvIGxvbENvZGVCbG9jayA9IFsmXSgpIC0+IENvZGVC
bG9jayogeworICAgICAgICBpZiAoQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGNvZGVCbG9jay0+
b3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKQorICAgICAgICAgICAgICAgIHJldHVybiByZXBs
YWNlbWVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisg
ICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9jaygpKQorICAgICAgICByZXR1cm4gcmVz
dWx0OworCiAgICAgc3dpdGNoIChjb2RlQmxvY2stPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklU
VHlwZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9z
ZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuIik7CiAgICAgICAgIGNvZGVC
bG9jay0+aml0U29vbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNv
ZGVCbG9jazsKICAgICB9CiAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOiB7CiAg
ICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRlcihj
b2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIGlmIChh
dXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkKKyAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUg
YmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIs
ICpjb2RlQmxvY2ssICJcbiIpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlP
U1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5k
KQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5k
KQogewogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgKmNv
ZGVCbG9jaywgIjogRW50ZXJlZCAiLCBuYW1lLCAiIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLApA
QCAtNDA2LDE4ICs0MjgsMjEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihD
b2RlQgogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0K
ICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0
SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJs
b2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jayk7CisgICAgaWYg
KCFjb21waWxlZENvZGVCbG9jaykKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBu
dWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIk9TUiBl
bnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7CisgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxl
ZENvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7CisKKyAgICBjYWxsRnJh
bWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKGtpbmQg
PT0gUHJvbG9ndWUpCi0gICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgICAgICBMTElOVF9SRVRVUk5f
VFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51
bGxwdHIpOwogICAgIEFTU0VSVChraW5kID09IEFyaXR5Q2hlY2spOwotICAgIExMSU5UX1JFVFVS
Tl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKKyAgICBMTElOVF9SRVRVUk5fVFdPKGNv
bXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKIH0KICNlbHNlIC8vIEVOQUJMRShKSVQp
Ci1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRy
eU9TUihDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5
S2luZCkKIHsKICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgIExMSU5U
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CkBAIC00MjcsMzEgKzQ1MiwzMSBAQCBzdGF0
aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCCiBMTElOVF9TTE9XX1BBVEhfREVD
TChlbnRyeV9vc3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlP
U1IoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKKyAgICBy
ZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlf
b3NyIiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NhbGwpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50
cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1
dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxs
IiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKIH0K
IAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpT
RnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJs
b2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFBy
b2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxf
YXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9T
Uihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJs
ZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJp
dHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkt
PmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNo
ZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBj
KTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpz
Q2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7Cisg
ICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJh
bWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCks
ICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVj
ayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQpAQCAtNDgwLDE5ICs1MDUs
MjIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgIExMSU5UX1JFVFVS
Tl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogICAgIAotICAgIGlmICghaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkpCisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAg
IGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0
ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJv
c3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29tcGlsZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb21waWxlZENvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAKLSAgICBjb25zdCBKSVRDb2RlTWFw
JiBjb2RlTWFwID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CisgICAgY29uc3QgSklUQ29kZU1h
cCYgY29kZU1hcCA9IGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAg
ICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNv
bXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJnZXQs
IGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKICNlbHNlIC8vIEVOQUJMRShKSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2lu
U3RhY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAgT3JpZ2luU3RhY2s6Ok9yaWdpblN0YWNrKERhdGFiYXNlJiBkYXRhYgogICAgIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICBh
cHBlbmQoT3JpZ2luKAotICAgICAgICAgICAgZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKHN0
YWNrW2ldLmlubGluZUNhbGxGcmFtZSgpLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSksCisgICAg
ICAgICAgICBkYXRhYmFzZS5lbnN1cmVCeXRlY29kZXNGb3Ioc3RhY2tbaV0uaW5saW5lQ2FsbEZy
YW1lKCktPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLAogICAgICAgICAgICAgc3RhY2tb
aV0uYnl0ZWNvZGVJbmRleCgpKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywyMCBAQCBGdW5jdGlvbkNvZGVCbG9j
ayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9u
Q29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9
CiAKK0Z1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmxvbE9yQmFzZWxpbmVD
b2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2U7CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisg
ICAgICAgIGVkZ2UgPSBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgZWxzZSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIGVk
Z2UgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKCFlZGdl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZl
KCkpOworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDEzICsxMTQsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKTsKICAgICB9CiAKKyAg
ICBGdW5jdGlvbkNvZGVCbG9jayogbG9sT3JCYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgIAotICAgIEZ1bmN0aW9uQ29kZUJs
b2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7Ci0gICAgfQot
CiAgICAgUmVmUHRyPFR5cGVTZXQ+IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKSAKICAgICB7CiAg
ICAgICAgIFJhcmVEYXRhJiByYXJlRGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwMyw2ICs0MDMsMTAgQEAgc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMo
KQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIC8v
T3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOwor
ICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAg
IE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNywxMSBAQCBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KEJvb2wsIHVzZUpJVENhZ2UsIGNhblVzZUpJ
VENhZ2UoKSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VQdWJsaWNTdGF0aWND
bGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVy
c3RhbmQgcHVibGljIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCiAgICAg
dihCb29sLCB1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRy
dWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHByaXZhdGUgc3RhdGljIGRhdGEgZmllbGRz
IGluc2lkZSBjbGFzc2VzLiIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCisgICAgdihCb29sLCBwcmludExPTFNsb3dQYXRoQ2FsbHMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHByaW50TE9MU2xvd1BhdGhzLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBwcmludEVhY2hMT0xPU1JFeGl0LCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBwcmludEVhY2hMT0xKZXR0aXNvbiwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAg
U2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYwLDcgKzU2MCw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQK
ICAgICAgICAgICAgIG9yaWdpbi53YWxrVXBJbmxpbmVTdGFjayhbJl0gKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pIHsKICAgICAgICAgICAgICAgICBtYWNoaW5lT3JpZ2luID0gY29kZU9y
aWdpbjsKICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhpbmxp
bmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpIDog
bWFjaGluZUNvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAg
ICAgICAgIGFwcGVuZENvZGVCbG9jayhpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUt
PmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgOiBtYWNoaW5lQ29kZUJsb2NrLCBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OmNvbGxlY3RTYW1wbGluZ1Byb2ZpbGVyRGF0YUZvckpTQ1NoZWxsKCkpIHsKQEAg
LTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVk
CiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGxsaW50X2hhbmRsZV91Y2F1
Z2h0X2V4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAg
ICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
cENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9w
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogICAg
ICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRz
LCB0b3BDb2RlQmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0NCw0OSArMzQ0LDMzIEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3
Q29kZUJsb2MKIH0KIAogQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVu
dENvZGVCbG9ja0ZvcigKLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0gRXZhbEV4ZWN1
dGFibGU6OmluZm8oKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JD
YWxsKTsKLSAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4
ZWN1dGFibGUqPih0aGlzKTsKLSAgICAgICAgRXZhbENvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0
aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4oCi0gICAgICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxv
Y2soKS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBFdmFsQ29kZUJsb2NrKiByZXN1bHQg
PSBFdmFsQ29kZUJsb2NrOjpjcmVhdGUodm0sCi0gICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQ
YXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2
bSwgYmFzZWxpbmUpOworICAgICAgICBFdmFsQ29kZUJsb2NrKiByZXN1bHQgPSBFdmFsQ29kZUJs
b2NrOjpjcmVhdGUodm0sIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCBzdGF0aWNfY2FzdDxF
dmFsQ29kZUJsb2NrJj4oKmFsdGVybmF0aXZlKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJu
YXRpdmUodm0sIGFsdGVybmF0aXZlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCiAgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkg
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKLSAgICAgICAg
UHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUq
Pih0aGlzKTsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2Fz
dDxQcm9ncmFtQ29kZUJsb2NrKj4oCi0gICAgICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2so
KS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQg
PSBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sCi0gICAgICAgICAgICBDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2
ZSh2bSwgYmFzZWxpbmUpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQgPSBQcm9n
cmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCBzdGF0
aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrJj4oKmFsdGVybmF0aXZlKSk7CisgICAgICAgIHJlc3Vs
dC0+c2V0QWx0ZXJuYXRpdmUodm0sIGFsdGVybmF0aXZlKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICBpZiAoY2xhc3NJbmZvKHZtKSA9PSBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNh
bGwpOwotICAgICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxvY2sq
PigKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmNvZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24o
KSk7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHJlc3VsdCA9IE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s6OmNyZWF0ZSh2bSwKLSAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNl
ZEJsb2NrLCAqYmFzZWxpbmUpOwotICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBi
YXNlbGluZSk7CisgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHJlc3VsdCA9IE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSh2bSwgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ss
IHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxvY2smPigqYWx0ZXJuYXRpdmUpKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYWx0ZXJuYXRpdmUpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzSW5mbyh2bSkg
PT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICBGdW5j
dGlvbkNvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+
KAotICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCktPmJhc2VsaW5lVmVyc2lv
bigpKTsKLSAgICBGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gRnVuY3Rpb25Db2RlQmxvY2s6
OmNyZWF0ZSh2bSwKLSAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGlu
ZSk7Ci0gICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYmFzZWxpbmUpOworICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtLCBDb2Rl
QmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2smPigq
YWx0ZXJuYXRpdmUpKTsKKyAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBhbHRlcm5hdGl2
ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzk4LDcgKzM4Miw4IEBAIHN0YXRpYyB2
b2lkIHNldHVwTExJbnQoQ29kZUJsb2NrKiBjb2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgLy8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdh
bnQgdG8gZG8gd2l0aCB0aGUgbm8gTExJbnQgb3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVz
dWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBl
OjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ny
aXB0RXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkw
LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5zdGFsbENvZGUoQ29kZUJsb2NrKik7CiAgICAgdm9p
ZCBpbnN0YWxsQ29kZShWTSYsIENvZGVCbG9jayosIENvZGVUeXBlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEV4Y2VwdGlvbiomKTsKLSAgICBDb2RlQmxv
Y2sqIG5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgIENvZGVCbG9jayogbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZUJsb2NrKiBhbHRl
cm5hdGl2ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAKICAgICB2b2lkIGNsZWFyQ29kZShJ
c29DZWxsU2V0Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RS
dW5uZXJVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjUsNiArNjUsOSBAQCBKU1ZhbHVlIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZSB0aGVGCiB7
CiAgICAgYm9vbCBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gZmFsc2U7CiAjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKDApOyAvLyBPT1BTCisKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpIHx8ICFP
cHRpb25zOjp1c2VCYXNlbGluZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAg
ICAgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IHRydWU7CiAjZWxzZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVU
aHJlYWRzLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJh
Y2luZy5oPgorI2luY2x1ZGUgIkpJVC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtODcsNiAr
ODgsMTkgQEAgVk1FbnRyeVNjb3BlOjp+Vk1FbnRyeVNjb3BlKCkKICAgICBpZiAobV92bS5lbnRy
eVNjb3BlICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vaWYgKE9wdGlvbnM6OnJl
cG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKKyAgICAvLyAgICBkYXRhTG9nTG4oKTsKKyAgICAv
LyAgICBhdXRvIGNvbXBpbGVUaW1lU3RhdHMgPSBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKTsKKyAg
ICAvLyAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGlsZVRpbWVLZXlzOworICAgIC8vICAgIGZvciAo
YXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQorICAgIC8vICAgICAgICBjb21waWxlVGlt
ZUtleXMuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgLy8gICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1l
S2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOworICAgIC8vICAgIGZvciAoY29u
c3QgQ1N0cmluZyYga2V5IDogY29tcGlsZVRpbWVLZXlzKSB7CisgICAgLy8gICAgICAgIGlmIChr
ZXkuZGF0YSgpKQorICAgIC8vICAgICAgICAgICAgcHJpbnRmKCIlNDBzOiAlLjNsZiBtc1xuIiwg
a2V5LmRhdGEoKSwgY29tcGlsZVRpbWVTdGF0cy5nZXQoa2V5KS5taWxsaXNlY29uZHMoKSk7Cisg
ICAgLy8gICAgfQorICAgIC8vfQorCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV92bS5oYXND
aGVja3BvaW50T1NSU2lkZVN0YXRlKCksICJFeGl0dGluZyB0aGUgVk0gYnV0IHBlbmRpbmcgY2hl
Y2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogCiAgICAgaWYgKE9wdGlvbnM6
OnVzZVRyYWNlUG9pbnRzKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lk
IFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoZm91bmRDb2RlQmxvY2st
PmppdFR5cGUoKSkpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jaygqbV9sb2Nr
KTsKICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUg
U2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFZN
VHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjCiAKICAgICB3aGlsZSAoY2FsbEZyYW1l
KSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6Omlz
REZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5q
ZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwogICAgICAgICBjYWxsRnJh
bWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIH0KSW5kZXg6IFRv
b2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
Y29tcGFyZS1yZXN1bHRzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBUb29scy9TY3JpcHRzL2NvbXBh
cmUtcmVzdWx0cwkod29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw4IEBAIGRlZiBjb21wdXRl
TXVsdGlwbGVIeXBvdGhlc2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIp
OgogICAgIG5hbWVMZW5ndGggPSBsZW4oInN1YnRlc3QiKQotICAgIGFMZW5ndGggPSBsZW4oYVt1
bml0TWFya2VyXSkKLSAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pCisgICAgYUxlbmd0
aCA9IGxlbihhW3VuaXRNYXJrZXJdKSArIDMKKyAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtl
cl0pICsgMwogICAgIHJhdGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIpCiAKICAgICBwVmFsdWVIZWFk
ZXIgPSAicFZhbHVlIChzaWduaWZpY2FuY2UgdXNpbmcgRmFsc2UgRGlzY292ZXJ5IFJhdGUpIgpA
QCAtMjEyLDcgKzIxMiw3IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhhLCBiKToKICAgICBwTGVuZ3Ro
ICs9IDIKIAogICAgIHN0cmluZ3MgPSBbXQotICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpee25h
bWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7Y29t
cGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5PSJz
dWJ0ZXN0IiwgYVNjb3JlPWFbdW5pdE1hcmtlcl0sIGJTY29yZT1iW3VuaXRNYXJrZXJdLCBuYW1l
TGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29t
cGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFk
ZXIsIHBMZW5ndGg9cExlbmd0aCkpCisgICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxl
bmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJl
Ol57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRl
c3QiLCBhU2NvcmU9ImE6ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2NvcmU9ImI6ICIgKyBiW3VuaXRN
YXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1i
TGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtl
cj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCiAgICAgZm9yIGtleSBpbiBhLmtleXMo
KToKICAgICAgICAgaWYga2V5ID09IHVuaXRNYXJrZXI6CiAgICAgICAgICAgICBjb250aW51ZQpJ
bmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNpb24gMjcx
Mzc2KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRlc3RSdW5u
ZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlvbiwKLSAg
ICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51bWJlck9m
REZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAgICAgcmV0
dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAgICAgIC8vIEVt
dWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0aWVyaW5n
IGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAg
ICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50ID0gbWFwLmdl
dChmKSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIG1hcC5zZXQo
ZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsKKyAgICAg
ICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4dE5ld0Nv
ZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRo
ZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsK
ICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQor
ICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAgdmFsdWVz
LnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgIH0g
Y2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBAIGZ1bmN0
aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0cykKICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxlZChhcmd1
bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3RhcnQgOiAw
OwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419166</attachid>
            <date>2021-02-03 11:53:44 -0800</date>
            <delta_ts>2021-02-03 11:53:44 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>641168</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3BlYy10by10aGlzLmpzCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9iaWctaW50LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJvYmplY3QiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA9PT0gMSk7Cithc3NlcnQobnVtYmVyT2ZERkdDb21waWxl
cyhmb28pID09PSAxIHx8ICFpc0RGR0VuYWJsZWQoKSk7CiAKSW5kZXg6IEpTVGVzdHMvc3RyZXNz
L2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9iaWctaW50LXN0cmljdC1zcGVjLXRvLXRoaXMuanMJKHJldmlzaW9uIDI3MTM3NikKKysr
IEpTVGVzdHMvc3RyZXNzL2JpZy1pbnQtc3RyaWN0LXNwZWMtdG8tdGhpcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNSArMTksNSBAQCBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsK
ICAgICBhc3NlcnQoZm9vLmFwcGx5KDMwMCkgPT09ICJudW1iZXIiKTsKIH0KIAotYXNzZXJ0KG51
bWJlck9mREZHQ29tcGlsZXMoZm9vKSA+IDEpOworYXNzZXJ0KCFpc0RGR0VuYWJsZWQoKSB8fCBu
dW1iZXJPZkRGR0NvbXBpbGVzKGZvbykgPiAxKTsKIApJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktY29uc3Qtc3Ry
aW5nLWZ0bC5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXRvLXByb3BlcnR5LWtleS1jb25zdC1zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBjb25zdEZvbGRTdHJpbmcoaSk7CiB9CiAKLWlmIChpID49IG1heFRyaWVzKQoraWYgKGkg
Pj0gbWF4VHJpZXMgJiYgaXNERkdFbmFibGVkKCkpCiAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWls
ZWQgdG8gY29tcGlsZSBjb25zdEZvbGRTdHJpbmcgd2l0aCBERkcgSklUIik7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5
LWtleS1jb25zdC1zeW1ib2wtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LWNvbnN0LXN5bWJvbC1mdGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgZm9yICg7IGkgPCBtYXhUcmllcyAmJiAhbnVt
YmVyT2ZERkdDb21waQogICAgIGNvbnN0Rm9sZFN5bWJvbChpKTsKIH0KIAotaWYgKGkgPj0gbWF4
VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmlu
Zy1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXBy
b3BlcnR5LWtleS1zbG93LW9iamVjdC10b3N0cmluZy1mdGwuanMJKHJldmlzaW9uIDI3MTM3NikK
KysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9wZXJ0eS1rZXktc2xvdy1vYmpl
Y3QtdG9zdHJpbmctZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCw1IEBAIGZvciAo
aSA9IDA7IGkgPCBtYXhUcmllcyAmJiAhbnVtYmVyT2ZERkcKICAgICBzbG93T2JqZWN0VmFsdWVP
ZihpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitpZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RG
R0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBjb21waWxlIHNsb3dP
YmplY3RWYWx1ZU9mIHdpdGggREZHIEpJVCIpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb2JqZWN0LWZ0bC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmpl
Y3QtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVs
ZHMtdG8tcHJvcGVydHkta2V5LXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw1ICsyMCw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPYmplY3RUb1N0cmluZyhpKTsKIH0KIAotaWYgKGkgPj0gbWF4VHJpZXMpCitp
ZiAoaSA+PSBtYXhUcmllcyAmJiBpc0RGR0VuYWJsZWQoKSkKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkZhaWxlZCB0byBjb21waWxlIHN0cmluZ09iamVjdFRvU3RyaW5nIHdpdGggREZHIEpJVCIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmct
b3Itc3RyaW5nLW9iamVjdC1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLXRvLXByb3BlcnR5LWtleS1zdHJpbmctb3Itc3RyaW5nLW9iamVjdC1mdGwuanMJ
KHJldmlzaW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy10by1wcm9w
ZXJ0eS1rZXktc3RyaW5nLW9yLXN0cmluZy1vYmplY3QtZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1ICsyMyw1IEBAIGZvciAoOyBpIDwgbWF4VHJpZXMgJiYgIW51bWJlck9mREZHQ29tcGkK
ICAgICBzdHJpbmdPclN0cmluZ09iamVjdFRvU3RyaW5nKGkpOwogfQogCi1pZiAoaSA+PSBtYXhU
cmllcykKK2lmIChpID49IG1heFRyaWVzICYmIGlzREZHRW5hYmxlZCgpKQogICAgIHRocm93IG5l
dyBFcnJvcigiRmFpbGVkIHRvIGNvbXBpbGUgc3RyaW5nT3JTdHJpbmdPYmplY3RUb1N0cmluZyB3
aXRoIERGRyBKSVQiKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2hhcy1pbmRleGVkLXByb3BlcnR5
LWFycmF5LXN0b3JhZ2UtZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhcy1p
bmRleGVkLXByb3BlcnR5LWFycmF5LXN0b3JhZ2UtZnRsLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1hcnJheS1zdG9yYWdlLWZ0bC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnN1cmVBcnJheVN0b3JhZ2UoYXJy
YXkpOwogZGlkRlRMQ29tcGlsZSA9IGZhbHNlOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKICAgICBzaG91bGRCZSh0ZXN0MShhcnJheSksIHRydWUpOwotc2hvdWxkQmUoZGlkRlRMQ29t
cGlsZSwgdHJ1ZSk7CitzaG91bGRCZShkaWRGVExDb21waWxlIHx8ICFpc0RGR0VuYWJsZWQoKSwg
dHJ1ZSk7CiAKIHZhciBhcnJheSA9IFsxLCAyLCAsIDRdOwogZW5zdXJlQXJyYXlTdG9yYWdlKGFy
cmF5KTsKQEAgLTQzLDYgKzQzLDYgQEAgZW5zdXJlQXJyYXlTdG9yYWdlKGFycmF5Mik7CiBkaWRG
VExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQogICAgIHNo
b3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRy
dWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwog
c2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkxKSwg
dHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9oYXMtaW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1
dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9oYXMt
aW5kZXhlZC1wcm9wZXJ0eS1zbG93LXB1dC1hcnJheS1zdG9yYWdlLWZ0bC5qcwkocmV2aXNpb24g
MjcxMzc2KQorKysgSlNUZXN0cy9zdHJlc3MvaGFzLWluZGV4ZWQtcHJvcGVydHktc2xvdy1wdXQt
YXJyYXktc3RvcmFnZS1mdGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgZW5z
dXJlQXJyYXlTdG9yYWdlKGFycmF5KTsKIGRpZEZUTENvbXBpbGUgPSBmYWxzZTsKIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgc2hvdWxkQmUodGVzdDEoYXJyYXkpLCB0cnVlKTsK
LXNob3VsZEJlKGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8
fCAhaXNERkdFbmFibGVkKCksIHRydWUpOwogCiB2YXIgYXJyYXkgPSBbMSwgMiwgLCA0XTsKIGFy
cmF5Ll9fcHJvdG9fXyA9IG9iamVjdDsKQEAgLTU2LDYgKzU2LDYgQEAgZW5zdXJlQXJyYXlTdG9y
YWdlKGFycmF5Mik7CiBkaWRGVExDb21waWxlID0gZmFsc2U7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNTsgKytpKQogICAgIHNob3VsZEJlKHRlc3QyKGFycmF5MiksIGZhbHNlKTsKLXNob3VsZEJl
KGRpZEZUTENvbXBpbGUsIHRydWUpOworc2hvdWxkQmUoZGlkRlRMQ29tcGlsZSB8fCAhaXNERkdF
bmFibGVkKCksIHRydWUpOwogc2hvdWxkQmUodGVzdDIoYXJyYXkyKSwgZmFsc2UpOwogc2hvdWxk
QmUodGVzdDIoYXJyYXkxKSwgdHJ1ZSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVh
dC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
aW50OC1yZXBlYXQtaW4tdGhlbi1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAyNzEzNzYpCisr
KyBKU1Rlc3RzL3N0cmVzcy9pbnQ4LXJlcGVhdC1pbi10aGVuLW91dC1vZi1ib3VuZHMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDUgKzIxLDUgQEAgaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dChmb28pKQogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKICAgICBmb28oYXJyYXks
IGZhbHNlKTsKIAotaWYgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChmb28pICE9IDEpCitpZiAo
aXNERkdFbmFibGVkKCkgJiYgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KGZvbykgIT0gMSkKICAg
ICB0aHJvdyAiRXJyb3I6IHVuZXhwZWN0ZWQgcmV0cnkgY291bnQ6ICIgKyByZW9wdGltaXphdGlv
blJldHJ5Q291bnQoZm9vKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9wdXQtYnktaWQtZmxhZ3MuanMJKHJldmlz
aW9uIDI3MTM3NikKKysrIEpTVGVzdHMvc3RyZXNzL3B1dC1ieS1pZC1mbGFncy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsNyArMTMsMTMgQEAgdmFyIHkgPSB7fTsKIGYoeCwgNDIpOwogZih5LCB7
fSk7CiAKK2xldCBjb3VudGVyID0gMDsKIHdoaWxlICghbnVtYmVyT2ZERkdDb21waWxlcyhnKSkg
eworICAgICsrY291bnRlcjsKKyAgICBpZiAoIWlzREZHRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChjb3VudGVyID4gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKGcpOwogICAgIGlmICh0eXBlb2YgZyh4KSAhPT0gJ251bWJlcicpCiAg
ICAgICAgIHRocm93ICdmYWlsZWQgd2FybWluZyB1cCc7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90
eXBlZGFycmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1pbnRyaW5zaWMtZ2V0dGVycy1jaGFuZ2Ut
cHJvdG90eXBlLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBKU1Rlc3RzL3N0cmVzcy90eXBlZGFy
cmF5LWludHJpbnNpYy1nZXR0ZXJzLWNoYW5nZS1wcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDEwICsxOCwxNCBAQAogCiAgICAgbGV0IGFycmF5ID0gbmV3IEludDMyQXJyYXkoMTUp
OwogCi0gICAgd2hpbGUobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgeworICAgIGxldCBj
b3VudGVyID0gMDsKKyAgICB3aGlsZSAobnVtYmVyT2ZERkdDb21waWxlcyhmb28pIDwgMSkgewog
ICAgICAgICBmb28oYXJyYXkpOwogICAgICAgICBiYXIoYXJyYXkpOwogICAgICAgICBiYXooYXJy
YXkpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIGlmIChjb3VudGVyID4gMTAwMDAwKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFy
cmF5LCBudWxsKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkocmV2aXNpb24gMjcxMzc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL0pldFN0cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBpZiAodHlwZW9mIHRlc3RXb3JzdENhc2VDb3VudE1hcCA9PT0gInVuCiBpZiAodHlwZW9mIGR1
bXBKU09OUmVzdWx0cyA9PT0gInVuZGVmaW5lZCIpCiAgICAgdmFyIGR1bXBKU09OUmVzdWx0cyA9
IGZhbHNlOwogCit2YXIgZHVtcEpTT05SZXN1bHRzID0gdHJ1ZTsKKwogLy8gVXNlZCBmb3IgdGhl
IHByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGJlbmNobWFyayBydW4uCiB0aGlzLmN1
cnJlbnRSZXNvbHZlID0gbnVsbDsKIHRoaXMuY3VycmVudFJlamVjdCA9IG51bGw7CkBAIC0xNjQ2
LDEzICsxNjQ4LDEzIEBAIGxldCBydW5XYXNtID0gdHJ1ZTsKIGlmICh0eXBlb2YgV2ViQXNzZW1i
bHkgPT09ICJ1bmRlZmluZWQiKQogICAgIHJ1bldhc20gPSBmYWxzZTsKIAotaWYgKGZhbHNlKSB7
CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZhbHNlOwogICAgIHJ1bkFSRVMgPSBmYWxz
ZTsKICAgICBydW5XU0wgPSBmYWxzZTsKICAgICBydW5SZXhCZW5jaCA9IGZhbHNlOwogICAgIHJ1
bldUQiA9IGZhbHNlOwotICAgIHJ1blN1blNwaWRlciA9IGZhbHNlOworICAgIHJ1blN1blNwaWRl
ciA9IHRydWU7CiAgICAgcnVuU2ltcGxlID0gZmFsc2U7CiAgICAgcnVuQ0RKUyA9IGZhbHNlOwog
ICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9j
bGkuanMJKHJldmlzaW9uIDI3MTM3NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9j
bGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgaWYgKGlzRDgpCiBpZiAodHlw
ZW9mIHRlc3RMaXN0ID09PSAidW5kZWZpbmVkIikKICAgICB0ZXN0TGlzdCA9IHVuZGVmaW5lZDsK
IAorLy90ZXN0TGlzdCA9IFsndGFnY2xvdWQtU1AnXTsKKwogaWYgKHR5cGVvZiB0ZXN0SXRlcmF0
aW9uQ291bnQgPT09ICJ1bmRlZmluZWQiKQogICAgIHRlc3RJdGVyYXRpb25Db3VudCA9IHVuZGVm
aW5lZDsKIApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvYmVu
Y2htYXJrLXJ1bm5lci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBQ
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsOCBAQAogLy8gRklYTUU6IFVzZSB0aGUgcmVhbCBw
cm9taXNlIGlmIGF2YWlsYWJsZS4KIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBpbnRlcmZhY2Ug
aXMgY29tcGF0aWJsZSB3aXRoIHRoZSByZWFsIFByb21pc2UuCisKK19fZGlzYWJsZVNhbXBsaW5n
UHJvZmlsZXIoKTsKKwogZnVuY3Rpb24gU2ltcGxlUHJvbWlzZSgpIHsKICAgICB0aGlzLl9jaGFp
bmVkUHJvbWlzZSA9IG51bGw7CiAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsOwpAQCAtMTI4LDE3
ICsxMzEsMjEgQEAgQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS5fcnVuVGVzdCA9IGZ1bgogCiAg
ICAgc2VsZi5fd3JpdGVNYXJrKHN1aXRlLm5hbWUgKyAnLicgKyB0ZXN0Lm5hbWUgKyAnLXN0YXJ0
Jyk7CiAgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAgIF9fZW5hYmxlU2FtcGxpbmdQcm9m
aWxlcigpOwogICAgIHRlc3QucnVuKHByZXBhcmVSZXR1cm5WYWx1ZSwgY29udGVudFdpbmRvdywg
Y29udGVudERvY3VtZW50KTsKKyAgICBfX2Rpc2FibGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAg
dmFyIGVuZFRpbWUgPSBub3coKTsKICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcu
JyArIHRlc3QubmFtZSArICctc3luYy1lbmQnKTsKIAogICAgIHZhciBzeW5jVGltZSA9IGVuZFRp
bWUgLSBzdGFydFRpbWU7CiAKICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7CisgICAgX19lbmFi
bGVTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAg
ICAgIC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3QgaW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBsYXlvdXQg
Zm9yIHBhaW50LgogICAgICAgICAvLyBGb3JjZSB0aGUgbGF5b3V0IGhlcmUgdG8gZW5zdXJlIHdl
J3JlIG1lYXN1cmluZyB0aGUgbGF5b3V0IHRpbWUuCiAgICAgICAgIHZhciBoZWlnaHQgPSBzZWxm
Ll9mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWln
aHQ7CisgICAgICAgIF9fZGlzYWJsZVNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICAgICAgdmFyIGVu
ZFRpbWUgPSBub3coKTsKICAgICAgICAgc2VsZi5fZnJhbWUuY29udGVudFdpbmRvdy5fdW51c2Vk
SGVpZ2h0VmFsdWUgPSBoZWlnaHQ7IC8vIFByZXZlbnQgZGVhZCBjb2RlIGVsaW1pbmF0aW9uLgog
ICAgICAgICBzZWxmLl93cml0ZU1hcmsoc3VpdGUubmFtZSArICcuJyArIHRlc3QubmFtZSArICct
YXN5bmMtZW5kJyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2
ICszNjgsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvCiAKIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2spOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25B
c0RvdWJsZU51bWJlcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bklzREZHRW5hYmxlZCk7CiAKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uRHJvcEFsbExvY2tzKTsKIApAQCAtNjYyLDYgKzY2Myw4IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9uQXNEb3VibGVOdW1i
ZXIsIDEpOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNERkdFbmFibGVkIiwgZnVuY3Rp
b25Jc0RGR0VuYWJsZWQsIDApOworCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHJvcEFsbExv
Y2tzIiwgZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIDEpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjpl
eHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nKCkpIHsKQEAgLTI2NTMs
NiArMjY1NiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Bc0RvdWJsCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihudW0pKTsKIH0KIAorSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNERkdFbmFibGVkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihPcHRpb25zOjp1c2VERkdKSVQoKSkpOworfQorCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25Ecm9wQWxsTG9ja3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqKSkKIHsKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFs
T2JqZWN0KTsKQEAgLTM0NDMsNyArMzQ1MSw5IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFuZExp
bmUmIG9wdGlvbnMsIGIKICAgICAgICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnku
a2V5KTsKICAgICAgICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxl
VGltZUtleXMuZW5kKCkpOwogICAgICAgICBmb3IgKGNvbnN0IENTdHJpbmcmIGtleSA6IGNvbXBp
bGVUaW1lS2V5cykgewotICAgICAgICAgICAgaWYgKGtleS5kYXRhKCkpCisgICAgICAgICAgICBp
ZiAoa2V5LmRhdGEoKSAmJiBTdHJpbmcoa2V5LmRhdGEoKSkuY29udGFpbnMoIkNvbXBpbGVzIikp
CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlNDBzOiAlbGx1XG4iLCBrZXkuZGF0YSgpLCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oY29tcGlsZVRpbWVTdGF0cy5nZXQoa2V5KS52YWx1ZSgpKSk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChrZXkuZGF0YSgpKQogICAgICAgICAgICAgICAgIHByaW50Zigi
JTQwczogJS4zbGYgbXNcbiIsIGtleS5kYXRhKCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSku
bWlsbGlzZWNvbmRzKCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBzaG91bGREdW1wRGlz
YXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgaWYgKGNvZGVCbG9jayAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlv
bnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNERkdPckZUTChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fz
c2VtYmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OnByaW50TG9jYXRpb25BbmRP
cChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKQEAg
LTI2OSw3ICsyNzEsNyBAQCB2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVt
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxCbG9jaz46OmR1bXBHcmFwaChCbG9jayogYmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBJQ1N0YXR1c01hcCYgaWNTdGF0dXNNYXApCit2b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPEJsb2NrPjo6ZHVtcEdyYXBoKEJsb2NrKiBibG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIE9wdGlvbmFsPFZlY3RvcjxP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4+PiBwcmVkaWN0aW9uc0F0SGVhZCwgUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAmIGljU3RhdHVzTWFwKQogewogICAgIGR1bXBI
ZWFkZXIoYmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIApAQCAtMjgzLDYgKzI4NSwyMyBAQCB2
b2lkIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPEJsb2NrPjo6ZHVtCiAKICAgICAgICAgb3V0LnBy
aW50KCJiYiMiLCBibG9jay5pbmRleCgpLCAiXG4iKTsKIAorICAgICAgICBpZiAocHJlZGljdGlv
bnNBdEhlYWQpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgicHJlZGljdGlvbnMgYXQgaGVhZDog
WyIpOworICAgICAgICAgICAgY29uc3QgYXV0byYgcHJlZGljdGlvbnMgPSBwcmVkaWN0aW9uc0F0
SGVhZC0+YXQoYmxvY2suaW5kZXgoKSk7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWEo
IiwgIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKGkpLCAiPSIpOworICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlv
bihvdXQsIHByZWRpY3Rpb25zLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy5udW1iZXJPZkxvY2Fscygp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICAgICAg
ICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgIj0iKTsKKyAgICAgICAg
ICAgICAgICBkdW1wU3BlY3VsYXRpb24ob3V0LCBwcmVkaWN0aW9ucy5sb2NhbChpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIl1cbiIpOworICAgICAgICB9CisKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnRvdGFsTGVuZ3RoKCk7ICkgewog
ICAgICAgICAgICAgYXV0byYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGkg
KyBibG9jay5sZWFkZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkdW1wZXIuZHVtcEJ5dGVjb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaWNTdGF0dXNNYXApOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CiBjbGFz
cyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBCeXRlY29kZUR1bXBlcjxC
bG9jaz4gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBCbG9jayhCbG9jayosIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiwgUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSUNTdGF0dXNNYXAm
ID0gSUNTdGF0dXNNYXAoKSk7Ci0gICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgUHJpbnRTdHJlYW0mIG91dCA9
IFdURjo6ZGF0YUZpbGUoKSwgY29uc3QgSUNTdGF0dXNNYXAmID0gSUNTdGF0dXNNYXAoKSk7Cisg
ICAgc3RhdGljIHZvaWQgZHVtcEdyYXBoKEJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBCeXRlY29kZUdyYXBoJiwgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBl
LCB0cnVlPj4+IHByZWRpY3Rpb25zQXRIZWFkID0gV1RGOjpudWxsb3B0LCBQcmludFN0cmVhbSYg
b3V0ID0gV1RGOjpkYXRhRmlsZSgpLCBjb25zdCBJQ1N0YXR1c01hcCYgPSBJQ1N0YXR1c01hcCgp
KTsKIAogICAgIHZvaWQgZHVtcElkZW50aWZpZXJzKCk7CiAgICAgdm9pZCBkdW1wQ29uc3RhbnRz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdy
YXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUdyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotICAgIHZvaWQg
ZHVtcChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMsIE9wdGlvbmFsPFZlY3RvcjxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+PiBz
cGVjdWxhdGlvbkF0SGVhZCwgUHJpbnRTdHJlYW0mIHByaW50ZXIgPSBXVEY6OmRhdGFGaWxlKCkp
CisgICAgdm9pZCBkdW1wKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgT3B0aW9uYWw8VmVjdG9yPE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlLCB0cnVlPj4+IHNwZWN1bGF0aW9uQXRIZWFkLCBQcmludFN0cmVhbSYgcHJpbnRlciA9
IFdURjo6ZGF0YUZpbGUoKSkKICAgICB7CiAgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PENvZGVCbG9ja1R5cGU+OjpkdW1wR3JhcGgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsICp0aGlz
LCBzcGVjdWxhdGlvbkF0SGVhZCwgcHJpbnRlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZUluZGV4SW1wbChWaXIKICAgICAvLyBObyB1c2VzLgogICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKICAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgY2Fz
ZSBvcF9sb29wX2hpbnQ6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OgpAQCAtMTAzLDYgKzEwMiw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1w
bChWaXIKICAgICBjYXNlIG9wX2dldF9zY29wZToKICAgICAgICAgcmV0dXJuOwogCisgICAgVVNF
UyhPcEpuZXFQdHIsIHZhbHVlLCBzcGVjaWFsUG9pbnRlcikKICAgICBVU0VTKE9wVG9UaGlzLCBz
cmNEc3QpCiAgICAgVVNFUyhPcENoZWNrVGR6LCB0YXJnZXRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAg
VVNFUyhPcElkZW50aXR5V2l0aFByb2ZpbGUsIHNyY0RzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBl
KFByaW4KICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5w
cmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CiAgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0
aW9uc1NpemUoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBpZiAoKHRoaXMtPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCB0aGlzLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
TE9MSklUKSAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIg
KFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5l
dmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTIz
NCw3ICsyMzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAg
ICAgSUNTdGF0dXNNYXAgc3RhdHVzTWFwOwogICAgIGdldElDU3RhdHVzTWFwKHN0YXR1c01hcCk7
CiAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCh0aGlzLCB0aGlzLT5pbnN0cnVjdGlvbnMoKSk7Ci0g
ICAgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcEdyYXBoKHRoaXMsIGlu
c3RydWN0aW9ucygpLCBncmFwaCwgb3V0LCBzdGF0dXNNYXApOworICAgIENvZGVCbG9ja0J5dGVj
b2RlRHVtcGVyPENvZGVCbG9jaz46OmR1bXBHcmFwaCh0aGlzLCBpbnN0cnVjdGlvbnMoKSwgZ3Jh
cGgsIFdURjo6bnVsbG9wdCwgb3V0LCBzdGF0dXNNYXApOwogfQogCiB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpS
ZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYgc3RhdHVzTWFwKQpAQCAtMjk1LDYgKzI5NSw3IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgp
KQogICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAsIG1fYXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKG90aGVyLm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKQogICAgICwgbV9jb25zdGFudFJl
Z2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQogICAgICwgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pCiAgICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQpAQCAt
MzA5LDcgKzMxMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAK
ICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAKICAgICBBU1NFUlQoc291
cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0
ZXJzKCkpOworCisgICAgbV9udW1QYXJhbWV0ZXJzID0gb3RoZXIubnVtUGFyYW1ldGVycygpOwog
ICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAtODUwLDcg
Kzg1Miw3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gdG8gdGhlIENvZGVCbG9j
ay4gSG93ZXZlciwgaXRzIGxpZmVjeWNsZSBpcyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBDb2RlQmxv
Y2ssIGFuZAogICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIHdoZW4gdGhlIENv
ZGVCbG9jayBkZXN0cnVjdHMuCiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAg
ICAgaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwogI2VuZGlmCiAg
ICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5yZW1vdmUodGhpcyk7CkBAIC05NjQsNiArOTY2LDcg
QEAgdm9pZCBDb2RlQmxvY2s6OnNldEFsdGVybmF0aXZlKFZNJiB2bSwgQwogewogICAgIFJFTEVB
U0VfQVNTRVJUKGFsdGVybmF0aXZlKTsKICAgICBSRUxFQVNFX0FTU0VSVChhbHRlcm5hdGl2ZS0+
aml0Q29kZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhbHRlcm5hdGl2ZS0+bG9sT3JCYXNlbGlu
ZUFsdGVybmF0aXZlKCkgPT0gYWx0ZXJuYXRpdmUpOwogICAgIG1fYWx0ZXJuYXRpdmUuc2V0KHZt
LCB0aGlzLCBhbHRlcm5hdGl2ZSk7CiB9CiAKQEAgLTEwMzcsNyArMTA0MCw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKICAgICAvLyBJbnRlcnByZXRlciBhbmQg
QmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4K
ICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhp
cyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDUsNyArMTA0
OCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnMKIAogYm9vbCBD
b2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKFZNJiB2bSkKIHsKLSAg
ICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklU
Q29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuICF2bS5oZWFwLmlzTWFya2VkKHRoaXMpOwogfQpAQCAtMTA1OCw2ICsxMDYxLDggQEAg
c3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAogICAgICAgICAgICAgcmV0
dXJuIDEwX21zOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAg
ICAgcmV0dXJuIDMwX21zOworICAgICAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAg
ICAgIHJldHVybiAzNV9tczsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAg
ICAgICByZXR1cm4gNDBfbXM7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA3
NCw2ICsxMDc5LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZShKSVRUeXBlIGppdFR5cAog
ICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2Vs
aW5lSklUIGFuZAogICAgICAgICAvLyBJbnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2Nr
LgogICAgICAgICByZXR1cm4gMTVfczsKKyAgICBjYXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAg
ICAgcmV0dXJuIDE4X3M7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAgICAgIHJldHVy
biAyMF9zOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTE2OSw3ICsxMTc2LDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0
VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29k
ZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIAogICAgICAgICBkZmdDb21tb24tPnJlY29yZGVkU3Rh
dHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CkBAIC0xMjE3LDcgKzEyMjQsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgLy8gSW4gcmFyZSBhbmQgd2Vp
cmQgY2FzZXMsIHRoaXMgY291bGQgYmUgY2FsbGVkIG9uIGEgYmFzZWxpbmUgQ29kZUJsb2NrLiBP
bmUgdGhhdCBJIGZvdW5kIHdhcwogICAgIC8vIHRoYXQgd2UgbWlnaHQgZGVjaWRlIHRoYXQgdGhl
IENvZGVCbG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBkdWUgdG8gb2xkIGFnZSwgc28gdGhlCiAg
ICAgLy8gaXNNYXJrZWQgY2hlY2sgZG9lc24ndCBwcm90ZWN0IHVzLgotICAgIGlmICghSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2RlOjppc0RGR09y
RlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBERkc6OkNvbW1vbkRh
dGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0xNTE5LDggKzE1MjYs
MTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAjZW5kaWYK
ICAgICAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCisg
ICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpIHx8IGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKKyAgICAgICAgLy8gT09QUzogU2VwYXJhdGUgcGFydCBv
ZiB0aGlzIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rpb24gZm9yIEpJVCBJQ3MuIFNpbmNlIHNvbWUg
b2YgdGhlc2UgY2FjaGVzIGFyZW4ndCBqdXN0IGZvciBMTEludC4KICAgICAgICAgZmluYWxpemVM
TEludElubGluZUNhY2hlcygpOworICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEh
aml0Q29kZSgpKQpAQCAtMTUyOCw3ICsxNTM3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICBpZiAoSklUQ29kZTo6
aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgZGZnQ29tbW9uLT5yZWNvcmRl
ZFN0YXR1c2VzLmZpbmFsaXplKHZtKTsKICAgICB9CkBAIC0xNTQ4LDYgKzE1NTcsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICBjb3VudCA9
IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6TE9M
SklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CkBAIC0xNTkw
LDcgKzE2MDAsNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uCiAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87
CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGlmIChKSVRDb2RlOjppc0RGR09y
RlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9u
ID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6
IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5jYWxscykKICAgICAgICAgICAgICAgICByZXN1
bHQuYWRkKHBhaXIuZmlyc3QsIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsU3RhdHVz
ID0gcGFpci5zZWNvbmQuZ2V0KCk7CkBAIC0xNzc1LDggKzE3ODUsMTAgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoY29ucwogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICBpZiAoZGZnQ29tbW9uLT5pbmxpbmVD
YWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKmRmZ0Nv
bW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxG
cmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoaW5s
aW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAgICAgICAvLyBUaGlzIHdp
bGwgdHJhbnNpdGl2ZWx5IGtlZXAgdGhlIGJhc2VsaW5lIGNvZGUgYmxvY2sgYWxpdmUuIEl0J3Mg
ZWFzaWVyIHRvIG5vdCB3b3JyeSB0aGF0IHdlJ3JlIHJlbHlpbmcgb24gdGhlIExPTCBDb2RlQmxv
Y2sgc29tZWhvdy4KKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaW5saW5lQ2Fs
bEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jayk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVC
bG9jayk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTE4MTAsMTIgKzE4MjIsMTUgQEAg
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpIHsKKyAgICBpZiAoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKSB7CiAgICAgICAg
IERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAg
ICAgICAgZGZnQ29tbW9uLT5yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwogICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKGxvY2tlciwgdmlzaXRvcik7CiAgICAgfQog
I2VuZGlmCisKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCkKKyAgICAgICAg
dmlzaXRvci5hcHBlbmQobV9hbHRlcm5hdGl2ZSk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJv
bmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkBAIC0xODIzLDcgKzE4MzgsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ry
b25nbHlWaXNpdFdlYWtSZWZlcmVuCiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogCiAjaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKKyAgICBpZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2Rl
LT5kZmdDb21tb24oKTsKQEAgLTE4NTksNiArMTg3NCwyNSBAQCBDb2RlQmxvY2sqIENvZGVCbG9j
azo6YmFzZWxpbmVBbHRlcm5hdGl2CiAjZW5kaWYKIH0KIAorQ29kZUJsb2NrKiBDb2RlQmxvY2s6
OmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBDb2Rl
QmxvY2sqIHJlc3VsdCA9IHRoaXM7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYXV0byBq
aXRUeXBlID0gcmVzdWx0LT5qaXRUeXBlKCk7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVFR5
cGU6OkxPTEpJVCB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUo
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworI2Vsc2UKKyAgICBy
ZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVW
ZXJzaW9uKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtMTg2Nyw3ICsxOTAxLDcgQEAgQ29kZUJs
b2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiAgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKICAgICBpZiAoIXJlc3VsdCkg
ewotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHNlbGZKSVRUeXBlKSkgewor
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlc1JlcGxhY2VtZW50Q29kZUJsb2NrKHNlbGZKSVRUeXBl
KSkgewogICAgICAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGNhbiBiZSBudWxsIGlmIHdlJ3Zl
IGhhZCBhIG1lbW9yeSBjbGVhbiB1cCBhbmQgdGhlIGV4ZWN1dGFibGUKICAgICAgICAgICAgIC8v
IGhhcyBiZWVuIHB1cmdlZCBvZiBpdHMgY29kZUJsb2NrcyAoc2VlIEV4ZWN1dGFibGVCYXNlOjpj
bGVhckNvZGUoKSkuIFJlZ2FyZGxlc3MsCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb2Rl
QmxvY2sgaXMgc3RpbGwgbGl2ZSBvbiB0aGUgc3RhY2ssIGFuZCBhcyBhbiBvcHRpbWl6aW5nIEpJ
VApAQCAtMTkzMSw3ICsxOTY1LDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZv
ckluZGV4KAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKQogewog
I2lmIEVOQUJMRShERkdfSklUKQotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc0RGR09y
RlRMKGppdFR5cGUoKSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3Jp
Z2luYWxDYWxsU2l0ZSkpOwogICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENh
bGxTaXRlLmJpdHMoKSkpOwogICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3Jp
Z2luKG9yaWdpbmFsQ2FsbFNpdGUpOwpAQCAtMTk0OSw2ICsxOTgzLDggQEAgRGlzcG9zYWJsZUNh
bGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeAogCiB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0
Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKIHsKKyAgICBBU1NFUlQoYmFzZWxpbmVBbHRlcm5hdGl2ZSgpID09IHRoaXMpOwor
CiAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KTsKICAgICBPcENhdGNoIG9wID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBvcC5tZXRhZGF0YSh0aGlzKTsKQEAgLTIxMzAsOSArMjE2Niw5IEBAIHZv
aWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmEKICAgICBtX2luY29taW5nTExJ
bnRDYWxscy5wdXNoKGluY29taW5nKTsKIH0KIAotQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1Jl
cGxhY2VtZW50KCkKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudChDb2RlQmxv
Y2sqIGFsdGVybmF0aXZlKQogewotICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVw
bGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIHJldHVybiBv
d25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoYWx0ZXJuYXRpdmUs
IHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0yMjMxLDUx
ICsyMjY3LDU1IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGkKICAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CiAgICAgCiAgICAgLy8gV2Ugd2Fu
dCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAvLyAxKSBNYWtlIHN1cmUgdGhh
dCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93LCB0aGVuIGlmIHdl
IHJldHVybiB0byBpdAorICAgIC8vIDEpIElmIHdlJ3JlIERGRy9GVEwsIG1ha2Ugc3VyZSB0aGF0
IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2Ug
cmV0dXJuIHRvIGl0CiAgICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2Yg
dGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KICAgICAvLyAy
KSBNYWtlIHN1cmUgdGhhdCBpZiB3ZSBjYWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdl
IHNob3VsZG4ndCBjYWxsIHRoaXMgQ29kZUJsb2NrLgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRD
b2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkpIHsKICAgICAgICAgaml0Q29kZSgpLT5kZmdDb21t
b24oKS0+Y2xlYXJXYXRjaHBvaW50cygpOwotICAgIAotICAgIGlmIChyZWFzb24gIT0gUHJvZmls
ZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoY29tcGlsYXRpb24pKQotICAgICAgICAgICAgY29tcGls
YXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0YWlsKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBp
bmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4KLSAgICAgICAgaWYgKCFq
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAodm0uaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkg
JiYgIXZtLmhlYXAuaXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09s
ZEFnZSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9
IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGNvbXBpbGF0aW9uKSkKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+
c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVw
aW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCisgICAgICAgICAgICBp
ZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgeworICAgICAgICAgICAg
ICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKHZtLmhlYXAuaXNDdXJyZW50
VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
ICAgICAKICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0
YUxvZygiICAgIERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKICAgICAKICAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6YXRpb24gaWYgdGhh
dCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgogICAgIGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6
YXRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGNhbGwgYWx0ZXJu
YXRpdmUoKS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMzY3NwogICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNvdW50UmVvcHRpbWl6
YXRpb24oKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0
aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAg
aWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
d2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZvciBPU1IgZW50
cnkgY29kZQogICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIC8vIE9yLCB3ZSdyZSBhbiBMT0wg
Q29kZUJsb2NrIGFuZCB3ZXJlIGFscmVhZHkgamV0dGlzb25lZC4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChhbHRlcm5hdGl2ZSgpKQogICAgICAgICBhbHRlcm5hdGl2ZSgpLT5v
cHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAKLSAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvT2xkQWdlICYmIHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJh
cHMpCisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSAmJiByZWFzb24gIT0g
UHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UgJiYgcmVhc29uICE9IFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvVk1UcmFwcykKICAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgLy8gSmV0dGlzb24gY2FuIGhhcHBlbiBkdXJp
bmcgR0MuIFdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVhZCBleGVjdXRhYmxl
CiAgICAgLy8gYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0IHRvIHRoZSByZW1l
bWJlcmVkIHNldC4KQEAgLTIzMDYsNyArMjM0Niw3IEBAIEpTR2xvYmFsT2JqZWN0KiBDb2RlQmxv
Y2s6Omdsb2JhbE9iamVjdEYKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICBy
ZXR1cm4gZ2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUt
PmxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogfQogCiBjbGFzcyBSZWN1
cnNpb25DaGVja0Z1bmN0b3IgewpAQCAtMjM2NSw3ICsyNDA1LDcgQEAgdm9pZCBDb2RlQmxvY2s6
Om5vdGljZUluY29taW5nQ2FsbChDYWxsRgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgIGlmICghaGFzQmFzZWxpbmVPckxP
TFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIURGRzo6bWlnaHRJbmxp
bmVGdW5jdGlvbih0aGlzKSkKQEAgLTIzOTAsNyArMjQzMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwoQ2FsbEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgp
KSkgeworICAgIGlmIChKSVRDb2RlOjppc0RGR09yRlRMKGNhbGxlckNvZGVCbG9jay0+aml0VHlw
ZSgpKSkgewogICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwogICAgICAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSwgIiAgICBDbGVhcmluZyBT
QUJJIGJjYXVzZSBjYWxsZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLiIpOwogICAgICAgICByZXR1
cm47CkBAIC0yNDgzLDEyICsyNTIzLDE0IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZE
RkdDb21waWxlcygKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlw
ZSgpKSk7CiAgICAgaWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwoKSkgeworICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZURGR0pJVCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICht
X2RpZEZhaWxGVExDb21waWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwOwogICAg
ICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXI7CiAgICAgfQogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQg
PSB0aGlzLT5yZXBsYWNlbWVudCgpOwotICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYmIEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSkgPyAxIDogMCkgKyBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAgIHJldHVybiAoKHJlcGxhY2VtZW50ICYm
IEpJVENvZGU6OmlzREZHT3JGVEwocmVwbGFjZW1lbnQtPmppdFR5cGUoKSkpID8gMSA6IDApICsg
bV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKIH0KIAogaW50MzJfdCBDb2RlQmxvY2s6OmNv
ZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0CkBAIC0yNjQxLDcgKzI2ODMsNyBAQCBh
dXRvIENvZGVCbG9jazo6dXBkYXRlT1NSRXhpdENvdW50ZXJBbmRDCiAKICAgICBib29sIGRpZFRy
eVRvRW50ZXJJbkxvb3AgPSBmYWxzZTsKICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNh
bGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIu
aW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpIHsK
KyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkgewogICAgICAgICAgICAgZGlk
VHJ5VG9FbnRlckluTG9vcCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMjcwOSwyNSArMjc1MSwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25T
bG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBKSVRUeXBl
IHR5cGUgPSBqaXRUeXBlKCk7Ci0gICAgaWYgKHR5cGUgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
IHsKKyAgICBpZiAodHlwZSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiB0eXBlICE9IEpJVFR5
cGU6OkxPTEpJVCkgewogICAgICAgICBkYXRhTG9nTG4oKnRoaXMsICI6IGV4cGVjdGVkIHRvIGhh
dmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlKTsKICAgICAgICAgQ1JBU0hfV0lUSF9J
TkZPKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGppdENvZGUoKS5nZXQoKSksIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHR5cGUpKTsKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCA9IHRoaXMtPnJlcGxhY2VtZW50KCk7Ci0gICAgYm9vbCBoYXNSZXBsYWNlbWVudCA9IChyZXBs
YWNlbWVudCAmJiByZXBsYWNlbWVudCAhPSB0aGlzKTsKKyAgICBib29sIGhhc1JlcGxhY2VtZW50
ID0gcmVwbGFjZW1lbnQgJiYgcmVwbGFjZW1lbnQgIT0gdGhpczsKKyAgICBib29sIHJlcGxhY2Vt
ZW50SXNIaWdoZXJUaWVyID0gZmFsc2U7CisgICAgaWYgKGhhc1JlcGxhY2VtZW50KSB7CisgICAg
ICAgIHJlcGxhY2VtZW50SXNIaWdoZXJUaWVyID0gSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxh
Y2VtZW50LT5qaXRUeXBlKCksIGppdFR5cGUoKSk7CisgICAgICAgIGhhc1JlcGxhY2VtZW50ICY9
IHJlcGxhY2VtZW50SXNIaWdoZXJUaWVyOworICAgIH0KKwogICAgIGlmICgocmVzdWx0ID09IENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bCkgIT0gaGFzUmVwbGFjZW1lbnQpIHsKLSAgICAgICAgZGF0YUxv
ZygqdGhpcywgIjogd2UgaGF2ZSByZXN1bHQgPSAiLCByZXN1bHQsICIgYnV0ICIpOworICAgICAg
ICBib29sIGIgPSB0cnVlOworICAgICAgICBpZiAoYikgcmV0dXJuOworCisgICAgICAgIGRhdGFM
b2coKnRoaXMsICIgIiwgaml0VHlwZSgpLCAiOiB3ZSBoYXZlIHJlc3VsdCA9ICIsIHJlc3VsdCwg
IiBidXQgIik7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSB0aGlzKQogICAgICAgICAgICAg
ZGF0YUxvZygid2UgYXJlIG91ciBvd24gcmVwbGFjZW1lbnQuXG4iKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZGF0YUxvZygib3VyIHJlcGxhY2VtZW50IGlzICIsIHBvaW50ZXJEdW1wKHJl
cGxhY2VtZW50KSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJvdXIgcmVwbGFjZW1lbnQg
aXMgIiwgcG9pbnRlckR1bXAocmVwbGFjZW1lbnQpLCAiICIsIHJlcGxhY2VtZW50LT5qaXRUeXBl
KCksICJcbiIpOworICAgICAgICBkYXRhTG9nTG4oIlVzOiAiLCBSYXdQb2ludGVyKHRoaXMpLCAi
IHJlcGxhY2VtZW50OiAiLCBSYXdQb2ludGVyKHJlcGxhY2VtZW50KSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotICAgIAorCisgICAgaWYgKGhhc1JlcGxh
Y2VtZW50ICYmICFyZXBsYWNlbWVudElzSGlnaGVyVGllcikKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbGFjZW1lbnQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKHJlcGxhY2VtZW50LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVw
bGFjZW1lbnQgJiYgSklUQ29kZTo6aXNERkdPckZUTChyZXBsYWNlbWVudC0+aml0VHlwZSgpKSk7
CiAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CkBAIC0yNzU2LDcgKzI4MTEsOCBAQCB2b2lkIENvZGVC
bG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgCiB1aW50MzJfdCBDb2RlQmxvY2s6
OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICAv
L0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7IC8vIE9PUFM6IFdl
IGNhbGwgdGhpcyBmcm9tIHRoZSBMT0wgY29tcGlsZXIgdGhyZWFkIGJlZm9yZSBpbnN0YWxsLgor
CiAgICAgLy8gQ29tcHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4g
VGhpcyBpcyBjYWxsZWQgaW5mcmVxdWVudGx5CiAgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29w
IHdvbid0IGh1cnQgdXMuCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsK
QEAgLTI4MzYsNyArMjg5Miw3IEBAIERGRzo6Q29kZU9yaWdpblBvb2wmIENvZGVCbG9jazo6Y29k
ZU9yaWcKIAogc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0
CiB7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICBp
ZiAoIUpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzLnNp
emUoKTsKQEAgLTI4NDcsNyArMjkwMyw3IEBAIGNvbnN0IElkZW50aWZpZXImIENvZGVCbG9jazo6
aWRlbnRpZmllcigKICAgICBzaXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQogICAgICAgICByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlw
ZSgpKSk7CiAgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJz
W2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkBAIC0yOTEyLDMwICsyOTY4LDMxIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVk
aWN0aW9ucygpCiAgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogfQogCi1ib29sIENv
ZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQorYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGlt
aXplVG9ERkdOb3coKQogewogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
IkNvbnNpZGVyaW5nIG9wdGltaXppbmcgIiwgKnRoaXMsICIuLi4iKTsKIAogICAgIGlmIChtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVs
YXkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgdXBkYXRlQWxsQXJyYXlQcmVk
aWN0aW9ucygpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CisgICAgYmFzZWxpbmVDb2RlQmxvY2stPnVwZGF0ZUFsbEFycmF5UHJlZGlj
dGlvbnMoKTsKICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXM7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlczsKLSAgICB1
cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MobnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsK
KyAgICBiYXNlbGluZUNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVt
YmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KSB7CiAgICAgICAgIGRhdGFMb2dGKAogICAgICAgICAgICAgIlByb2ZpbGUgaG90bmVzczogJWxm
ICgldSAvICV1KSwgJWxmICgldSAvICV1KVxuIiwKLSAgICAgICAgICAgIChkb3VibGUpbnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXMoKSwKLSAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcywgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAgIChk
b3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZC
dWNrZXRzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAg
IG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMsIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRz
ICogbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSk7CisgICAgICAgICAgICAoZG91
YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIGJhc2VsaW5lQ29kZUJs
b2NrLT5udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpLAorICAgICAgICAgICAgbnVt
YmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBiYXNlbGluZUNvZGVCbG9jay0+bnVt
YmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAgIChkb3VibGUpbnVt
YmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8g
YmFzZWxpbmVDb2RlQmxvY2stPm51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCksCisg
ICAgICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzLCBWYWx1ZVByb2ZpbGU6Om51bWJl
ck9mQnVja2V0cyAqIGJhc2VsaW5lQ29kZUJsb2NrLT5udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoKCFudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVz
IC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVk
UHJvZmlsZUxpdmVuZXNzUmF0ZSgpKQotICAgICAgICAmJiAoIXRvdGFsTnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpID49IE9w
dGlvbnM6OmRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCisgICAgaWYgKCghYmFzZWxpbmVD
b2RlQmxvY2stPm51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSlu
dW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBiYXNlbGluZUNvZGVCbG9jay0+
bnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJv
ZmlsZUxpdmVuZXNzUmF0ZSgpKQorICAgICAgICAmJiAoIWJhc2VsaW5lQ29kZUJsb2NrLT50b3Rh
bE51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gYmFzZWxpbmVDb2RlQmxvY2st
PnRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVG
dWxsbmVzc1JhdGUoKSkKICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRl
bGF5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIApAQCAtMjk0OCwxMCArMzAwNSwxMCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogI2lmIEVOQUJMRShERkdfSklU
KQogdm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKQogewotICAgIEFTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgQVNTRVJUKEpJVENv
ZGU6OmlzQmFzZWxpbmVDb2RlKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSkpOworICAgIC8vIE9P
UFMKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKTsKICAgICAKLSAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2ZSgpOworICAgIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAgICAKICAgICBzd2l0
Y2ggKGppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOiB7CkBAIC0zMDUwLDYg
KzMxMDcsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNp
ZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CisgICAgY2FzZSBK
SVRUeXBlOjpMT0xKSVQ6CiAgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0zMjI2LDE0ICszMjg0LDE0IEBA
IHZvaWQgQ29kZUJsb2NrOjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG4KIHsKICAgICBtX251bUJy
ZWFrcG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOwogICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRz
KTsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYg
KEpJVENvZGU6OmlzREZHT3JGVEwoaml0VHlwZSgpKSkKICAgICAgICAgamV0dGlzb24oUHJvZmls
ZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCiB2b2lkIENvZGVCbG9j
azo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1vZGUpCiB7CiAgICAg
bV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IFN0ZXBwaW5nTW9kZUVuYWJs
ZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKG1vZGUg
PT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc0RGR09yRlRMKGppdFR5cGUoKSkp
CiAgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGlu
Zyk7CiB9CiAKQEAgLTMyOTYsNyArMzM1NCw3IEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxv
Y2s6OnVuYXJ5QXJpdGgKIAogYm9vbCBDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZh
c3RDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBpZiAoIWhhc0Jhc2Vs
aW5lSklUUHJvZmlsaW5nKCkpCisgICAgaWYgKCFoYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUg
PSBiaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IGlmICghcHJvZmlsZSkKQEAgLTM0MjEsOSArMzQ3OSw5IEBAIE9wdGlvbmFsPEJ5dGVjb2RlSW5k
ZXg+IENvZGVCbG9jazo6Ynl0ZWMKIHsKICAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRl
Y29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBp
ZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpCisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNv
ZGVJbmRleChqaXRUeXBlKSkKICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGNhbGxTaXRlSW5kZXgu
Ynl0ZWNvZGVJbmRleCgpOwotICAgIGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklU
IHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7CisgICAgZWxzZSB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNp
dGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNp
dGVJbmRleCk7CkBAIC0zNDY2LDcgKzM1MjQsNyBAQCBib29sIENvZGVCbG9jazo6aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20g
YSBzaWduYWwgaGFuZGxlci4gV2UgbmVlZCB0byBiZQogICAgIC8vIGNhcmVmdWwgdG8gbm90IGNh
bGwgYW55dGhpbmcgdGhhdCBpcyBub3Qgc2lnbmFsIGhhbmRsZXIgc2FmZSwgZS5nLgogICAgIC8v
IHdlIHNob3VsZCBub3QgcGVydHVyYiB0aGUgcmVmQ291bnQgb2YgbV9qaXRDb2RlLgotICAgIGlm
ICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgaWYgKCFKSVRDb2Rl
Ojppc0RGR09yRlRMKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+aGFzSW5zdGFsbGVkVk1UcmFwc0JyZWFrcG9pbnRz
KCk7CiAjZWxzZQpAQCAtMzQ4MCw3ICszNTM4LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omluc3RhbGxW
TVRyYXBCcmVha3BvaW50cwogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9t
IGEgc2lnbmFsIGhhbmRsZXIuIFdlIG5lZWQgdG8gYmUKICAgICAvLyBjYXJlZnVsIHRvIG5vdCBj
YWxsIGFueXRoaW5nIHRoYXQgaXMgbm90IHNpZ25hbCBoYW5kbGVyIHNhZmUsIGUuZy4KICAgICAv
LyB3ZSBzaG91bGQgbm90IHBlcnR1cmIgdGhlIHJlZkNvdW50IG9mIG1faml0Q29kZS4KLSAgICBp
ZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmICghSklUQ29k
ZTo6aXNERkdPckZUTChqaXRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0
byYgY29tbW9uRGF0YSA9ICptX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgIGNvbW1vbkRhdGEu
aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYs
NiArMTk2LDcgQEAgcHVibGljOgogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRp
c29uKCk7ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRl
cm5hdGl2ZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogbG9sT3JCYXNlbGlu
ZUFsdGVybmF0aXZlKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkBAIC0z
NDcsNyArMzQ4LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2Vs
aW5lSklUUHJvZmlsaW5nKCkpCisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9m
aWxlQ291bnRGb3JCeXRlY29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC0zNTYs
NyArMzU3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklU
UHJvZmlsaW5nKCkpCisgICAgICAgIGlmICghaGFzQmFzZWxpbmVPckxPTFByb2ZpbGluZygpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CiAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291
bnRGb3JCeXRlY29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CkBAIC00MTIsOCArNDEz
LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJl
dHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KICAgICB1bnNpZ25lZCBieXRlY29kZUNvc3Qo
KSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlQ29zdDsgfQogCi0gICAgLy8gRXhhY3RseSBlcXVp
dmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29k
ZUJsb2NrRm9yKGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCi0gICAgQ29kZUJsb2Nr
KiBuZXdSZXBsYWNlbWVudCgpOworICAgIC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihhbHRlcm5h
dGl2ZSwgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSkKKyAgICBDb2RlQmxvY2sqIG5l
d1JlcGxhY2VtZW50KENvZGVCbG9jayogYWx0ZXJuYXRpdmUpOwogICAgIAogICAgIHZvaWQgc2V0
SklUQ29kZShSZWY8SklUQ29kZT4mJiBjb2RlKQogICAgIHsKQEAgLTQzNiw5ICs0MzcsMTAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGJvb2wgaGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSBjb25zdAorICAgIGJvb2wgaGFzQmFzZWxpbmVPckxPTFByb2Zp
bGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUOworICAgICAgICBKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgICAg
IHJldHVybiB0eXBlID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHR5cGUgPT0gSklUVHlwZTo6
TE9MSklUOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAtNTExLDYgKzUxMyw3IEBA
IHB1YmxpYzoKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0
ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShj
b25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JF
YWNoQ2F0Y2hQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2Zp
bGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTUzOSw3ICs1NDIsNyBAQCBwdWJsaWM6CiAgICAgLy8gSGF2
aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmlu
Zy4KICAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIEpJVENvZGU6
OmlzREZHT3JGVEwoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgY2FuR2V0
Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQpAQCAtODAzLDcgKzgwNiw3IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQogI2Vu
ZGlmCiAKLSAgICBib29sIHNob3VsZE9wdGltaXplTm93KCk7CisgICAgYm9vbCBzaG91bGRPcHRp
bWl6ZVRvREZHTm93KCk7CiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9u
cygpOwogICAgIHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwogICAgIHZvaWQgdXBk
YXRlQWxsUHJlZGljdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUo
Y29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwog
ICAgICAgICB9KTsKICAgICB9ICAgCit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaENhdGNoUHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGlmIChhdXRvKiByYXJlRGF0YSA9IG1f
cmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogcmFy
ZURhdGEtPm1fY2F0Y2hQcm9maWxlcykKKyAgICAgICAgICAgIGZ1bmMoKnByb2ZpbGVCdWNrZXQp
OworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBib29sIENvZGVPcmlnaW46OmlzQXBwcm94aW1h
dGVseUVxdWFsVG8oCiAgICAgICAgIGlmICghYUhhc0lubGluZUNhbGxGcmFtZSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKGFJbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpICE9IGJJbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKQorICAgICAgICBpZiAoYUlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay5nZXQoKSAhPSBiSW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJs
b2NrLmdldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAg
YSA9IGFJbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKQEAgLTk5LDcgKzk5LDcgQEAgdW5z
aWduZWQgQ29kZU9yaWdpbjo6YXBwcm94aW1hdGVIYXNoKElubAogICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lID09IHRlcm1pbmFsKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgCi0gICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2goaW5saW5l
Q2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIHJlc3VsdCArPSBX
VEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2goaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgCiAgICAgICAgIGNvZGVPcmlnaW4gPSBpbmxpbmVD
YWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICB9CkBAIC0xMjEsNyArMTIxLDcgQEAgQ29kZUJs
b2NrKiBDb2RlT3JpZ2luOjpjb2RlT3JpZ2luT3duZXIoKQogICAgIGF1dG8qIGlubGluZUNhbGxG
cmFtZSA9IHRoaXMtPmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1l
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJ
bmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKIH0KIAogaW50IENvZGVPcmlnaW46OnN0
YWNrT2Zmc2V0KCkgY29uc3QKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIENvZGVPcmlnaW46OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAtLT4gIik7CiAg
ICAgICAgIAogICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lKiBmcmFtZSA9IHN0YWNrW2ldLmlu
bGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoZnJhbWUtPmJyaWVmRnVu
Y3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGZyYW1lLT5iYXNlbGluZUNvZGVC
bG9jay5nZXQoKSksICI+ICIpOworICAgICAgICAgICAgb3V0LnByaW50KGZyYW1lLT5icmllZkZ1
bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihmcmFtZS0+bG9sT3JCYXNlbGlu
ZUNvZGVCbG9jay5nZXQoKSksICI+ICIpOwogICAgICAgICAgICAgaWYgKGZyYW1lLT5pc0Nsb3N1
cmVDYWxsKQogICAgICAgICAgICAgICAgIG91dC5wcmludCgiKGNsb3N1cmUpICIpOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5n
SklUVHlwZS5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEV4aQogICAgIGNhc2UgRXhp
dEZyb21Bbnl0aGluZzoKICAgICAgICAgb3V0LnByaW50KCJGcm9tQW55dGhpbmciKTsKICAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRXhpdEZyb21MT0w6CisgICAgICAgIG91dC5wcmludCgiRnJv
bUxPTCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGl0RnJvbURGRzoKICAgICAgICAg
b3V0LnByaW50KCJGcm9tREZHIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBF
eGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgewogICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhp
dEZyb21MT0wsCiAgICAgRXhpdEZyb21ERkcsCiAgICAgRXhpdEZyb21GVEwKIH07CkBAIC0zOCw2
ICszOSw4IEBAIGVudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBFeGl0aW5n
SklUVHlwZSBleGl0aW5nSklUVHlwZUZvcihKSVRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJv
bUxPTDsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuIEV4aXRGcm9t
REZHOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNyArNDUsMTcgQEAgSlNGdW5jdGlvbiogSW5saW5lQ2Fs
bEZyYW1lOjpjYWxsZWVGb3JDYQogCiBDb2RlQmxvY2tIYXNoIElubGluZUNhbGxGcmFtZTo6aGFz
aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5oYXNoKCk7CisgICAg
cmV0dXJuIGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmhhc2goKTsKIH0KIAogQ1N0cmluZyBJbmxp
bmVDYWxsRnJhbWU6Omhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdAogewotICAgIHJldHVy
biBiYXNlbGluZUNvZGVCbG9jay0+aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpOworICAgIHJldHVy
biBsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5oYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCk7CiB9CiAK
IENTdHJpbmcgSW5saW5lQ2FsbEZyYW1lOjppbmZlcnJlZE5hbWUoKSBjb25zdAogewotICAgIHJl
dHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oYmFzZWxpbmVDb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpKS0+ZWNtYU5hbWUoKS51dGY4KCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSktPmVjbWFOYW1lKCkudXRmOCgpOwogfQogCiB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEJy
aWVmRnVuY3Rpb25JbmZvcm1hdGlvbihQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNjUsNyAr
NjUsNyBAQCB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEJyaWVmRnVuY3Rpb25JCiAKIHZvaWQg
SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAogewotICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3Jt
YXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihiYXNlbGluZUNvZGVCbG9jay5nZXQoKSkpOworICAg
IG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihs
b2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSk7CiAgICAgaWYgKGlzSW5TdHJpY3RDb250ZXh0
KCkpCiAgICAgICAgIG91dC5wcmludCgiIChTdHJpY3RNb2RlKSIpOwogICAgIG91dC5wcmludCgi
LCAiLCBkaXJlY3RDYWxsZXIuYnl0ZWNvZGVJbmRleCgpLCAiLCAiLCBzdGF0aWNfY2FzdDxLaW5k
PihraW5kKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2Fs
bEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUNhbGxGcmFtZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsx
NzYsNyBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICB9CiAgICAgCiAgICAgVmVjdG9y
PFZhbHVlUmVjb3Zlcnk+IGFyZ3VtZW50c1dpdGhGaXh1cDsgLy8gSW5jbHVkZXMgJ3RoaXMnIGFu
ZCBhcml0eSBmaXh1cHMuCi0gICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gYmFzZWxpbmVDb2Rl
QmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbG9sT3JCYXNlbGluZUNvZGVCbG9j
azsKICAgICBDb2RlT3JpZ2luIGRpcmVjdENhbGxlcjsKIAogICAgIHVuc2lnbmVkIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIDogMjI7IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KQEAgLTIz
MSwyMCArMjMxLDIxIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHB0cmRpZmZfdCBj
YWxsZXJGcmFtZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJl
Z2lzdGVyKSArIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKTsgfQogICAgIHB0cmRpZmZf
dCByZXR1cm5QQ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJl
Z2lzdGVyKSArIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKTsgfQogCi0gICAgYm9vbCBpc0lu
U3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKS0+aXNJblN0cmljdENvbnRleHQoKTsgfQorICAgIGJvb2wgaXNJblN0cmljdENv
bnRleHQoKSBjb25zdCB7IHJldHVybiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+aXNJblN0cmljdENvbnRleHQoKTsgfQogCiAgICAgdm9pZCBkdW1wQnJpZWZGdW5j
dGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKIAogICAgIE1BS0VfUFJJTlRfTUVUSE9EKElubGluZUNhbGxGcmFt
ZSwgZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbiwgYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9u
KTsKLQogfTsKIAogaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jay5nZXQoKTsKKyAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBp
bmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpCisgICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihPcGVyYW5kKSA9PSBzaXplb2YoCiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNM
aWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29s
IHRyYWNrQ2FsbGVlID0gZmFsc2U+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwg
RmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CkBAIC0x
NDMsMjEgKzE0NCwyMyBAQCBwdWJsaWM6CiAKICAgICBPcGVyYW5kcygpID0gZGVmYXVsdDsKIAot
ICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2Nh
bHMsIHNpemVfdCBudW1UbXBzKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1
bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3Rh
bnRzID0gMCkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAgICAg
ICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQorICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNv
bnN0YW50cykKICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVt
TG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBu
dW1Mb2NhbHMgKyBudW1Db25zdGFudHMgKyBudW1UbXBzICsgISF0cmFja0NhbGxlZTsKICAgICAg
ICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKICAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxU
Pjo6bmVlZHNJbml0aWFsaXphdGlvbikKICAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsK
ICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXpl
X3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAg
IGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMs
IHNpemVfdCBudW1UbXBzLCBzaXplX3QgbnVtQ29uc3RhbnRzLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1f
bnVtTG9jYWxzKG51bUxvY2FscykKKyAgICAgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFu
dHMpCiAgICAgewotICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2Fs
cyArIG51bVRtcHMpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxv
Y2FscyArIG51bUNvbnN0YW50cyArIG51bVRtcHMgKyAhIXRyYWNrQ2FsbGVlKTsKICAgICAgICAg
bV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAKQEAgLTE2NSw2ICsxNjgs
NyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25z
dCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAgICAg
ICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAs
IG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1Db25z
dGFudHMob3RoZXIubnVtYmVyT2ZDb25zdGFudHMoKSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVz
Lmdyb3cob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUp
OwpAQCAtMTcyLDMzICsxNzYsNTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG51bWJlck9mQXJn
dW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBzaXplX3QgbnVt
YmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQotICAgIHNpemVfdCBu
dW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFy
Z3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkNvbnN0
YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ29uc3RhbnRzOyB9CisgICAgc2l6ZV90IG51bWJl
ck9mVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKSAtIG51bWJlck9mQXJndW1l
bnRzKCkgLSBudW1iZXJPZkxvY2FscygpIC0gbnVtYmVyT2ZDb25zdGFudHMoKSAtICEhdHJhY2tD
YWxsZWU7IH0KIAorICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1lID0gc3Rk
OjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIHNpemVfdCBjYWxsZWVJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gMTsKKyAg
ICB9CiAgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOwotICAgICAgICByZXR1cm4gaWR4ICsgbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBpZHgg
KyBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQ29uc3Rh
bnRzKCk7CiAgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
ICAgIHJldHVybiBpZHg7CiAgICAgfQotICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OwogICAgIH0KKyAg
ICBzaXplX3QgY29uc3RhbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlkeCA8IG51bWJlck9mQ29uc3RhbnRzKCkpOworICAgICAgICByZXR1cm4gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBpZHg7CisgICAgfQogCiAgICAgUmVm
VHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0K
ICAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
W3RtcEluZGV4KGlkeCldOyB9CiAgICAgCiAgICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4
KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAgICAgQ29uc3RSZWZU
eXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50
SW5kZXgoaWR4KV07IH0KKworICAgIHRlbXBsYXRlIDxib29sIGZvbyA9IHRydWUsIHR5cGVuYW1l
ID0gc3RkOjplbmFibGVfaWZfdDxmb28gJiYgdHJhY2tDYWxsZWU+PgorICAgIFJlZlR5cGUgY2Fs
bGVlKCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgdGVtcGxhdGUgPGJvb2wgZm9v
ID0gdHJ1ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PGZvbyAmJiB0cmFja0NhbGxlZT4+
CisgICAgQ29uc3RSZWZUeXBlIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3Qo
KTsgfQogICAgIAogICAgIFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1
ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIENvbnN0UmVmVHlwZSBsb2NhbChzaXplX3QgaWR4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisKKyAgICBSZWZU
eXBlIGNvbnN0YW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2NvbnN0YW50SW5kZXgo
aWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgY29uc3RhbnQoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbY29uc3RhbnRJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRl
PE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKQEAg
LTI0OCw3ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9j
YWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBu
dW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZlRtcHMoKSArIG51bWJl
ck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgc2l6ZV90IG9s
ZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CiAgICAgICAgIHNpemVfdCBvbGROdW1UbXBz
ID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CkBAIC0y
NjgsNyArMjkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNp
emVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9
IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpICsgc2l6ZTsKKyAgICAgICAg
c2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSAr
IG51bWJlck9mQ29uc3RhbnRzKCkgKyAhIXRyYWNrQ2FsbGVlICsgc2l6ZTsKICAgICAgICAgbV92
YWx1ZXMuZ3JvdyhuZXdTaXplKTsKIAogICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8
fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKQEAgLTMwNSw4
ICszMjcsMTUgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBp
ZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNIZWFkZXIoKSAmJiBvcGVyYW5kLm9mZnNldCgpID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxlZUluZGV4KCk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRJbmRleChvcGVyYW5kLnRvQXJndW1lbnQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0YW50SW5kZXgob3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKSk7CiAgICAg
ICAgIHJldHVybiBsb2NhbEluZGV4KG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCkBA
IC0zMTksOCArMzQ4LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZUeXBlIG9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAg
aWYgY29uc3RleHByICh0cmFja0NhbGxlZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzSGVhZGVyKCkgJiYgb3BlcmFuZC5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsZWUoKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGNvbnN0YW50KG9wZXJhbmQudG9Db25zdGFudEluZGV4KCkpOwogICAgICAgICByZXR1cm4gbG9j
YWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIApAQCAtMzM4LDYgKzM3NCw4IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgp
KSA8IG51bWJlck9mQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIGJv
b2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25zdApAQCAtMzY0LDkgKzQwMiwxNSBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQogICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
bmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJl
ck9mQXJndW1lbnRzKCkpCisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBu
dW1iZXJPZkFyZ3VtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBPcGVy
YW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkp
KTsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCkgKyBudW1iZXJPZkNvbnN0YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxS
ZWdpc3RlckZvckNvbnN0YW50KGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9m
TG9jYWxzKCkpOworICAgICAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKSB7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPT0gY2FsbGVlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mQ29uc3RhbnRzKCkpKTsKICAgICB9CiAKICAgICB2b2lk
IGZpbGwoVCB2YWx1ZSkKQEAgLTM5MywxMCArNDM3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBm
aXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgbmV4dCBt
X251bUxvY2FscyBhcmUgbG9jYWxzLCBhbmQgdGhlIHJlc3QgYXJlIHRtcHMuCisgICAgLy8gVGhl
IGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0
IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIHRoZSBuZXh0IG1fbnVtQ29uc3RhbnRzIGFyZSBjb25z
dGFudHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KICAgICBTdG9yYWdlIG1fdmFsdWVzOwogICAg
IHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxz
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtQ29uc3RhbnRzIHsgMCB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDgg
KzM4LDggQEAgaW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgICAg
ICBvdXQucHJpbnQodmlydHVhbFJlZ2lzdGVyKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdHJhY2tD
YWxsZWU+Cit2b2lkIE9wZXJhbmRzPFQsIHRyYWNrQ2FsbGVlPjo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBDb21tYVBy
aW50ZXIgY29tbWEoIiAiKTsKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgewpAQCAtNTcsMTAgKzU3LDEyIEBAIHZv
aWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ0bXAiLCB0bXBJbmRleCwgIjoiLCBpbkNv
bnRleHQodG1wKHRtcEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIg
KHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGlu
Q29udGV4dChjYWxsZWUoKSwgY29udGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
dm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgYm9vbCB0cmFja0NhbGxlZT4KK3ZvaWQgT3BlcmFuZHM8VCwgdHJhY2tDYWxs
ZWU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1l
bnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKQEAgLTc4LDYgKzgwLDggQEAgdm9pZCBPcGVyYW5k
czxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkp
OwogICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKHRyYWNrQ2FsbGVlKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJjYWxsZWUiLCAiOiIsIGNhbGxlZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NCw3ICsxMDQsNyBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAg
ICAgICAgIG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNp
dGUgPSBqaXQtPmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZl
QXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLT5j
YWxsU2l0ZUluZGV4KTsKICAgICAgICAgbV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0
aW9uID0gbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0
ZS5udW1iZXJPZlNldFJlZ2lzdGVycygpID4gMDsKICAgICAgICAgaWYgKG1fbmVlZHNUb1Jlc3Rv
cmVSZWdpc3RlcnNJZkV4Y2VwdGlvbikKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzREZHT3JGVEwoaml0LT5jb2RlQmxvY2so
KS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lz
dGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNp
dGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJz
Rm9yQ2FsbC5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC03MTAsNyArNzEwLDcg
QEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICAvLyBX
ZSBzZXQgdGhlc2UgdG8gaW5kaWNhdGUgdG8gdGhlIHN0dWIgdG8gcmVtb3ZlIGl0c2VsZiBmcm9t
IHRoZSBDb2RlQmxvY2sncwogICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciB0YWJsZSB3aGVu
IGl0IGlzIGRlYWxsb2NhdGVkLgogICAgICAgICBjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlvbkhh
bmRsZXJzID0gY29kZUJsb2NrOwotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9ja1RoYXRPd25zRXhjZXB0aW9uSGFuZGxlcnMtPmppdFR5cGUoKSkpOworICAg
ICAgICBBU1NFUlQoSklUQ29kZTo6aXNERkdPckZUTChjb2RlQmxvY2tUaGF0T3duc0V4Y2VwdGlv
bkhhbmRsZXJzLT5qaXRUeXBlKCkpKTsKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlv
bkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsMTEg
QEAgaW5saW5lIGJvb2wgaXNJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2
YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNJbnQzMk9ubHkpOwogfQogCitpbmxpbmUgYm9vbCBpc0J5
dGVjb2RlRG91YmxlU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0
dXJuIHZhbHVlICYmICEodmFsdWUgJiB+U3BlY0J5dGVjb2RlRG91YmxlKTsKK30KKwogaW5saW5l
IGJvb2wgaXNOb3RJbnQzMlNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewogICAg
IHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlICYgU3BlY0ludDMyT25seSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBh
bmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAot
ICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBl
IGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRz
OyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVn
aXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmly
dHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsKICAgICBmcmllbmQgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbnQsIGlu
dCk7CisgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JDb25zdGFu
dChpbnQpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaW52YWxpZFZpcnR1YWxSZWdpc3Rl
ciA9IDB4M2ZmZmZmZmY7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKQEAgLTY5LDcgKzcwLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVh
bFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2Fs
KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KLSAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0
ZXIpICYmICFpc0NvbnN0YW50KCk7IH0KICAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAg
ICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFu
ZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CkBAIC0xMTcsNiArMTE4LDcgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiAt
MSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0FyZ3VtZW50KGludCBvcGVy
YW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsg
fQogICAgIHN0YXRpYyBpbnQgYXJndW1lbnRUb09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVy
biBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0
aWMgaW50IGNvbnN0YW50VG9PcGVyYW5kKGludCBjb25zdGFudEluZGV4KSB7IHJldHVybiBmaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50SW5kZXg7IH0KIAogICAgIGludCBtX3Zp
cnR1YWxSZWdpc3RlcjsKIH07CkBAIC0xMzMsNCArMTM1LDkgQEAgaW5saW5lIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXJGbwogICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkgKyBvZmZzZXQpOwogfQogCitp
bmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckNvbnN0YW50KGludCBjb25z
dGFudEluZGV4KQoreworICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
Ojpjb25zdGFudFRvT3BlcmFuZChjb25zdGFudEluZGV4KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEJhc2ljQmxvY2s6OkJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXQKICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1
bWVudHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscywgbnVtVG1wcykKICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMs
IG51bUxvY2FscywgbnVtVG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVh
ZChudW1Bcmd1bWVudHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRv
cCgpKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzLCAwLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBl
eGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRl
ICJJbkJ5SWRTdGF0dXMuaCIKICNpbmNsdWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCisjaW5jbHVk
ZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIgpAQCAtOTA1LDcg
KzkwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKICAgICAg
ICAgfTsKIAotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0VmFsdWVQcm9m
aWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldChtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lKCkpKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFZh
bHVlUHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIENv
ZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKCkpKTsKICAgICAgICAgaWYg
KHByZWRpY3Rpb24gIT0gU3BlY05vbmUpCiAgICAgICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsK
IApAQCAtOTM5LDcgKzk0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB3aGlsZSAoc3RhY2st
Pm1faW5saW5lQ2FsbEZyYW1lICE9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpKQogICAg
ICAgICAgICAgICAgIHN0YWNrID0gc3RhY2stPm1fY2FsbGVyOwogCi0gICAgICAgICAgICByZXR1
cm4gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9m
ZnNldChzdGFjay0+bV9wcm9maWxlZEJsb2NrLCAqY29kZU9yaWdpbik7CisgICAgICAgICAgICBy
ZXR1cm4gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29k
ZU9mZnNldChzdGFjay0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksICpj
b2RlT3JpZ2luKTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CkBAIC05ODIsOCArOTgz
LDkgQEAgcHJpdmF0ZToKIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxl
JiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbikKICAgICB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xv
Y2spOwotICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jayk7CisgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVy
bmF0aXZlKCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOworICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIs
IGNvZGVCbG9jayk7CiAgICAgICAgIGJvb2wgbWFrZVNhZmUgPSBwcm9maWxlLm91dE9mQm91bmRz
KGxvY2tlcik7CiAgICAgICAgIHJldHVybiBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIs
ICZwcm9maWxlLCBhY3Rpb24sIG1ha2VTYWZlKTsKICAgICB9CkBAIC0xNjY4LDcgKzE2NzAsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIHNhdmVkQ3VycmVudEluc3RydWN0aW9uID0gbV9jdXJyZW50SW5zdHJ1Y3Rpb247
CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVD
YWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKIAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9j
a0ZvcihzcGVjaWFsaXphdGlvbktpbmQpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNp
YWxpemF0aW9uS2luZCk7CiAgICAgaW5zZXJ0Q2hlY2tzKGNvZGVCbG9jayk7CiAKICAgICAvLyBG
SVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRzIQpAQCAtNjg3Myw3ICs2ODc1LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgSGFzaFNldDx1
bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1bnNpZ25lZD4+IHNlZW5Bcmd1bWVudHM7CiAKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+YmFzZWxpbmVB
bHRlcm5hdGl2ZSgpLT5tX2xvY2spOwogCiAgICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNo
KFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsK
QEAgLTgzNDUsMjMgKzgzNDcsMjggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZQogICAgIHsKICAgICAgICAgbV9leGl0UHJvZmlsZS5pbml0aWFsaXplKG1fcHJvZmls
ZWRCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAKLSAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fbGF6eU9wZXJh
bmRzLmluaXRpYWxpemUobG9ja2VyLCBtX3Byb2ZpbGVkQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQ
cm9maWxlcyhsb2NrZXIpKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogY29kZUJsb2Nr
ID0gbV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgbV9s
YXp5T3BlcmFuZHMuaW5pdGlhbGl6ZShsb2NrZXIsIGNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVzKGxvY2tlcikpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBk
byB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgYmVjYXVzZSB3ZSB3YW50IHRvIGVuY291cmFn
ZSBTdHJ1Y3R1cmVTdHViSW5mbydzCiAgICAgICAgIC8vIHRvIGJlIHBvdGVudGlhbGx5IGFkZGVk
IHRvIG9wZXJhdGlvbnMgYW5kIGJlY2F1c2UgdGhlIHByb2ZpbGVkIGJsb2NrIGNvdWxkIGJlIGlu
IHRoZQogICAgICAgICAvLyBtaWRkbGUgb2YgTExJbnQtPkpJVCB0aWVyLXVwIGluIHdoaWNoIGNh
c2Ugd2Ugd291bGQgYmUgYWRkaW5nIHRoZSBpbmZvJ3MgcmlnaHQgbm93LgotICAgICAgICBpZiAo
bV9wcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAg
bV9wcm9maWxlZEJsb2NrLT5nZXRJQ1N0YXR1c01hcChsb2NrZXIsIG1fYmFzZWxpbmVNYXApOwor
ICAgICAgICBpZiAobV9wcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZU9yTE9MUHJvZmlsaW5nKCkp
CisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2stPmdldElDU3RhdHVzTWFwKG1fYmFzZWxpbmVN
YXApOwogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIG9wdGltaXplZEJsb2NrID0gbV9wcm9m
aWxlZEJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIG1fb3B0aW1pemVkQ29udGV4dC5vcHRpbWl6
ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRCbG9jazsKLSAgICBpZiAoT3B0aW9uczo6dXNlUG9seXZh
cmlhbnREZXZpcnR1YWxpemF0aW9uKCkgJiYgb3B0aW1pemVkQmxvY2spIHsKLSAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihvcHRpbWl6ZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
b3B0aW1pemVkQmxvY2stPmdldElDU3RhdHVzTWFwKGxvY2tlciwgbV9vcHRpbWl6ZWRDb250ZXh0
Lm1hcCk7CisgICAgeworICAgICAgICBDb2RlQmxvY2sqIG9wdGltaXplZEJsb2NrID0gbV9wcm9m
aWxlZEJsb2NrLT5yZXBsYWNlbWVudCgpOworICAgICAgICBtX29wdGltaXplZENvbnRleHQub3B0
aW1pemVkQ29kZUJsb2NrID0gb3B0aW1pemVkQmxvY2s7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24oKSAmJiBvcHRpbWl6ZWRCbG9jayAmJiBKU0M6
OkpJVENvZGU6OmlzSGlnaGVyVGllcihvcHRpbWl6ZWRCbG9jay0+aml0VHlwZSgpLCBtX3Byb2Zp
bGVkQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIob3B0aW1pemVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBvcHRpbWl6ZWRCbG9j
ay0+Z2V0SUNTdGF0dXNNYXAobG9ja2VyLCBtX29wdGltaXplZENvbnRleHQubWFwKTsKKyAgICAg
ICAgfQorICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9pY0NvbnRleHRTdGFjay5hcHBlbmQoJm1f
b3B0aW1pemVkQ29udGV4dCk7CiAgICAgfQotICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2ljQ29udGV4
dFN0YWNrLmFwcGVuZCgmbV9vcHRpbWl6ZWRDb250ZXh0KTsKICAgICAKICAgICBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXNXaXRoRml4dXAgPSBzdGQ6Om1heDxpbnQ+KGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAKQEAgLTgzNzUs
NyArODM4Miw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKIAog
ICAgICAgICAvLyBUaGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFs
cmVhZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZp
bmlzaGVzLgotICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0
V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdy
aXRlQmFycmllcihwcm9maWxlZEJsb2NrKTsgLy8gT09QUzogQXNzZXJ0IGl0J3MgYSBMT0wsIEJh
c2VsaW5lLCBvciBMTEludCBDQi4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFRtcE9m
ZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9jYWxsZXItPm1faW5saW5lQ2Fs
bEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2NvZGVCbG9jay0+bnVtVG1wcygp
KTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNhbGxG
cmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwog
ICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcg
KzE1NCw3IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAg
ICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2socmVjb3ZlcnkuY29uc3RhbnQo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSkKKyAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
aW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKQogICAgICAgICAg
ICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zlcnku
aXNDb25zdGFudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBDb21waWxhdGlv
blJlc3VsdCBjb21waWxlSW1wbCgKICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkpKTsKKyAgICBB
U1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5q
aXRUeXBlKCkpIHx8IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkxPTEpJVCk7CiAgICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayB8fCBwcm9maWxl
ZERGR0NvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CiAgICAgCiAgICAg
aWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhtb2RlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3OCw3ICsxNjc4LDcg
QEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVz
IGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQogICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudE5vZGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gYXJndW1l
bnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkgewotICAgICAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sg
PSBwcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNjg2LDEy
ICsxNjg2LDEyIEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKIAog
ICAgICAgICAvLyBjdXJyZW50Tm9kZSBpcyBudWxsIHdoZW4gd2UncmUgZG9pbmcgc3BlY3VsYXRp
b24gY2hlY2tzIGZvciBjaGVja0FyZ3VtZW50VHlwZXMoKS4KICAgICAgICAgaWYgKCFjdXJyZW50
Tm9kZSB8fCBub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gY3VycmVudE5vZGUtPm9yaWdpbi5zZW1h
bnRpYyB8fCAhY3VycmVudE5vZGUtPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gcHJvZmlsZWRD
b2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogICAgICAgICAgICAgaWYgKG5v
ZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2ZpbGVkQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2Nr
LT5iYXNlbGluZUFsdGVybmF0aXZlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNzAwLDcgKzE3MDAsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlIEdyYXBoOjptZXRoCiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rp
b24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7
CiAKLSAgICAgICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGlu
ZygpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZWRCbG9jay0+aGFzQmFzZWxpbmVPckxPTFBy
b2ZpbGluZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEJpbmFyeUFyaXRoUHJvZmlsZSogcmVz
dWx0ID0gcHJvZmlsZWRCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChu
b2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICBpZiAoVW5hcnlBcml0aFByb2ZpbGUq
IHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRl
eChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDgxLDcgKzQ4MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgICAgICAKLSAgICAgICAg
cmV0dXJuIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpOworICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICB9CiAgICAgCiAgICAgU2NyaXB0RXhlY3V0YWJs
ZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQpAQCAtNDkyLDEz
ICs0OTIsMjAgQEAgcHVibGljOgogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3Io
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2s7CisgICAg
ICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CiAg
ICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVD
YWxsRnJhbWUpOwogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICByZXR1cm4g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2lu
LCBtX3Byb2ZpbGVkQmxvY2spOworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKSk7CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJs
b2NrLmdldCgpOworICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOwogICAgIH0KICAgICAK
ICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKGNv
bnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkg
QEAgdm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dAogU1VQUFJFU1NfQVNB
Tgogdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAg
QVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwor
ICAgIEFTU0VSVChKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6TE9MSklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNw
cAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdm9pZCBPU1JFeGl0
QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZQogewogICAgIENvZGVCbG9jayogc291cmNlUHJv
ZmlsZWRDb2RlQmxvY2sgPQogICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKAotICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUs
IHByb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlLCBwcm9maWxlZENvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAo
c291cmNlUHJvZmlsZWRDb2RlQmxvY2spIHsKICAgICAgICAgRXhpdGluZ0lubGluZUtpbmQgaW5s
aW5lS2luZDsKICAgICAgICAgaWYgKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmlubGluZUNh
bGxGcmFtZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIEND
YWxsSGVscGUKICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBB
c3NlbWJseUhlbHBlcnM6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5hZGRyZXNzT2ZEaWRUcnlUb0Vu
dGVySW5Mb29wKCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+bG9s
T3JCYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmFkZHJlc3NPZkRpZFRyeVRv
RW50ZXJJbkxvb3AoKSkpKTsKICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoCkBAIC0zODQsOCAr
Mzg0LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIGlm
IChpbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICAgICAgaml0Lm1vdmUo
Ci0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKAotICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5l
Q2FsbEZyYW1lKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICBvc3JXcml0
ZUJhcnJpZXIodm0sIGppdCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0Myw3ICsy
MDQzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNyZWF0ZQogICAgIAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSk7CisgICAgICAgIGNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+bG9sT3JC
YXNlbGluZUNvZGVCbG9jay5nZXQoKTsKICAgICBlbHNlCiAgICAgICAgIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgCkBAIC0zNTc1LDM3ICszNTc1LDM3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rRGkKICAgICBsaW5rRGlyZWN0Rm9yKGNh
bGxGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKIH0KIAotSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRyaWdnZXJSZW9wdGltaXphdGlvbk5vdywgdm9p
ZCwgKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jaywg
T1NSRXhpdEJhc2UqIGV4aXQpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRy
aWdnZXJSZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogLCBDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4aXQpKSAvLyBPT1BTOiByZW1vdmUgYXJn
CiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGls
ZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAogICAgIC8vIHJlYWxseSBiZSBw
cm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhjb2RlQmxvY2stPnZtKCku
aGVhcCk7Ci0gICAgCi0gICAgc2FuaXRpemVTdGFja0ZvclZNKGNvZGVCbG9jay0+dm0oKSk7Cisg
ICAgQ29kZUJsb2NrKiBsb2xPckJhc2VsaW5lQ29kZUJsb2NrID0gb3B0aW1pemVkQ29kZUJsb2Nr
LT5sb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbG9sT3JCYXNlbGluZUNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwor
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT52bSgp
LmhlYXApOworCisgICAgc2FuaXRpemVTdGFja0ZvclZNKGxvbE9yQmFzZWxpbmVDb2RlQmxvY2st
PnZtKCkpOwogCi0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY29kZUJs
b2NrLCAiOiBFbnRlcmVkIHJlb3B0aW1pemUiKTsKLSAgICAvLyBXZSBtdXN0IGJlIGNhbGxlZCB3
aXRoIHRoZSBiYXNlbGluZSBjb2RlIGJsb2NrLgotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShjb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgKmxvbE9yQmFzZWxpbmVDb2RlQmxvY2ssICI6IEVudGVyZWQgcmVvcHRp
bWl6ZSIpOwogCiAgICAgLy8gSWYgSSBhbSBteSBvd24gcmVwbGFjZW1lbnQsIHRoZW4gcmVvcHRp
bWl6YXRpb24gaGFzIGFscmVhZHkgYmVlbiB0cmlnZ2VyZWQuCiAgICAgLy8gVGhpcyBjYW4gaGFw
cGVuIGluIHJlY3Vyc2l2ZSBmdW5jdGlvbnMuCiAgICAgLy8KICAgICAvLyBOb3RlIHRoYXQgZXZl
biBpZiBvcHRpbWl6ZWRDb2RlQmxvY2sgaXMgYW4gRlRMRm9yT1NSRW50cnkgc3R5bGUgQ29kZUJs
b2NrLCB0aGlzIGNvbmRpdGlvbiBpcyBhCiAgICAgLy8gc3VyZSBiZXQgdGhhdCB3ZSBkb24ndCBo
YXZlIGFueXRoaW5nIGVsc2UgbGVmdCB0byBkby4KLSAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
ID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwotICAgIGlmICghcmVwbGFjZW1lbnQgfHwgcmVw
bGFjZW1lbnQgPT0gY29kZUJsb2NrKSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgKmNvZGVCbG9jaywgIjogTm90IHJlb3B0aW1pemluZyBiZWNhdXNlIHdlJ3Zl
IGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIpOworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQg
PSBiYXNlbGluZUNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlcGxhY2VtZW50
IHx8IHJlcGxhY2VtZW50ID09IGJhc2VsaW5lQ29kZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmJhc2VsaW5lQ29kZUJsb2NrLCAiOiBOb3QgcmVv
cHRpbWl6aW5nIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1l
bnQgbXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKICAg
ICAvLyB0byBjaGVjayBvdXIgbG9naWMuCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+aGFzT3B0aW1p
emVkUmVwbGFjZW1lbnQoKSk7CisgICAgQVNTRVJUKGxvbE9yQmFzZWxpbmVDb2RlQmxvY2stPmhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAKICAgICBib29sIGRp
ZFRyeVRvRW50ZXJJbnRvSW5saW5lZExvb3BzID0gZmFsc2U7CiAgICAgZm9yIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4aXQtPm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUoKTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmRpZFRyeVRvRW50
ZXJJbkxvb3AoKSkgeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5l
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CiAg
ICAgICAgICAgICBkaWRUcnlUb0VudGVySW50b0lubGluZWRMb29wcyA9IHRydWU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzYxNiwxMiArMzYxNiwxMiBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHJpZ2dlCiAgICAgLy8gMikgV2UgZXhpdGVkIGFuZCBn
b3Qgc3R1Y2sgaW4gYSBsb29wLCBhbmQgbm93IHdlJ3JlIGV4aXRpbmcgYWdhaW4uCiAgICAgYm9v
bCBkaWRFeGl0QUJ1bmNoID0gb3B0aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93
KCk7CiAgICAgYm9vbCBkaWRHZXRTdHVja0luTG9vcCA9Ci0gICAgICAgIChjb2RlQmxvY2stPmNo
ZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkgfHwgZGlkVHJ5VG9FbnRlckludG9J
bmxpbmVkTG9vcHMpCisgICAgICAgIChsb2xPckJhc2VsaW5lQ29kZUJsb2NrLT5jaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpIHx8IGRpZFRyeVRvRW50ZXJJbnRvSW5saW5lZExv
b3BzKQogICAgICAgICAmJiBvcHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJlb3B0aW1pemVGcm9t
TG9vcE5vdygpOwogICAgIAogICAgIGlmICghZGlkRXhpdEFCdW5jaCAmJiAhZGlkR2V0U3R1Y2tJ
bkxvb3ApIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY29k
ZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nICIsICpvcHRpbWl6ZWRDb2RlQmxvY2ssICIgYmVj
YXVzZSBpdCBlaXRoZXIgZGlkbid0IGV4aXQgZW5vdWdoIG9yIGRpZG4ndCBsb29wIGVub3VnaCBh
ZnRlciBleGl0LiIpOwotICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCk7CisgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmJhc2VsaW5l
Q29kZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5nICIsICpvcHRpbWl6ZWRDb2RlQmxvY2ssICIg
YmVjYXVzZSBpdCBlaXRoZXIgZGlkbid0IGV4aXQgZW5vdWdoIG9yIGRpZG4ndCBsb29wIGVub3Vn
aCBhZnRlciBleGl0LiIpOworICAgICAgICBiYXNlbGluZUNvZGVCbG9jay0+b3B0aW1pemVBZnRl
ckxvbmdXYXJtVXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTM2NjAsNyAr
MzY2MCw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUKICAgICBX
b3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKICAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0
ID0gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpKSB7CiAgICAgICAgIHdvcmtsaXN0
U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAg
ICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9k
ZSkpOworICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+bG9sT3JCYXNl
bGluZUFsdGVybmF0aXZlKCksIEZUTE1vZGUpKTsKICAgICB9IGVsc2UKICAgICAgICAgd29ya2xp
c3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKICAgICAKQEAgLTM2OTAsNyArMzY5MCw3IEBA
IHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUKICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExSZXBsYWNlbWVudCIsICgpKTsKICAgICAv
LyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAgdm0s
IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBCeXRlY29k
ZUluZGV4KCksCisgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KGNvZGVCbG9j
ay0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZlKCkpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIEJ5dGVj
b2RlSW5kZXgoKSwKICAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+KCksIFRvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CiAKICAgICAvLyBJZiB3ZSBy
ZWFjaGVkIGhlcmUsIHRoZSBjb3VudGVyIGhhcyBub3QgYmUgcmVzZXQuIERvIHRoYXQgbm93LgpA
QCAtMzc0OSw3ICszNzQ5LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENh
bGxGcgogICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOwogICAgIGlmIChXb3JrbGlz
dCogd29ya2xpc3QgPSBleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkpIHsKICAgICAg
ICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgK
LSAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsKKyAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktl
eShjb2RlQmxvY2stPmxvbE9yQmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBGVExGb3JPU1JFbnRyeU1v
ZGUpKTsKICAgICB9IGVsc2UKICAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RL
bm93bjsKIApAQCAtMzc5Nyw3ICszNzk3LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihW
TSYgdm0sIENhbGxGcgogICAgICAgICB9CiAKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChj
b2RlQmxvY2ssICJkZWxheUZUTENvbXBpbGUiLCAoIk9TUiBlbnRyeSBmYWlsZWQgdG9vIG1hbnkg
dGltZXMiKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmNvdW50UmVv
cHRpbWl6YXRpb24oKTsKKyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291
bnRSZW9wdGltaXphdGlvbigpOyAvLyBPT1BTOiBUaGlzIG9yIExPTCBDQj8KICAgICAgICAgaml0
Q29kZS0+Y2xlYXJPU1JFbnRyeUJsb2NrQW5kUmVzZXRUaHJlc2hvbGRzKGNvZGVCbG9jayk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH07CkBAIC0zOTI4LDcgKzM5MjgsNyBAQCBzdGF0
aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyCiAgICAgT3BlcmFuZHM8T3B0aW9u
YWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgc3RyZWFtSW5kZXgg
PSBqaXRDb2RlLT5ieXRlY29kZUluZGV4VG9TdHJlYW1JbmRleC5nZXQob3JpZ2luQnl0ZWNvZGVJ
bmRleCk7CiAgICAgaml0Q29kZS0+cmVjb25zdHJ1Y3QoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4ob3JpZ2luQnl0ZWNvZGVJbmRleCksIHN0cmVhbUluZGV4LCBtdXN0SGFuZGxlVmFs
dWVzKTsKLSAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5u
ZXdSZXBsYWNlbWVudCgpOworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KGNvZGVCbG9jay0+bG9sT3JCYXNlbGluZUFsdGVybmF0
aXZlKCkpOwogCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJ0cmlnZ2VyRlRM
T1NSIiwgKCkpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gY29tcGls
ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjcx
Mzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNiArOTQsOCBAQCBleHRlcm4gU2Vjb25kcyB0b3RhbERGR0NvbXBpbGVUaW1l
OwogZXh0ZXJuIFNlY29uZHMgdG90YWxGVExDb21waWxlVGltZTsKIGV4dGVybiBTZWNvbmRzIHRv
dGFsRlRMREZHQ29tcGlsZVRpbWU7CiBleHRlcm4gU2Vjb25kcyB0b3RhbEZUTEIzQ29tcGlsZVRp
bWU7CitleHRlcm4gQXRvbWljPHVpbnQ2NF90PiB0b3RhbERGR0NvbXBpbGVzOworZXh0ZXJuIEF0
b21pYzx1aW50NjRfdD4gdG90YWxGVExDb21waWxlczsKIAogfQogCkBAIC0xOTksOCArMjAxLDEx
IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqIHQKICAgICAgICAgICAg
ICAgICB0b3RhbEZUTENvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOwogICAgICAgICAgICAg
ICAgIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRMIC0gYmVmb3JlOwog
ICAgICAgICAgICAgICAgIHRvdGFsRlRMQjNDb21waWxlVGltZSArPSBhZnRlciAtIG1fdGltZUJl
Zm9yZUZUTDsKLSAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRvdGFsRlRMQ29t
cGlsZXMuZXhjaGFuZ2VBZGQoMSk7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIHRvdGFsREZHQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBiZWZvcmU7CisgICAgICAgICAgICAg
ICAgdG90YWxERkdDb21waWxlcy5leGNoYW5nZUFkZCgxKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KICAgICBjb25zdCBjaGFyKiBwYXRoTmFtZSA9IG51bGxwdHI7CkBAIC01NjAs
NyArNTY1LDcgQEAgYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQogICAgIC8vIGNvZGUgdG8gYmUg
cmVwbGFjZWQgZHVyaW5nIGEgY29tcGlsYXRpb24sIGV4Y2VwdCBpZiB3ZSBkZWxldGUgdGhlIHBs
YW4sIGluIHdoaWNoCiAgICAgLy8gY2FzZSB3ZSB3b3VsZG4ndCBiZSBoZXJlLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI3MDcKLSAgICBpZiAobV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkgIT0gcmVwbGFjZW1lbnQtPmJhc2VsaW5lVmVyc2lvbigp
KQorICAgIGlmIChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSAhPSByZXBsYWNlbWVudC0+bG9s
T3JCYXNlbGluZUFsdGVybmF0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IW1fd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC02NDQsOCArNjQ5LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0
TgogICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChjb25zdGFudC5nZXQoKSk7
CiAKICAgICAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1faW5saW5lQ2Fs
bEZyYW1lcykgewotICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5h
ZGQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQo
KSk7CisgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGlubGluZUNhbGxGcmFt
ZS0+bG9sT3JCYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgYW55IG90aGVyIHJlZmVyZW5jZXMgdGhhdCB3ZSBoYXZlIGFu
eXdoZXJlIGluIHRoZSBKSVRDb2RlIGFyZSBhbHNvCkBAIC02OTMsOCArNjk4LDggQEAgdm9pZCBQ
bGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogCiAgICAgaWYgKG1faW5saW5lQ2Fs
bEZyYW1lcykgewogICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICptX2lubGlu
ZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2Vs
aW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsK
KyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoaW5saW5lQ2FsbEZyYW1lLT5s
b2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEdldEFyZ3VtZW50U3RhcgogTWFjcm9Bc3NlbWJsZXI6Okp1bXAgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPU1JFeGl0RnV6ekNoZWNrKCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnVz
ZU9TUkV4aXRGdXp6KCkKLSAgICAgICAgfHwgIWNhblVzZU9TUkV4aXRGdXp6aW5nKG1faml0Lmdy
YXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9vcmlnaW4uc2VtYW50aWMpKQorICAgICAgICB8
fCAhY2FuVXNlT1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zv
cihtX29yaWdpbi5zZW1hbnRpYykpCiAgICAgICAgIHx8ICFkb09TUkV4aXRGdXp6aW5nKCkpCiAg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpOwogICAgIApAQCAtNDQyOCw5ICs0
NDI4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGJv
b2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5wcm9maWxlZENvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHBy
b2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3Bl
cmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9
IG9wZXJhdGlvblZhbHVlQWRkOwpAQCAtNDUyMCw5ICs0NTIwLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0g
dHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwog
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsK
ICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwpAQCAt
NTExMyw5ICs1MTEzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluY09yRGVjKE5v
ZAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5vZGUpCiB7
CiAgICAgLy8gRklYTUU6IGFkZCBhIGZhc3QgcGF0aCwgYXQgbGVhc3QgZm9yIEJpZ0ludDMyLCBi
dXQgcHJvYmFibHkgYWxzbyBmb3IgSGVhcEJpZ0ludCBoZXJlLgotICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IG1f
aml0LmdyYXBoKCkucHJvZmlsZWRDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpOwotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBwcm9maWxl
ZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpOwogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
QXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvbkFyaXRoTmVnYXRlOwpAQCAtNTM2OSw5ICs1MzY5LDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0g
dHJ1ZTsKICNlbmRpZgogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5wcm9maWxlZENv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE11bElD
KiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwog
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsK
ICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIx
LDYgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1YwogewogICAgIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKIAogICAgIHVuc2lnbmVkIG51bVZh
cmlhYmxlczsKICAgICB1bnNpZ25lZCBudW1UbXBzOwpAQCAtMTU1LDYgKzE1NCw3IEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWMKICAgICAgICAgbnVtVmFyaWFibGVz
ID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwogICAgICAgICBudW1UbXBzID0g
Y29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKICAgICB9
IGVsc2UgeworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2Nr
LT5iYXNlbGluZVZlcnNpb24oKTsKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpOwogICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2Rl
QmxvY2stPm51bVRtcHMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
Myw3ICszNTMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4K
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSwgMCwgMCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDcgKzU2Nyw3IEBAIHZvaWQgSGVhcDo6cHJvdGVj
dChKU1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNT
RVJUKGspOwotICAgIEFTU0VSVChtX3ZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OworICAgIC8vQVNTRVJUKG1fdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7IC8v
IE9PUFMKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJ
KHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNiArNTIsMTcgQEAgdm9pZCBDYWxs
RnJhbWU6OmluaXREZXByZWNhdGVkQ2FsbEZyYW1lRgogYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRl
Qml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkp
OwotICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewotICAgIGNhc2UgSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpJVFR5cGU6Ok5vbmU6Ci0gICAgY2FzZSBKSVRU
eXBlOjpIb3N0Q2FsbFRodW5rOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBKSVRDb2RlOjpjYWxsU2l0ZUJpdHNBcmVCeXRjb2RlSW5k
ZXgoY29kZUJsb2NrKCktPmppdFR5cGUoKSk7CiB9CiAKIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0
ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChjb2RlQmxvY2so
KSk7CiAgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rOgorICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Cisg
ICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNl
IEpJVFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC03OSw4ICs3MCw2IEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNB
cmVDb2RlT3JpZ2kKICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU2LDEwICs0NTYsMTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZp
bmRFeAogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsK
ICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVySW5kZXg7Ci0gICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIGV4Y2VwdGlvbkhh
bmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKLSAgICBlbHNl
CisgICAgaWYgKEpJVENvZGU6OmNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCiAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOworICAgIGVsc2UKKyAgICAgICAgZXhjZXB0aW9uSGFu
ZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwogCiAgICAgcmV0
dXJuIGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVx
dWlyZWRIYW5kbGVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1l
KENhbGwKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5i
b3hlZEludDMyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7Ci0gICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOworICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
aW5saW5lQ2FsbEZyYW1lLT5sb2xPckJhc2VsaW5lQ29kZUJsb2NrLmdldCgpOwogICAgICAgICBt
X2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKIAog
ICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUZvckNh
bGxGcmFtZShjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIEV4ZWN1dGFibGVCYXNlKiBBc3NlbWJseUhlbHBlcnM6OmV4ZWN1dGEKICAgICBhdXRv
KiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpOwotICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5sb2xPckJh
c2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKIH0KIAogQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZGYXN0VHlwZWRBcnJheShHUFJSZWcgYmFz
ZUdQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTIgKzMwLDE4IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCeXRlY29kZUdy
YXBoLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYu
aCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0
aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJEaXNh
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJKU0FzeW5jR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNp
bmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUg
Ik1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCkBAIC00OSw2ICs1
NSw4IEBACiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1NpbXBsZVN0YXRzLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgSklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTU5LDYgKzY3LDg5NCBAQCBTZWNvbmRz
IHRvdGFsREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiBTZWNv
bmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7CiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGlt
ZTsKK0F0b21pYzx1aW50NjRfdD4gdG90YWxCYXNlbGluZUNvbXBpbGVzOworQXRvbWljPHVpbnQ2
NF90PiB0b3RhbERGR0NvbXBpbGVzOworQXRvbWljPHVpbnQ2NF90PiB0b3RhbEZUTENvbXBpbGVz
OworCit2b2lkIEpJVDo6c3RlcE92ZXJJbnN0cnVjdGlvbihjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCit7CisgICAgYXV0byBzZXRUeXBlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKSB7CisgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zLm9w
ZXJhbmQocmVnKSA9IHR5cGU7CisgICAgfTsKKworICAgIGF1dG8gc2V0RHN0VHlwZSA9IFsmXSAo
YXV0byBieXRlY29kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkgeworICAgICAgICBzZXRUeXBlKGJ5
dGVjb2RlLm1fZHN0LCB0eXBlKTsKKyAgICB9OworCisgICAgYXV0byBzZXREc3RUeXBlRnJvbVZh
bHVlUHJvZmlsZSA9IFsmXSAoYXV0byBieXRlY29kZSkgeworICAgICAgICAvL3NldERzdFR5cGUo
Ynl0ZWNvZGUsIHByb2ZpbGVzLmdldCgmYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
cHJvZmlsZSkpOworICAgICAgICAvLyBXZSByYWNpbHkgcmVhZCB0aGlzLCBzaW5jZSBpdCBzaG91
bGQgb25seSBncm93IGluIHRoZSB0eXBlcyBpdCByZXByZXNlbnRzLgorICAgICAgICBzZXREc3RU
eXBlKGJ5dGVjb2RlLCBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9wcm9maWxlLm1f
cHJlZGljdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdHlwZUZvciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIC0+IFNwZWN1bGF0ZWRUeXBlIHsKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRQcmVkaWN0aW9ucy5vcGVyYW5kKG9wZXJhbmQpOworICAgIH07CisKKyAgICBzd2l0Y2ggKGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnQ6CisgICAg
ICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEFyZ3Vt
ZW50PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBzZXREc3RUeXBl
RnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFs
dWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgc2V0RHN0VHlwZUZy
b21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAg
IHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsV2l0
aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgICAgICBz
ZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfYml0eG9yOgorICAgICAgICBzZXREc3RUeXBlRnJv
bVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BCaXR4b3I+KCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JpdG5vdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2Zp
bGUoaW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9iaXRhbmQ6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEJpdGFuZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2Rp
cmVjdF9wbmFtZToKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRf
YnlfaWRfZGlyZWN0OgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcENvbnN0cnVjdD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fc2NvcGU6CisgICAgICAgIHNldERzdFR5cGVGcm9tVmFsdWVQcm9maWxlKGluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBv
cF90b190aGlzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BU
b1RoaXM+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1fc3JjRHN0LCBtZXRhZGF0YS5t
X3Byb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBzZXRUeXBlKGJ5dGVjb2RlLm1faXRl
cmF0b3IsIG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlLm1fcHJlZGljdGlvbik7CisgICAgICAg
IHNldFR5cGUoYnl0ZWNvZGUubV9uZXh0LCBtZXRhZGF0YS5tX25leHRQcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4
dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JO
ZXh0PigpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX2RvbmUsIG1ldGFkYXRhLm1fZG9u
ZVByb2ZpbGUubV9wcmVkaWN0aW9uKTsKKyAgICAgICAgc2V0VHlwZShieXRlY29kZS5tX3ZhbHVl
LCBtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZS5tX3ByZWRpY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BNb3Y+KCksIHR5cGVGb3IoaW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpLm1fc3JjKSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHM6CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2Fs
bDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcHJpdmF0ZV9uYW1lOgorICAgICAg
ICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRl
TmFtZT4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKKyAg
ICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZV9vZjoK
KyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJvdG90eXBlT2Y+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9pbnRlcm5h
bF9maWVsZDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfd2l0aF90aGlzOgorICAgICAgICBzZXREc3RUeXBlRnJvbVZhbHVlUHJvZmlsZShpbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX29iamVjdDoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3Rv
X251bWJlcjoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb24t
PmFzPE9wVG9OdW1iZXI+KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9mcm9t
X2FyZ3VtZW50czoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfdG9fbnVtZXJpYzoKKyAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9w
X2FkZDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
OworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gdHlwZUZvcihieXRlY29kZS5tX2xo
cyk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jo
cyk7CisKKyAgICAgICAgaWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBhdXRvJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJp
Z2h0KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2JzZXJ2ZUludDMyT3ZlcmZsb3co
KSkKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50QXNEb3Vi
bGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNv
ZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVE
b3VibGVTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3Bl
Y0RvdWJsZVJlYWw7CisgICAgICAgICAgICBpZiAoISEobGVmdCAmIFNwZWNEb3VibGVQdXJlTmFO
KSB8fCAhIShyaWdodCAmIFNwZWNEb3VibGVQdXJlTmFOKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQgfD0gU3BlY0RvdWJsZVB1cmVOYU47CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCeXRlY29kZU51bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNC
eXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgQmlnSW50MzIgYmV0dGVyCisgICAgICAgIGlmIChpc0JpZ0ludFNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzQmlnSW50U3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RyaW5nT3JTdHJpbmdPYmplY3RTcGVjdWxh
dGlvbihsZWZ0KSB8fCBpc1N0cmluZ09yU3RyaW5nT2JqZWN0U3BlY3VsYXRpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIGNhbiBk
byBiZXR0ZXIgaGVyZQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5nIHwg
U3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbXVsOiB7
CisgICAgICAgIGF1dG8gaGFuZGxlID0gWyZdIChhdXRvIGJ5dGVjb2RlKSB7CisgICAgICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gdHlwZUZvcihieXRlY29kZS5tX3Jocyk7
CisKKyAgICAgICAgICAgIGlmICghKGxlZnQgJiYgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRh
dGEubV9hcml0aFByb2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
bGVmdCkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlm
IChwcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdiB8fCBpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSA9PSBvcF9tdWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBl
KGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQW55SW50
QXNEb3VibGUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
ZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVjb2RlRG91YmxlU3Bl
Y3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHJpZ2h0KSkgewor
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gU3BlY0J5dGVjb2RlRG91YmxlOworICAgICAg
ICAgICAgICAgIGJvb2wgbWF5UHJvZHVjZU5hTkZyb21Ob25OYU4gPSBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSA9PSBvcF9kaXY7CisgICAgICAgICAgICAgICAgaWYgKG1heVByb2R1Y2VOYU5Gcm9t
Tm9uTmFOIHx8ICEhKGxlZnQgJiBTcGVjRG91YmxlUHVyZU5hTikgfHwgISEocmlnaHQgJiBTcGVj
RG91YmxlUHVyZU5hTikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91Ymxl
UHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0J5dGVjb2RlTnVtYmVyU3Bl
Y3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwg
U3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcHJvYmFibHkgZG8gYmV0dGVyIHcvIGJp
Z2ludDMyCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0Jp
Z0ludFNwZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHNldERzdFR5cGUoYnl0
ZWNvZGUsIFNwZWNCaWdJbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAg
ICAgICAgICBpZiAoISEobGVmdCAmIChTcGVjQmlnSW50IHwgU3BlY09iamVjdCkpIHx8ICEhKHJp
Z2h0ICYgKFNwZWNCaWdJbnQgfCBTcGVjT2JqZWN0KSkpCisgICAgICAgICAgICAgICAgcmVzdWx0
IHw9IFNwZWNCaWdJbnQ7CisgICAgICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCByZXN1bHQp
OworICAgICAgICB9OworCisgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9zdWIpCisgICAgICAgICAgICBoYW5kbGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAg
ICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfbXVsKQorICAgICAg
ICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgICAgIGVsc2UgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2RpdikKKyAgICAgICAgICAgIGhhbmRsZShp
bnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Ugb3BfbW9kOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BNb2Q+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSB0eXBlRm9yKGJ5dGVjb2Rl
Lm1fcmhzKTsKKworICAgICAgICBpZiAoIShsZWZ0ICYmIHJpZ2h0KSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNJbnQzMlNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgLy8gTWF5YmUgd2UgY2FuIGRvIGJldHRl
ciBpZiB3ZSBwcm9maWxlIGV4aXRzIG9uICUgMAorICAgICAgICAgICAgc2V0RHN0VHlwZShieXRl
Y29kZSwgU3BlY0ludDMyT25seSB8IFNwZWNEb3VibGVQdXJlTmFOKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzQnl0ZWNvZGVEb3VibGVTcGVjdWxhdGlv
bihsZWZ0KSAmJiBpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKGxlZnQpICYmIGlzQnl0ZWNvZGVOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNldERzdFR5cGUoYnl0ZWNvZGUs
IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNCaWdJbnQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIG9wX3Vuc2lnbmVkOgorICAgICAgICAvLyBNYXliZSBidWlsZCBpbiBzb21l
IGtpbmQgb2YgZXhpdCBzaXRlIGZlZWRiYWNrIGZvciBzcGVjdWxhdGluZyBpbnQzMiByZXN1bHQK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKSwgU3BlY0lu
dDMyT25seSB8IFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBvcF91cnNoaWZ0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcFVyc2hp
ZnQ+KCksIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugb3BfaW5j
OgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBV
bmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
aW5wdXQgPSB0eXBlRm9yKHNyYyk7CisgICAgICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihpbnB1
dCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcHJvZmlsZS5kaWRPYnNlcnZlSW50
MzJPdmVyZmxvdygpID8gU3BlY0FueUludEFzRG91YmxlIDogU3BlY0ludDMyT25seSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNC
eXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKGlucHV0KSkgeworICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gU3BlY0RvdWJsZVJlYWw7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYgU3Bl
Y0RvdWJsZVB1cmVOYU4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBTcGVjRG91Ymxl
UHVyZU5hTjsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgcmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgc2V0VHlwZShk
c3QsIFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihpbnB1dCkpIHsK
KyAgICAgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUeXBlKGRzdCwgU3Bl
Y0JpZ0ludCB8IFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIH07CisKKyAgICAgICAgaWYg
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX2luYykgeworICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICAgICAgICAgIGhhbmRsZShi
eXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubV9zcmNEc3QsIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfZGVjKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgICAgICAgICAgaGFuZGxlKGJ5dGVjb2RlLm1f
c3JjRHN0LCBieXRlY29kZS5tX3NyY0RzdCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9uZWdhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BOZWdhdGU+KCk7CisgICAgICAgICAgICBoYW5kbGUoYnl0ZWNvZGUubV9kc3Qs
IGJ5dGVjb2RlLm1fb3BlcmFuZCwgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2Ugb3BfcG93OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUu
bV9yaHMpOworICAgICAgICBpZiAoIShsZWZ0ICAmJiByaWdodCkpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBpZiAoaXNCaWdJbnRTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc0JpZ0ludFNw
ZWN1bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3Bl
Y0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNCeXRlY29kZU51bWJlclNwZWN1
bGF0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
c2V0RHN0VHlwZShieXRlY29kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY0JpZ0ludCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBv
cF9yc2hpZnQ6IHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBbJl0gKGF1dG8gYnl0ZWNvZGUpIHsK
KyAgICAgICAgICAgIGF1dG8gbGVmdCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9saHMpOworICAgICAg
ICAgICAgYXV0byByaWdodCA9IHR5cGVGb3IoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAg
aWYgKCEobGVmdCAmJiByaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBpZiAoaXNGdWxsTnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24obGVmdCkgJiYgaXNGdWxs
TnVtYmVyT3JCb29sZWFuU3BlY3VsYXRpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc2V0
RHN0VHlwZShieXRlY29kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RHN0VHlwZUZyb21WYWx1ZVByb2ZpbGUo
Ynl0ZWNvZGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCkgPT0gb3BfbHNoaWZ0KQorICAgICAgICAgICAgaGFuZGxlKGluc3RydWN0aW9uLT5hczxPcExz
aGlmdD4oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZShpbnN0cnVjdGlvbi0+
YXM8T3BSc2hpZnQ+KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9wX3Rv
X3ByaW1pdGl2ZTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
VG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5cGVGb3IoYnl0ZWNvZGUubV9z
cmMpOworCisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGlmICh0eXBlICYgU3BlY09iamVjdCkgeworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29k
ZSwgU3BlY1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHNldERzdFR5cGUoYnl0ZWNvZGUsIHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIG9wX3RvX3Byb3BlcnR5X2tleTogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgICAgIGF1dG8gdHlwZSA9IHR5
cGVGb3IoYnl0ZWNvZGUubV9zcmMpOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKCEodHlwZSAmIH4oU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wpKSkg
eworICAgICAgICAgICAgc2V0RHN0VHlwZShieXRlY29kZSwgdHlwZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXREc3RUeXBlKGJ5dGVjb2RlLCBTcGVjU3RyaW5n
IHwgU3BlY1N5bWJvbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ugb3BfY2F0
Y2g6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigp
OworICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgaWYgKCFi
dWZmZXIpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IE1heWJlIHdlIHNob3VsZCBkbyBhIHRoaW5n
IHdoZXJlIHdlIGRvbid0IG1lcmdlIHcvIGJsb2NrcyBhZnRlciB0aGlzIGlmIHdlJ3ZlIG5ldmVy
IGV4ZWN1dGVkIHNvIHRoZXkgaGF2ZSBwcm9wZXIgcHJvZmlsaW5nLgorICAgICAgICAgICAgYnJl
YWs7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQgY2Fu
IGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIH0KKyAgICAgICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7
CisgICAgICAgICAgICBzZXRUeXBlKHByb2ZpbGUubV9vcGVyYW5kLCBwcm9maWxlLm1fcHJlZGlj
dGlvbik7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIG9w
X2VudGVyOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fY29kZUJsb2NrLT5udW1WYXJzKCkpOyArK2kpCisgICAgICAgICAgICBzZXRUeXBl
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5PigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX25ld19hcnJheV9idWZmZXI6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3QXJyYXlCdWZmZXI+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpLCBTcGVjQXJyYXkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVJlc3Q+KCksIFNwZWNBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0
aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKSwgU3BlY0FycmF5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfb2Jq
ZWN0OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKSwg
U3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9yZXNvbHZlX3Nj
b3BlOgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgZG8gYmV0dGVyIGJhc2VkIG9u
IHJlc29sdmVkIHR5cGUgaWYgd2Ugd2FudAorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcFJlc29sdmVTY29wZT4oKSwgU3BlY09iamVjdCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlVGhpcz4oKSwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9pbl9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeVZhbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9wcm9taXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVByb21pc2U+KCksIFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9zdHJjYXQ6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0
PigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXdfZnVuYzoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jPigpLCBTcGVjRnVu
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdGdW5jRXhwPigpLCBTcGVjRnVuY3Rp
b24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpLCBT
cGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3Jf
ZnVuY19leHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJh
dG9yRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9uZXdfYXN5bmNfZnVuYzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBc3luY0Z1bmM+KCksIFNwZWNGdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfbmV3X2FzeW5jX2Z1bmNfZXhwOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcE5ld0FzeW5jRnVuY0V4cD4oKSwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpLCBTcGVjRnVuY3Rpb24p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19l
eHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXN5bmNHZW5lcmF0
b3JGdW5jRXhwPigpLCBTcGVjRnVuY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X3B1c2hfd2l0aF9zY29wZToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BQ
dXNoV2l0aFNjb3BlPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKSwgU3BlY09iamVjdE90
aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgorICAg
ICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpLCBTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJh
YmxlTGVuZ3RoPigpLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5PigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHk+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKSwgU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51
bWVyYXRvcj4oKSwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3BuYW1lOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOgor
ICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5h
bWU+KCksIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8
T3BUb0luZGV4U3RyaW5nPigpLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfcmVzdF9sZW5ndGg6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UmVzdExlbmd0aD4oKSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3Rp
bmdGdW5jRGVjbEluRXZhbD4oKSwgU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfc2NvcGU6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0U2NvcGU+KCksIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpLCBTcGVjRGlyZWN0QXJndW1lbnRz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoK
KyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVu
dHM+KCksIFNwZWNTY29wZWRBcmd1bWVudHMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKSwgU3BlY09iamVjdE90aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseToKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVBcmd1bWVudHNCdXR0ZXJmbHk+
KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25ld19wcm9t
aXNlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE5ld1Byb21pc2U+KCks
IFNwZWNQcm9taXNlT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jcmVhdGVf
YXN5bmNfZ2VuZXJhdG9yOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZUFzeW5jR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIG9wX2NyZWF0ZV9nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1
Y3Rpb24tPmFzPE9wQ3JlYXRlR2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25ld19nZW5lcmF0b3I6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wTmV3R2VuZXJhdG9yPigpLCBTcGVjT2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OgorICAgICAgICBzZXREc3RU
eXBlKGluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCksIFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3NwcmVhZDoKKyAgICAgICAgc2V0RHN0VHlwZShp
bnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCksIFNwZWNDZWxsT3RoZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3UmVnZXhwPigpLCBTcGVjUmVnRXhwT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9lcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BF
cT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25lcToKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCksIFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlw
ZShpbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVj
dGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9sZXNzOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcExl
c3M+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9sZXNzZXE6
CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wTGVzc2VxPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICAgICAgc2V0
RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BHcmVhdGVyPigpLCBTcGVjQm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgICAgICBzZXREc3RUeXBlKGlu
c3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2JlbG93OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcEJlbG93PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
YmVsb3dlcToKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BCZWxvd2VxPigp
LCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfZW1wdHk6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc191bmRlZmluZWQ6Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCks
IFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pc191bmRlZmluZWRf
b3JfbnVsbDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5l
ZE9yTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lz
X2Jvb2xlYW46CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFu
PigpLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfbnVtYmVy
OgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpLCBTcGVj
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfYmlnX2ludDoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc0JpZ0ludD4oKSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICAgICAgc2V0RHN0
VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZl9pc19vYmplY3Q6CisgICAgICAgIHNldERzdFR5
cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNPYmplY3Q+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90eXBlb2ZfaXNfZnVuY3Rpb246CisgICAgICAgIHNl
dERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNGdW5jdGlvbj4oKSwgU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2lzX2NvbnN0cnVjdG9yOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCksIFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgICAgICBzZXRE
c3RUeXBlKGluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgICAgICBzZXREc3RUeXBlKGluc3Ry
dWN0aW9uLT5hczxPcE5lcU51bGw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF90b19zdHJpbmc6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFz
PE9wVG9TdHJpbmc+KCksIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X25vdDoKKyAgICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pZGVudGl0eV93aXRoX3Byb2Zp
bGU6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcElkZW50aXR5
V2l0aFByb2ZpbGU+KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gc3Rh
dGljX2Nhc3Q8U3BlY3VsYXRlZFR5cGU+KGJ5dGVjb2RlLm1fdG9wUHJvZmlsZSkgPDwgMzIgfCBz
dGF0aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV9ib3R0b21Qcm9maWxlKTsKKyAg
ICAgICAgc2V0VHlwZShieXRlY29kZS5tX3NyY0RzdCwgc3BlY3VsYXRpb24pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOgorICAgICAg
ICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpLCBT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAg
ICAgICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpLCBTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaW5zdGFuY2VvZl9jdXN0b206Cisg
ICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKSwg
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICAg
ICAgc2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCksIFNwZWNTdHJpbmdJZGVu
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6CisgICAg
ICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCksIFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9pbl9ieV9pZDoKKyAgICAgICAg
c2V0RHN0VHlwZShpbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCksIFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgICAgIHNldERzdFR5cGUo
aW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHNldERzdFR5cGUoaW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlWYWw+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIG9wX2lzX2NhbGxhYmxlOgorICAgICAgICBzZXREc3RUeXBlKGluc3RydWN0aW9uLT5h
czxPcElzQ2FsbGFibGU+KCksIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhf
dGhpczoKKyAgICBjYXNlIG9wX2NoZWNrX3RkejoKKyAgICBjYXNlIG9wX3B1dF9pbnRlcm5hbF9m
aWVsZDoKKyAgICBjYXNlIG9wX25vcDoKKyAgICBjYXNlIG9wX3N1cGVyX3NhbXBsZXJfYmVnaW46
CisgICAgY2FzZSBvcF9zdXBlcl9zYW1wbGVyX2VuZDoKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZToKKyAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgor
ICAgIGNhc2Ugb3BfY2hlY2tfdHJhcHM6CisgICAgY2FzZSBvcF91bnJlYWNoYWJsZToKKyAgICBj
YXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ug
b3BfZGVidWc6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBv
cF9zZXRfZnVuY3Rpb25fbmFtZToKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOgorICAg
IGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6CisgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNz
b3JfcHJvcGVydHk6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2ptcDoKKyAg
ICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251
bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qdW5kZWZpbmVkX29yX251
bGw6CisgICAgY2FzZSBvcF9qbnVuZGVmaW5lZF9vcl9udWxsOgorICAgIGNhc2Ugb3BfamVxOgor
ICAgIGNhc2Ugb3BfanN0cmljdGVxOgorICAgIGNhc2Ugb3Bfam5lcToKKyAgICBjYXNlIG9wX2pu
c3RyaWN0ZXE6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAg
Y2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9q
bmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAg
ICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfamJlbG93OgorICAgIGNhc2Ugb3Bf
amJlbG93ZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1t
OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
CisgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKKyAgICBjYXNlIG9wX3Byb2ZpbGVf
dHlwZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVy
X3NldHRlcl9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFsOgorICAgIGNhc2Ug
b3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIG9wX2NyZWF0
ZV9nZW5lcmF0b3JfZnJhbWVfZW52aXJvbm1lbnQ6CisgICAgY2FzZSBvcF95aWVsZDogCisgICAg
Y2FzZSBvcF93aWRlMTY6CisgICAgY2FzZSBvcF93aWRlMzI6CisgICAgY2FzZSB3YXNtX2Z1bmN0
aW9uX3Byb2xvZ3VlX25vX3RsczoKKyAgICBjYXNlIGxsaW50X2V2YWxfcHJvbG9ndWU6CisgICAg
Y2FzZSBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2No
ZWNrOgorICAgIGNhc2UgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoK
KyAgICBjYXNlIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OgorICAgIGNhc2UgbGxpbnRfdGhy
b3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3Rocm93X2R1cmlu
Z19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5l
OgorICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2Ug
bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
aW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVj
a3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBmdXp6ZXJfcmV0dXJuX2Vhcmx5
X2Zyb21fbG9vcF9oaW50OgorICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0
aW9uOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBv
cF9wdXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9yZXR1
cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugd2Fz
bV9mdW5jdGlvbl9wcm9sb2d1ZToKKyAgICBjYXNlIGxsaW50X3Byb2dyYW1fcHJvbG9ndWU6Cisg
ICAgY2FzZSB3YXNtX3RyYW1wb2xpbmVfd2FzbV9jYWxsX2luZGlyZWN0X25vX3RsczoKKyAgICBj
YXNlIG5vcm1hbF9vc3JfZXhpdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3Rf
Y2FsbF9yZXR1cm5fdmFsdWU6CisgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0
aW9uOgorICAgIGNhc2Ugb3BfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoK
KyAgICBjYXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF9ldmFsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jYWxsOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
aXRlcmF0b3JfbmV4dDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoK
KyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgorICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF90YWlsX2NhbGxfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3Ry
dWN0X3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnc19zbG93Ogor
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfdmFyYXJnc19zbG93OgorICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdzoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdzoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9ldmFsX3Nsb3c6CisgICAgY2FzZSBqc190cmFtcG9saW5l
X29wX2l0ZXJhdG9yX25leHRfc2xvdzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0
b3Jfb3Blbl9zbG93OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eV9jaGVja191bnRhZzoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2tfdGFnOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9s
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3VudGFnOgorICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrX3Rh
ZzoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNtX2NhbGw6CisgICAgY2FzZSB3YXNtX3Ry
YW1wb2xpbmVfd2FzbV9jYWxsX25vX3RsczoKKyAgICBjYXNlIHdhc21fdHJhbXBvbGluZV93YXNt
X2NhbGxfaW5kaXJlY3Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCit2b2lkIEpJVDo6cnVuUHJlZGljdGlvblByb3BhZ2F0aW9uKCkKK3sKKyAgICBt
X2dyYXBoID0gV1RGOjptYWtlVW5pcXVlPEJ5dGVjb2RlR3JhcGg+KG1fY29kZUJsb2NrLCBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworICAgIG1fcHJlZGljdGlvbnNBdEhlYWQucmVzaXpl
KG1fZ3JhcGgtPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByZWRpY3Rp
b25zQXRIZWFkLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZWRpY3Rpb25zQXRIZWFkW2ldID0g
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGUsIHRydWU+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgMCwgMCwgU3BlY05vbmUpOworCisg
ICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5iYXNl
bGluZUFsdGVybmF0aXZlKCktPm1fbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLT5mb3JFYWNo
VmFsdWVQcm9maWxlKFsmXSAoVmFsdWVQcm9maWxlJiBwcm9maWxlLCBib29sKSB7CisgICAgICAg
ICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICB9
KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmZvckVhY2hDYXRjaFByb2ZpbGUobG9ja2VyLCBbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciYgYnVmZmVyKSB7CisgICAgICAg
ICAgICBidWZmZXIuZm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGxvY2tlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlQobV9ncmFwaC0+YXQoMCkuaXNFbnRyeUJsb2NrKCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgtPmF0KDApLmluZGV4KCkgPT0gMCk7CisKKyAgICBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
Z0xuKCk7CisKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICBWYWx1
ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQo
YXJnKTsKKyAgICAgICAgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpID0gcHJv
ZmlsZS5tX3ByZWRpY3Rpb247CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAg
IGRhdGFMb2coImFyZyIsIGFyZywgIiA9ICIpOworICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9u
KFdURjo6ZGF0YUZpbGUoKSwgbV9wcmVkaWN0aW9uc0F0SGVhZFswXS5hcmd1bWVudChhcmcpKTsK
KyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcmVk
aWN0aW9uc0F0SGVhZFswXS5jYWxsZWUoKSA9IFNwZWNGdW5jdGlvbjsKKworICAgIGJvb2wgY2hh
bmdlZDsKKyAgICBib29sIGNvbXB1dGVVc2VDb3VudHMgPSB0cnVlOworICAgIG1fdXNlQ291bnRz
LnJlc2l6ZShtX2dyYXBoLT5zaXplKCkpOworICAgIGRvIHsKKyAgICAgICAgLy8gT09QUzogQXQg
bGVhc3QgZG8gREZTLiBNYXliZSByZXZlcnNlIHBvc3Qgb3JkZXIuCisgICAgICAgIC8vIE9PUFM6
IENvbnNpZGVyIGltcGFjdCBvZiBob3cgd2UgdHJhdmVyc2UgZ3JhcGggb24gYWxnb3JpdGhtJ3Mg
cmVzdWx0cy4KKyAgICAgICAgLy8gSXMgYSBzaW1wbGUgREZTIGVub3VnaCBmb3IgdGhlIGJ5dGVj
b2RlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgaW5wdXQgb3BlcmFuZCB0eXBlcz8KKyAg
ICAgICAgLy8gT09QUzogSG93IGlzIGNhdGNoIHRyZWF0ZWQgYXMgYSBibG9jayB0aGF0J3MgcmVh
Y2hhYmxlIGlmIHdlIGRvIERGUy4uLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
IGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6ICptX2dyYXBoKSB7CisgICAgICAgICAg
ICBtX2N1cnJlbnRQcmVkaWN0aW9ucyA9IG1fcHJlZGljdGlvbnNBdEhlYWRbYmxvY2suaW5kZXgo
KV07CisKKyAgICAgICAgICAgIGlmIChjb21wdXRlVXNlQ291bnRzKQorICAgICAgICAgICAgICAg
IG1fdXNlQ291bnRzW2Jsb2NrLmluZGV4KCldID0gT3BlcmFuZHM8dW5zaWduZWQsIHRydWU+KG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSwgMCwgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNpemUoKSwgMCk7CisKKyAgICAgICAgICAg
IGlmICghYmxvY2suaXNFbnRyeUJsb2NrKCkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2sudG90YWxMZW5ndGgo
KTsgKSB7CisgICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCB7
IGkgKyBibG9jay5sZWFkZXJPZmZzZXQoKSB9OworICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICAgICAgICAgICAgICBzdGVwT3Zl
ckluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbXB1dGVVc2VDb3VudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY291
bnQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV91c2VDb3VudHNbYmxvY2suaW5kZXgoKV0ub3BlcmFuZChvcGVyYW5kKSArPSAx
OworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm51bWJlck9m
Q2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3Ry
dWN0aW9uLCBjaGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KG1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIGNoZWNrcG9pbnQsIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGkgKz0gY3VycmVudEluc3Ry
dWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvciA6IGJsb2NrLnN1Y2Nlc3NvcnMoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIHN1Y2Nlc3Nvck9wZXJhbmRzID0gbV9wcmVkaWN0aW9uc0F0
SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jdXJyZW50UHJlZGljdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihzdWNjZXNzb3JPcGVyYW5kc1tpXSwgbV9jdXJyZW50
UHJlZGljdGlvbnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29t
cHV0ZVVzZUNvdW50cyA9IGZhbHNlOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgaWYg
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2dyYXBoLT5kdW1wKG1fY29k
ZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fcHJlZGljdGlvbnNBdEhlYWQp
OworfQogCiB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVu
Y3Rpb24pCiB7CkBAIC02Nyw3ICs5NjMsNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlv
blB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK0pJVDo6SklUKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUeXBlIGNvbXBpbGVUeXBlLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgm
dm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAg
LCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6
IDApCkBAIC03NSw2ICs5NzEsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCCiAgICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0
UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgLCBtX3VzZUxPTChjb21waWxlVHlwZSA9PSBDb21w
aWxlVHlwZTo6TE9MKQogewogfQogCkBAIC0xMzcsMTEgKzEwMzQsMTggQEAgdm9pZCBKSVQ6OmFz
c2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgICAgICsrbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2U7IFwKICAgICBORVhUX09QQ09ERShuYW1lKQogCi0jZGVmaW5lIERFRklORV9TTE9X
X09QKG5hbWUpIFwKKyNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSwgZHN0LCB0eXBlKSBcCiAg
ICAgY2FzZSBvcF8jI25hbWU6IHsgXAogICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0
YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCi0gICAgICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoXyMjbmFtZSk7IFwKLSAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7IFwKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpwcmludExPTFNsb3dQYXRoQ2FsbHMoKSkpIHsgXAorICAgICAgICAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIGNiTmFtZTsgXAorICAgICAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5kdW1wKGNiTmFtZSk7IFwKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gY2JOYW1lLnRv
U3RyaW5nKCkgKyAiIGJjIyIgKyBTdHJpbmc6Om51bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpICsgIiAiICsgb3Bjb2RlTmFtZXNbY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpXTsg
XAorICAgICAgICAgICAgICAgIHByb2JlKFs9XShQcm9iZTo6Q29udGV4dCYpIHsgXAorICAgICAg
ICAgICAgICAgICAgICBzbG93Q2FsbENhc2VSYW4oa2V5KTsgXAorICAgICAgICAgICAgICAgIH0p
OyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgIGVtaXRTbG93T3Aoc2xvd19wYXRoXyMj
bmFtZSwgY3VycmVudEluc3RydWN0aW9uLCBkc3QsIHR5cGUpOyBcCiAgICAgICAgIH0gXAogICAg
ICAgICBORVhUX09QQ09ERV9JTl9NQUlOKG9wXyMjbmFtZSk7IFwKICAgICB9CkBAIC0xNTYsMjYg
KzEwNjAsNjAgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAKICNkZWZp
bmUgREVGSU5FX1NMT1dDQVNFX09QKG5hbWUpIFwKICAgICBjYXNlIG5hbWU6IHsgXAotICAgICAg
ICBlbWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsgXAorICAgICAgICBl
bWl0U2xvd18jI25hbWUoY3VycmVudEluc3RydWN0aW9uLCBzbG93Q2FzZSk7IFwKICAgICAgICAg
TkVYVF9PUENPREUobmFtZSk7IFwKICAgICB9CiAKICNkZWZpbmUgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgZW1pdFNsb3dD
YXNlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHNsb3dfcGF0aF8jI25hbWUpOyBcCisg
ICAgICAgIGVtaXRTbG93Q2FzZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNu
YW1lKTsgXAorICAgICAgICBpZiAodXNlTE9MKCkgJiYgc2xvd0Nhc2UucmVzdWx0KSB7IFwKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3dDYXNlLnJlc3VsdC5pc0dQUigpKTsgXAorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvd0Nhc2UuZHN0LmlzVmFsaWQoKSk7IFwKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Nhc2UuZHN0LCBzbG93Q2FzZS5yZXN1
bHQuZ3ByKCkpOyBcCisgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShvcF8jI25hbWUp
OyBcCiAgICAgfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBTbG93UGF0aEZ1bmN0aW9uIHN0dWIpCit2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93UGF0aEZ1bmN0aW9uIHN0
dWIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzdHViKTsKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCitzdGF0aWMgdm9pZCBzbG93Q2FsbENhc2VSYW4oU3RyaW5n
IGtleSkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCB1
aW50NjRfdD4+IHNsb3dDYXNlczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIHNsb3dDYXNlcy5jb25z
dHJ1Y3QoKTsKKyAgICB9KTsKKworICAgIGF1dG8mIG1hcCA9IHNsb3dDYXNlcy5nZXQoKTsKKyAg
ICB1aW50NjRfdCB2YWx1ZSA9ICsrbWFwLmFkZChrZXksIDApLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBpZiAoKHZhbHVlICUgMTAwMCkgPT0gMCkKKyAgICAgICAgZGF0YUxvZ0xuKGtleSwgIjogIiwg
dmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBzbG93Q2FzZVJhbihTdHJpbmcga2V5KQoreworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIHVpbnQ2NF90Pj4gc2xv
d0Nhc2VzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgc2xvd0Nhc2VzLmNvbnN0cnVjdCgpOworICAg
IH0pOworCisgICAgYXV0byYgbWFwID0gc2xvd0Nhc2VzLmdldCgpOworICAgIHVpbnQ2NF90IHZh
bHVlID0gKyttYXAuYWRkKGtleSwgMCkuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgodmFsdWUg
JSAxMDAwKSA9PSAwKQorICAgICAgICBkYXRhTG9nTG4oa2V5LCAiOiAiLCB2YWx1ZSk7Cit9CisK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKKyAgICBpZiAodXNlTE9MKCkp
CisgICAgICAgIHJ1blByZWRpY3Rpb25Qcm9wYWdhdGlvbigpOworCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKICAgICAKQEAgLTIzMSwyMCArMTE2OSw4OSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwotICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAgIHVu
c2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xvd0Nhc2VzLnNpemUoKTsKLSAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRl
Y29kZUluZGV4Lm9mZnNldCgpID4gMCkgewotICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFs
bCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCi0g
ICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIg
aGl0LgotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgLy8gT09QUworCisgICAg
ICAgIG1fc3RhdGVBdEVuZC5yZXNpemUobV9ncmFwaC0+c2l6ZSgpKTsKKyAgICAgICAgbV9wcmVk
ZWNlc3NvcnMucmVzaXplKG1fZ3JhcGgtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYmxv
Y2sgOiAqbV9ncmFwaCkgeworICAgICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8
IGJsb2NrLmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBmb3IgKGF1dG8gc3VjY2Vzc29ySW5kZXggOiBibG9jay5zdWNjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fcHJlZGVjZXNzb3JzW3N1Y2Nlc3NvckluZGV4XS5jb250YWlu
cyhibG9jay5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkZWNlc3NvcnNbc3Vj
Y2Vzc29ySW5kZXhdLmFwcGVuZChibG9jay5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQorICAgIH0KIAotICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIGxhYmVsKCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAg
IEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrIHx8IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAobV9jdXJy
ZW50QmxvY2stPmxlYWRlck9mZnNldCgpICsgbV9jdXJyZW50QmxvY2stPnRvdGFsTGVuZ3RoKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJS
ZWcgYWxsb2MgYXQgZW5kIG9mIGJiIyIsIG1fY3VycmVudEJsb2NrLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGR1bXBSZWdhbGxvY1N0YXRlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
c3RhdGVBdEVuZFttX2N1cnJlbnRCbG9jay0+aW5kZXgoKV0pOworICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlQXRFbmRbbV9jdXJyZW50QmxvY2stPmluZGV4KCldID0gV1RGTW92ZShtX2N1cnJl
bnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
U3RhdGUgPSB7IH07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgt
PmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPmlzRW50
cnlCbG9jaygpICYmICFtX2N1cnJlbnRCbG9jay0+aXNFeGl0QmxvY2soKSk7CisKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IG1fcHJl
ZGVjZXNzb3JzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzZXRTdGF0ZUZyb21QcmlvckJsb2NrcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBpZiAocHJlZGVjZXNzb3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbGxQcmVkZWNlc3NvcnNTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICAoIW1fc3RhdGVBdEVuZFtwcmVkZWNlc3Nvcl0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWxsUHJlZGVjZXNzb3JzU2V0ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsbFByZWRlY2Vzc29yc1NldCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldFN0YXRlRnJvbVByaW9yQmxvY2tzID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gKm1fc3RhdGVBdEVuZFtwcmVkZWNlc3NvcnMuZmly
c3QoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLm1lcmdlKCptX3N0YXRlQXRFbmRb
cHJlZGVjZXNzb3JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXNldFN0YXRlRnJvbVByaW9yQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIG1fY3VycmVudFByZWRpY3Rpb25zID0gbV9wcmVkaWN0aW9uc0F0SGVhZFttX2N1
cnJlbnRCbG9jay0+aW5kZXgoKV07CisKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRVc2VDb3Vu
dHMgPSBXVEZNb3ZlKG1fdXNlQ291bnRzW21fY3VycmVudEJsb2NrLT5pbmRleCgpXSk7CisgICAg
ICAgICAgICAgICAgbV9zcGlsbENhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzU2xvd0Nhc2VzU2l6ZSA9IG1fc2xv
d0Nhc2VzLnNpemUoKTsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVj
b2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgeworICAgICAgICAg
ICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVy
ZSBhcmUgdW5yZWFjaGFibGUuCisgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBj
cmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgorICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
LCBsYWJlbCgpKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucy5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBBU1NF
UlQoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworCisgICAgICAgIG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKIAogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2J5dGVj
b2RlSW5kZXggPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIg
dHdpY2UuCkBAIC0yNzgsNDYgKzEyODUsNDMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoKQogICAgICAgICB9CiAjZW5kaWYKIAorCisgICAgICAgIGlmIChmYWxzZSkgeworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJSZWcgYWxsb2MgYmVmb3JlIGJjIyIsIG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSk7CisgICAgICAgICAgICBkdW1wUmVnYWxsb2NTdGF0ZSgpOworICAgICAgICAg
ICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
Ci0gICAgICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1df
T1AobGVzcykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQotICAgICAgICBERUZJTkVf
U0xPV19PUChncmVhdGVyKQotICAgICAgICBERUZJTkVfU0xPV19PUChncmVhdGVyZXEpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKGlzX2NhbGxhYmxlKQotICAgICAgICBERUZJTkVfU0xPV19PUChp
c19jb25zdHJ1Y3RvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQotICAgICAgICBE
RUZJTkVfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQotICAgICAgICBERUZJTkVfU0xPV19PUCh0
eXBlb2ZfaXNfZnVuY3Rpb24pCi0gICAgICAgIERFRklORV9TTE9XX09QKHN0cmNhdCkKLSAgICAg
ICAgREVGSU5FX1NMT1dfT1AocHVzaF93aXRoX3Njb3BlKQotICAgICAgICBERUZJTkVfU0xPV19P
UChjcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0
X2J5X3ZhbF93aXRoX3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV9pZF93aXRo
X3RoaXMpCi0gICAgICAgIERFRklORV9TTE9XX09QKHB1dF9ieV92YWxfd2l0aF90aGlzKQotICAg
ICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xf
aW5fZXZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZGVmaW5lX2RhdGFfcHJvcGVydHkpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKLSAgICAgICAg
REVGSU5FX1NMT1dfT1AodW5yZWFjaGFibGUpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRocm93
X3N0YXRpY19lcnJvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3By
ZWFkKQotICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJh
YmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAg
ICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCi0gICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfc2NvcGVkX2FyZ3VtZW50cykKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25l
ZF9hcmd1bWVudHMpCi0gICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9hcmd1bWVudHNfYnV0
dGVyZmx5KQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfcmVzdCkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoY3JlYXRlX3Byb21pc2UpCi0gICAgICAgIERFRklORV9TTE9XX09QKG5ld19w
cm9taXNlKQotICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZ2VuZXJhdG9yKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVf
U0xPV19PUChuZXdfZ2VuZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCisgICAg
ICAgIERFRklORV9TTE9XX09QKGluX2J5X3ZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCkubV9kc3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChpc19j
b25zdHJ1Y3RvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ29uc3RydWN0b3I+KCkubV9k
c3QsIFNwZWNCb29sZWFuKQorICAgICAgICBERUZJTkVfU0xPV19PUChzdHJjYXQsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCkubV9kc3QsIFNwZWNTdHJpbmcpCisgICAgICAgIERF
RklORV9TTE9XX09QKHB1c2hfd2l0aF9zY29wZSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
c2hXaXRoU2NvcGU+KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eVZhbFdpdGhUaGlzPigpLm1fZHN0LCBTcGVjSGVhcFRvcCkKKyAgICAgICAgREVGSU5FX1NMT1df
T1AocHV0X2J5X2lkX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVyKCksIFNwZWNOb25lKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChwdXRfYnlfdmFsX3dpdGhfdGhpcywgVmlydHVhbFJlZ2lzdGVy
KCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChyZXNvbHZlX3Njb3BlX2Zvcl9o
b2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCkubV9kc3QsIFNwZWNIZWFwVG9wKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfZGF0YV9wcm9wZXJ0eSwgVmlydHVhbFJlZ2lz
dGVyKCksIFNwZWNOb25lKQorICAgICAgICBERUZJTkVfU0xPV19PUChkZWZpbmVfYWNjZXNzb3Jf
cHJvcGVydHksIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAgREVGSU5FX1NM
T1dfT1AodW5yZWFjaGFibGUsIFZpcnR1YWxSZWdpc3RlcigpLCBTcGVjTm9uZSkKKyAgICAgICAg
REVGSU5FX1NMT1dfT1AodGhyb3dfc3RhdGljX2Vycm9yLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgU3Bl
Y05vbmUpCisgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCwgY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKS5tX2RzdCwgU3BlY0Fy
cmF5KQorICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyLCBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlCdWZmZXI+KCkubV9kc3QsIFNwZWNBcnJheSkKKyAgICAg
ICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ByZWFk
PigpLm1fZHN0LCBTcGVjQ2VsbE90aGVyKQorICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51
bWVyYWJsZV9wcm9wZXJ0eSwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQ
cm9wZXJ0eT4oKS5tX2RzdCwgU3BlY0Jvb2xlYW4pCisgICAgICAgIERFRklORV9TTE9XX09QKGdl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVy
dHlFbnVtZXJhdG9yPigpLm1fZHN0LCBTcGVjQ2VsbCkKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
dG9faW5kZXhfc3RyaW5nLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4o
KS5tX2RzdCwgU3BlY1N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVEaXJlY3RBcmd1bWVu
dHM+KCkubV9kc3QsIFNwZWNEaXJlY3RBcmd1bWVudHMpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
U2NvcGVkQXJndW1lbnRzPigpLm1fZHN0LCBTcGVjU2NvcGVkQXJndW1lbnRzKQorICAgICAgICBE
RUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKS5tX2RzdCwgU3BlY09iamVjdE90aGVyKQor
ICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXJndW1lbnRzX2J1dHRlcmZseSwgY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseT4oKS5tX2RzdCwgU3Bl
Y0NlbGxPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Jlc3QsIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fZHN0LCBTcGVjQXJyYXkpCisgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlUHJvbWlzZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklO
RV9TTE9XX09QKG5ld19wcm9taXNlLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UHJvbWlz
ZT4oKS5tX2RzdCwgU3BlY1Byb21pc2VPYmplY3QpCisgICAgICAgIERFRklORV9TTE9XX09QKGNy
ZWF0ZV9nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+
KCkubV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2FzeW5jX2dlbmVyYXRvciwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUFzeW5jR2Vu
ZXJhdG9yPigpLm1fZHN0LCBTcGVjT2JqZWN0T3RoZXIpCisgICAgICAgIERFRklORV9TTE9XX09Q
KG5ld19nZW5lcmF0b3IsIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdHZW5lcmF0b3I+KCku
bV9kc3QsIFNwZWNPYmplY3RPdGhlcikKKyAgICAgICAgREVGSU5FX1NMT1dfT1AocG93LCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpLm1fZHN0LCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBT
cGVjQmlnSW50KQogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9P
UChvcF9iaXRub3QpCkBAIC0zOTgsNyArMTQwMiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9zdXBlcl9zYW1wbGVyX2JlZ2luKQog
ICAgICAgICBERUZJTkVfT1Aob3Bfc3VwZXJfc2FtcGxlcl9lbmQpCiAgICAgICAgIERFRklORV9P
UChvcF9sc2hpZnQpCisjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgREVGSU5FX09QKG9wX21vZCkK
KyNlbHNlCisgICAgICAgIERFRklORV9TTE9XX09QKG1vZCwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE1vZD4oKS5tX2RzdCwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludCkKKyNlbmRp
ZgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQog
ICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtNDc0LDEwICsxNDgyLDUzIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19z
aGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKQogCisgICAgICAgIERFRklORV9PUChvcF9pc19jYWxsYWJsZSkKKyAgICAg
ICAgREVGSU5FX09QKG9wX3R5cGVvZl9pc19mdW5jdGlvbikKKyAgICAgICAgREVGSU5FX09QKG9w
X3R5cGVvZl9pc19vYmplY3QpCisgICAgICAgIERFRklORV9PUChvcF90eXBlb2YpCisKKyAgICAg
ICAgREVGSU5FX09QKG9wX2xlc3MpCisgICAgICAgIERFRklORV9PUChvcF9sZXNzZXEpCisgICAg
ICAgIERFRklORV9PUChvcF9ncmVhdGVyKQorICAgICAgICBERUZJTkVfT1Aob3BfZ3JlYXRlcmVx
KQorCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisKKyAgICAg
ICAgREVGSU5FX09QKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQorCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICB9CiAKKyAgICAgICAgaWYgKG1fdXNlTE9MKSB7CisgICAgICAgICAgICBzdGVwT3Zlckluc3Ry
dWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAgICAgICAgIGF1dG8gY291bnQgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQm
IGNvdW50ZXIgPSBtX2N1cnJlbnRVc2VDb3VudHMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAtLWNvdW50ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFjb3VudGVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE9PUFM6IERvIHRoaXMgbGF6aWx5IGluIHNsb3cgcGF0aCBjcmVh
dGlvbi9zcGlsbEZvckNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy9tX3NwaWxsQ2FuZGlkYXRl
cy5hcHBlbmQob3BlcmFuZCk7CisKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IGdwckZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvYmJlcihncHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBm
cHJGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwciAh
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIoZnBy
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gY3VycmVudElu
c3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAg
ICAgICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9jb2RlQmxvY2ssIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgY291bnQpOworICAgICAgICAgICAgICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChtX2NvZGVCbG9jaywgY3VycmVudEluc3RydWN0aW9uLCBj
aGVja3BvaW50LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBp
ZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRl
Y29kZU9mZnNldCwgIjogIiwgbV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01
MTYsMTQgKzE1NjcsMjUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgcmFyZUNhc2VQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxSYXJlQ2FzZVByb2ZpbGU+
KG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRl
Y29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwotICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dD
YXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CisgICAg
Zm9yIChTbG93Q2FzZSYgc2xvd0Nhc2UgOiBtX3Nsb3dDYXNlcykgeworICAgICAgICBtX2J5dGVj
b2RlSW5kZXggPSBzbG93Q2FzZS5ieXRlY29kZUluZGV4OwogCiAgICAgICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKIAotICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzBdLmxpbmsodGhpcyk7CisKKyAgICAgICAgLy9C
eXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworCisgICAgICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpwcmludExPTFNsb3dQYXRocygpKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRT
dHJlYW0gbmFtZTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKG5hbWUpOworICAgICAg
ICAgICAgU3RyaW5nIGtleSA9IG5hbWUudG9TdHJpbmcoKSArICIgYmMjIiArIFN0cmluZzo6bnVt
YmVyKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgKyAiICIgKyBvcGNvZGVOYW1lc1tjdXJyZW50
SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCldOworICAgICAgICAgICAgcHJvYmUoWz1dKFByb2JlOjpD
b250ZXh0JikgeworICAgICAgICAgICAgICAgIHNsb3dDYXNlUmFuKGtleSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJl
Q2FzZVByb2ZpbGUgPSBudWxscHRyOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KQpAQCAtNTgwLDcgKzE2NDIsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5zdHJpY3RlcSkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2NoZWNrX3RyYXBzKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9kKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfbmVnYXRlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbmVxKQpAQCAtNTk5
LDYgKzE2NjAsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2l0ZXJhdG9yX25leHQpCiAKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfU0xPV19PUChtb2QpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AodW5zaWduZWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlu
YykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZGVjKQpAQCAtNjMxLDE5ICsxNjk1
LDM0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKGNoZWNrX3RkeikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodG9f
cHJvcGVydHlfa2V5KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpc19jYWxsYWJs
ZSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodHlwZW9mX2lzX2Z1bmN0aW9uKQor
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2ZfaXNfb2JqZWN0KQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0eXBlb2YpCisKKyAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AobGVzcykKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobGVzc2Vx
KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChncmVhdGVyKQorICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChncmVhdGVyZXEpCisKKyAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AoY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCisKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJB
dCAiLCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4i
KTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dD
YXNlcy5lbmQoKSB8fCBmaXJzdFRvLm9mZnNldCgpICE9IGl0ZXItPnRvLm9mZnNldCgpLCAiTm90
IGVub3VnaCBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJzdFRvLm9mZnNldCgpID09IChpdGVyIC0gMSkt
PnRvLm9mZnNldCgpLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2Vu
LiIpOworICAgICAgICAvLyBPT1BTOgorICAgICAgICAvL1JFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRShpdGVyID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8ub2Zmc2V0KCkgIT0gaXRl
ci0+dG8ub2Zmc2V0KCksICJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29k
ZWdlbi4iKTsKKyAgICAgICAgLy9SRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUby5v
ZmZzZXQoKSA9PSAoaXRlciAtIDEpLT50by5vZmZzZXQoKSwgIlRvbyBtYW55IGp1bXBzIGxpbmtl
ZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29s
dXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKIAorICAgICAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IHNvbWUgc2xvdyBwYXRocyBhbHJlYWR5
IGRvIHRoaXMsIHNvIHdlIHNob3VsZG4ndCByZXBlYXQgaXQuCisgICAgICAgICAgICByZXN0b3Jl
RnJvbVNsb3dQYXRoU2F2ZVBsYW4oc2xvd0Nhc2UpOworICAgICAgICB9CisKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2U7CiAgICAgfQpAQCAtNjg4LDYgKzE3NjcsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZVdp
dGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9
IHRydWU7IC8vIE9PUFM6IGhlbHBmdWwgZm9yIHJ1bm5pbmcgTE9MIHcvb3V0IERGRy4KICAgICAK
ICAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CiAgICAgY2FzZSBHbG9iYWxD
b2RlOgpAQCAtNzc4LDYgKzE4NTksODUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2lu
ZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJl
bCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCks
IFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyAgICBp
ZiAoIW1fZXhpdEp1bXBzLmlzRW1wdHkoKSkgeworICAgICAgICBKdW1wTGlzdCBleGl0Q29tbW9u
OworICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBtX2V4aXRKdW1wcykgeworICAgICAgICAgICAg
YXV0byBieXRlY29kZUluZGV4ID0gZXhpdC5maXJzdDsKKyAgICAgICAgICAgIGF1dG8ganVtcHMg
PSBleGl0LnNlY29uZDsKKyAgICAgICAgICAgIGp1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hMT0xPU1JFeGl0KCkpKSB7CisgICAg
ICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gcHJpbnRTdHJlYW07CisgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmR1bXAocHJpbnRTdHJlYW0pOworICAgICAgICAgICAgICAgIENTdHJp
bmcgc3RyID0gcHJpbnRTdHJlYW0udG9DU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgc3RyLmJ1
ZmZlcigpLT5yZWYoKTsgLy8gbGVhayBpdC4KKyAgICAgICAgICAgICAgICBwcmludChzdHIuZGF0
YSgpLCAiIC0+IGV4aXQgYXQgYmMjIiwgIGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksICJcbiIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludCgpOyAvLyBPT1BTOiBoYW5kbGUgY2hlY2tw
b2ludCBleGl0cy4KKworICAgICAgICAgICAgbW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAg
ICAgICAgICAgZXhpdENvbW1vbi5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IEFTU0VSVCghZXhpdENvbW1vbi5lbXB0eSgpKTsKKyAgICAgICAgZXhpdENvbW1vbi5saW5rKHRo
aXMpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIgPT0g
cmVnVDQpOworICAgICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMo
KS5jb250YWlucyhudW1iZXJUYWdSZWdpc3RlcikpOyAvLyBUaGUgY29kZSBiZWxvdyByZWxpZXMg
b24gdGhpcyBiZWluZyBhIGNhbGxlZSBzYXZlLgorCisgICAgICAgIGF1dG8gb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UobV9jb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpOworICAgICAgICBtb3ZlKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSLCBudW1i
ZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUgdGhpcyBhcm91bmQgdGhlIGNhbGwgc2luY2UgdGhlIExM
SW50IFBDIHJlZ2lzdGVyIGlzIGEgdGVtcC4KKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4obV92bSwgbV9jb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpOworICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbigqbV92bSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25P
U1JXcml0ZUJhcnJpZXIpKSwgbm9uQXJnR1BSMCk7CisgICAgICAgIGNhbGwobm9uQXJnR1BSMCwg
T3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgbW92ZShudW1iZXJUYWdSZWdpc3RlciwgTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcpLCBudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCkpLCByZWdUMyk7CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihyZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkpLCBy
ZWdUMik7CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOworICAgICAgICBz
dG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENv
dW50ZXIoKSkpOworCisgICAgICAgIGF1dG8gc2tpcEpldHRpc29uID0gYnJhbmNoMzIoQmVsb3cs
IHJlZ1QyLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPmV4aXRDb3VudFRocmVzaG9sZEZvclJl
b3B0aW1pemF0aW9uKCkpKTsKKyAgICAgICAgbW92ZShMTEludDo6UmVnaXN0ZXJzOjpwY0dQUiwg
bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlIHRoaXMgYXJvdW5kIHRoZSBjYWxsIHNpbmNlIHRo
ZSBMTEludCBQQyByZWdpc3RlciBpcyBhIHRlbXAuCisgICAgICAgIHNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdyk+KG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24oKm1fdm0pOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVHJpZ2dl
ckxPTFJlb3B0aW1pemF0aW9uTm93KSksIG5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKG5vbkFy
Z0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIG1vdmUobnVtYmVyVGFnUmVnaXN0ZXIs
IExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TnVtYmVyVGFnKSwgbnVtYmVyVGFnUmVnaXN0ZXIpOworICAgICAgICBza2lwSmV0dGlz
b24ubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vaml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAvL0Fzc2VtYmx5SGVscGVyczo6SnVtcCByZW9wdGltaXplTm93ID0gaml0
LmJyYW5jaDMyKAorICAgICAgICAvLyAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JF
cXVhbCwKKyAgICAgICAgLy8gICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSksCisgICAgICAgIC8v
ICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8T1NSRXhpdFB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6bm9ybWFs
T1NSRXhpdFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKS5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigp
OworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKQorICAgICAgICAvLyAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpjaGVja3BvaW50T1NSRXhp
dFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKKyAgICAgICAgLy9lbHNlIAorICAgICAgICAvLyAg
ICBkZXN0aW5hdGlvbiA9IExMSW50Ojpub3JtYWxPU1JFeGl0VHJhbXBvbGluZVRodW5rKCkuY29k
ZSgpOworICAgICAgICBtb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7
CisgICAgICAgIG1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7CisgICAg
ICAgIG1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGZhckp1bXAoR1BSSW5m
bzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOworCisKKyAgICAgICAgLy8gT09QUzogCisgICAgICAg
IC8vIDEuIFN0b3JlIExMSW50IGNvZGVibG9jayB0byBjYWxsIGZyYW1lCisgICAgICAgIC8vIDIu
IGpldHRpc29uIGlmIHdlIGV4Y2NlZWQgZXhpdCBjb3VudAorICAgICAgICAvLyAzLiB3cml0ZSBi
YXJyaWVyIExMSW50IGNvZGUgYmxvY2sKKyAgICB9CisKICAgICBzdGFja092ZXJmbG93Lmxpbmso
dGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCkBAIC04MjgsOCArMTk4OCwxMCBAQCB2b2lk
IEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgaWYgKFVOTElLRUxZKGNv
bXB1dGVDb21waWxlVGltZXMoKSkpIHsKICAgICAgICAgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKIAotICAgICAgICBpZiAoT3B0aW9uczo6cmVwb3J0VG90YWxDb21waWxlVGltZXMoKSkK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKICAgICAg
ICAgICAgIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsKKyAgICAg
ICAgICAgIHRvdGFsQmFzZWxpbmVDb21waWxlcy5leGNoYW5nZUFkZCgxKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICBpZiAoVU5MSUtFTFkocmVwb3J0Q29tcGlsZVRpbWVzKCkpKSB7CiAgICAgICAg
IENTdHJpbmcgY29kZUJsb2NrTmFtZSA9IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spOwpAQCAtOTY3
LDcgKzIxMjksNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIAogICAgIENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0
Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3Ig
JXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgdXNlTE9MKCkg
PyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAg
CiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklU
LT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwpAQCAt
OTc4LDcgKzIxNDAsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICBt
X2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6Okxh
dGVTaHJpbmspOwogICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAg
YWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
cmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgdXNlTE9MKCkgPyBKSVRUeXBlOjpMT0xKSVQgOiBKSVRU
eXBlOjpCYXNlbGluZUpJVCkpKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4i
LCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dl
ZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsK
QEAgLTEwNjQsNiArMjIyNiw5IEBAIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21w
aWxlVGkKICAgICAgICAgcmVzdWx0LmFkZCgiRlRMIChCMykgQ29tcGlsZSBUaW1lIiwgdG90YWxG
VExCM0NvbXBpbGVUaW1lKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKyAgICAgICAgcmVzdWx0LmFkZCgiTnVtYmVyIEJhc2VsaW5lIENvbXBp
bGVzIiwgU2Vjb25kcyh0b3RhbEJhc2VsaW5lQ29tcGlsZXMubG9hZCgpKSk7CisgICAgICAgIHJl
c3VsdC5hZGQoIk51bWJlciBERkcgQ29tcGlsZXMiLCBTZWNvbmRzKHRvdGFsREZHQ29tcGlsZXMu
bG9hZCgpKSk7CisgICAgICAgIHJlc3VsdC5hZGQoIk51bWJlciBGVEwgQ29tcGlsZXMiLCBTZWNv
bmRzKHRvdGFsRlRMQ29tcGlsZXMubG9hZCgpKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC0xMDcyLDYgKzIyMzcsOTUxIEBAIFNlY29uZHMgSklUOjp0b3RhbENvbXBpbGVUaW1l
KCkKIHsKICAgICByZXR1cm4gdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21w
aWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWU7CiB9Cit2b2lkIEpJVDo6c3BlY3VsYXRlKEV4
aXRLaW5kLCBKdW1wIGp1bXApCit7CisgICAgLy8gT09QUzogaGFuZGxlIEV4aXRLaW5kLgorICAg
IGlmICghbV9leGl0SnVtcHMuc2l6ZSgpIHx8IG1fZXhpdEp1bXBzLmxhc3QoKS5maXJzdCAhPSBt
X2J5dGVjb2RlSW5kZXgpCisgICAgICAgIG1fZXhpdEp1bXBzLmFwcGVuZCh7IG1fYnl0ZWNvZGVJ
bmRleCwgSnVtcExpc3QoKSB9KTsKKyAgICBtX2V4aXRKdW1wcy5sYXN0KCkuc2Vjb25kLmFwcGVu
ZChqdW1wKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJhbms+CitWZWN0b3I8UmVnLCAzMj4g
Y29tcHV0ZUFsbG93ZWRSZWdzKCkKK3sKKyAgICAvLyBPT1BTOiBnZXQgYSBiZXR0ZXIgc3Rvcnkg
aGVyZS4gV2hlbiB3ZSBhbGxvY2F0ZSBhIGRpZmZlcmVudCBjb2RlYmxvY2sgZm9yIHRoaXMKKyAg
ICAvLyBjb21waWxlIGluIHRoZSBmdXR1cmUsIHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZG8g
c2hlbmFuaWdhbnMgbGlrZSB0aGlzCisgICAgLy8gT09QUzogVGhpcyBpcyBzb3J0YSBob2tleSBm
b3IgYXJtLi4uCisKKyAgICBWZWN0b3I8UmVnLCAzMj4gYWxsb3dlZDsKKyAgICBSZWdpc3RlclNl
dCBhbGxvd2VkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEJhbms6Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgYXV0byByZWcgPSBCYW5r
Ojp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoYWxsb3dlZENhbGxlZVNhdmVzLmNvbnRhaW5z
KHJlZykpCisgICAgICAgICAgICBhbGxvd2VkLmFwcGVuZChyZWcpOworICAgIH0KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFuazo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAg
ICAgICBhdXRvIHJlZyA9IEJhbms6OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghYWxsQ2Fs
bGVlU2F2ZXMuY29udGFpbnMocmVnKSkKKyAgICAgICAgICAgIGFsbG93ZWQuYXBwZW5kKHJlZyk7
CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkOworfQorCitzdGF0aWMgVmVjdG9yPFJlZywgMzI+
JiBhbGxvd2VkR1BScygpCit7CisgICAgLy8gT09QUzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUu
IFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQgY29kZWJsb2NrIGZvciAgdGhpcworICAgIC8v
IGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVu
YW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BTOiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBh
cm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPFJlZywgMzI+PiByZXN1bHQ7CisgICAgc3RkOjpjYWxs
X29uY2Uob25jZUtleSwgW10geworICAgICAgICByZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxv
d2VkUmVnczxHUFJJbmZvPigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpOwor
fQorCitzdGF0aWMgVmVjdG9yPFJlZywgMzI+JiBhbGxvd2VkRlBScygpCit7CisgICAgLy8gT09Q
UzogZ2V0IGEgYmV0dGVyIHN0b3J5IGhlcmUuIFdoZW4gd2UgYWxsb2NhdGUgYSBkaWZmZXJlbnQg
Y29kZWJsb2NrIGZvciAgdGhpcworICAgIC8vIGNvbXBpbGUgaW4gdGhlIGZ1dHVyZSwgd2UgcHJv
YmFibHkgZG9uJ3QgbmVlZCB0byBkbyBzaGVuYW5pZ2FucyBsaWtlIHRoaXMKKyAgICAvLyBPT1BT
OiBUaGlzIGlzIHNvcnRhIGhva2V5IGZvciBhcm0uLi4KKworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlS2V5OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPFJlZywg
MzI+PiByZXN1bHQ7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBy
ZXN1bHQuY29uc3RydWN0KGNvbXB1dGVBbGxvd2VkUmVnczxGUFJJbmZvPigpKTsKKyAgICB9KTsK
KyAgICByZXR1cm4gcmVzdWx0LmdldCgpOworfQorCit2b2lkIEpJVDo6YXNzZXJ0Tm9TbG93UGF0
aCgpCit7CisgICAgLy8gT09QUzogdGhpcyBicmVha3MgY3VycmVudGx5IHcvIHdyaXRlQmFycmll
ci4gQnV0IGdlbmVyYWxseSBzZWVtcyBsaWtlIGEgbmljZSBhc3NlcnQuIE1heWJlIHdlIGNhbiBm
aWd1cmUgc29tZXRoaW5nIG91dC4uLgorCisgICAgLy9pZiAobV9zbG93Q2FzZXMuc2l6ZSgpICYm
IG1fc2xvd0Nhc2VzLmxhc3QoKS5ieXRlY29kZUluZGV4ID09IG1fYnl0ZWNvZGVJbmRleCkKKyAg
ICAvLyAgICBDUkFTSCgpOworfQorCitHUFJSZWcgSklUOjphbGxvY2F0ZUdQUihHUFJSZWcgaGlu
dCkKK3sKKyAgICBhc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBpZiAoaGludCAhPSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkpIHsKKyAgICAg
ICAgICAgIGlmIChyZWcuZ3ByKCkgIT0gaGludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAg
ICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZyByZWcgOiBh
bGxvd2VkR1BScygpKSB7CisgICAgICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUo
cmVnKTsKKyAgICAgICAgaWYgKCFyZWdWYWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAg
cmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5ncHIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAg
ICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3VudCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVn
KTsKKyAgICAgICAgICAgIHJlZ1ZhbHVlLmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZWcuZ3ByKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitGUFJSZWcgSklUOjphbGxvY2F0ZUZQUigpCit7CisgICAg
YXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgLy8gT09QUzogZml4IGR1cGxpY2F0aW9uIHcvIGFs
bG9jYXRlR1BSKCkKKyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkRlBScygpKSB7CisgICAgICAg
IGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+cmVnVmFsdWUocmVnKTsKKyAgICAgICAgaWYgKCFyZWdW
YWx1ZS5pc0FsbG9jYXRlZCkgeworICAgICAgICAgICAgcmVnVmFsdWUuaXNBbGxvY2F0ZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlZy5mcHIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsKKyAgICAgICAgYXV0byYgcmVnVmFs
dWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBpZiAoIXJlZ1ZhbHVlLmxvY2tDb3Vu
dCkgeworICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAgICAgICAgICAgIHJlZ1ZhbHVl
LmlzQWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZWcuZnByKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIEpJVDo6Y2xvYmJlckltcGwoUmVnIHJlZykKK3sKKyAgICAvLyBPT1BTOiBhZGQgc29tZSBj
b25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlcmUgdGhhdCBib3RoIHNpZGVzIG9mIHRoZSBtYXAgYWdy
ZWUuCisKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgaWYg
KHJlZ1ZhbHVlLmlzQWxsb2NhdGVkKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gcmVnVmFsdWUub3BlcmFuZDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKSB7Cisg
ICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgYWxsb2NlZFJlZ0Zv
ck9wZXJhbmQob3BlcmFuZCkuZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBhbGxvY2VkUmVnRm9yT3BlcmFuZChvcGVyYW5kKS5mcHIgPSBJbnZh
bGlkRlBSUmVnOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgY2xlYXIgdGhl
IGlzQWxsb2NhdGVkL2xvY2tDb3VudCB2YWx1ZXMgYmVjYXVzZSB3ZSBtaWdodAorICAgICAgICAv
LyBoYXZlIGNvZGUgdGhhdCBkb2VzOgorICAgICAgICAvLyAtIFZhbHVlT3BlcmFuZCgpCisgICAg
ICAgIC8vIC0gc3BpbGxGb3JDYWxsCisgICAgICAgIC8vIC0gflZhbHVlT3BlcmFuZCgpCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEFuZCB3aGVuIHdlIGRlYWxsb2NhdGUgc29tZXRoaW5nIGxpa2Ug
dGhlIFZhbHVlT3BlcmFuZCwgd2Ugd2lsbCBlbmQgdXAgZnVsbHkKKyAgICAgICAgLy8gZGVhbGxv
Y2F0aW5nIHRoZSByZWdpc3RlciwgZXNzZW50aWFsbHkgZGVncmFkaW5nIGl0IGludG8gYSB0ZW1w
LgorICAgICAgICAvLyBPdGhlcndpc2UsIHdoZW4gflZhbHVlT3BlcmFuZCgpIHJ1bnMgYW5kIGNh
bGxzIHVubG9jaygpLCB3ZSdkIGVuZCB1cCBpbgorICAgICAgICAvLyBhbiBpbmNvbnNpc3RlbnQg
c3RhdGUuCisgICAgICAgIHJlZ1ZhbHVlLm9wZXJhbmQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgaWYgKCFyZWdWYWx1ZS5sb2NrQ291bnQpCisgICAgICAgICAgICByZWdWYWx1ZS5pc0Fs
bG9jYXRlZCA9IGZhbHNlOworICAgIH0KKworfQorCit2b2lkIEpJVDo6c3BpbGxGb3JDYWxsSW1w
bCgpCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpOworICAgIGF1dG8gZG9DbG9iYmVyID0gWyZdIChhdXRvIHNldCkgewor
ICAgICAgICBmb3IgKGF1dG8gcmVnIDogc2V0KSB7CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNh
dmVzLmNvbnRhaW5zKHJlZykpCisgICAgICAgICAgICAgICAgY2xvYmJlckltcGwocmVnKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBkb0Nsb2JiZXIoYWxsb3dlZEdQUnMoKSk7CisgICAgZG9D
bG9iYmVyKGFsbG93ZWRGUFJzKCkpOworfQorCitTYXZlUGxhbiBKSVQ6OnNsb3dQYXRoU2F2ZVBs
YW4oKQoreworICAgIC8vIE9PUFM6IHRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyCisgICAgU2F2
ZVBsYW4gcmVzdWx0OworICAgIGF1dG8gYXBwZW5kSWZOZWVkZWQgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgYXV0byYgcmVnVmFsdWUgPSB0aGlzLT5yZWdWYWx1ZShyZWcpOworICAgICAgICBp
ZiAocmVnVmFsdWUuaXNBbGxvY2F0ZWQgJiYgcmVnVmFsdWUub3BlcmFuZC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZWcsIHJlZ1ZhbHVlLm9w
ZXJhbmQsIHByb3ZlblR5cGUocmVnVmFsdWUub3BlcmFuZCkpKTsKKyAgICB9OworCisgICAgZm9y
IChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYXBwZW5kSWZOZWVkZWQocmVnKTsK
KyAgICBmb3IgKFJlZyByZWcgOiBhbGxvd2VkR1BScygpKQorICAgICAgICBhcHBlbmRJZk5lZWRl
ZChyZWcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2lsZW50U3BpbGxSZWNvcmQgSklU
OjpzaWxlbnRTcGlsbEJlZm9yZUNhbGwoR1BSUmVnIHRvSWdub3JlLCBGUFJSZWcgdG9JZ25vcmVG
UFIpCit7CisgICAgLy8gT09QUzogdGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAgICBTaWxl
bnRTcGlsbFJlY29yZCByZXN1bHQ7CisgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgYXV0byBh
cHBlbmRJZk5lZWRlZCA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBhdXRvJiByZWdWYWx1ZSA9
IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlmIChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkg
eworICAgICAgICAgICAgaWYgKHJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5zYXZlUGxhbi5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlZywgcmVnVmFs
dWUub3BlcmFuZCwgcHJvdmVuVHlwZShyZWdWYWx1ZS5vcGVyYW5kKSkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5zcGlsbGVkUmVnaXN0ZXJzLmFkZChyZWcpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRGUFJzKCkpIHsK
KyAgICAgICAgaWYgKHJlZy5mcHIoKSAhPSB0b0lnbm9yZUZQUikKKyAgICAgICAgICAgIGFwcGVu
ZElmTmVlZGVkKHJlZyk7CisgICAgfQorICAgIGZvciAoUmVnIHJlZyA6IGFsbG93ZWRHUFJzKCkp
IHsKKyAgICAgICAgaWYgKHJlZy5ncHIoKSAhPSB0b0lnbm9yZSkKKyAgICAgICAgICAgIGFwcGVu
ZElmTmVlZGVkKHJlZyk7CisgICAgfQorCisgICAgcmVzdWx0LnN0YWNrU2l6ZUZvclNwaWxsID0g
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCp0aGlzLCByZXN1bHQuc3BpbGxlZFJlZ2lzdGVycywgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBKSVQ6OnNpbGVudEZpbGxBZnRlckNhbGwoY29uc3QgU2lsZW50U3BpbGxSZWNv
cmQmIHJlY29yZCkKK3sKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdp
c3RlcnNGcm9tU3RhY2tGb3JDYWxsKCp0aGlzLCByZWNvcmQuc3BpbGxlZFJlZ2lzdGVycywgeyB9
LCByZWNvcmQuc3RhY2tTaXplRm9yU3BpbGwsIDApOworICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4o
UmVnKCksIFZpcnR1YWxSZWdpc3RlcigpLCByZWNvcmQuc2F2ZVBsYW4pOworfQorCitzdGF0aWMg
dm9pZCBhZGRMb2FkQ291bnQodWludDY0X3QgY291bnQpCit7CisgICAgc3RhdGljIHVpbnQ2NF90
IGNvdW50ZXI7CisgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgKytjb3VudGVyOworICAgICAgICBpZiAoY291bnRlciAlIDEwMDAwID09IDApCisgICAg
ICAgICAgICBkYXRhTG9nTG4oIlJ1bnRpbWUgbG9hZCBjb3VudDogIiwgY291bnRlcik7CisgICAg
fQorfQorCit2b2lkIEpJVDo6cmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJiBzYXZlUGxhbikK
K3sKKyAgICB1aW50NjRfdCBsb2FkQ291bnQgPSAwOworICAgIGZvciAoYXV0byYgdHVwbGUgOiBz
YXZlUGxhbikgeworICAgICAgICBSZWcgcmVnID0gc3RkOjpnZXQ8MD4odHVwbGUpOworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHN0ZDo6Z2V0PDE+KHR1cGxlKTsKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZSA9IHN0ZDo6Z2V0PDI+KHR1cGxlKTsKKworICAgICAg
ICBpZiAocmVnID09IHJlZ1RvSWdub3JlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmIChvcGVyYW5kID09IG9wZXJhbmRUb0lnbm9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCwgcmVnLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlQocmVnLmlzRlBSKCkpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBzY3JhdGNo
UmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghYWxsb3dlZEdQUnMoKS5jb250YWlucyhz
Y3JhdGNoKSk7CisgICAgICAgICAgICBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
ZGlzYWxsb3dTY3JhdGNoKCp0aGlzKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCwgc2NyYXRjaCk7CisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KHByb3ZlblR5cGUpKQorICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0
Y2gsIHJlZy5mcHIoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0J5dGVjb2RlRG91YmxlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZSkpCisgICAgICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRj
aCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgeyBzY3JhdGNoIH0s
IEhhdmVUYWdSZWdpc3RlcnMpOworCisgICAgICAgICAgICAgICAgdW5ib3hEb3VibGUoc2NyYXRj
aCwgc2NyYXRjaCwgcmVnLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisKKyAgICAgICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgcmVnLmZwcigpKTsKKworICAgICAgICAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgICsrbG9hZENvdW50OworICAgIH0KKworICAgIGlmIChmYWxzZSAmJiBsb2FkQ291bnQpIHsK
KyAgICAgICAgcHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAgIGFkZExv
YWRDb3VudChsb2FkQ291bnQpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjpy
ZXN0b3JlRnJvbVNsb3dQYXRoU2F2ZVBsYW4oY29uc3QgU2xvd0Nhc2UmIHNsb3dDYXNlKQorewor
ICAgIHJlc3RvcmVGcm9tU2F2ZVBsYW4oc2xvd0Nhc2UucmVzdWx0LCBzbG93Q2FzZS5kc3QsIHNs
b3dDYXNlLnNhdmVQbGFuKTsKK30KKwordm9pZCBKSVQ6OnNldEludDMyKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIC8vIE9PUFM6IEFkZCBkZWJ1ZyBhc3NlcnQg
dG9wIGJpdHMgYXJlIHplcm9kCisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZShncHIpLmlz
QWxsb2NhdGVkKTsKKyAgICBib3hJbnQzMihncHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVU
YWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKwor
ICAgIHdpbGxEZWYob3BlcmFuZCk7CisgICAgYXNzaWduUmVnKGdwciwgb3BlcmFuZCk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSA9IFNwZWNJbnQzMk9ubHk7Cit9CisKK3ZvaWQgSklUOjpzZXRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEZQUlJlZyBmcHIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVnVmFsdWUoZnByKS5pc0FsbG9jYXRlZCk7CisgICAgR1BSVGVtcCB0ZW1wIHsg
KnRoaXMgfTsKKyAgICBHUFJSZWcgZ3ByID0gdGVtcC5ncHIoKTsKKworICAgIGJveERvdWJsZShm
cHIsIEpTVmFsdWVSZWdzIHsgZ3ByIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgIHN0b3JlNjQo
Z3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKworICAgIHdpbGxEZWYob3BlcmFuZCk7IC8vIE9P
UFM6IFZhbGlkYXRlIHRoYXQgZm9yIGJ5dGVjb2RlcyAoL2NoZWNrcG9pbnRzPykgdGhhdCBkZWYs
IHdpbGxEZWYgd2FzIGNhbGxlZC4KKyAgICBhc3NpZ25SZWcoZ3ByLCBvcGVyYW5kKTsKKyAgICBh
c3NpZ25SZWcoZnByLCBvcGVyYW5kKTsKKworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgPSBTcGVj
Qnl0ZWNvZGVEb3VibGU7Cit9CisKK3ZvaWQgSklUOjpzZXRKU1ZhbHVlKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBHUFJSZWcgZ3ByKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1ZhbHVlKGdw
cikuaXNBbGxvY2F0ZWQpOworICAgIHN0b3JlNjQoZ3ByLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsK
KyAgICB3aWxsRGVmKG9wZXJhbmQpOworICAgIGFzc2lnblJlZyhncHIsIG9wZXJhbmQpOworfQor
Cit2b2lkIEpJVDo6bG9jayhSZWcgcmVnKQoreworICAgIGF1dG8mIHJlZ1ZhbHVlID0gdGhpcy0+
cmVnVmFsdWUocmVnKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWdWYWx1ZS5pc0FsbG9jYXRlZCk7
CisgICAgKytyZWdWYWx1ZS5sb2NrQ291bnQ7Cit9CisKK3ZvaWQgSklUOjp1bmxvY2soUmVnIHJl
ZykKK3sKKyAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVnVmFsdWUuaXNBbGxvY2F0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKHJl
Z1ZhbHVlLmxvY2tDb3VudCk7CisgICAgLS1yZWdWYWx1ZS5sb2NrQ291bnQ7CisgICAgaWYgKCFy
ZWdWYWx1ZS5sb2NrQ291bnQgJiYgIXJlZ1ZhbHVlLm9wZXJhbmQuaXNWYWxpZCgpKQorICAgICAg
ICByZWdWYWx1ZSA9IHsgfTsKK30KKworSklUOjpHUFJUZW1wOjpHUFJUZW1wKEpJVCYgaml0LCBH
UFJSZWcgaGludCkKKyAgICA6IG1faml0KGppdCkKK3sKKyAgICBpZiAoaGludCAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBncHIoaGludCk7Cit9CisKK0dQUlJlZyBKSVQ6OkdQUlRlbXA6Omdw
cihHUFJSZWcgaGludCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAg
bV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUihoaW50KTsKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsK
KworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpHUFJUZW1wOjp+R1BSVGVtcCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgbV9qaXQudW5s
b2NrKG1fZ3ByKTsKK30KKworSklUOjpGUFJUZW1wOjpGUFJUZW1wKEpJVCYgaml0KQorICAgIDog
bV9qaXQoaml0KQoreworfQorCitGUFJSZWcgSklUOjpGUFJUZW1wOjpmcHIoKQoreworICAgIGlm
IChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gbV9mcHI7CisKKyAgICBt
X2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisKKyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBS
KCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7CisKKyAgICByZXR1cm4gbV9mcHI7Cit9CisKK0pJ
VDo6RlBSVGVtcDo6fkZQUlRlbXAoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZnByICE9IElu
dmFsaWRGUFJSZWcpOworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0pJVDo6SW50MzJP
cGVyYW5kOjpJbnQzMk9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6OkludDMyT3BlcmFuZDo6fklu
dDMyT3BlcmFuZCgpCit7CisgICAgbV9qaXQudW5sb2NrKG1fZ3ByKTsKK30KKworR1BSUmVnIEpJ
VDo6SW50MzJPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7
CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAg
IGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9qaXQu
YXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2sobV9n
cHIpOworCisgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29w
ZXJhbmQpKSkKKyAgICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElm
Tm90SW50MzIobV9ncHIpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
SW50MzJPbmx5KTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6Q2VsbE9wZXJhbmQ6OkNl
bGxPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICA6IG1faml0
KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQUlJlZyByZWcgPSBtX2pp
dC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBncHIoKTsKK30KKworSklUOjpDZWxsT3BlcmFuZDo6fkNlbGxPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpDZWxsT3BlcmFu
ZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0
dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0aCgpOworCisgICAgR1BSUmVn
IHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fZ3ByID0gcmVnOworICAgIGVsc2UgeworICAgICAgICBt
X2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAgIG1faml0LmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobV9vcGVyYW5kLCBtX2dwcik7CisgICAgICAgIG1faml0LmdwckZvck9wZXJhbmQo
bV9vcGVyYW5kKSA9IG1fZ3ByOworICAgICAgICBtX2ppdC5yZWdWYWx1ZShtX2dwcikub3BlcmFu
ZCA9IG1fb3BlcmFuZDsKKyAgICB9CisKKyAgICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgIGlm
ICghaXNDZWxsU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAg
ICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Q2VsbChtX2dwciwg
SGF2ZVRhZ1JlZ2lzdGVycykpOworCisgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNw
ZWNDZWxsQ2hlY2spOworICAgIHJldHVybiBtX2dwcjsKK30KKworSklUOjpOb3RDZWxsT3BlcmFu
ZDo6Tm90Q2VsbE9wZXJhbmQoSklUJiBqaXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJl
ZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQorCitKSVQ6Ok5vdENlbGxPcGVyYW5kOjp+Tm90
Q2VsbE9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJlZyBK
SVQ6Ok5vdENlbGxPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRo
KCk7CisKKyAgICBHUFJSZWcgcmVnID0gbV9qaXQuZ3ByRm9yT3BlcmFuZChtX29wZXJhbmQpOwor
ICAgIGlmIChyZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9ncHIgPSByZWc7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxsb2NhdGVHUFIoKTsKKyAgICAgICAgbV9q
aXQuZW1pdEdldFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQsIG1fZ3ByKTsKKyAgICAgICAgbV9q
aXQuYXNzaWduUmVnKG1fZ3ByLCBtX29wZXJhbmQpOworICAgIH0KKworICAgIG1faml0LmxvY2so
bV9ncHIpOworCisgICAgaWYgKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5kKSAmIFNwZWNDZWxs
Q2hlY2spCisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZkNl
bGwobV9ncHIsIEhhdmVUYWdSZWdpc3RlcnMpKTsKKworICAgIG1faml0LmZpbHRlclR5cGUobV9v
cGVyYW5kLCB+U3BlY0NlbGxDaGVjayk7CisgICAgcmV0dXJuIG1fZ3ByOworfQorCitKSVQ6OlZh
bHVlT3BlcmFuZDo6VmFsdWVPcGVyYW5kKEpJVCYgaml0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQoreworICAgIEdQ
UlJlZyByZWcgPSBtX2ppdC5ncHJGb3JPcGVyYW5kKG1fb3BlcmFuZCk7CisgICAgaWYgKHJlZyAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBncHIoKTsKK30KKworSklUOjpWYWx1ZU9wZXJhbmQ6
On5WYWx1ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2dwcik7Cit9CisKK0dQUlJl
ZyBKSVQ6OlZhbHVlT3BlcmFuZDo6Z3ByKCkKK3sKKyAgICBpZiAobV9ncHIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgcmV0dXJuIG1fZ3ByOworCisgICAgbV9qaXQuYXNzZXJ0Tm9TbG93UGF0
aCgpOworCisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVyYW5kKTsK
KyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgbV9ncHIgPSByZWc7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCwgbV9ncHIpOworCisgICAg
ICAgIG1faml0LmFzc2lnblJlZyhtX2dwciwgbV9vcGVyYW5kKTsKKyAgICB9CisKKyAgICBtX2pp
dC5sb2NrKG1fZ3ByKTsKKyAgICByZXR1cm4gbV9ncHI7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFu
ZDo6RG91YmxlT3BlcmFuZChKSVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
OiBtX2ppdChqaXQpCisgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVn
ID0gbV9qaXQuZnByRm9yT3BlcmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgZnByKCk7Cit9CisKK0pJVDo6RG91YmxlT3BlcmFuZDo6fkRvdWJs
ZU9wZXJhbmQoKQoreworICAgIG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6
OkRvdWJsZU9wZXJhbmQ6OmZwcigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcp
CisgICAgICAgIHJldHVybiBtX2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsK
KworICAgIHsKKyAgICAgICAgRlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBt
X2ZwciA9IHJlZzsKKyAgICAgICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAg
cmV0dXJuIG1fZnByOworICAgICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVl
T3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICBHUFJUZW1wIHRlbXAgeyBtX2ppdCB9
OworICAgIEdQUlJlZyBncHIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworCisgICAgbV9mcHIgPSBtX2ppdC5hbGxvY2F0ZUZQUigpOworICAg
IG1faml0LmxvY2sobV9mcHIpOworCisgICAgaWYgKCFpc0J5dGVjb2RlRG91YmxlU3BlY3VsYXRp
b24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkgeworICAgICAgICBtX2ppdC5zcGVjdWxh
dGUoQmFkVHlwZSwgbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyB7IGdwciB9LCBIYXZl
VGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5i
cmFuY2hJZk5vdERvdWJsZUtub3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyBncHIgfSwgSGF2ZVRh
Z1JlZ2lzdGVycykpOworICAgICAgICBtX2ppdC5maWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKKyAgICB9CisKKyAgICBtX2ppdC51bmJveERvdWJsZShncHIsIHRlbXBH
UFIsIG1fZnByKTsKKyAgICBtX2ppdC5hc3NpZ25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisKKyAg
ICByZXR1cm4gbV9mcHI7Cit9CisKK0pJVDo6TnVtYmVyT3BlcmFuZDo6TnVtYmVyT3BlcmFuZChK
SVQmIGppdCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX29wZXJhbmQob3BlcmFuZCkKK3sKKyAgICBGUFJSZWcgcmVnID0gbV9qaXQuZnByRm9yT3Bl
cmFuZChtX29wZXJhbmQpOworICAgIGlmIChyZWcgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAg
ZnByKCk7Cit9CisKK0pJVDo6TnVtYmVyT3BlcmFuZDo6fk51bWJlck9wZXJhbmQoKQoreworICAg
IG1faml0LnVubG9jayhtX2Zwcik7Cit9CisKK0ZQUlJlZyBKSVQ6Ok51bWJlck9wZXJhbmQ6OmZw
cigpCit7CisgICAgaWYgKG1fZnByICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiBt
X2ZwcjsKKworICAgIG1faml0LmFzc2VydE5vU2xvd1BhdGgoKTsKKworICAgIHsKKyAgICAgICAg
RlBSUmVnIHJlZyA9IG1faml0LmZwckZvck9wZXJhbmQobV9vcGVyYW5kKTsKKyAgICAgICAgaWYg
KHJlZyAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ZwciA9IHJlZzsKKyAgICAg
ICAgICAgIG1faml0LmxvY2sobV9mcHIpOworICAgICAgICAgICAgcmV0dXJuIG1fZnByOworICAg
ICAgICB9CisgICAgfQorCisgICAgVmFsdWVPcGVyYW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBt
X29wZXJhbmQgfTsKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJhbmQuZ3ByKCk7CisK
KyAgICBtX2ZwciA9IG1faml0LmFsbG9jYXRlRlBSKCk7CisgICAgbV9qaXQubG9jayhtX2Zwcik7
CisKKyAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5cGUobV9vcGVyYW5k
KSkpCisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlR1BSLCBtX2Zwcik7
CisgICAgZWxzZSBpZiAoaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKG1faml0LnByb3ZlblR5
cGUobV9vcGVyYW5kKSkpIHsKKyAgICAgICAgR1BSVGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgICAgIG1faml0LnVuYm94RG91
YmxlKHZhbHVlR1BSLCB0ZW1wR1BSLCBtX2Zwcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BS
VGVtcCB0ZW1wIHsgbV9qaXQgfTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OworICAgICAgICBhdXRvIGlzSW50MzIgPSBtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSwgSGF2ZVRhZ1JlZ2lzdGVycyk7CisKKyAgICAgICAgaWYgKCFpc0J5dGVj
b2RlTnVtYmVyU3BlY3VsYXRpb24obV9qaXQucHJvdmVuVHlwZShtX29wZXJhbmQpKSkKKyAgICAg
ICAgICAgIG1faml0LnNwZWN1bGF0ZShCYWRUeXBlLCBtX2ppdC5icmFuY2hJZk5vdERvdWJsZUtu
b3duTm90SW50MzIoSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9LCBIYXZlVGFnUmVnaXN0ZXJzKSk7
CisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHZhbHVlR1BSLCB0ZW1wR1BSLCBtX2Zwcik7Cisg
ICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBpc0ludDMyLmxpbmso
Jm1faml0KTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVHUFIsIG1f
ZnByKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB9CisKKyAgICBtX2ppdC5m
aWx0ZXJUeXBlKG1fb3BlcmFuZCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICBtX2ppdC5hc3Np
Z25SZWcobV9mcHIsIG1fb3BlcmFuZCk7CisgICAgcmV0dXJuIG1fZnByOworfQorCitKSVQ6Oklu
dDMyQ29udmVydGluZ09wZXJhbmQ6OkludDMyQ29udmVydGluZ09wZXJhbmQoSklUJiBqaXQsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQpCit7CisgICAgR1BSUmVnIHJlZyA9IG1faml0LmdwckZvck9wZXJhbmQobV9vcGVy
YW5kKTsKKyAgICBpZiAocmVnICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGdwcigpOworfQor
CitKSVQ6OkludDMyQ29udmVydGluZ09wZXJhbmQ6On5JbnQzMkNvbnZlcnRpbmdPcGVyYW5kKCkK
K3sKKyAgICBtX2ppdC51bmxvY2sobV9ncHIpOworfQorCitHUFJSZWcgSklUOjpJbnQzMkNvbnZl
cnRpbmdPcGVyYW5kOjpncHIoKQoreworICAgIGlmIChtX2dwciAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICByZXR1cm4gbV9ncHI7CisKKyAgICBtX2ppdC5hc3NlcnROb1Nsb3dQYXRoKCk7CisK
KyAgICBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlSW50MzIobV9vcGVyYW5kKSkgeworICAgICAg
ICBJbnQzMk9wZXJhbmQgb3AgeyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIG1fZ3ByID0g
b3AuZ3ByKCk7CisgICAgICAgIG1faml0LmxvY2sobV9ncHIpOworICAgIH0gZWxzZSBpZiAobV9q
aXQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fb3BlcmFuZCkpIHsKKyAgICAgICAgVmFsdWVPcGVy
YW5kIHZhbHVlT3BlcmFuZCB7IG1faml0LCBtX29wZXJhbmQgfTsKKyAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWVPcGVyYW5kLmdwcigpOworCisgICAgICAgIG1fZ3ByID0gbV9qaXQuYWxs
b2NhdGVHUFIoKTsKKyAgICAgICAgbV9qaXQubG9jayhtX2dwcik7CisKKyAgICAgICAgRlBSVGVt
cCB0ZW1wRlBSIHsgbV9qaXQgfTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGUFIuZnByKCk7
CisKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBpZiAoIWlzQnl0ZWNv
ZGVOdW1iZXJTcGVjdWxhdGlvbihtX2ppdC5wcm92ZW5UeXBlKG1fb3BlcmFuZCkpKQorICAgICAg
ICAgICAgbV9qaXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90RG91YmxlS25v
d25Ob3RJbnQzMihKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpKTsK
KworICAgICAgICBtX2ppdC51bmJveERvdWJsZSh2YWx1ZUdQUiwgbV9ncHIsIGZwcik7CisgICAg
ICAgIEp1bXBMaXN0IGRvbmU7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXJBUk02NDo6c3VwcG9ydHNEb3VibGVUb0ludDMyQ29udmVyc2lvblVzaW5nSmF2YVNjcmlw
dFNlbWFudGljcygpKSB7CisgICAgICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9JbnQzMlVz
aW5nSmF2YVNjcmlwdFNlbWFudGljcyhmcHIsIG1fZ3ByKTsKKyAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihm
cHIsIG1fZ3ByLCBCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCkpOworICAgICAgICAgICAgYXV0
byBzcGlsbFJlY29yZCA9IG1faml0LnNpbGVudFNwaWxsQmVmb3JlQ2FsbChtX2dwciwgZnByKTsK
KyAgICAgICAgICAgIG1faml0LmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25D
aGVjayhoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkgPyBvcGVyYXRpb25Ub0ludDMyU2Vuc2libGVT
bG93IDogb3BlcmF0aW9uVG9JbnQzMiwgbV9ncHIsIGZwcik7CisgICAgICAgICAgICBtX2ppdC5z
aWxlbnRGaWxsQWZ0ZXJDYWxsKHNwaWxsUmVjb3JkKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0KKworICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0
KTsKKyAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgbV9ncHIpOworCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmZpbHRlclR5cGUobV9vcGVyYW5kLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpOworICAgIH0gZWxzZSBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbihtX29wZXJhbmQpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQgeyBt
X2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3BlcmFu
ZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAgICAg
IG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIG1faml0LnNwZWN1bGF0ZUJvb2xlYW4obV9v
cGVyYW5kLCB2YWx1ZUdQUik7CisKKyAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKDEp
LCB2YWx1ZUdQUiwgbV9ncHIpOworICAgIH0gZWxzZSBpZiAobV9qaXQuc2hvdWxkU3BlY3VsYXRl
T3RoZXIobV9vcGVyYW5kKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWVPcGVyYW5kIHsg
bV9qaXQsIG1fb3BlcmFuZCB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZU9wZXJh
bmQuZ3ByKCk7CisKKyAgICAgICAgbV9ncHIgPSBtX2ppdC5hbGxvY2F0ZUdQUigpOworICAgICAg
ICBtX2ppdC5sb2NrKG1fZ3ByKTsKKworICAgICAgICBtX2ppdC5zcGVjdWxhdGVPdGhlcihtX29w
ZXJhbmQsIHZhbHVlR1BSKTsKKworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
bV9ncHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZU9wZXJhbmQg
eyBtX2ppdCwgbV9vcGVyYW5kIH07CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlT3Bl
cmFuZC5ncHIoKTsKKworICAgICAgICBtX2dwciA9IG1faml0LmFsbG9jYXRlR1BSKCk7CisgICAg
ICAgIG1faml0LmxvY2sobV9ncHIpOworCisgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7IG1faml0
IH07CisgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRlBSLmZwcigpOworCisgICAgICAgIEp1bXBM
aXN0IGRvbmU7CisKKyAgICAgICAgYXV0byBpc0ludDMyID0gbV9qaXQuYnJhbmNoSWZJbnQzMihK
U1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRv
IG5vdERvdWJsZSA9IG1faml0LmJyYW5jaElmTm90RG91YmxlS25vd25Ob3RJbnQzMihKU1ZhbHVl
UmVncyB7IHZhbHVlR1BSIH0sIEhhdmVUYWdSZWdpc3RlcnMpOworCisgICAgICAgIG1faml0LnVu
Ym94RG91YmxlKHZhbHVlR1BSLCBtX2dwciwgZnByKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAg
IGlmIChNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdXBwb3J0c0RvdWJsZVRvSW50MzJDb252ZXJzaW9u
VXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKCkpIHsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRE
b3VibGVUb0ludDMyVXNpbmdKYXZhU2NyaXB0U2VtYW50aWNzKGZwciwgbV9ncHIpOworICAgICAg
ICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYK
KyAgICAgICAgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoVHJ1bmNhdGVE
b3VibGVUb0ludDMyKGZwciwgbV9ncHIsIEJyYW5jaElmVHJ1bmNhdGVTdWNjZXNzZnVsKSk7Cisg
ICAgICAgICAgICBhdXRvIHNwaWxsUmVjb3JkID0gbV9qaXQuc2lsZW50U3BpbGxCZWZvcmVDYWxs
KG1fZ3ByLCBmcHIpOworICAgICAgICAgICAgbV9qaXQuY2FsbE9wZXJhdGlvbldpdGhSZXN1bHRB
bmROb0V4Y2VwdGlvbkNoZWNrKGhhc1NlbnNpYmxlRG91YmxlVG9JbnQoKSA/IG9wZXJhdGlvblRv
SW50MzJTZW5zaWJsZVNsb3cgOiBvcGVyYXRpb25Ub0ludDMyLCBtX2dwciwgZnByKTsKKyAgICAg
ICAgICAgIG1faml0LnNpbGVudEZpbGxBZnRlckNhbGwoc3BpbGxSZWNvcmQpOworICAgICAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vdERv
dWJsZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGF1dG8gbm90T3RoZXIgPSBtX2ppdC5icmFuY2hJ
Zk5vdE90aGVyKEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgbV9ncHIpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgbV9ncHIpOworICAgICAgICBkb25lLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworCisgICAgICAgIG5vdE90aGVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9q
aXQuc3BlY3VsYXRlKEJhZFR5cGUsIG1faml0LmJyYW5jaElmTm90Qm9vbGVhbihKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0sIG1fZ3ByKSk7CisgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0z
MigxKSwgdmFsdWVHUFIsIG1fZ3ByKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKworICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuemVyb0V4
dGVuZDMyVG9Xb3JkKHZhbHVlR1BSLCBtX2dwcik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisKKyAgICAgICAgbV9qaXQuZmlsdGVyVHlwZShtX29wZXJhbmQsIFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNPdGhlciB8IFNwZWNCb29sZWFuKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9n
cHI7Cit9CisKK1JlZ2lzdGVyU2V0IEpJVDo6dW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCkK
K3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvIGFkZElmTmVlZGVlZCA9IFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBhdXRvJiByZWdWYWx1ZSA9IHRoaXMtPnJlZ1ZhbHVlKHJlZyk7CisgICAgICAgIGlm
IChyZWdWYWx1ZS5pc0FsbG9jYXRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQocmVnKTsKKyAg
ICB9OworCisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEZQUnMoKSkKKyAgICAgICAgYWRkSWZO
ZWVkZWVkKHJlZyk7CisgICAgZm9yIChSZWcgcmVnIDogYWxsb3dlZEdQUnMoKSkKKyAgICAgICAg
YWRkSWZOZWVkZWVkKHJlZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpJVDo6
c3BlY3VsYXRlU3RyaW5nKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWVBc0Nl
bGwpCit7CisgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKHByb3ZlblR5cGUob3BlcmFuZCkp
KQorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVBc0Nl
bGwpKTsKKyAgICBwcm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNTdHJpbmc7Cit9CisKK3ZvaWQg
SklUOjpzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1
ZUFzQ2VsbCkKK3sKKyAgICBpZiAoIWlzU3ltYm9sU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVy
YW5kKSkpCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdFN5bWJvbCh2YWx1
ZUFzQ2VsbCkpOworICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY1N5bWJvbDsKK30KKwor
dm9pZCBKSVQ6OnNwZWN1bGF0ZUJvb2xlYW4oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3Bl
cmFuZCkpKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGJyYW5jaElmTm90Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBw
cm92ZW5UeXBlKG9wZXJhbmQpICY9IFNwZWNCb29sZWFuOworfQorCit2b2lkIEpJVDo6c3BlY3Vs
YXRlT3RoZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSkKK3sKKyAgICBp
ZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkgeworICAgICAgICBH
UFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE90aGVy
KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgc2NyYXRjaEdQUikpOworICAgIH0KKyAgICBwcm92ZW5U
eXBlKG9wZXJhbmQpICY9IFNwZWNPdGhlcjsKK30KKwordm9pZCBKSVQ6OnNwZWN1bGF0ZU9iamVj
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNP
YmplY3RTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wZXJhbmQpKSkKKyAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGJyYW5jaElmTm90T2JqZWN0KHZhbHVlKSk7CisgICAgcHJvdmVuVHlwZShvcGVy
YW5kKSAmPSBTcGVjT2JqZWN0OworfQorCit2b2lkIEpJVDo6c3BlY3VsYXRlQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdENlbGwodmFsdWUpKTsKKyAgICBwcm92ZW5UeXBl
KG9wZXJhbmQpICY9IFNwZWNDZWxsQ2hlY2s7Cit9CisKK3ZvaWQgSklUOjpzcGVjdWxhdGVJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKQoreworICAgIGlmICghaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3BlY0ludDMyT25seSkpCisg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdEludDMyKHZhbHVlKSk7CisgICAg
cHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjSW50MzJPbmx5OworfQorCit2b2lkIEpJVDo6c3Bl
Y3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpCit7Cisg
ICAgaWYgKCFpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSkp
CisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBicmFuY2hJZk5vdE51bWJlcih2YWx1ZSkpOwor
ICAgIHByb3ZlblR5cGUob3BlcmFuZCkgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworfQorCit2b2lk
IEpJVDo6c3BlY3VsYXRlQW55QmlnSW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcg
dmFsdWUpCit7CisgICAgaWYgKGlzQmlnSW50U3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5k
KSkpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShCSUdJTlQzMikKKyAgICBjb25zdGV4cHIg
Ym9vbCB1c2VCaWdJbnQzMiA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0ZXhwciBib29sIHVzZUJp
Z0ludDMyID0gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKG9w
ZXJhbmQpIHx8ICF1c2VCaWdJbnQzMikgeworICAgICAgICBzcGVjdWxhdGVDZWxsKG9wZXJhbmQs
IHZhbHVlKTsKKyAgICAgICAgaWYgKCFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9w
ZXJhbmQpLCBTcGVjSGVhcEJpZ0ludCkpCisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
YnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIHByb3ZlblR5cGUob3BlcmFu
ZCkgJj0gU3BlY0hlYXBCaWdJbnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgaWYgKCFkb25lKSB7CisgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKG9wZXJhbmQpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwgYnJhbmNoSWZOb3RCaWdJbnQzMih2YWx1ZSwgc2NyYXRjaEdQUikp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50MzI7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlzQmlnSW50MzIgPSBi
cmFuY2hJZkJpZ0ludDMyKHZhbHVlLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGJyYW5jaElmTm90Q2VsbCh2YWx1ZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwgYnJhbmNoSWZOb3RIZWFwQmlnSW50KHZhbHVlKSk7CisgICAgICAgIGlzQmlnSW50MzIubGlu
ayh0aGlzKTsKKyAgICAgICAgcHJvdmVuVHlwZShvcGVyYW5kKSAmPSBTcGVjQmlnSW50OworICAg
IH0KKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQor
Cit2b2lkIEpJVDo6cmVzZXRDdXJyZW50QmxvY2tTdGF0ZSgpCit7CisgICAgaWYgKCF1c2VMT0wo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMgPSBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZSwgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRzKCkuc2l6ZSgpLCBTcGVjQnl0ZWNvZGVUb3ApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2N1cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5udW1iZXJPZkNvbnN0YW50cygpOyArK2kp
CisgICAgICAgIG1fY3VycmVudFN0YXRlLnByb3ZlblR5cGVzLmNvbnN0YW50KGkpID0gc3BlY3Vs
YXRpb25Gcm9tVmFsdWUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlckZv
ckNvbnN0YW50KGkpKSk7CisgICAgbV9jdXJyZW50U3RhdGUucHJvdmVuVHlwZXMuY2FsbGVlKCkg
PSBTcGVjRnVuY3Rpb247CisgICAgbV9jdXJyZW50U3RhdGUub3BlcmFuZFRvUmVnID0gT3BlcmFu
ZHM8QWxsb2NlZFJlZywgdHJ1ZT4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbV9jb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpLCAwLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2l6
ZSgpLCBBbGxvY2VkUmVnKCkpOworICAgIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVycyA9IHsgfTsK
K30KKwordm9pZCBKSVQ6OlJlZ1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCIoIiwgb3BlcmFuZCwgIiwgIiwgbG9ja0NvdW50LCAiKSIpOworfQor
Cit2b2lkIEpJVDo6ZHVtcFJlZ2FsbG9jU3RhdGUoKQoreworICAgIGRhdGFMb2dMbigiUmVnIGFs
bG9jIHN0YXRlID0gWyIpOworICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkR1BScygpKSB7Cisg
ICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1ZhbHVlKHJl
ZykpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoYXV0byByZWcgOiBhbGxvd2VkRlBScygp
KSB7CisgICAgICAgIGlmIChyZWdWYWx1ZShyZWcpLmlzQWxsb2NhdGVkKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJcdCIpOworICAgICAgICAgICAgZGF0YUxvZ0xuKHJlZywgIiA9ICIsIHJlZ1Zh
bHVlKHJlZykpOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dMbigiXSIpOworfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwxMyArNDYsMTcgQEAKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdp
bk1hcC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRl
ci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9j
YXRpb25Qcm9maWxlOworICAgIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKKyAgICBjbGFzcyBC
eXRlY29kZUdyYXBoOwogICAgIGNsYXNzIENhbGxMaW5rSW5mbzsKICAgICBjbGFzcyBDb2RlQmxv
Y2s7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMTA2LDE1ICsxMTAsMjYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RydWN0IFNsb3dDYXNl
RW50cnkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICBCeXRl
Y29kZUluZGV4IHRvOwotICAgICAgICAKLSAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCi0gICAgICAgICAgICA6IGZyb20oZikKLSAg
ICAgICAgICAgICwgdG8odCkKKyAgICB1c2luZyBTYXZlUGxhbiA9IFZlY3RvcjxzdGQ6OnR1cGxl
PFJlZywgVmlydHVhbFJlZ2lzdGVyLCBTcGVjdWxhdGVkVHlwZT4+OworCisgICAgc3RydWN0IFNp
bGVudFNwaWxsUmVjb3JkIHsKKyAgICAgICAgU2F2ZVBsYW4gc2F2ZVBsYW47CisgICAgICAgIFJl
Z2lzdGVyU2V0IHNwaWxsZWRSZWdpc3RlcnM7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZUZv
clNwaWxsOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvd0Nhc2UgeworICAgICAgICBTbG93Q2Fz
ZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4OworICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0LCAxPiBqdW1wczsgLy8gVXN1YWxseSBqdXN0IG9uZSBlbnRyeS4gQnV0IGZvciB0aGlu
Z3Mgd2l0aCBjaGVja3BvaW50cywgd2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgSnVt
cExpc3RzCisgICAgICAgIFNhdmVQbGFuIHNhdmVQbGFuOyAvLyBPT1BTOiBNYXliZSBoYXZlIGEg
ZGVsdGEgYmFzZWQgc3lzdGVtIGZvciB0aGlzIGJldHdlZW4gc2xvdyBwYXRocy4KKyAgICAgICAg
UmVnIHJlc3VsdDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdDsKKyAgICAgICAgVmVjdG9y
PFJlZz4gYXJndW1lbnRzOyAvLyBTb21lIG9wcyBzYXZlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3Rh
dGUgaGVyZSBmb3IgY29udmVuaWVuY2UKICAgICB9OwogCiAgICAgc3RydWN0IFN3aXRjaFJlY29y
ZCB7CkBAIC0xOTYsNyArMjExLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19B
TElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NM
QVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgeworICAgICAgICB1c2lu
ZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQ
YXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogCkBAIC0yMDQsMTQg
KzIyMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw7CiAKLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVy
ZSA9IHVudXNlZFBvaW50ZXI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoR2V0
QnlJZERlZmF1bHRPZmZzZXQgPSAwOwotICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFs
IG9mZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBv
ciB0aGUgWDg2QXNzZW1ibGVyCi0gICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNl
bWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1
NjsKLQogICAgIHB1YmxpYzoKLSAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIs
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4
KDApKTsKKyAgICAgICAgZW51bSBjbGFzcyBDb21waWxlVHlwZSB7CisgICAgICAgICAgICBCYXNl
bGluZSwKKyAgICAgICAgICAgIExPTAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgSklU
KFZNJiwgQ29kZUJsb2NrKiwgQ29tcGlsZVR5cGUsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwogCiAg
ICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQpAQCAtMjIw
LDIyICsyMzYsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IGxpbmsoKTsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKKwor
ICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb21waWxlVHlwZSBjb21waWxlVHlwZSwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRl
Y29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBK
SVQodm0sIGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29t
cGlsZShlZmZvcnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBj
b21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2ssIENvbXBpbGVUeXBlOjpCYXNlbGluZSk7CiAgICAgICAgICAgICBqaXQubV9i
eXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2VsaW5lKTsKICAg
ICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7
CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0
Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAg
fQpAQCAtMjQzLDIxICsyNTksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29t
cGlsZVR5cGU6OkJhc2VsaW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5k
LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGls
ZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
LCBDb21waWxlVHlwZTo6QmFzZWxpbmUpOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRl
eCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jaywgQ29tcGlsZVR5cGU6OkJhc2Vs
aW5lKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CkBAIC0y
ODYsNiArMzAyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CiAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNwaWxsRm9yQ2FsbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX3VzZUxPTCkKKyAgICAgICAgICAgICAgICBzcGlsbEZvckNhbGxJ
bXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzcGlsbEZvckNhbGxJbXBsKCk7CisKKyAg
ICAgICAgdm9pZCBjbG9iYmVyKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3VzZUxPTCkKKyAgICAgICAgICAgICAgICBjbG9iYmVySW1wbChyZWcpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY2xvYmJlckltcGwoUmVnKTsKKwogICAgICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2Fs
bCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24p
CiAgICAgICAgIHsKQEAgLTMyMyw5ICszNTMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CiAKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKLSAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBKdW1wTGlzdCYpOwotICAgICAg
ICB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHZvaWQgYXNzZXJ0Tm9TbG93UGF0aCgpOwor
CisgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCwgUmVnIHJlc3VsdCA9IFJlZygpLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0geyB9KTsKKyAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShjb25zdCBK
dW1wTGlzdCYsIFJlZyByZXN1bHQgPSBSZWcoKSwgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHsgfSk7
CisgICAgICAgIFNsb3dDYXNlJiBlbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KTsKICAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CiAgICAgICAgIHZv
aWQgYWRkSnVtcChjb25zdCBKdW1wTGlzdCYsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93VG9Ib3QoSnVtcCwgaW50KTsKQEAgLTMzMyw3ICszNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMzUwLDcgKzM4Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYpOwogCkBAIC0zNjAsNyArMzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAg
ICAgIGVudW0gY2xhc3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwotICAgICAgICB2b2lk
IGNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENv
bXBpbGVPcEVxVHlwZSwgaW50IGp1bXBUYXJnZXQpOworICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coU2xvd0Nhc2UmLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB9OwpAQCAtNTA4LDggKzU0MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2Vu
ZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJl
bGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24sIERvdWJsZUNvbmRpdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29u
ZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiosIFJl
bGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkSW1w
bChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKQEAgLTUxNywxMiArNTQ5LDIxIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB2b2lkIGVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci0gICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVD
b25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52
ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93T3BlcmF0aW9u
PgotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0
cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25k
aXRpb24sIFNsb3dPcGVyYXRpb24sIGJvb2wgaW52ZXJ0LCBTbG93Q2FzZSYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAorICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZXFJbXBsKGNvbnN0IEluc3RydWN0aW9u
Kik7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGplcUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+
CisgICAgICAgIHZvaWQgZXFOdWxsSW1wbChjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAg
IHZvaWQgZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0
b3IoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTU0Niw5ICs1ODcsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lk
IGVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VuZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKQEAgLTYxMCw3ICs2NTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
X29wX3N1cGVyX3NhbXBsZXJfYmVnaW4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9sc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyNpZiBDUFUoWDg2XzY0
KQogICAgICAgICB2b2lkIGVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKik7CisjZW5kaWYK
ICAgICAgICAgdm9pZCBlbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY3OCw3OCArNzIxLDEwMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJh
cmdzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfZ2V0X2NhbGxlZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9h
cmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2pncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
LSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgorICAgICAgICB2b2lkIGVtaXRJc0NhbGxhYmxlSW1wbChjb25z
dCBJbnN0cnVjdGlvbiopOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9pc19jYWxsYWJsZShjb25z
dCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlwZW9mX2lzX29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdHlwZW9mX2lzX2Z1bmN0
aW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90eXBlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAg
ICAgIHZvaWQgZW1pdENvbXBhcmVPcEltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFs
Q29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfb3BfbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbGVzc2VxKGNvbnN0IElu
c3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9ncmVhdGVyKGNvbnN0IEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9ncmVhdGVyZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKGNvbnN0IElu
c3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50KGNvbnN0IEluc3RydWN0aW9uKik7CisKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nh
c2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
b25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9nZXRfY2FsbGVlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pncmVhdGVyKGNv
bnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
Z3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2Um
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZ3JlYXRlcmVxKGNvbnN0
IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNl
Jik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBT
bG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93
Q2FzZSYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFNsb3dDYXNlJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
c3ViKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd0Nhc2UmKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgU2xvd0Nhc2UmKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBTbG93Q2FzZSYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0
aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
U2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rp
b24qLCBTbG93Q2FzZSYpOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbios
IFNsb3dDYXNlJik7CiAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChjb25zdCBJbnN0cnVj
dGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
LCBib29sIGlzVW5zaWduZWQpOworICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IFZpcnR1YWxSZWdp
c3RlcigpLCBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZyk7CisjZWxzZQogICAgICAg
ICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwor
ICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QsIEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9w
ZXJhbmQsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7CkBAIC03NjQsOCArODI5LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKIAotICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KTsKLQogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTc3OCwzOCArODQxLDIxIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1
bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVk
RnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAgICAgdm9pZCBlbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJik7CiAgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1
bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNT
bG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24sIFNs
b3dDYXNlJik7CiAKLSAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXRlcisr
LT5mcm9tOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChp
dGVyLT5mcm9tLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaXRlci0+ZnJvbS5saW5rKHRoaXMp
OwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0R1bW15
U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwotICAgICAgICAgICAg
KytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAg
ICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNl
RW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAgICAgdm9pZCBs
aW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KG1f
c2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICB9CisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICAgICAgdm9pZCBlbWl0U2xvd09wKEZ1bmN0
aW9uIGZ1bmN0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBTcGVjdWxhdGVkVHlwZSBkc3RUeXBlKTsKIAotICAgICAgICBib29s
IGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQp
OwotICAgICAgICBib29sIGhhc0FueVNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQorICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXMoU2xvd0Nhc2UmIGl0
ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNBbnlTbG93Q2FzZXMobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0o
aXRlcik7CisgICAgICAgICAgICAvLyBPT1BTCisgICAgICAgICAgICBib29sIGIgPSB0cnVlOwor
ICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
IC8vbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1f
Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4pOwpAQCAtODkxLDYgKzkzNywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0QW5kTm9FeGNlcHRpb25DaGVjayhPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50
czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFt
ZSgpOworICAgICAgICAgICAgYXV0byBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAg
ICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBjYWxsOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHRBbmROb0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAgICAgICAgICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBhdXRvIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbik7CisgICAgICAgICAgICBtb3ZlKHJldHVyblZhbHVlRlBSLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CkBAIC05MDIs
NiArOTY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBOb1Byb2ZpbGluZwogICAg
ICAgICB9OwogCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBib29sIHRy
eUVtaXRMT0xCaXRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KTsKKwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVy
YXRvcj4KICAgICAgICAgdm9pZCBlbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgc2hvdWxkRW1pdFByb2Zp
bGluZyA9IFByb2ZpbGluZ1BvbGljeTo6Tm9Qcm9maWxpbmcpOwogCkBAIC05NjEsNiArMTAzMCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBydW5QcmVkaWN0aW9uUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKGNvbnN0IEluc3Ry
dWN0aW9uKik7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKICAgICAgICAgCkBAIC05
NzEsNiArMTA0MywyOTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJpbmFyeU9wPgogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9m
aWxlKEJpbmFyeU9wKTsKIAorICAgICAgICBjbGFzcyBHUFJUZW1wIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgR1BSVGVtcChKSVQmLCBHUFJSZWcgaGludCA9IEludmFsaWRHUFJSZWcp
OworICAgICAgICAgICAgfkdQUlRlbXAoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoR1BSUmVn
IGhpbnQgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJ
VCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJSZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRlBSVGVtcCB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIEZQUlRlbXAoSklUJik7CisgICAgICAgICAgICB+RlBSVGVtcCgpOworICAgICAg
ICAgICAgRlBSUmVnIGZwcigpOworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSklUJiBt
X2ppdDsKKyAgICAgICAgICAgIEZQUlJlZyBtX2ZwciB7IEludmFsaWRGUFJSZWcgfTsKKyAgICAg
ICAgfTsKKworICAgICAgICBjbGFzcyBJbnQzMk9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOwor
ICAgICAgICAgICAgfkludDMyT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOyAv
LyBPbmx5IGxvd2VyIDMyIGJpdHMgYXJlIHRoZSBpbnQzMi4gVXBwZXIgYml0cyBjYW4gYmUgYW55
dGhpbmcuIE1pZ2h0IGJlIHRhZ2dlZCwgbWlnaHQgbm90IGJlLgorICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAg
ICAgIH07CisKKyAgICAgICAgY2xhc3MgQ2VsbE9wZXJhbmQgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBDZWxsT3BlcmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7Cisg
ICAgICAgICAgICB+Q2VsbE9wZXJhbmQoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIoKTsKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAgICAgICBHUFJS
ZWcgbV9ncHIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE5vdENlbGxPcGVyYW5kIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQoSklUJiwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgfk5vdENlbGxPcGVyYW5kKCk7CisgICAg
ICAgICAgICBHUFJSZWcgZ3ByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKSVQm
IG1faml0OworICAgICAgICAgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKworICAgICAg
ICBjbGFzcyBWYWx1ZU9wZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpOworICAgICAgICAgICAgflZh
bHVlT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dwciB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQoSklUJiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpOworICAgICAgICAgICAgfkRvdWJsZU9wZXJhbmQoKTsKKyAgICAgICAgICAgIEZQUlJlZyBm
cHIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpJVCYgbV9qaXQ7CisgICAgICAg
ICAgICBGUFJSZWcgbV9mcHIgeyBJbnZhbGlkRlBSUmVnIH07CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICB9OworCisgICAgICAgIGNsYXNzIE51bWJlck9w
ZXJhbmQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kKEpJVCYs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKKyAgICAgICAgICAgIH5OdW1iZXJPcGVyYW5kKCk7
CisgICAgICAgICAgICBGUFJSZWcgZnByKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBKSVQmIG1faml0OworICAgICAgICAgICAgRlBSUmVnIG1fZnByIHsgSW52YWxpZEZQUlJlZyB9
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyBTcGVjdWxhdGUgbnVtYmVyK2Jvb2xlYW4rb3RoZXIsIGFuZCBjb252ZXJ0IHRv
IGkzMi4gVXNlZnVsIGZvciBiaXRvcHMuCisgICAgICAgIGNsYXNzIEludDMyQ29udmVydGluZ09w
ZXJhbmQgeyAKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSW50MzJDb252ZXJ0aW5nT3Bl
cmFuZChKSVQmLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7CisgICAgICAgICAgICB+SW50MzJD
b252ZXJ0aW5nT3BlcmFuZCgpOworICAgICAgICAgICAgR1BSUmVnIGdwcigpOworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgSklUJiBtX2ppdDsKKyAgICAgICAgICAgIEdQUlJlZyBtX2dw
ciB7IEludmFsaWRHUFJSZWcgfTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJh
bmQ7CisgICAgICAgIH07CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUmIHByb3ZlblR5cGUoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRTdGF0ZS5wcm92ZW5UeXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBmaWx0ZXJUeXBlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBTcGVjdWxhdGVk
VHlwZSBmaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3ZlblR5cGUob3BlcmFuZCkg
Jj0gZmlsdGVyOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
bkZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFByZWRpY3Rpb25zLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
IH0KKworICAgICAgICBHUFJSZWcmIGdwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5k
VG9SZWcub3BlcmFuZChvcGVyYW5kKS5ncHI7CisgICAgICAgIH0KKworICAgICAgICBGUFJSZWcm
IGZwckZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9SZWcub3BlcmFuZChvcGVyYW5k
KS5mcHI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3QgQWxsb2NlZFJlZzsKKyAgICAgICAg
QWxsb2NlZFJlZyYgYWxsb2NlZFJlZ0Zvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5vcGVyYW5kVG9S
ZWcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBSZWdWYWx1
ZTsKKyAgICAgICAgUmVnVmFsdWUmIHJlZ1ZhbHVlKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRTdGF0ZS5yZWdpc3RlcnNbcmVnXTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZ1ZhbHVlJiByZWdWYWx1ZShHUFJSZWcgcmVnKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50U3RhdGUucmVnaXN0ZXJzW3JlZ107CisgICAgICAgIH0K
KworICAgICAgICBSZWdWYWx1ZSYgcmVnVmFsdWUoRlBSUmVnIHJlZykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlLnJlZ2lzdGVyc1tyZWddOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCB3aWxsRGVmKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW1fdXNlTE9MKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdQUlJlZyYgZ3ByID0gZ3ByRm9yT3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoZ3ByICE9IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFsdWUoZ3ByKS5vcGVyYW5kID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGdwciA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEZQUlJlZyYgZnByID0gZnByRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZnByICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVnVmFs
dWUoZnByKS5vcGVyYW5kID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAg
IGZwciA9IEludmFsaWRGUFJSZWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3NpZ25SZWcoR1BSUmVnIGdwciwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFy
ZWdWYWx1ZShncHIpLm9wZXJhbmQuaXNWYWxpZCgpKTsKKworICAgICAgICAgICAgZ3ByRm9yT3Bl
cmFuZChvcGVyYW5kKSA9IGdwcjsKKyAgICAgICAgICAgIHJlZ1ZhbHVlKGdwcikub3BlcmFuZCA9
IG9wZXJhbmQ7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50
VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhc3Np
Z25SZWcoRlBSUmVnIGZwciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWdWYWx1ZShmcHIpLm9wZXJhbmQuaXNWYWxpZCgp
KTsKKworICAgICAgICAgICAgZnByRm9yT3BlcmFuZChvcGVyYW5kKSA9IGZwcjsKKyAgICAgICAg
ICAgIHJlZ1ZhbHVlKGZwcikub3BlcmFuZCA9IG9wZXJhbmQ7CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICAgICAgICAgIGlmICghbV9jdXJyZW50VXNlQ291bnRzLm9wZXJhbmQob3BlcmFuZCkpCisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXNCeXRlY29kZURvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rp
b25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOdW1iZXIoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpc0J5dGVjb2RlTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5k
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZFNwZWN1bGF0ZUludDMyQ29udmVy
dGluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCksIFNwZWNCeXRl
Y29kZU51bWJlciB8IFNwZWNPdGhlciB8IFNwZWNCb29sZWFuKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzTm90Q2VsbFNwZWN1bGF0aW9uKHByZWRp
Y3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVDZWxsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gIShwcmVkaWN0aW9uRm9yKG9wZXJhbmQpICYgflNwZWNDZWxsQ2hlY2spOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmcoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1
bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpc1N5bWJvbFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Io
b3BlcmFuZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmpl
Y3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpc09iamVjdFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVCb29sZWFuKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNCb29sZWFuU3BlY3VsYXRp
b24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZU90aGVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNPdGhlclNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFu
ZCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBbnlCaWdJbnQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0JpZ0ludFNwZWN1bGF0aW9uKHByZWRpY3Rpb25Gb3Iob3BlcmFuZCkpOworICAgICAgICB9CisK
KyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQmlnSW50MzIo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c0JpZ0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbkZvcihvcGVyYW5kKSk7CisgICAgICAgIH0K
KyNlbmRpZgorCisgICAgICAgIGlubGluZSBib29sIHVzZUxPTCgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlTE9MOyB9CisKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJSZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlQXNDZWxsKTsKKyAg
ICAgICAgdm9pZCBzcGVjdWxhdGVTeW1ib2woVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJl
ZyB2YWx1ZUFzQ2VsbCk7CisgICAgICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzcGVjdWxhdGVPdGhl
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKyAgICAgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEdQUlJlZyB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBHUFJS
ZWcgdmFsdWUpOworICAgICAgICB2b2lkIHNwZWN1bGF0ZUFueUJpZ0ludChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgR1BSUmVnIHZhbHVlKTsKKworICAgICAgICB2b2lkIHNwZWN1bGF0ZShFeGl0
S2luZCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXApOyAvLyBPT1BTOiBXZSBwcm9iYWJseSB3YW50IG1v
cmUgaW5mbyBoZXJlIGZvciB1cGRhdGluZyBwcm9maWxlcy4KKyAgICAgICAgR1BSUmVnIGFsbG9j
YXRlR1BSKEdQUlJlZyBoaW50ID0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEZQUlJlZyBhbGxv
Y2F0ZUZQUigpOworICAgICAgICB2b2lkIHNldEludDMyKFZpcnR1YWxSZWdpc3RlciwgR1BSUmVn
KTsKKyAgICAgICAgdm9pZCBzZXREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJSZWcpOworICAg
ICAgICB2b2lkIHNldEpTVmFsdWUoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOyAvLyBPT1BTOiBN
YWtlIHRoaXMgdGFrZSB0aGUgcmVzdWx0IHByb3ZlbiB0eXBlIHNvIHdlIGRvbid0IGZvcmdldCB0
byBzZXQgaXQuCisgICAgICAgIHZvaWQgbG9jayhSZWcpOworICAgICAgICB2b2lkIHVubG9jayhS
ZWcpOworICAgICAgICBTYXZlUGxhbiBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFNpbGVu
dFNwaWxsUmVjb3JkIHNpbGVudFNwaWxsQmVmb3JlQ2FsbChHUFJSZWcgdG9JZ25vcmUgPSBJbnZh
bGlkR1BSUmVnLCBGUFJSZWcgdG9JZ25vcmVGUFIgPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
dm9pZCBzaWxlbnRGaWxsQWZ0ZXJDYWxsKGNvbnN0IFNpbGVudFNwaWxsUmVjb3JkJik7CisgICAg
ICAgIHZvaWQgcmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKGNvbnN0IFNsb3dDYXNlJik7Cisg
ICAgICAgIHZvaWQgcmVzdG9yZUZyb21TYXZlUGxhbihSZWcgcmVnVG9JZ25vcmUsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kVG9JZ25vcmUsIGNvbnN0IFNhdmVQbGFuJik7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworCiAgICAgICAgIEludGVycHJl
dGVyKiBtX2ludGVycHJldGVyOwogCiAgICAgICAgIFZlY3RvcjxGYXJDYWxsUmVjb3JkPiBtX2Zh
ckNhbGxzOwpAQCAtOTkwLDcgKzEzNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVj
dG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0
ZWNvZGVJbmRleDsKLSAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwor
ICAgICAgICBTZWdtZW50ZWRWZWN0b3I8U2xvd0Nhc2U+IG1fc2xvd0Nhc2VzOwogICAgICAgICBW
ZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwpAQCAtMTAyNyw2ICsxMzg1LDg2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUlu
ZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICBzdHJ1Y3QgQWxsb2Nl
ZFJlZyB7CisgICAgICAgICAgICAvLyBGb3IgZG91Ymxlcywgd2UgbWF5IGhhdmUgYm94ZWQgYW4g
dW5ib3hlZCB2YXJpYW50cworICAgICAgICAgICAgLy8gYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgICAgICAgICBHUFJSZWcgZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworICAgICAgICAg
ICAgRlBSUmVnIGZwciB7IEludmFsaWRGUFJSZWcgfTsKKworICAgICAgICAgICAgdm9pZCBtZXJn
ZShjb25zdCBBbGxvY2VkUmVnJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZ3ByICE9IG90aGVyLmdwcikKKyAgICAgICAgICAgICAgICAgICAgZ3ByID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBpZiAoZnByICE9IG90aGVyLmZwcikKKyAgICAgICAg
ICAgICAgICAgICAgZnByID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBzdHJ1Y3QgUmVnVmFsdWUgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgeyB9OworICAgICAgICAgICAgdWludDhfdCBsb2NrQ291bnQgeyAwIH07Cisg
ICAgICAgICAgICBib29sIGlzQWxsb2NhdGVkIHsgZmFsc2UgfTsKKworICAgICAgICAgICAgdm9p
ZCBtZXJnZShjb25zdCBSZWdWYWx1ZSYgb3RoZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKG9wZXJhbmQgIT0gb3RoZXIub3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB8
fCBsb2NrQ291bnQgIT0gb3RoZXIubG9ja0NvdW50CisgICAgICAgICAgICAgICAgICAgIHx8IGlz
QWxsb2NhdGVkICE9IG90aGVyLmlzQWxsb2NhdGVkKQorICAgICAgICAgICAgICAgICAgICAqdGhp
cyA9IHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IExvZ0VudHJ5IHsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOworICAgICAgICAgICAgRGF0YUZvcm1h
dCBmb3JtYXQ7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJsb2NrU3RhdGUgeworICAg
ICAgICAgICAgT3BlcmFuZHM8QWxsb2NlZFJlZywgdHJ1ZT4gb3BlcmFuZFRvUmVnOworICAgICAg
ICAgICAgUmVnaXN0ZXJNYXA8UmVnVmFsdWU+IHJlZ2lzdGVyczsKKyAgICAgICAgICAgIE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlLCB0cnVlPiBwcm92ZW5UeXBlczsKKworICAgICAgICAgICAgdm9p
ZCBtZXJnZShjb25zdCBCbG9ja1N0YXRlJiBvdGhlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQob3BlcmFuZFRvUmVnLnNpemUoKSA9PSBvdGhlci5vcGVyYW5kVG9SZWcu
c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhbmRU
b1JlZy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvUmVnW2ldLm1l
cmdlKG90aGVyLm9wZXJhbmRUb1JlZ1tpXSk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJv
dmVuVHlwZXMuc2l6ZSgpID09IG90aGVyLnByb3ZlblR5cGVzLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm92ZW5UeXBlcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgcHJvdmVuVHlwZXNbaV0gPSBtZXJnZVNwZWN1bGF0aW9ucyhwcm92
ZW5UeXBlc1tpXSwgb3RoZXIucHJvdmVuVHlwZXNbaV0pOworCisgICAgICAgICAgICAgICAgQVNT
RVJUKHJlZ2lzdGVycy5zaXplKCkgPT0gb3RoZXIucmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5tZXJnZShvdGhlci5yZWdpc3RlcnNbaV0p
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIEJsb2NrU3RhdGUgbV9jdXJy
ZW50U3RhdGU7CisKKyAgICAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7CisKKyAg
ICAgICAgdm9pZCBkdW1wUmVnYWxsb2NTdGF0ZSgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxCeXRlY29kZUdyYXBoPiBtX2dyYXBoOworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG1f
Y3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBWZWN0b3I8T3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGUsIHRydWU+PiBtX3ByZWRpY3Rpb25zQXRIZWFkOworICAgICAgICBPcGVyYW5kczxT
cGVjdWxhdGVkVHlwZSwgdHJ1ZT4gbV9jdXJyZW50UHJlZGljdGlvbnM7CisgICAgICAgIFZlY3Rv
cjxPcGVyYW5kczx1bnNpZ25lZCwgdHJ1ZT4+IG1fdXNlQ291bnRzOworICAgICAgICBPcGVyYW5k
czx1bnNpZ25lZCwgdHJ1ZT4gbV9jdXJyZW50VXNlQ291bnRzOworICAgICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCAxNj4gbV9zcGlsbENhbmRpZGF0ZXM7CisKKyAgICAgICAgVmVjdG9yPExv
Z0VudHJ5PiBtX2V4aXRMb2c7CisKKworICAgICAgICBWZWN0b3I8T3B0aW9uYWw8QmxvY2tTdGF0
ZT4+IG1fc3RhdGVBdEVuZDsKKyAgICAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG1fcHJl
ZGVjZXNzb3JzOworCisgICAgICAgIGJvb2wgbV91c2VMT0wgeyBmYWxzZSB9OworICAgICAgICBW
ZWN0b3I8c3RkOjpwYWlyPEJ5dGVjb2RlSW5kZXgsIEp1bXBMaXN0Pj4gbV9leGl0SnVtcHM7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDg2
ICs0Miw4OCBAQAogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTbG93UGF0aENh
bGwuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9wSmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVz
cz4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5k
SnVtcDxPcEpsZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW5PckVxdWFsLCBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfamdy
ZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0
X2NvbXBhcmVBbmRKdW1wPE9wSmdyZWF0ZXI+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRo
YW4pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcj4oY3VycmVudEluc3RydWN0
aW9uLCBHcmVhdGVyVGhhbiwgRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKZ3JlYXRlcmVxPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cDxPcEpncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWxBbmRPcmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5sZXNzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVhdGVy
VGhhbk9yRXF1YWwpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXA8T3BKbmxlc3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgR3JlYXRlclRoYW5PckVxdWFsLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcDxP
cEpubGVzc2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEdyZWF0ZXJUaGFuKTsKKyAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wPE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3JlYXRlclRoYW4s
IERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wPE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NU
aGFuT3JFcXVhbCk7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcDxPcEpuZ3JlYXRlcj4oY3VycmVu
dEluc3RydWN0aW9uLCBMZXNzVGhhbk9yRXF1YWwsIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5v
cmRlcmVkKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wPE9w
Sm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgTGVzc1RoYW4pOworICAgIGVtaXRfY29t
cGFyZUFuZEp1bXA8T3BKbmdyZWF0ZXJlcT4oY3VycmVudEluc3RydWN0aW9uLCBMZXNzVGhhbiwg
IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudEluc3RydWN0
aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxz
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzcz4oY3VycmVudElu
c3RydWN0aW9uLCBEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVMZXNz
LCBmYWxzZSwgc2xvd0Nhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewot
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93PE9wSmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9u
LCBEb3VibGVMZXNzVGhhbk9yRXF1YWxBbmRPcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
LCBmYWxzZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbGVzc2VxPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9qZ3JlYXRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pncmVhdGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVy
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdzxPcEpncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJUaGFuQW5k
T3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIGZhbHNlLCBzbG93Q2FzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3c8T3BKZ3JlYXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbEFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBp
dGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpncmVhdGVyZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIHNsb3dDYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzLCB0cnVlLCBpdGVyKTsKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dzxPcEpubGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIHNsb3dDYXNlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93PE9wSm5sZXNzZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7CisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3c8T3BKbmxlc3NlcT4oY3VycmVudEluc3RydWN0aW9uLCBEb3VibGVH
cmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBzbG93
Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93PE9wSm5ncmVhdGVyPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgdHJ1
ZSwgaXRlcik7CisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3c8T3BKbmdyZWF0ZXI+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBzbG93Q2FzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmdyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZ3JlYXRlcmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNs
b3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdzxPcEpuZ3Jl
YXRlcmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworICAgIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93PE9wSm5ncmVhdGVyZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgRG91YmxlTGVzc1Ro
YW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgc2xvd0Nhc2Up
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTQ2LDM3ICsxNDgsMTYxIEBAIHZvaWQgSklUOjplbWl0X29wX2pi
ZWxvd2VxKGNvbnN0IEluc3RydWMKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0Q29tcGFyZU9wSW1wbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGdwQ29tcGFyZSwgRG91
YmxlQ29uZGl0aW9uIGRvdWJsZUNvbXBhcmUpCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAgICAgICAg
SW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENv
bXBhcmUsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
RG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMg
fTsKKyAgICAgICAgICAgIGNvbXBhcmVEb3VibGUoZG91YmxlQ29tcGFyZSwgbGhzVGVtcC5mcHIo
KSwgcmhzVGVtcC5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIGlmICgoc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHx8ICFw
cmVkaWN0aW9uRm9yKGxocykgfHwgIXByZWRpY3Rpb25Gb3IocmhzKSkgeworICAgICAgICAgICAg
TnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgTnVtYmVy
T3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9OworICAgICAgICAgICAgY29tcGFyZURvdWJs
ZShkb3VibGVDb21wYXJlLCBsaHNUZW1wLmZwcigpLCByaHNUZW1wLmZwcigpLCByZXN1bHRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAq
dGhpcywgbGhzIH07CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCBy
aHMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGVuc3Vy
ZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KGxoc0dQUik7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICB9CisKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBl
bHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfbGVzcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9u
LCBMZXNzVGhhbiwgRG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfbGVzc2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdENvbXBhcmVPcEltcGw8T3BMZXNzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIExlc3NUaGFu
T3JFcXVhbCwgRG91YmxlTGVzc1RoYW5PckVxdWFsQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2dyZWF0ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBlbWl0Q29tcGFyZU9wSW1wbDxPcExlc3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgR3Jl
YXRlclRoYW4sIERvdWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2dyZWF0ZXJlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGVtaXRDb21wYXJlT3BJbXBsPE9wTGVzcz4oY3VycmVudEluc3RydWN0aW9uLCBHcmVh
dGVyVGhhbk9yRXF1YWwsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbEFuZE9yZGVyZWQpOworfQor
CiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFu
LCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1Qw
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgb3AxIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0VGVtcCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKworICAgICAgICBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKG9wMSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihvcDEsIGlucHV0R1BSKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGlucHV0R1BSKTsKKworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigw
KSkpOworICAgICAgICBib3hJbnQzMihpbnB1dEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92
ZW5UeXBlKHJlc3VsdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVz
c1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgYm94SW50MzIocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0LCByZWdUMCk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uLCBEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9w
MiwgdGFyZ2V0LCBjb25kaXRpb24pOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKG9wMSwg
b3AyLCB0YXJnZXQsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgRG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbikKIHsKICAgICAvLyBX
ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFz
dCBwYXRoOgogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRl
CiAgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKICAgICAv
LyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQogCisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3VsZFNwZWN1bGF0
ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxocy5ncHIoKSwgcmhzLmdwcigpKSwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkg
eworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKGRvdWJsZUNvbmRpdGlvbiwgbGhzLmZwcigpLCByaHMuZnByKCkpLCB0
YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChz
aG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkg
fHwgIXByZWRpY3Rpb25Gb3Iob3AxKSB8fCAhcHJlZGljdGlvbkZvcihvcDIpKSB7CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIGxocyB7ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgICAgIE51bWJl
ck9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoZG91YmxlQ29uZGl0aW9uLCBsaHMuZnByKCksIHJocy5mcHIoKSksIHRhcmdldCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgbGhz
IHsgKnRoaXMsIG9wMSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdwcigpOworICAgICAgICBHUFJSZWcgcmhz
R1BSID0gcmhzLmdwcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3dDYXNl
ID0gZW5zdXJlU2xvd0Nhc2UoUmVnKCksIFZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFyZ3VtZW50cy5hcHBlbmQocmhzR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChsaHNHUFIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmhzR1BSKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGxoc0dQUiwg
cmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgZGlz
YWxsb3dBbGxvY2F0aW9uID0gZmFsc2U7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yMjksMTcgKzM1
NSw0MyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvCiAKIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAg
ICAgICAgIGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShv
cDEpICY9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNH
UFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNH
UFIpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIp
OworICAgICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92
ZW5UeXBlKG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJoc0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJoc0dQUik7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKKyAgICAgICAgZ2V0TEhTKCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBy
ZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCBsaHNHUFIsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBv
cDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJoc0dQUiwgSW1t
MzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgICAgICBnZXRMSFMo
KTsKKyAgICAgICAgZ2V0UkhTKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9u
LCBsaHNHUFIsIHJoc0dQUiksIHRhcmdldCk7CiAgICAgfQogfQogCkBAIC0yNTUsNDMgKzQwNyw4
OSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zCiAKIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCiB7CisgICAgR1BSUmVnIGxoc0dQUjsKKyAgICBHUFJSZWcgcmhzR1BSOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGhzVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+
IHJoc1RlbXA7CisgICAgYXV0byBnZXRMSFMgPSBbJl0geworICAgICAgICBpZiAodXNlTE9MKCkp
IHsKKyAgICAgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAg
IGxoc0dQUiA9IGxoc1RlbXAtPmdwcigpOworICAgICAgICAgICAgcHJvdmVuVHlwZShvcDEpICY9
IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaHNHUFIgPSBy
ZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsaHNHUFIpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIGdldFJIUyA9IFsmXSB7CisgICAgICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICAgICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAg
ICAgICAgICAgcmhzR1BSID0gcmhzVGVtcC0+Z3ByKCk7CisgICAgICAgICAgICBwcm92ZW5UeXBl
KG9wMikgJj0gU3BlY0ludDMyT25seTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJo
c0dQUiA9IHJlZ1QxOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJo
c0dQUik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0
OworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJl
c3VsdC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDI7CisKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDApOworICAgICAgICBnZXRMSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
cmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlv
biwgbGhzR1BSLCBJbW0zMihvcDJpbW0pLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDApOworICAgICAgICBnZXRSSFMoKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0g
PSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICAgICAgY29tcGFy
ZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmhzR1BSLCBJbW0zMihvcDFpbW0pLCByZXN1bHRHUFIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVn
VDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgZ2V0TEhTKCk7CisgICAgICAgIGdldFJIUygpOworICAgICAg
ICBjb21wYXJlMzIoY29uZGl0aW9uLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKICAgICB9
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jv
b2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0
ZXIpOworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBp
bnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlvbiwgaW52ZXJ0LCBzbG93Q2Fz
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dPcGVyYXRpb24+Ci12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgU2xvd09wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0
ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNv
bmRpdGlvbiBjb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sIGludmVydCwg
U2xvd0Nhc2UmIHNsb3dDYXNlKQogeworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJS
ZWcgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICBHUFJSZWcg
cmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzFdLmdwcigpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsaHNHUFIsIHJoc0dQUik7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2ggPSBicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVz
dG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBmYWxsdGhyb3VnaC5saW5rKHRoaXMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUg
Zm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0
aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAgICAgLy8gLSBjb25z
dGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgogICAgIC8vIC0gZmxv
YXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxKTsKQEAgLTMwMCw4ICs0OTgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCk7CiAgICAgICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdp
c3RlciwgcmVnVDApOwpAQCAtMzI2LDggKzUyMiw2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgICAgIGlmIChz
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVy
LCByZWdUMSk7CkBAIC0zNTEsMTIgKzU0NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgotCiAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CiAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7
CiAgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7Ci0gICAgICAg
IEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgSnVtcCBmYWlsMyA9
IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAgICBKdW1wIGZhaWw0ID0gYnJhbmNoSWZJbnQz
MihyZWdUMSk7CiAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7CiAgICAg
ICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIG1vdmU2NFRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTM2OSw5ICs1NjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAg
ICAgIGZhaWwyLmxpbmsodGhpcyk7CiAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAg
IGZhaWw0LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBS
SFMgaXMgbm90IEludC4KICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtMzgxLDExICs1NzQsNTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBi
eXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAg
IGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYXV0byYg
cHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHNyY0RzdCkpIHsKKyAgICAgICAgICAg
IEludDMyT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZGlkT2Jz
ZXJ2ZUludDMyT3ZlcmZsb3coKSkgeyAvLyBPT1BTOiBlbnN1cmUgZm9yIGFsbCBvcGNvZGVzIHBy
b3ZlblR5cGUgYWdyZWVzIHcvIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uLgorICAgICAgICAg
ICAgICAgIEZQUlRlbXAgdGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoaW5w
dXRHUFIsIGZwcik7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAx
LjA7CisgICAgICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25lKSwgZnBy
KTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNBbnlJbnRBc0RvdWJsZTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywg
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRHUFIpKTsKKyAgICAg
ICAgICAgICAgICBzZXRJbnQzMihzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUoc3JjRHN0KSkgeworICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSBpbnB1dC5mcHIoKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lID0gMS4wOworICAgICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmb25l
KSwgZnByKTsKKyAgICAgICAgICAgIHNldERvdWJsZShzcmNEc3QsIGZwcik7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAgICAgICAgIE51
bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBGUFJSZWcg
ZnByID0gaW5wdXQuZnByKCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9
IDEuMDsKKyAgICAgICAgICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJm9uZSksIGZwcik7
CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBmcHIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogZG8gc29tZSBCaWdJbnQzMi4uLgorICAgICAgICAgICAgVmFs
dWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBlbnN1cmVTbG93Q2FzZShpbnB1dEdQ
Uiwgc3JjRHN0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChpbnB1dEdQ
Uik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3Rl
ZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgYm94SW50MzIoaW5wdXRHUFIsIEpT
VmFsdWVSZWdzIHsgaW5wdXRHUFIgfSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHNyY0RzdCwg
aW5wdXRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0JpZ0ludCB8
IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92
ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGJveEludDMyKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM5MywxMSArNjI4LDYyIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0
ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsK
LSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1
dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihzcmNEc3QpKSB7CisgICAgICAg
ICAgICBJbnQzMk9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLmRp
ZE9ic2VydmVJbnQzMk92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgICAg
ICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZvbmUpLCB0ZW1wRlBSKTsKKyAgICAgICAgICAgICAgICBzdWJEb3VibGUo
cmVzdWx0RlBSLCB0ZW1wRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldERvdWJs
ZShzcmNEc3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3Qp
ID0gU3BlY0FueUludEFzRG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywg
VHJ1c3RlZEltbTMyKDEpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAgIHNldEludDMyKHNy
Y0RzdCwgaW5wdXRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShzcmNEc3QpKSB7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIGlu
cHV0IHsgKnRoaXMsIHNyY0RzdCB9OworICAgICAgICAgICAgRlBSVGVtcCB0ZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIEZQUlJlZyBpbnB1dEZQUiA9IGlucHV0LmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmUgPSAxLjA7CisgICAgICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIo
Jm9uZSksIHRlbXBGUFIpOworICAgICAgICAgICAgc3ViRG91YmxlKGlucHV0RlBSLCB0ZW1wRlBS
LCBpbnB1dEZQUik7CisgICAgICAgICAgICBzZXREb3VibGUoc3JjRHN0LCBpbnB1dEZQUik7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHNyY0RzdCkpIHsKKyAgICAg
ICAgICAgIE51bWJlck9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjRHN0IH07CisgICAgICAgICAg
ICBGUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSUmVnIGlucHV0RlBSID0g
aW5wdXQuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7Cisg
ICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMDsKKyAgICAgICAgICAgIGxv
YWREb3VibGUoVHJ1c3RlZEltbVB0cigmb25lKSwgdGVtcEZQUik7CisgICAgICAgICAgICBzdWJE
b3VibGUoaW5wdXRGUFIsIHRlbXBGUFIsIGlucHV0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJs
ZShzcmNEc3QsIGlucHV0RlBSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9P
UFM6IGRvIHNvbWUgQmlnSW50MzIuLi4KKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7
ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UoaW5wdXRHUFIsIHNyY0RzdCk7CisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoaW5wdXRHUFIpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgaW5wdXRH
UFIpKTsKKyAgICAgICAgICAgIGJveEludDMyKGlucHV0R1BSLCBKU1ZhbHVlUmVncyB7IGlucHV0
R1BSIH0pOworICAgICAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIGlucHV0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoc3JjRHN0KSA9IFNwZWNCaWdJbnQgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOworICAgICAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIH0K
IH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDcsNTQgKzY5MywxMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBsaHMgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmhz
ID0gYnl0ZWNvZGUubV9yaHM7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKChz
aG91bGRTcGVjdWxhdGVEb3VibGUobGhzKSB8fCBzaG91bGRTcGVjdWxhdGVEb3VibGUocmhzKSkg
JiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJo
cykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsK
KyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVn
IHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisKKyAgICAgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
CisgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdFRlbXAuZnByKCk7CisKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0QW5kTm9FeGNlcHRpb25DaGVjayhNYXRoOjpmbW9kRG91YmxlLCBy
ZXN1bHRGUFIsIGxoc0ZQUiwgcmhzRlBSKTsKKworICAgICAgICAgICAgc2V0RG91YmxlKGRzdCwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAogICAg
IC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0
aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8g
ZWF4ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgYXV0byBlZHggPSBYODZSZWdpc3RlcnM6OmVk
eDsKICAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIEFTU0VSVChyZWdUMCA9
PSBlYXgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAgIEFTU0VSVChyZWdUNCAhPSBl
Y3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGVjeCk7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gZWF4VGVtcDsKKyAgICBP
cHRpb25hbDxHUFJUZW1wPiBlZHhUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGVjeFRlbXA7
CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBsaHNUZW1wOworICAgIE9wdGlvbmFsPFZhbHVl
T3BlcmFuZD4gcmhzVGVtcDsKKyAgICBHUFJSZWcgbGhzR1BSOworCisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIGNsb2JiZXIoZWF4KTsKKyAgICAgICAgY2xvYmJlcihlZHgpOworICAgICAg
ICBjbG9iYmVyKGVjeCk7CisgICAgICAgIGVheFRlbXAuZW1wbGFjZSgqdGhpcywgZWF4KTsKKyAg
ICAgICAgZWR4VGVtcC5lbXBsYWNlKCp0aGlzLCBlZHgpOworICAgICAgICBlY3hUZW1wLmVtcGxh
Y2UoKnRoaXMsIGVjeCk7CisKKyAgICAgICAgZWF4VGVtcC0+Z3ByKCk7CisgICAgICAgIGVkeFRl
bXAtPmdwcigpOworICAgICAgICBlY3hUZW1wLT5ncHIoKTsKKworICAgICAgICBSRUxFQVNFX0FT
U0VSVChlYXhUZW1wLT5ncHIoKSA9PSBlYXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlZHhU
ZW1wLT5ncHIoKSA9PSBlZHgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChlY3hUZW1wLT5ncHIo
KSA9PSBlY3gpOworCisgICAgICAgIGxoc1RlbXAuZW1wbGFjZSgqdGhpcywgbGhzKTsKKyAgICAg
ICAgcmhzVGVtcC5lbXBsYWNlKCp0aGlzLCByaHMpOworICAgICAgICBsaHNHUFIgPSBsaHNUZW1w
LT5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAtPmdwcigpOworCisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOyAvLyBPT1BTOiBuZXcgbmFtZSwgbGlrZSBzcGlsbEV4cGVjdGlu
Z1Nsb3dQYXRoCisKKyAgICAgICAgZW5zdXJlU2xvd0Nhc2UoZWF4LCBkc3QpOworCisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50
MzIobGhzLCBsaHNHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQobGhzR1BSKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIo
cmhzKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKHJocywgcmhzR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJoc0dQUik7CisKKyAg
ICAgICAgbW92ZShsaHNHUFIsIGVheCk7CisgICAgICAgIG1vdmUocmhzR1BSLCBlY3gpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGxoc0dQUiA9IHJlZ1Q0OworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhsaHMsIGxoc0dQUiwgcmhzLCBlY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQobGhzR1BSKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVj
eCk7CisgICAgICAgIG1vdmUobGhzR1BSLCBlYXgpOworICAgIH0KIAotICAgIG1vdmUocmVnVDQs
IHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWN4KSk7CiAgICAg
SnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgZWN4LCBUcnVzdGVk
SW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFs
LCBlYXgsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRlbm9taW5hdG9yTm90
TmVnMS5saW5rKHRoaXMpOwogICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwogICAgIHg4
NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgSnVtcCBudW1lcmF0
b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzR1BSLCBUcnVzdGVk
SW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAg
ICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19
CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IGVheCB9KTsKIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
LX0KLQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwot
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsK
LSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgc2V0SlNWYWx1ZShkc3QsIGVheCk7CisgICAgICAgIGlmIChpc1N1YnR5cGVTcGVjdWxh
dGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCeXRlY29kZU51bWJlcikgJiYgaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShyaHMpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKQorICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICBlbHNlIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKGxocyksIFNwZWNCaWdJbnQpICYmIGlz
U3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUocmhzKSwgU3BlY0JpZ0ludCkpCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQmlnSW50OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjQmlnSW50Owor
ICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZWF4KTsKIH0K
IAogI2VuZGlmIC8vIENQVShYODZfNjQpCkBAIC00NjQsNyArODA2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAog
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIERvdWJsZUNvbmRpdGlvbiBk
b3VibGVDb25kaXRpb24pCiB7CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CiAgICAgSnVtcExp
c3Qgbm90SW50MzJPcDI7CkBAIC00NzQsNiArODE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5t
X3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAorCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVn
VDEsIHJlZ1QwKTsKQEAgLTU2MiwxNSArOTA1LDEzIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZChjb25zdCBJbnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBT
bG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IElu
c3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9w
ZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24g
Kmluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24sIFNsb3dPcGVyYXRpb24gb3BlcmF0aW9uLCBi
b29sIGludmVydCwgU2xvd0Nhc2UmKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBlbWl0TG9hZChvcDEsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtNzI0LDEzICsx
MDY1LDY2IEBAIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGkKICAgICBl
bWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAvLyBGSVhNRTogaXQg
d291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNl
IHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAotICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRl
PihuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wTmVnYXRlPihuZWdJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUsIHNs
b3dDYXNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+Citib29sIEpJVDo6dHJ5RW1pdExP
TEJpdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoIXVzZUxPTCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKKworICAgIGF1dG8gYml0T3AgPSBbJl0gKEdQUlJlZyBsaHNHUFIs
IEdQUlJlZyByaHNHUFIpIHsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAuZ3ByKCk7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0YW5kPikKKyAgICAgICAgICAgIGFu
ZDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wQml0b3I+KQorICAgICAgICAgICAgb3IzMihsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PE9wLCBPcEJpdHhvcj4pCisgICAgICAgICAgICB4b3IzMihsaHNHUFIsIHJoc0dQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9w
LCBPcExzaGlmdD4pCisgICAgICAgICAgICBsc2hpZnQzMihsaHNHUFIsIHJoc0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE9wLCBPcFVy
c2hpZnQ+KQorICAgICAgICAgICAgdXJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3AsIE9wUnNoaWZ0
PikKKyAgICAgICAgICAgIHJzaGlmdDMyKGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgICAgIHNldEludDMyKHJlc3VsdCwgcmVzdWx0R1BSKTsKKyAgICB9OworCisgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludDMyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIob3AyKSkgewor
ICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICBJbnQzMk9w
ZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzLmdw
cigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworICAgICAgICBiaXRPcChs
aHNHUFIsIHJoc0dQUik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnQzMkNvbnZlcnRpbmcob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJbnQz
MkNvbnZlcnRpbmcob3AyKSkgeworICAgICAgICBJbnQzMkNvbnZlcnRpbmdPcGVyYW5kIGxocyB7
ICp0aGlzLCBvcDEgfTsKKyAgICAgICAgSW50MzJDb252ZXJ0aW5nT3BlcmFuZCByaHMgeyAqdGhp
cywgb3AyIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByaHNHUFIgPSByaHMuZ3ByKCk7CisgICAgICAgIGJpdE9wKGxoc0dQUiwgcmhzR1BSKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpA
QCAtNzQxLDE3ICsxMTM1LDggQEAgdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNv
bnN0IAogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNl
bHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBpZiAodHJ5RW1pdExPTEJpdEZhc3RQYXRoPE9w
PihjdXJyZW50SW5zdHJ1Y3Rpb24pKQorICAgICAgICByZXR1cm47CiAKICAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBAIC03
NjAsMzMgKzExNDUsMTA2IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25z
dCAKICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSk7CiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKICAgICAg
ICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikp
OwotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0aW9uYWw8VmFsdWVP
cGVyYW5kPiBsZWZ0VGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHJpZ2h0VGVtcDsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hUZW1wOworCisgICAgLy8gT09QUzogZ2V0IHNvbWUgaTMyIGZhc3QgcGF0aHMgaW4g
aGVyZS4KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsZWZ0VGVtcC5lbXBsYWNlKCp0
aGlzLCBvcDEpOworICAgICAgICByaWdodFRlbXAuZW1wbGFjZSgqdGhpcywgb3AyKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRUZW1wLT5n
cHIoKSB9OworICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgcmln
aHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICByZXN1bHRSZWdzID0gbGVmdFJl
Z3M7CisgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMjsKKworICAgICAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7CisgICAgICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNl
CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CiAgICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgaWYgKCFyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKKyNlbmRpZgogCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7
CiAKKyAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgp
KTsKICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworCisgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKwogICAg
IGlmIChwcm9maWxpbmdQb2xpY3kgPT0gUHJvZmlsaW5nUG9saWN5OjpTaG91bGRFbWl0UHJvZmls
aW5nKQotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRl
Y29kZSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSwg
cmVzdWx0UmVncy5ncHIoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlz
dCgpKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVu
VHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHBy
b3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5
cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OworICAgIH0gZWxz
ZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQml0bm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAorICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3AxIH07CisgICAgICAgIEdQ
UlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgYm9vbCByZXN1bHRJc0ludDMyID0gZmFsc2U7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnQzMihvcDEpKSB7CisgICAgICAgICAgICByZXN1bHRJc0ludDMyID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyKG9wMSwgaW5wdXRHUFIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gT09QUzogYWRkIGEgY2FzZSBmb3IgQmlnSW50MzIuCisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3Qp
OworICAgICAgICB9CisKKyAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbm90MzIocmVzdWx0R1BSKTsKKyAgICAgICAgYm94SW50MzIocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgIGlmIChyZXN1bHRJc0ludDMyKQorICAgICAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0ludDMyT25seTsgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQmlnSW50OyAKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CiAjZWxzZQpAQCAtODAzLDcgKzEyNjEsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9iaXRub3QoY29uc3QgSW5zdHJ1Y3RpCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBsZWZ0
UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtODQ5LDE5ICsxMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7
Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNl
bmRpZgorICAgIGlmICh0cnlFbWl0TE9MQml0RmFzdFBhdGg8T3A+KGN1cnJlbnRJbnN0cnVjdGlv
bikpCisgICAgICAgIHJldHVybjsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwog
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTg3MywyMSArMTMyMCw3NyBAQCB2
b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjb25zdCBJCiAKICAgICBSRUxFQVNFX0FT
U0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsK
IAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7CisgICAgSlNW
YWx1ZVJlZ3MgcmlnaHRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFI7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFI7CisgICAgRlBSUmVnIHNjcmF0
Y2hGUFIyID0gSW52YWxpZEZQUlJlZzsKKworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVm
dFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiByaWdodFRlbXA7CisgICAgT3B0aW9u
YWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3JhdGNoVGVt
cDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNoVGVtcEZQUjsKKworICAgIC8vIE9PUFM6
IGdldCBzb21lIGkzMiBmYXN0IHBhdGhzIGluIGhlcmUuCisKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgbGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1w
LmVtcGxhY2UoKnRoaXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisgICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVt
cEZQUi5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzIHsg
bGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmln
aHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyByZXN1
bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdwcigp
OworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUFItPmZwcigpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBzY3JhdGNoRlBSID0gZnBS
ZWdUMDsKKworICAgICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAgICAgIGlmICghcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOworICAgIH0KKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyBzY3JhdGNoRlBSMiA9IGZwUmVnVDI7CisK
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlm
CiAKICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0U2hpZnRUeXBlKTsKKyAgICAgICAgc2NyYXRj
aEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjIsIHNuaXBwZXRTaGlmdFR5cGUpOwogCiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFz
dFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVzdWx0KTsKKworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlw
ZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYmIGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3Zl
blR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUo
cmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjQW55SW50QXNEb3VibGU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNJbnQzMk9ubHkgfCBTcGVj
QmlnSW50OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKIAotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTkwMiwxOCArMTQwNSw2NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQWRkPigpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwor
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVJ
bnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgbGhzIHsgKnRoaXMsIG9wMSB9
OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKworICAgICAg
ICAgICAgaWYgKGFyaXRoUHJvZmlsZS5kaWRPYnNlcnZlSW50MzJPdmVyZmxvdygpKSB7CisgICAg
ICAgICAgICAgICAgRlBSVGVtcCBsaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQ
UlRlbXAgcmhzRlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIHJlc3VsdEZQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUobGhzLmdw
cigpLCBsaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJocy5ncHIoKSwgcmhzRlBSLmZwcigpKTsKKyAgICAgICAgICAgICAgICBhZGREb3VibGUobGhz
RlBSLmZwcigpLCByaHNGUFIuZnByKCksIHJlc3VsdEZQUi5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgc2V0RG91YmxlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRGUFIuZnByKCkpOworICAgICAgICAg
ICAgICAgIHByb3ZlblR5cGUoYnl0ZWNvZGUubV9kc3QpID0gU3BlY0FueUludEFzRG91YmxlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0
aGlzIH07CisgICAgICAgICAgICAgICAgbW92ZShsaHMuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpPdmVyZmxvdywgYnJhbmNoQWRkMzIo
T3ZlcmZsb3csIHJocy5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc2V0
SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVP
cGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIGFkZERvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkg
eworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAg
ICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlJl
ZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZw
cigpOworICAgICAgICAgICAgRlBSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIGFkZERvdWJsZShs
aHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29k
ZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygmYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KICAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNT
bG93PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CkBAIC05MjQsMTUg
KzE0NzUsMzUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBz
YW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVu
dEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBz
bG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVnczsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworCisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzcmNUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc3JjVGVtcC5lbXBsYWNlKCp0aGlzLCBvcGVyYW5kKTsKKyAgICAg
ICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFj
ZSgqdGhpcyk7CisKKyAgICAgICAgc3JjUmVncyA9IEpTVmFsdWVSZWdzIHsgc3JjVGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzIHsgcmVzdWx0VGVtcC0+Z3By
KCkgfTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1l
IHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgorICAgICAgICAvLyBTaW5jZSByZWdUMT09YXJndW1l
bnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcgcmVnaXN0ZXIgdG8gY2FsbCB0aGUg
c2xvdyBwYXRoLgorICAgICAgICBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAg
ICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgICAgICBzY3JhdGNoR1BSID0g
cmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7
CisgICAgfQogI2Vsc2UKICAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQpAQCAtOTQxLDE5ICsxNTEyLDIyIEBAIHZvaWQgSklUOjplbWl0TWF0aElD
RmFzdChKSVRVbmFyeU1hdGhJQzwKIAogICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOwotCiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRl
JiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0
ZXJhdG9yLT52YWx1ZTsKIAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+
Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFn
ZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgICAg
IFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgp
OwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKLSAgICB9IGVsc2UKKyAg
ICB9IGVsc2UgeworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3Vs
dFJlZ3MuZ3ByKCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQo
c3JjUmVncy5ncHIoKSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aEp1bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7CkBAIC05NjMsNyArMTUzNywxNCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgfSk7CiAjZW5kaWYKIAotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3VsdFJlZ3MuZ3ByKCkpOwor
ICAgICAgICBpZiAoaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcGVyYW5kKSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNC
eXRlY29kZU51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1
bHQpID0gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KQEAgLTk3NCwzOSArMTU1NSw4
MiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIg
PSBieXRlY29kZS5tX3JoczsKIAorICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gcmlnaHRUZW1wRlA7CiAjZWxzZQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIEZQUlJlZyBsZWZ0
RlBSID0gZnBSZWdUMDsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBmcFJlZ1QxOwogICAgIEZQUlJl
ZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKICNlbmRpZgogCi0gICAgU25pcHBldE9wZXJhbmQgbGVm
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9w
ZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRW
YWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkgeworICAgICAgICAgICAgbGVmdFRlbXAuZW1wbGFj
ZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBsZWZ0
VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHJpZ2h0
VGVtcC5lbXBsYWNlKCp0aGlzLCBvcDIpOworICAgICAgICAgICAgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MgeyByaWdodFRlbXAtPmdwcigpIH07CisgICAgICAgIH0KIAotICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdl
dE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSk7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7Cisg
ICAgICAgIHNjcmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQ
LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAg
ICAgICByaWdodFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyByZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaFRlbXAtPmdwcigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+
ZnByKCk7CisgICAgICAgIGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmln
aHRGUFIgPSByaWdodFRlbXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QyKTsKKyAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBzY3JhdGNoRlBSID0gZnBSZWdUMjsKKyAg
ICAgICAgbGVmdEZQUiA9IGZwUmVnVDA7CisgICAgICAgIHJpZ2h0RlBSID0gZnBSZWdUMTsKIAot
ICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpOworICAgICAgICBpZiAoIUdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlk
Q29uc3RhbnQobGVmdE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5k
VmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQogCi0gICAgbWF0aElDLT5tX2dlbmVyYXRv
ciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
KTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0
RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAKICAgICBBU1NFUlQoIShHZW5lcmF0
b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6
OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7CiAgICAgCi0gICAg
aWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAo
IUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpCi0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CiAjZW5k
aWYKQEAgLTEwMTUsMTcgKzE2MzksMzQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJp
bmFyeU1hdGhJQwogCiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5l
cmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVy
YXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAg
IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKyAgICAgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgICAgICAgICAg
bGVmdFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzIHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICByaWdodFRlbXAuZW1w
bGFjZSgqdGhpcywgb3AyKTsKKyAgICAgICAgICAgICAgICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyB7IHJpZ2h0VGVtcC0+Z3ByKCkgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3Bp
bGxGb3JDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGVmdE9wZXJh
bmQuaXNDb25zdCgpKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7CisgICAgICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQorICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworICAgICAgICB9CisKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2Ug
eworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdFJlZ3MuZ3By
KCksIHJlc3VsdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQobGVmdFJlZ3Mu
Z3ByKCkpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJpZ2h0UmVncy5ncHIo
KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIGlubGlu
ZUVuZCA9IGxhYmVsKCk7CkBAIC0xMDM1LDExICsxNjc2LDIwIEBAIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICB9KTsKICNlbmRpZgogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKG9wMSksIFNwZWNCeXRlY29kZU51bWJl
cikgJiYgaXNTdWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDIpLCBTcGVjQnl0ZWNvZGVO
dW1iZXIpKQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVjb2RlTnVt
YmVyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWVfdjxPcCwgT3BBZGQ+KQorICAgICAg
ICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0hlYXBUb3A7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNI
ZWFwQmlnSW50OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJv
ZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
biByZXBhdGNoRnVuY3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKICAgICBNYXRoSUNHZW5l
cmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTEwNDgsOCAr
MTY5OCw4IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVl
UmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkg
fTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkgfTsKICNlbHNlCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7CkBAIC0xMDg1LDcgKzE3MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5h
bWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
IHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRj
aEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewogICAgIE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7
CiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwpAQCAt
MTA5NSwxNiArMTc0NSw2IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVl
UmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOwotI2VuZGlmCi0gICAgCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9w
ZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKIApAQCAt
MTExNSwxNSArMTc1NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDCiAKICAgICBBU1NFUlQoIShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChy
aWdodE9wZXJhbmQpKSk7CiAKLSAgICBpZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBpZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlk
Q29uc3RhbnQocmlnaHRPcGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkgfTsKKyAgICBpZiAo
R2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpIHsKKyAg
ICAgICAgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3By
KCkgfTsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyB7IHJpZ2h0UmVncy5ncHIoKSA9
PSByZWdUMiA/IHJlZ1QzIDogcmVnVDIgfTsKKyAgICB9IGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNS
aWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpIHsKKyAgICAgICAgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyB7IHNsb3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKSB9OworICAgICAg
ICByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyB7IGxlZnRSZWdzLmdwcigpID09IHJlZ1QwID8gcmVn
VDEgOiByZWdUMCB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCkgfTsKKyAgICAgICAgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MgeyBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCkgfTsKKyAgICB9CisjZWxz
ZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyNlbmRpZgorICAgIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7
CiAjZW5kaWYKIAorICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dChyaWdodE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKKwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkKQEAgLTExNTYsMjMgKzE4MTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1f
bGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gZnBSZWdUMjsKLQotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0KICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwogCkBAIC0xMTg4LDYy
ICsxODMyLDIzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AyKSkKICAgICAgICAgcmlnaHRP
cGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKICNl
bmRpZgotCiAgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVnczsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIEZQUlJlZyBzY3JhdGNo
RlBSOworICAgIEZQUlJlZyBsZWZ0RlBSOworICAgIEZQUlJlZyByaWdodEZQUjsKKworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gbGVmdFRlbXA7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiByaWdodFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VGVtcDsKKyAgICBPcHRp
b25hbDxHUFJUZW1wPiBzY3JhdGNoVGVtcDsKKyAgICBPcHRpb25hbDxGUFJUZW1wPiBzY3JhdGNo
VGVtcEZQOworICAgIE9wdGlvbmFsPEZQUlRlbXA+IGxlZnRUZW1wRlA7CisgICAgT3B0aW9uYWw8
RlBSVGVtcD4gcmlnaHRUZW1wRlA7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgbGVm
dFRlbXAuZW1wbGFjZSgqdGhpcywgb3AxKTsKKyAgICAgICAgcmlnaHRUZW1wLmVtcGxhY2UoKnRo
aXMsIG9wMik7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNj
cmF0Y2hUZW1wLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY3JhdGNoVGVtcEZQLmVtcGxhY2Uo
KnRoaXMpOworICAgICAgICBsZWZ0VGVtcEZQLmVtcGxhY2UoKnRoaXMpOworICAgICAgICByaWdo
dFRlbXBGUC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
IHsgbGVmdFRlbXAtPmdwcigpIH07CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzIHsg
cmlnaHRUZW1wLT5ncHIoKSB9OworICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRUZW1wLT5ncHIoKSB9OworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFRlbXAtPmdw
cigpOworICAgICAgICBzY3JhdGNoRlBSID0gc2NyYXRjaFRlbXBGUC0+ZnByKCk7CisgICAgICAg
IGxlZnRGUFIgPSBsZWZ0VGVtcEZQLT5mcHIoKTsKKyAgICAgICAgcmlnaHRGUFIgPSByaWdodFRl
bXBGUC0+ZnByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgICAgIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICAg
ICAgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7Cisg
ICAgICAgIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgICAgICBsZWZ0RlBSID0gZnBSZWdUMDsK
KyAgICAgICAgcmlnaHRGUFIgPSBmcFJlZ1QxOworCisgICAgICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICAgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgfQorI2Vsc2UKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisgICAgRlBSUmVnIGxl
ZnRGUFIgPSBmcFJlZ1QwOworICAgIEZQUlJlZyByaWdodEZQUiA9IGZwUmVnVDE7CisKICAgICBp
ZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKICAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworI2VuZGlmCisgICAg
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOworICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKIAogICAgIEpJVERpdkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBS
ZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgbGVm
dEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKICAgICBpZiAoZ2VuLmRpZEVtaXRG
YXN0UGF0aCgpKSB7CiAgICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSwgcmVzdWx0UmVncy5ncHIoKSwgcmVz
dWx0KTsKIAotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAg
ICAgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQsIHJlc3Vs
dFJlZ3MuZ3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJU
KGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwogICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRo
SnVtcExpc3QoKS5lbXB0eSgpKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CiAgICAgICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfZGl2KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICAgICAgd2lsbERl
ZihyZXN1bHQpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpZiAoaXNT
dWJ0eXBlU3BlY3VsYXRpb24ocHJvdmVuVHlwZShvcDEpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpICYm
IGlzU3VidHlwZVNwZWN1bGF0aW9uKHByb3ZlblR5cGUob3AyKSwgU3BlY0J5dGVjb2RlTnVtYmVy
KSkKKyAgICAgICAgICAgIHByb3ZlblR5cGUocmVzdWx0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdmVuVHlwZShyZXN1bHQpID0gU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY0JpZ0ludDsKICAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBt
dWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpOworICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVJbnQzMihvcDIpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgbGhzIHsgKnRoaXMsIG9wMSB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJocyB7ICp0
aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHMuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzLmdwcigpOworCisgICAgICAgICAgICBpZiAoYXJp
dGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93KCkgfHwgYXJpdGhQcm9maWxlLmRpZE9i
c2VydmVOZWdaZXJvRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc1RlbXAg
eyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICAgICAgRlBSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAg
ICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0
RlBSID0gcmVzdWx0VGVtcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShsaHNHUFIsIGxoc0ZQUik7CisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmhzR1BSLCByaHNGUFIpOworICAgICAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJo
c0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdEZQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQ
UlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6T3Zl
cmZsb3csIGJyYW5jaE11bDMyKE92ZXJmbG93LCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKSk7
CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEV4aXRLaW5kOjpOZWdhdGl2ZVplcm8s
IGJyYW5jaDMyKExlc3NUaGFuLCBsaHNHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeGl0S2luZDo6TmVnYXRpdmVaZXJvLCBicmFuY2gzMihMZXNzVGhh
biwgcmhzR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVE
b3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAqdGhpcywgb3Ax
IH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIgfTsKKyAgICAg
ICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNG
UFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAg
IG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AxKSAmJiBzaG91
bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3BlcmFuZCBsaHMg
eyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7ICp0aGlzLCBv
cDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAg
IEZQUlJlZyBsaHNGUFIgPSBsaHMuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgcmhzRlBSID0g
cmhzLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsK
KyAgICAgICAgICAgIG11bERvdWJsZShsaHNGUFIsIHJoc0ZQUiwgcmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRNdWxJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNl
X2Nhc3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworICAgIGVtaXRNYXRoSUNTbG93
PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVs
T3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9j
b2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MSA9IGJ5dGVjb2RlLm1fbGhzOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNv
ZGUubV9yaHM7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihvcDEpICYmIHNob3Vs
ZFNwZWN1bGF0ZUludDMyKG9wMikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzIHsgKnRoaXMsIG9wMiB9
OworCisgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLmRpZE9ic2VydmVJbnQzMk92ZXJmbG93
KCkpIHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wIGxoc0ZQUiB7ICp0aGlzIH07CisgICAgICAg
ICAgICAgICAgRlBSVGVtcCByaHNGUFIgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEZQUlRl
bXAgcmVzdWx0RlBSIHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShsaHMuZ3ByKCksIGxoc0ZQUi5mcHIoKSk7CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocmhzLmdwcigpLCByaHNGUFIuZnByKCkpOworICAgICAgICAgICAgICAgIHN1
YkRvdWJsZShsaHNGUFIuZnByKCksIHJoc0ZQUi5mcHIoKSwgcmVzdWx0RlBSLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICBzZXREb3VibGUoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdEZQUi5mcHIoKSk7
CisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX2RzdCkgPSBTcGVjQW55SW50
QXNEb3VibGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoRXhpdEtpbmQ6Ok92
ZXJmbG93LCBicmFuY2hTdWIzMihPdmVyZmxvdywgbGhzLmdwcigpLCByaHMuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKGJ5dGVjb2RlLm1fZHN0LCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVEb3VibGUob3AxKSAmJiBzaG91bGRT
cGVjdWxhdGVEb3VibGUob3AyKSkgeworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBsaHMgeyAq
dGhpcywgb3AxIH07CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHJocyB7ICp0aGlzLCBvcDIg
fTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIHN1
YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIob3Ax
KSAmJiBzaG91bGRTcGVjdWxhdGVOdW1iZXIob3AyKSkgeworICAgICAgICAgICAgTnVtYmVyT3Bl
cmFuZCBsaHMgeyAqdGhpcywgb3AxIH07CisgICAgICAgICAgICBOdW1iZXJPcGVyYW5kIHJocyB7
ICp0aGlzLCBvcDIgfTsKKyAgICAgICAgICAgIEZQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIHN1YkRvdWJsZShsaHMuZnByKCksIHJocy5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShieXRlY29kZS5tX2RzdCwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVFN1YklDKiBzdWJJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQygmYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBKSVRTdWJJQyogc3ViSUMg
PSBiaXR3aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUpOworICAgIGVtaXRN
YXRoSUNTbG93PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlU3ViT3B0aW1pemUsIHNsb3dDYXNlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1BfUE9XIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwxMSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNv
ZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9u
Rm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0
ZXIoKSwgcmVnVDApOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBkZXN0aW5hdGlvbkZvcihi
eXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgd2lsbERlZihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVh
cFRvcDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNDUsMTAgKzE0OSw4IEBAIGJv
b2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxM
aW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxs
LCByZWdUMCk7CkBAIC0yMTYsNiArMjE4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29k
ZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRl
ciByZXR1cm4uCiAgICAgKi8KKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQog
ICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwpAQCAtMjY0LDEzICsyNjksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBTbG93Q2FzZSYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIEFTU0VSVChv
cGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKQEAgLTMzNCw0NCArMzM3
LDQ0IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnUKICAgICBjb21w
aWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcFRh
aWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xv
d0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlcik7CisgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY3VycmVudElu
c3RydWN0aW9uLCBzbG93Q2FzZSk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92
YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBz
bG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsVmFyYXJncz4oY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dD
YXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dDYXNlLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndh
cmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVu
dHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dD
YXNlJiBzbG93Q2FzZSkKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpAQCAtMzg2LDYgKzM4
OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgICAg
IH0KICAgICB9KSgpOwogCisgICAgLy8gT09QUzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdl
IHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cgY2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRp
cGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBpdHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0
byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOwor
CisgICAgLy8gT09QUzogZmlndXJlIG91dCBob3cgdG8gcmVnYWxsb2MgdGhlIHJlc3VsdCBoZXJl
PworCisgICAgc3BpbGxGb3JDYWxsKCk7CisKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGluc3RydWN0aW9uLCB0cnlGYXN0RnVuY3Rpb24pOwogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRl
cmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKQEAgLTM5NSwzMCArNDA1LDM4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICAvLyBjYWxsIHJlc3VsdCAoaXRlcmF0
b3IpIGlzIGluIHJlZ1QwCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnBy
b3BlcnR5TmFtZXMtPm5leHQ7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IG5leHRDaGVja3BvaW50U2xvdzsKKyAgICBuZXh0Q2hl
Y2twb2ludFNsb3cuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgbmV4dENoZWNrcG9pbnRTbG93LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKKyAgICBzbG93Q2FzZS5qdW1wcy5hcHBlbmQobmV4
dENoZWNrcG9pbnRTbG93KTsKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25leHQpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1w
IHJlc3VsdFRlbXAgeyAqdGhpcywgcmVnVDAgfTsKKyAgICAgICAgR1BSUmVnIHNob3VsZEJlUmVn
VDAgPSByZXN1bHRUZW1wLmdwcigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRCZVJl
Z1QwID09IHJlZ1QwKTsKKyAgICAgICAgc2V0SlNWYWx1ZShieXRlY29kZS5tX25leHQsIHJlZ1Qw
KTsKKyAgICAgICAgcHJvdmVuVHlwZShieXRlY29kZS5tX25leHQpID0gU3BlY0hlYXBUb3A7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0
LCByZWdUMCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFNsb3dDYXNl
JiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVu
PihpbnN0cnVjdGlvbiwgc2xvd0Nhc2UsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKIAogICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKQEAgLTQ1
Niw2ICs0NzQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgog
ICAgICAgICB9CiAgICAgfSkoKTsKIAorICAgIHNwaWxsRm9yQ2FsbCgpOworCisgICAgLy8gT09Q
UzogTG9naWNhbGx5LCBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBoYXZlIG11bHRpcGxlIHNsb3cg
Y2FzZXMgcGVyIGJ5dGVjb2RlcyB3aXRoIG11bHRpcGxlIGNoZWNrcG9pbnRzLiBFYWNoIGhhcyBp
dHMgb3duIHJlc3VsdCwgZXRjLi4uCisgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2Fz
ZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25leHQsIHJlZ1QwKTsKICAgICBKdW1wIGdlbmVyaWNDYXNlID0gYnJhbmNo
SWZOb3RFbXB0eShyZWdUMCk7CiAKQEAgLTQ3NiwzNyArNDk5LDQ0IEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0
R1BSKTsKIAogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJS
ZXN1bHRHUFIpOworICAgICAgICBKdW1wTGlzdCBkb25lQ2hlY2twb2ludFNsb3dQYXRoOworICAg
ICAgICBkb25lQ2hlY2twb2ludFNsb3dQYXRoLmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJl
c3VsdEdQUikpOwogCi0gICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3Mu
YWRkKHZhbHVlR1BSKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVuYXZh
aWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCh2YWx1
ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCB1c2VkUmVn
aXN0ZXJzLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBkb25lQ2hlY2twb2ludFNsb3dQ
YXRoLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKGRvbmVD
aGVja3BvaW50U2xvd1BhdGgpOworCisgICAgICAgIHdpbGxEZWYoYnl0ZWNvZGUubV9kb25lKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgZG9uZUdQUik7CiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAg
ICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QzOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGZhbHNlOwogICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgICAgIEp1bXBMaXN0IHZhbHVlQ2hlY2twb2ludFNs
b3dQYXRoOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAogICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgICAgICB2YWx1ZUNoZWNrcG9pbnRTbG93UGF0aC5hcHBlbmQoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHMuYXBwZW5kKHZhbHVlQ2hl
Y2twb2ludFNsb3dQYXRoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVl
R1BSIH0pOworICAgICAgICB3aWxsRGVmKGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCB2YWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0
ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKQEAgLTUxNSwxMCArNTQ1LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBzbG93Q2FzZSwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CkBA
IC01MjYsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
cwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7CiAg
ICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKLSAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKKyAgICAgICAgc2xvd0Nhc2UuanVtcHNbMV0ubGluayh0aGlzKTsKICAg
ICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CiAgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwpAQCAtNTQ4LDcgKzU3Nyw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICB9CiAKICAgICB7ICAgCi0g
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgICAgIHNsb3dDYXNlLmp1bXBzWzJd
LmxpbmsodGhpcyk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCkBAIC01
NjEsNyArNTkwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAg
ICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGNvbnN0
IGNoYXIqIEpJVENvZGU6OnR5cGVOYW1lKEpJVFR5cGUgamkKICAgICAgICAgcmV0dXJuICJMTElu
dCI7CiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgcmV0dXJuICJCYXNl
bGluZSI7CisgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6CisgICAgICAgIHJldHVybiAiTE9MIjsK
ICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICAgICAgcmV0dXJuICJERkciOwogICAgIGNh
c2UgSklUVHlwZTo6RlRMSklUOgpAQCAtMTA4LDcgKzExMCw3IEBAIEpJVENvZGVXaXRoQ29kZVJl
Zjo6SklUQ29kZVdpdGhDb2RlUmVmKEMKIAogSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdp
dGhDb2RlUmVmKCkKIHsKLSAgICBpZiAoKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHko
KSkpCisgICAgaWYgKChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAoaXNERkdPckZUTChq
aXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKSkKICAgICAgICAgJiYg
bV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpKQogICAgICAgICBkYXRhTG9nKCJEZXN0cm95aW5nIEpJ
VCBjb2RlIGF0ICIsIHBvaW50ZXJEdW1wKG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKSksICJcbiIp
OwogfQpAQCAtMjM3LDYgKzIzOSwxMSBAQCBOYXRpdmVET01KSVRDb2RlOjpOYXRpdmVET01KSVRD
b2RlKENvZGVSCiAjaWYgRU5BQkxFKEpJVCkKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdp
c3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENh
bGxTaXRlSW5kZXgpCiB7CisgICAgLy8gRm9yIEJhc2VsaW5lIEpJVCwgdGhpcyBpcyB0cml2aWFs
bHkgdHJ1ZS4KKyAgICAvLyBGb3IgTE9MIEpJVCwgZXZlcnl0aGluZyBpcyBhbHJlYWR5IHNwaWxs
ZWQgdG8gdGhlIHN0YWNrIGF0IGVhY2ggb3Bjb2RlLCBzbyB3aGVuIHdlCisgICAgLy8gZ28gdG8g
dGhlIG9wX2NhdGNoLCB0aGUgbGl2ZSBzdGF0ZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIHJpZ2h0
IHBsYWNlIG9uIHRoZSBzdGFjay4KKyAgICAvLyBBbHNvLCBvcF9jYXRjaCBoYXMgbm8gaW5jb21p
bmcgcmVnaXN0ZXIvdHlwZSBwcm9vZiBzdGF0ZSwgc28gaXQncyB0cml2aWFsIHRvIGNhdGNoCisg
ICAgLy8gYW4gZXhjZXB0aW9uIGluIExPTCBqdXN0IGJ5IGp1bXBpbmcgdG8gb3BfY2F0Y2guCiAg
ICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgSklUVHlw
ZSA6IHVpbnQ4X3QgewogICAgIEhvc3RDYWxsVGh1bmssCiAgICAgSW50ZXJwcmV0ZXJUaHVuaywK
ICAgICBCYXNlbGluZUpJVCwKKyAgICBMT0xKSVQsCiAgICAgREZHSklULAogICAgIEZUTEpJVAog
fTsKQEAgLTY3LDM2ICs2OCwyMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciog
dHlwZU5hbWUoSklUVHlwZSk7CiAKLSAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKSVRUeXBlOjpCYXNlbGluZUpJVDsKLSAgICB9Ci0gICAg
CiAgICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCiAgICAgewogICAgICAgICByZXR1cm4g
SklUVHlwZTo6RlRMSklUOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGll
ckpJVChKSVRUeXBlIGppdFR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsK
LSAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBK
SVRUeXBlOjpERkdKSVQ7Ci0gICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICAg
ICAgcmV0dXJuIEpJVFR5cGU6OkZUTEpJVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSklUVHlw
ZTo6Tm9uZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBzdGF0aWMgYm9vbCBpc0V4ZWN1
dGFibGVTY3JpcHQoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChqaXRU
eXBlKSB7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToKICAgICAgICAgY2FzZSBKSVRUeXBl
OjpIb3N0Q2FsbFRodW5rOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZh
dWx0OgorCisgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpMT0xKSVQ6
CisgICAgICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkZU
TEpJVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA3
LDcgKzk1LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOgogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSklUVHlwZTo6Tm9uZToK
KyAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBjYXNlIEpJVFR5
cGU6OkxPTEpJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CisgICAgICAgIGNhc2Ug
SklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTE2LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
aml0VHlwZSkgewogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBj
YXNlIEpJVFR5cGU6OkxPTEpJVDoKICAgICAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6CiAgICAg
ICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MjQsNiArMTE3LDI0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBi
b29sIGNhbGxTaXRlQml0c0FyZUJ5dGNvZGVJbmRleChKSVRUeXBlIGppdFR5cGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rOgorICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgorICAgICAgICBj
YXNlIEpJVFR5cGU6OkxPTEpJVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIEpJVFR5cGU6OkRGR0pJVDoKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBKSVRUeXBlOjpOb25lOgorICAg
ICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIHN0YXRpYyBib29sIGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklU
VHlwZSBleHBlY3RlZEhpZ2hlcikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhl
Y3V0YWJsZVNjcmlwdChleHBlY3RlZExvd2VyKSk7CkBAIC0xNDUsOSArMTU2LDE5IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBpc0xvd2VyT3JTYW1lVGllcihleHBlY3RlZExvd2Vy
LCBleHBlY3RlZEhpZ2hlcik7CiAgICAgfQorCisgICAgc3RhdGljIGJvb2wgdXNlc1JlcGxhY2Vt
ZW50Q29kZUJsb2NrKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRU
eXBlID09IEpJVFR5cGU6OkxPTEpJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBq
aXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wg
aXNPcHRpbWl6aW5nSklUKEpJVFR5cGUgaml0VHlwZSkKICAgICB7CisgICAgICAgIHJldHVybiBq
aXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCB8
fCBqaXRUeXBlID09IEpJVFR5cGU6OkxPTEpJVDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBp
c0RGR09yRlRMKEpJVFR5cGUgaml0VHlwZSkKKyAgICB7CiAgICAgICAgIHJldHVybiBqaXRUeXBl
ID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVDsKICAgICB9
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhj
ZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBnZW5lcmlj
VW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYQogICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNv
ZGUgb2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKICAg
ICAgICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhp
dHMgdG8gaGFuZGxlci0+dGFyZ2V0CiAgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0g
ICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmppdFR5cGUoKSkpCisgICAgICAgIGlmICghSklUQ29kZTo6aXNERkdPckZUTChjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY2F0Y2hQQ0ZvckludGVy
cHJldGVyID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxl
ci0+dGFyZ2V0KS5wdHIoKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBjYXRjaFJvdXRpbmUg
PSBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ1LDYgKzE0Niw3IEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAvLyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5n
cyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRoIGRvbid0IHNwaWxsIHRvIHRoZSBzdGFj
ayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQpAQCAtMTU3LDYgKzE1OSw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAv
LyBPT1BTOiBNYWtlIGl0IHNvIHRoaW5ncyB0aGF0IGNhbGwgdGhpcyBvbiB0aGUgZmFzdCBwYXRo
IGRvbid0IHNwaWxsIHRvIHRoZSBzdGFjayB0d2ljZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTY3LDI1ICsx
NzAsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdp
c3RlciByZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQotewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQo
KSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChpdGVyICE9
IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRl
Y29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwpA
QCAtMjA3LDI3ICsxOTEsMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZQogICAgIGp1bXAubGlua1RvKGl0ZXItPnZhbHVlLCB0aGlzKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wKQorQUxXQVlTX0lOTElORSBTbG93
Q2FzZSYgSklUOjplbnN1cmVTbG93Q2FzZShSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgCisgICAgaWYgKCFtX3Nsb3dDYXNl
cy5zaXplKCkgfHwgbV9zbG93Q2FzZXMubGFzdCgpLmJ5dGVjb2RlSW5kZXggIT0gbV9ieXRlY29k
ZUluZGV4KSB7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChtX2J5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBpZiAobV91c2VMT0wpCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5sYXN0KCkuc2F2
ZVBsYW4gPSBzbG93UGF0aFNhdmVQbGFuKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhZHN0
LmlzVmFsaWQoKSA9PSAhIXJlc3VsdCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5yZXN1
bHQgPSByZXN1bHQ7CisgICAgICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5kc3QgPSBkc3Q7CisgICAg
ICAgIG1fc2xvd0Nhc2VzLmxhc3QoKS5qdW1wcy5hcHBlbmQoSnVtcExpc3QgeyB9KTsKKyAgICB9
CisgICAgcmV0dXJuIG1fc2xvd0Nhc2VzLmxhc3QoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBqdW1wLCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAgZm9yIChjb25zdCBKdW1wJiBq
dW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CisgICAgZW5zdXJlU2xvd0Nhc2UocmVz
dWx0LCBkc3QpLmp1bXBzWzBdLmFwcGVuZChqdW1wKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YWRkU2xvd0Nhc2UoKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2Uo
Y29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBSZWcgcmVzdWx0LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgotICAgIAotICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2lu
ZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKKworICAgIGF1
dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0LCBkc3QpOworICAgIGZvciAoY29u
c3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCisgICAgICAgIHNsb3dDYXNlLmp1bXBz
WzBdLmFwcGVuZChqdW1wKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChK
dW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKQEAgLTQwNiwxMSArMzk5LDYgQEAgQUxXQVlT
X0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29ucwogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCi17Ci0gICAgc3RvcmVUcnVzdGVk
VmFsdWUoanNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpAQCAtNzE3LDYgKzcwNSwxOCBAQCBBTFdBWVNf
SU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpz
dHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFNsb3dPcChGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCwgU3BlY3VsYXRlZFR5
cGUgZHN0VHlwZSkKK3sKKyAgICBzcGlsbEZvckNhbGwoKTsKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZnVuY3Rpb24pOworICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgaWYgKG1fdXNlTE9MICYmIGRzdC5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gZHN0VHlwZTsKKyAgICAgICAgd2lsbERlZihkc3Qp
OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyNzEz
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIH07CiAKLSAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjb2RlQmxvY2stPmppdFR5cGUoKSk7CisgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGlu
ZyA9ICFKSVRDb2RlOjppc0RGR09yRlRMKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKIAogICAgICAg
ICBpZiAobV9nZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoKSB7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI3MTM3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTgyLDggKzE4MCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAg
LTIwMCw4ICsxOTYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC03NTYsOCArNzUwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKQEAgLTc2Niw4
ICs3NTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CkBAIC0xMjQyLDggKzEyMzIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkJh
c2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5j
bHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FzdC5oIgpA
QCAtNDEsNiArNDIsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgi
CisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTUxLDYgKzU0LDI4
IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwogCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9PUFM6
IElmIHdlIGNoYW5nZSByZWdhbGxvYyBzdWNoIHRoYXQgdGhlcmUgY2FuIGJlIE4gcmVnaXN0ZXJz
IHBlciBsb2NhbCwgd2UgY2FuIG1ha2UgdGhpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0d28g
cmVncy4KKyAgICAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkgJiYgZ3ByRm9yT3BlcmFuZChzcmMp
ID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07
CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVu
VHlwZShzcmMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNyYy5pc0NvbnN0
YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCkBAIC05MCwzMiArMTE1LDUz
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIKICAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgUmVnaXN0
ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJl
Z1QxOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1
bHRSZWc7CisgICAgR1BSUmVnIGFsbG9jYXRvclJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZzsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1wOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGFsbG9jYXRvclRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHJlc3VsdFRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAg
ICAgIGFsbG9jYXRvclRlbXAuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hUZW1wLmVt
cGxhY2UoKnRoaXMpOworCisgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdFRlbXAtPmdwcigpOwor
ICAgICAgICBhbGxvY2F0b3JSZWcgPSBhbGxvY2F0b3JUZW1wLT5ncHIoKTsKKyAgICAgICAgc2Ny
YXRjaFJlZyA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1
bHRSZWcgPSByZWdUMDsKKyAgICAgICAgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgICAgIHNj
cmF0Y2hSZWcgPSByZWdUMjsKKyAgICB9CiAKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRS
ZWcpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciks
IGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0
Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMsIHJlc3VsdFJlZywgYnl0ZWNv
ZGUubV9kc3QpOwogICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOworICAgICAgICBwcm92ZW5UeXBlKGJ5dGVj
b2RlLm1fZHN0KSA9IFNwZWNGaW5hbE9iamVjdDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93
Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5y
ZXN1bHQuZ3ByKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3Rh
bmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUsMjMgKzE3
MSw1MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVn
VDApOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIGNvbnN0cnVjdG9yR1BSOwor
ICAgIEdQUlJlZyBpbnN0YW5jZUdQUjsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRUZW1w
OworICAgIC8vIE9PUFM6IGludmVudCBLbm93bkNlbGxPcGVyYW5kCisgICAgT3B0aW9uYWw8Q2Vs
bE9wZXJhbmQ+IGNvbnN0cnVjdG9yVGVtcDsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGhh
c0luc3RhbmNlVGVtcDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBjb25zdHJ1Y3Rv
clRlbXAuZW1wbGFjZSgqdGhpcywgY29uc3RydWN0b3IpOworICAgICAgICBoYXNJbnN0YW5jZVRl
bXAuZW1wbGFjZSgqdGhpcywgaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdFRlbXAu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgY29uc3RydWN0b3JHUFIgPSBjb25zdHJ1Y3RvclRl
bXAtPmdwcigpOworICAgICAgICBpbnN0YW5jZUdQUiA9IGhhc0luc3RhbmNlVGVtcC0+Z3ByKCk7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFRlbXAtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdHJ1Y3RvckdQUiA9IHJlZ1Qx
OworICAgICAgICBpbnN0YW5jZUdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaW5zdGFuY2VHUFIpOworICAgIH0KIAogICAgIC8v
IFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBk
by4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFz
SW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgaW5zdGFuY2VHUFIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFu
Y2VTeW1ib2xGdW5jdGlvbigpKSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0
cnVjdG9yLCByZWdUMCk7CisgICAgaWYgKCF1c2VMT0woKSkKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOwogCiAgICAgLy8gQ2hlY2sg
dGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUg
b2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIHRlc3Q4KFplcm8s
IEFkZHJlc3MoY29uc3RydWN0b3JHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOwor
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmso
dGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDAp
OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7
CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BS
KTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTUxLDQwICsyMjQsOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2Fk
IHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGlu
dG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3
aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0
aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hl
Y2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlz
IGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0g
ICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAg
cmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgT3B0aW9uYWw8
Q2VsbE9wZXJhbmQ+IHZhbHVlVGVtcENlbGw7CisgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5k
PiBwcm90b1RlbXBDZWxsOworICAgICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVGVt
cDsKKyAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBwcm90b1RlbXA7CisKKyAgICAgICAg
R1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVtcCBzY3JhdGNoMVRl
bXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7ICp0aGlzIH07CisK
KyAgICAgICAgR1BSUmVnIHByb3RvR1BSOworICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisKKyAg
ICAgICAgcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgc2NyYXRjaDFUZW1wLmdwcigpOworICAg
ICAgICBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwodmFsdWUpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocHJvdG8pKSB7CisgICAgICAgICAgICB2
YWx1ZVRlbXBDZWxsLmVtcGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3RvVGVt
cENlbGwuZW1wbGFjZSgqdGhpcywgcHJvdG8pOworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZh
bHVlVGVtcENlbGwtPmdwcigpOworICAgICAgICAgICAgcHJvdG9HUFIgPSBwcm90b1RlbXBDZWxs
LT5ncHIoKTsKKworICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0VGVtcC5ncHIoKSwg
ZHN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlVGVtcC5lbXBsYWNlKCp0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBwcm90b1RlbXAuZW1wbGFjZSgqdGhpcywgcHJvdG8p
OworCisgICAgICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVGVtcC0+Z3ByKCk7CisgICAgICAgICAg
ICBwcm90b0dQUiA9IHByb3RvVGVtcC0+Z3ByKCk7CisKKyAgICAgICAgICAgIGVuc3VyZVNsb3dD
YXNlKHJlc3VsdFRlbXAuZ3ByKCksIGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CisgICAgICAgIH0KKworICAgICAgICBK
SVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwK
KyAgICAgICAgICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICAgICAg
cmVzdWx0VGVtcC5ncHIoKSwKKyAgICAgICAgICAgIHZhbHVlR1BSLAorICAgICAgICAgICAgcHJv
dG9HUFIsCisgICAgICAgICAgICBzY3JhdGNoMVRlbXAuZ3ByKCksIHNjcmF0Y2gyVGVtcC5ncHIo
KSk7CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICAgICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0VGVt
cC5ncHIoKSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5k
IHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgICAgIC8vIFdlIHVzZSBy
ZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBh
bmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgcHJvdG8g
YXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRo
ZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworCisgICAgICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3IgZ2VuKAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgcmVnVDAsIC8v
IHJlc3VsdAorICAgICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgICAgICByZWdUMSwg
Ly8gcHJvdG8KKyAgICAgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgICAgICBtX2luc3RhbmNlT2ZzLmFwcGVu
ZChnZW4pOworICAgICAgICAKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Im
IGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdU
MSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGdlbi5zdHViSW5mbygpLT5iYXNlR1BSLCBnZW4uc3R1Yklu
Zm8oKS0+cmVncy5wcm90b3R5cGVHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTE5OSwxMSArMzI1
LDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWMKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNw
ZWNFbXB0eSkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAm
IH5TcGVjRW1wdHkpKQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQ
UiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBpbnB1dEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMTEsMjggKzM1
NSw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgp
OwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVz
dWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIE5vdENlbGxPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCEhKHByb3Zl
blR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFs
dWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAg
ICAgICAgICBHUFJUZW1wIHRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgYXV0byBpc0NlbGwgPSBicmFuY2hJZkNlbGwo
aW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlNjQoRXF1YWwsIGlucHV0R1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgYXV0byBkb25lID0ganVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc0NlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIGF1dG8gaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
dXRvIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAgICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHJlc3VsdEdQUiwgdGVtcEdQUik7CisgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIo
RXF1YWwsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlw
ZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElm
Q2VsbChyZWdUMCk7CisKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZWdUMCk7CisgICAgICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsK
KworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMCk7CisKKyAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwor
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNDEsMTMgKzQyOSwzMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsg
KnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3Bl
Y090aGVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYg
flNwZWNPdGhlcikpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW5w
dXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoRXF1
YWwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIH0KIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgICAgIHNldEpTVmFsdWUo
ZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAg
ICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MjU1LDEyICs0NjMsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0
cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFu
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgflNwZWNCb29sZWFuKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQm9vbGVhbikpCisgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhp
cywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
I2lmIENQVShBUk02NCkKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpW
YWx1ZUZhbHNlKSwgaW5wdXRHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgdGVz
dDY0KFplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7
CisgICAgICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSksIHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjgsMTEgKzQ5OSwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAg
cmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0Z1bGxOdW1iZXIpKQor
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNGdWxsTnVt
YmVyKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBp
bnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0NjQoTm9uWmVybywgaW5wdXRHUFIsIG51bWJlclRh
Z1JlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CisgICAgICAgIHNldEpTVmFs
dWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVh
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogI2lm
IFVTRShCSUdJTlQzMikKQEAgLTI4MiwyMSArNTI5LDU2IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X2JpZ19pbnQoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5TcGVjQmlnSW50
KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQmln
SW50KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHZhbHVl
KSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAg
ICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07Cisg
ICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc0Nl
bGwgPSBicmFuY2hJZkNlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpCaWdJbnQzMk1hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJpZ0ludDMyVGFnKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKLSAgICBhbmQ2NChyZWdUMSwgcmVn
VDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
aWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MoaW5wdXRHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5
cGUpLCByZXN1bHRHUFIpOwogCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgY29tcGFyZTgo
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGVhcEJpZ0ludFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9
KTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzQ2Vs
bCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6QmlnSW50MzJNYXNrKSwgcmVnVDEpOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDAp
OworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
QmlnSW50MzJUYWcpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBp
c0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGVhcEJpZ0ludFR5
cGUpLCByZWdUMCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAjZWxzZSAvLyBpZiAhVVNFKEJJR0lOVDMyKQogTk9f
UkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rpb24qKQpA
QCAtMzEzLDE4ICs1OTUsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUo
Y29ucwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAg
ICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHZhbHVlVGVtcCB7ICp0aGlzLCB2YWx1ZSB9OworICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWVUZW1wLmdwcigpOworICAgICAgICAgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
dHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChFcXVhbCwgQWRk
cmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
Mih0eXBlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKIAotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworCisgICAgICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7
CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
KworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzMzLDE4ICs2NDQsNjEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKCEocHJvdmVu
VHlwZSh2YWx1ZSkgJiBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHZhbHVlKSAmIFNwZWNP
YmplY3QpKQorICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSBpZiAoIShwcm92ZW5UeXBlKHZh
bHVlKSAmIH5TcGVjT2JqZWN0KSkKKyAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRTcGVjdWxhdGVOb3RDZWxsKHZhbHVlKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICB2YWx1ZVRlbXAuZ3ByKCk7
IC8vIHNwZWN1bGF0ZQorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsKKworICAgICAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworCisgICAgICAgICAgICBjb21wYXJlOChB
Ym92ZU9yRXF1YWwsIEFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
T2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CiAKLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOworICAgICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAg
ICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOworICAgICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgfQogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNTUsNyArNzA5LDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVl
YXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRl
bXAgeyAqdGhpcywgYnl0ZWNvZGUubV92YWx1ZSB9OworICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgIG1vdmUodmFsdWVHUFIsIHJldHVyblZhbHVlR1BS
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2OSwxNSArNzI4LDQxIEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0K
LSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYg
KCEocHJvdmVuVHlwZShzcmMpICYgflNwZWNQcmltaXRpdmUpKSB7CisgICAgICAgICAgICBWYWx1
ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBtb3ZlKHZhbHVlLmdw
cigpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTm90Q2VsbChzcmMpKSB7CisgICAgICAgICAgICBO
b3RDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9OworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBKdW1wIGlzSW1t
ID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmT2JqZWN0KHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNJ
bW0ubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IFNwZWNQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgICAgICAKKyAgICAg
ICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CisgICAgICAgIGlzSW1tLmxpbmsodGhpcyk7CiAK
KyAgICAgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM4Niw1MiArNzcxLDIy
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgR1BSVGVtcCBy
ZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiB+KFNwZWNTdHJpbmcgfCBTcGVjU3lt
Ym9sKSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsK
KyAgICAgICAgICAgIG1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9
IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxs
KHNyYykpIHsKKyAgICAgICAgICAgIENlbGxPcGVyYW5kIHZhbHVlIHsgKnRoaXMsIHNyYyB9Owor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykgfHwgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNy
YykpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHNyYykpCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChzcmMsIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhzcmMs
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJyYW5jaElmU3RyaW5nKHZhbHVl
R1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN5bWJvbCh2YWx1
ZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgICAgICBpc1N0cmluZy5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgcHJv
dmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpICYgKFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3Bl
cmFuZCB2YWx1ZSB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgYXV0byBpc1N0cmluZyA9IGJy
YW5jaElmU3RyaW5nKHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3ltYm9sKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgaXNTdHJp
bmcubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3Zl
blR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKSAmIChTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwogCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGlmIChzcmMgIT0gZHN0
KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJ
ZlN5bWJvbChyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJl
Z1QwKSk7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBpZiAoc3JjICE9IGRz
dCkKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJh
bmQgZnVuY3Rpb24geyAqdGhpcywgYnl0ZWNvZGUubV9mdW5jdGlvbiB9OworICAgICAgICBWYWx1
ZU9wZXJhbmQgbmFtZSB7ICp0aGlzLCBieXRlY29kZS5tX25hbWUgfTsKKyAgICAgICAgR1BSUmVn
IGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3ByKCk7CisgICAgICAgIEdQUlJlZyBuYW1lR1BSID0g
bmFtZS5ncHIoKTsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGZ1bmN0aW9uR1BSLCBuYW1lR1BSKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICB9
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTm90PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5k
LCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworCisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbih2YWx1ZSkpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4odmFsdWUsIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgIG1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIodmFsdWUpKSB7CisgICAgICAgICAgICBJbnQzMk9wZXJh
bmQgdmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZVRlbXAuZ3ByKCk7CisgICAgICAgICAgICB0ZXN0MzIoWmVybywgdmFsdWVHUFIs
IHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZURvdWJsZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgdmFsdWVU
ZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgICAgICBGUFJUZW1wIHRlbXBGUFIgeyAqdGhp
cyB9OworICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWVUZW1wLmZwcigpOworICAg
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSB0ZW1wRlBSLmZwcigpOworICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBhdXRvIG5vblplcm8gPSBicmFuY2hEb3VibGVOb25aZXJvKHZhbHVlRlBSLCBzY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBub25aZXJvLmxpbmsodGhpcyk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAgICAg
TnVtYmVyT3BlcmFuZCB2YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEZQ
UlRlbXAgdGVtcEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2
YWx1ZVRlbXAuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHRlbXBGUFIu
ZnByKCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gbm9uWmVybyA9IGJyYW5jaERvdWJsZU5v
blplcm8odmFsdWVGUFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG5vblplcm8u
bGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2
YWx1ZVRlbXAgeyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaEdQ
UiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIHZhbHVlRlBSIHsgKnRoaXMgfTsKKyAg
ICAgICAgICAgIEZQUlRlbXAgdGVtcEZQUiB7ICp0aGlzIH07CisgICAgICAgICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgICAg
ICAgICAgY29uc3RleHByIGJvb2wgaW52ZXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVtaXRDb252
ZXJ0VmFsdWVUb0Jvb2xlYW4oKm1fdm0sIEpTVmFsdWVSZWdzIHsgdmFsdWVUZW1wLmdwcigpIH0s
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUi5ncHIoKSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnBy
KCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBpbnZlcnQpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9CiAKLSAgICAvLyBJbnZlcnQgYWdh
aW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFu
LCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cg
Yml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVj
dGl2ZWx5KS4KLSAgICAvLyBUaGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNo
IHdpbGwgYWRkIHRoZSB0YWcgYmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9y
NjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVUcnVlKSwgcmVnVDApOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKwor
ICAgICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVlIHdh
cyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKKyAgICAgICAgLy8g
Y2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZh
bHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgICAgIC8vIFRoZW4gaW52ZXJ0
IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBh
bmQgZmxpcCB0aGUgbG93IGJpdC4KKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7
CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxz
ZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZGl0aW9uID0gYnl0ZWNvZGUubV9jb25kaXRpb247
CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVCb29sZWFuKGNvbmRpdGlvbikpIHsKKyAgICAg
ICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgc3BlY3VsYXRl
Qm9vbGVhbihjb25kaXRpb24sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoRXF1YWwsIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSkpLCB0
YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlv
bikpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24g
fTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRh
cmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9y
ZSBjYXNlcyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBj
b25kaXRpb24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1w
IGZwU2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsg
KnRoaXMgfTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBS
UmVnIHNjcmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBz
Y3JhdGNoMkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNj
cmF0Y2gyR1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOworICAgICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgfQorfQogCi0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwordm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGNvbmRpdGlvbiA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlQm9vbGVhbihjb25kaXRpb24pKSB7CisgICAgICAgICAgICBW
YWx1ZU9wZXJhbmQgdmFsdWUgeyAqdGhpcywgY29uZGl0aW9uIH07CisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
Y29uZGl0aW9uLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFs
LCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkpLCB0YXJnZXQpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGNvbmRpdGlvbikpIHsKKyAg
ICAgICAgICAgIEludDMyT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRpb24gfTsKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihOb3RFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMigwKSksIHRhcmdldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbW9yZSBjYXNl
cyBpbmxpbmUKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSB7ICp0aGlzLCBjb25kaXRp
b24gfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaDEgeyAqdGhpcyB9OworICAgICAgICAg
ICAgR1BSVGVtcCBzY3JhdGNoMiB7ICp0aGlzIH07CisgICAgICAgICAgICBGUFJUZW1wIGZwU2Ny
YXRjaDEgeyAqdGhpcyB9OworICAgICAgICAgICAgRlBSVGVtcCBmcFNjcmF0Y2gyIHsgKnRoaXMg
fTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIHNj
cmF0Y2gxRlBSID0gZnBTY3JhdGNoMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNo
MkZQUiA9IGZwU2NyYXRjaDIuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gy
R1BSLCBzY3JhdGNoMUZQUiwgc2NyYXRjaDJGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgICAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZh
bHVlKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MCw0NiArOTk0LDEyOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZU90aGVyKHNyYykpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRTcGVjdWxhdGVOb3RDZWxsKHNyYykpIHsKKyAgICAgICAgICAgIE5vdENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
IHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHNj
cmF0Y2gyIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGF1dG8gaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworCisgICAg
ICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBhdXRvIGlzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoaW5wdXRH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGlu
cHV0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaDJHUFIpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGF1dG8gbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVm
aW5lZCAmIG51bGwKKyAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorCisgICAgICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwor
ICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAg
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIEp1bXAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOworICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
CisgICAgICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisKKyAgICAgICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CisgICAgfQorfQogCi0gICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFu
Y2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKLX07CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVPdGhlcihzcmMpKSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg
aW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1
dC5ncHIoKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKHNyYywgaW5wdXRHUFIpOworICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAg
ICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJU
ZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5w
dXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaDIgeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIo
KTsKKworICAgICAgICAgICAgYXV0byBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChpbnB1
dEdQUik7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaDJHUFIpLCB0YXJnZXQpOworICAg
ICAgICAgICAgYXV0byBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
KworICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZp
bmVkICYgbnVsbAorICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1vdmUoaW5wdXRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQot
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAorICAgICAgICAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KKyAgICAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CisKKyAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAorICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgICAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICAgICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ4OCwxMCArMTEyNSwyNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUodmFsdWUpICYgU3BlY090aGVyKSkgeworICAgICAgICAg
ICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNlIGlmICghKHByb3ZlblR5cGUodmFs
dWUpICYgflNwZWNPdGhlcikpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
dmFsdWUgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSks
IHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNTAwLDEwICsxMTUzLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjT3RoZXIpKQorICAgICAgICAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3Bl
Y090aGVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCB2YWx1ZSB9OworICAg
ICAgICAgICAgR1BSVGVtcCBzY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNTE1LDY1ICsxMTg0LDQ0MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjCiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBpZiAoIShwcm92ZW5UeXBlKHNyYykgJiBzcGVjdWxhdGlvbkZyb21WYWx1ZShzcGVjaWFs
UG9pbnRlcikpKSB7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRh
dGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywg
c3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAg
ICAgICAgIGF1dG8gZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1t
UHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXF1YWwubGluayh0aGlzKTsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCitzdGF0aWMgdm9pZCBjb21wYXJlU3RyaW5ncyhKSVQmIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBlcXVhbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBub3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgR1BSUmVnIGxoc0dQUiwgR1BS
UmVnIHJoc0dQUiwgR1BSUmVnIGxoc1RlbXBHUFIsIEdQUlJlZyByaHNUZW1wR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUiwgR1BSUmVnIHNjcmF0Y2gyR1BSKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzR1BS
LCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgbGhzVGVtcEdQUik7CisgICAgaml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1
ZSgpKSwgcmhzVGVtcEdQUik7CisKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmUm9w
ZVN0cmluZ0ltcGwobGhzVGVtcEdQUikpOworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
SWZSb3BlU3RyaW5nSW1wbChyaHNUZW1wR1BSKSk7CisKKyAgICBqaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgCisgICAgbm90RXF1YWwuYXBwZW5kKGppdC5icmFuY2gz
MigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyaHNUZW1wR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQo
KSksCisgICAgICAgIHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOworICAgIAorICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGhzVGVtcEdQUiwgU3Ry
aW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChq
aXQuYnJhbmNoVGVzdDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmhzVGVtcEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZz
ZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6
ZmxhZ0lzOEJpdCgpKSkpOworICAgIAorICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGxoc1RlbXBHUFIsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIGxoc1RlbXBHUFIp
OworICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJoc1RlbXBHUFIsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHJoc1RlbXBHUFIpOworICAgIAorICAgIGF1dG8gbG9v
cCA9IGppdC5sYWJlbCgpOworICAgIAorICAgIGppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKworICAgIHsKKyAgICAgICAgaml0LmxvYWQ4KE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobGhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzT25lKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBhdXRvIG1hY3JvU2NyYXRj
aCA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgRGlzYWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGRpc2FsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubG9hZDgoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyaHNUZW1wR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNPbmUpLCBtYWNyb1NjcmF0Y2gpOworICAgICAgICBub3RFcXVhbC5hcHBlbmQo
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaDJHUFIsIG1hY3Jv
U2NyYXRjaCkpOworICAgIH0KKyAgICAKKyAgICBqaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAgZXF1YWwu
YXBwZW5kKGppdC5qdW1wKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3N0YXRpYyB2b2lkIGNvbXBhcmVTdHJpY3RF
cUNlbGxzKEpJVCYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QmIG5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNs
b3dQYXRoLCBHUFJSZWcgbGhzR1BSLCBHUFJSZWcgcmhzR1BSLCBHUFJSZWcgbGhzVGVtcEdQUiwg
R1BSUmVnIHJoc1RlbXBHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBHUFJSZWcgc2NyYXRjaDJHUFIp
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBlcXVhbC5hcHBlbmQoaml0LmJy
YW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBsaHNHUFIsIHJoc0dQUikpOworCisgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hJZkhlYXBCaWdJbnQobGhzR1BSKSk7CisgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hJZkhlYXBCaWdJbnQocmhzR1BSKSk7CisKKyAgICBhdXRvIGxo
c0lzU3RyaW5nID0gaml0LmJyYW5jaElmU3RyaW5nKGxoc0dQUik7CisgICAgbm90RXF1YWwuYXBw
ZW5kKGppdC5qdW1wKCkpOworCisgICAgbGhzSXNTdHJpbmcubGluaygmaml0KTsKKyAgICBub3RF
cXVhbC5hcHBlbmQoaml0LmJyYW5jaElmTm90U3RyaW5nKHJoc0dQUikpOworCisgICAgY29tcGFy
ZVN0cmluZ3Moaml0LCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwg
bGhzVGVtcEdQUiwgcmhzVGVtcEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVxSW1wbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJo
cyA9IGJ5dGVjb2RlLm1fcmhzOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VxID0gc3RkOjppc19zYW1lPE9wLCBPcEVxPjo6
dmFsdWU7CisgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsKKyAg
ICBhdXRvIGZwQ29tcGFyZSA9IGlzRXEgPyBEb3VibGVFcXVhbEFuZE9yZGVyZWQgOiBEb3VibGVO
b3RFcXVhbE9yVW5vcmRlcmVkOworCisgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiAoIXZhbHVlc0NvdWxk
QmVFcXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpCisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1ZTo6VmFsdWVU
cnVlKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykg
JiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChyaHMpKSB7CisgICAgICAgIENlbGxPcGVyYW5kIGxoc1Rl
bXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIENlbGxPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywg
cmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICBH
UFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KGxocykgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxhdGVP
YmplY3QocmhzLCByaHNHUFIpOworICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZVN5bWJvbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZVN5bWJvbChyaHMpKSB7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlU3ltYm9sKHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoZ3BDb21w
YXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJveEJvb2xlYW4o
cmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzaG91bGRTcGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhz
KSkgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRH
UFIsIGRzdCk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZyhsaHMsIGxoc0dQUik7CisgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAq
dGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCByaHNUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICBKdW1wTGlz
dCBlcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgSnVt
cExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlzLCBlcXVh
bCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhz
VGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgICAgICBlcXVh
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IEpTVmFs
dWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1
ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xv
d0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcmd1
bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKGxoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmU3RyaW5nKHJoc0dQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmSGVhcEJpZ0ludChyaHNHUFIpKTsKKyAgICAgICAgICAgIGNvbXBhcmVQ
dHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlSW50MzIobGhzKSAmJiBzaG91bGRTcGVj
dWxhdGVJbnQzMihyaHMpKSB7CisgICAgICAgIEludDMyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMs
IGxocyB9OworICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByaHNH
UFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBjb21wYXJlMzIoZ3BDb21wYXJlLCBsaHNHUFIs
IHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91
YmxlKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgRG91Ymxl
T3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBEb3VibGVPcGVyYW5kIHJo
c1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZw
cigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAgICAgICAgY29t
cGFyZURvdWJsZShmcENvbXBhcmUsIGxoc0ZQUiwgcmhzRlBSLCByZXN1bHRHUFIpOworICAgICAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVO
dW1iZXIocmhzKSkgeworICAgICAgICBOdW1iZXJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhz
IH07CisgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAg
ICAgRlBSUmVnIGxoc0ZQUiA9IGxoc1RlbXAuZnByKCk7CisgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICBjb21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBS
LCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPT1BTOiBD
b3VsZCBkbyBtb3JlIHNwZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgVmFsdWVPcGVy
YW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCByaHNUZW1w
IHsgKnRoaXMsIHJocyB9OworICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgIGF1dG8mIHNs
b3dDYXNlID0gZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQocmhzR1BSKTsKKworICAgICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGhzR1BSKSk7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJoc0dQUikpOworICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworCisgICAgICAgIGNvbXBhcmUzMihncENvbXBhcmUs
IGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgfQorCisgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpqZXFJbXBsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQVNTRVJUKHVzZUxPTCgpKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbGhzID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJocyA9
IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbnN0ZXhwciBib29sIGlzRXEgPSBzdGQ6OmlzX3NhbWU8
T3AsIE9wSmVxPjo6dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAgIGF1dG8gZ3BDb21w
YXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgYXV0byBmcENvbXBhcmUgPSBpc0Vx
ID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDogRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKwor
ICAgIGlmICghdmFsdWVzQ291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShy
aHMpKSkgeworICAgICAgICBpZiAoIWlzRXEpCisgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwobGhzKSAmJiBzaG91
bGRTcGVjdWxhdGVDZWxsKHJocykpIHsKKyAgICAgICAgQ2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0
aGlzLCBsaHMgfTsKKyAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVPYmpl
Y3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChy
aHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBhcmUsIGxo
c0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxh
dGVTeW1ib2wobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTeW1ib2wocmhzKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlU3ltYm9sKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN5
bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihncENvbXBh
cmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRT
cGVjdWxhdGVTdHJpbmcobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVTdHJpbmcocmhzKSkgeworICAg
ICAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKHJocywgcmhzR1BSKTsKKworICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsg
KnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2hUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRlbXAg
c2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7Cisg
ICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgIEp1bXBMaXN0IHNsb3dQ
YXRoOworCisgICAgICAgICAgICBjb21wYXJlU3RyaW5ncygqdGhpcywgZXF1YWwsIG5vdEVxdWFs
LCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxoc1RlbXAuZ3ByKCksIHJoc1RlbXAuZ3ByKCks
IHNjcmF0Y2hUZW1wLmdwcigpLCBzY3JhdGNoMlRlbXAuZ3ByKCkpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICBpZiAoaXNFcSkgeworICAgICAgICAg
ICAgICAgIGFkZEp1bXAoZXF1YWwsIHRhcmdldCk7CisgICAgICAgICAgICAgICAgbm90RXF1YWwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkSnVt
cChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXJndW1lbnRzLmFwcGVuZChyaHNHUFIpOworCisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZlN0cmluZyhsaHNHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
U3RyaW5nKHJoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmln
SW50KGxoc0dQUikpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZIZWFwQmlnSW50
KHJoc0dQUikpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNH
UFIsIHJoc0dQUiksIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhzKSkgeworICAgICAg
ICBJbnQzMk9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgSW50MzJPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNU
ZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgcmhzR1BSID0gcmhzVGVtcC5ncHIoKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsK
KyAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1
bGF0ZURvdWJsZShyaHMpKSB7CisgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVtcCB7ICp0aGlz
LCBsaHMgfTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCByaHNUZW1wIHsgKnRoaXMsIHJocyB9Owor
ICAgICAgICBGUFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJo
c0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKGZwQ29t
cGFyZSwgbGhzRlBSLCByaHNGUFIpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAg
ICAgTnVtYmVyT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICBOdW1iZXJP
cGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBs
aHNUZW1wLmZwcigpOworICAgICAgICBGUFJSZWcgcmhzRlBSID0gcmhzVGVtcC5mcHIoKTsKKyAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21wYXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRh
cmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT09QUzogQ291bGQgZG8gbW9yZSBzcGVj
dWxhdGl2ZSBjYXNlcyBoZXJlLgorCisgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1wIHsgKnRo
aXMsIGxocyB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsK
KyAgICAgICAgR1BSUmVnIGxoc0dQUiA9IGxoc1RlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
aHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNs
b3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQobGhzR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXJndW1lbnRzLmFwcGVuZChy
aHNHUFIpOworCisgICAgICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5h
cHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsaHNHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaElmTm90SW50MzIocmhzR1BSKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
KTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIp
LCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGVxSW1wbDxPcEVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1f
cmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKKyAgICAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQorfQog
Ci0gICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNlKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisgICAgR1BS
UmVnIGxoc0dQUiA9IHJlZ1QwOworICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgbGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigp
OworICAgICAgICByaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJl
c3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgZXFJ
bXBsPE9wTmVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdU
MCk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgfQor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKKyAgICBHUFJSZWcgbGhzR1BSID0g
cmVnVDA7CisgICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBsaHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJo
c0dQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGhzR1BSLCByaHNHUFIpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7
CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1
ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOworfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAg
IGplcUltcGw8T3BKZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogeworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgamVxSW1wbDxPcEpuZXE+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7Cisg
ICAgR1BSUmVnIHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBs
aHNHUFIgPSBzbG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsaHNHUFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIC8vIE9P
UFM6IFdlIGNhbiBtYWtlIHRoaXMgYSBzaW5nbGUgYnJhbmNoIGlmIHRoZSByZXN0b3JlIGRvZXNu
J3QgY2xvYmJlciByZXR1cm5WYWx1ZUdQUi4KKyAgICAgICAgYXV0byBkb25lID0gYnJhbmNoVGVz
dDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdG9yZUZyb21TbG93UGF0aFNh
dmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCB0YXJn
ZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKK3sKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBHUFJSZWcgbGhzR1BSID0gcmVnVDA7CisgICAgR1BSUmVn
IHJoc0dQUiA9IHJlZ1QxOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBsaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMF0uZ3ByKCk7CisgICAgICAgIHJoc0dQUiA9IHNsb3dDYXNlLmFy
Z3VtZW50c1sxXS5ncHIoKTsKKyAgICB9CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNH
UFIsIHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9t
U2xvd1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKQEAgLTU4OSw3NCArMTYzNSwyNDAgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
bGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBy
aHMgPSBieXRlY29kZS5tX3JoczsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29s
IGlzRXEgPSB0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAg
IGF1dG8gZ3BDb21wYXJlID0gaXNFcSA/IEVxdWFsIDogTm90RXF1YWw7CisgICAgICAgIGF1dG8g
ZnBDb21wYXJlID0gaXNFcSA/IERvdWJsZUVxdWFsQW5kT3JkZXJlZCA6IERvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQ7CisKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmICghdmFsdWVz
Q291bGRCZUVxdWFsKHByb3ZlblR5cGUobGhzKSwgcHJvdmVuVHlwZShyaHMpKSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyBKU1ZhbHVlOjpWYWx1ZUZhbHNlIDogSlNWYWx1
ZTo6VmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChsaHMpICYmIHNob3VsZFNwZWN1bGF0ZUNlbGwocmhzKSkgeworICAgICAgICAgICAg
Q2VsbE9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIENlbGxPcGVy
YW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0g
bGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigp
OworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlT2JqZWN0KHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qo
bGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChyaHMsIHJoc0dQ
Uik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3Bl
Y3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlU3ltYm9sKHJocykpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNHUFIpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAgICAgICAgICAgICAgY29tcGFyZVB0
cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKGxocykgJiYgc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobGhz
LCBsaHNHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhyaHMsIHJoc0dQUik7
CisKKyAgICAgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBlcXVh
bDsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKyAgICAgICAgICAgICAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKCp0aGlz
LCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJoc0dQUiwgbGhzVGVtcC5ncHIo
KSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5zdXJlU2xvd0Nhc2UocmVzdWx0R1BS
LCBkc3QpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICAg
ICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xvd1BhdGg7
CisKKyAgICAgICAgICAgICAgICBHUFJUZW1wIGxoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgcmhzVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVt
cCBzY3JhdGNoVGVtcCB7ICp0aGlzIH07CisgICAgICAgICAgICAgICAgR1BSVGVtcCBzY3JhdGNo
MlRlbXAgeyAqdGhpcyB9OworCisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMo
KnRoaXMsIGVxdWFsLCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNUZW1w
LmdwcigpLCByaHNUZW1wLmdwcigpLCBzY3JhdGNoVGVtcC5ncHIoKSwgc2NyYXRjaDJUZW1wLmdw
cigpKTsKKworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRoKTsKKworICAgICAg
ICAgICAgICAgIGVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKKworICAgICAg
ICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoIWlzRXEgPyBKU1ZhbHVlOjpWYWx1ZVRydWUgOiBKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVJbnQzMihsaHMpICYm
IHNob3VsZFNwZWN1bGF0ZUludDMyKHJocykpIHsKKyAgICAgICAgICAgIEludDMyT3BlcmFuZCBs
aHNUZW1wIHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgSW50MzJPcGVyYW5kIHJoc1RlbXAg
eyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBHUFJSZWcgbGhzR1BSID0gbGhzVGVtcC5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdwcigpOworICAgICAgICAg
ICAgY29tcGFyZTMyKGdwQ29tcGFyZSwgbGhzR1BSLCByaHNHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlRG91YmxlKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlRG91YmxlKHJocykpIHsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBj
b21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVt
cCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAgICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0
aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQUlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBj
b21wYXJlRG91YmxlKGZwQ29tcGFyZSwgbGhzRlBSLCByaHNGUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPT1BTOiBDb3VsZCBkbyBtb3JlIHNw
ZWN1bGF0aXZlIGNhc2VzIGhlcmUuCisKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBsaHNUZW1w
IHsgKnRoaXMsIGxocyB9OworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIHJoc1RlbXAgeyAqdGhp
cywgcmhzIH07CisgICAgICAgICAgICBHUFJUZW1wIGxoc1NjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSVGVtcCByaHNTY3JhdGNoIHsgKnRoaXMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgdGVtcCB7ICp0aGlzIH07CisKKyAgICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1w
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgbGhzU2NyYXRjaEdQUiA9IGxoc1NjcmF0Y2guZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmhzU2NyYXRjaEdQUiA9IHJoc1NjcmF0Y2guZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgICAgICAgICAgZW5zdXJlU2xvd0Nh
c2UocmVzdWx0R1BSLCBkc3QpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0IGEgaGln
aCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAgICBJZiAo
bGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgICBnb3RvIHNsb3dQYXRo
OwotICAgIHJlc3VsdCA9IChsZWZ0ID09IHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAg
ICBnb3RvIGRvbmU7Ci0gICAgaWYgKGxlZnQgaXMgQ2VsbCB8fCByaWdodCBpcyBDZWxsKQotICAg
ICAgICBnb3RvIHNsb3dQYXRoOwotICAgIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgICAq
LwotCi0gICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJsZSB8fCBy
aWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSA0IHRo
YXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50MzIvYnJh
bmNoSWZOdW1iZXIKLSAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBpZiBhIEpTVmFsdWUgaXMgYW4g
SW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFrZSBpdCBvdmVyZmxvdywgbGVh
dmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKLSAgICAvLyBJZiBpdCBpcyBub3QgYSBudW1iZXIgYXQg
YWxsLCB0aGVuIDE8PDQ5IHdpbGwgYmUgaXRzIG9ubHkgaGlnaCBiaXQgc2V0Ci0gICAgLy8gTGVh
dmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAuCi0gICAgbW92ZShyZWdUMCwg
cmVnVDIpOwotICAgIG1vdmUocmVnVDEsIHJlZ1QzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwgcmVnVDUpOwotICAgIGFkZDY0KHJlZ1Q1LCByZWdU
Mik7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QzKTsKLSAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MSksIHJlZ1Q1KTsKLSAgICBvcjY0KHJlZ1QyLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoNjQoQWJvdmVPckVxdWFsLCByZWdUMywgcmVnVDUpKTsKLQotICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIHJlZ1QxLCByZWdUNSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDY0KE5v
blplcm8sIHJlZ1Q1KTsKLQotICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICAvLyBKdW1wIHNs
b3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBhbmQgQmlnSW50
cykuCi0gICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKLSAgICAvLyBGSVhNRTogd2UgY291bGQgZG8g
c29tZXRoaW5nIG1vcmUgcHJlY2lzZTogdW5sZXNzIHRoZXJlIGlzIGEgQmlnSW50MzIsIHdlIG9u
bHkgbmVlZCB0byBkbyB0aGUgc2xvdyBwYXRoIGlmIGJvdGggYXJlIHN0cmluZ3MKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
ZmFsc2UpOworI2Vsc2UKIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSkKLSAgICAgICAgeG9yNjQoVHJ1c3RlZElt
bTY0KDEpLCByZWdUNSk7Ci0gICAgYm94Qm9vbGVhbihyZWdUNSwgSlNWYWx1ZVJlZ3MgeyByZWdU
NSB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDUpOworICAgICAgICAg
ICAgSnVtcExpc3QgZXF1YWw7CisgICAgICAgICAgICBKdW1wTGlzdCBub3RFcXVhbDsKKworICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbGhzSXNDZWxsID0gYnJhbmNoSWZDZWxs
KGxoc0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5v
dENlbGwocmhzR1BSKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsK
KworICAgICAgICAgICAgICAgIGxoc0lzQ2VsbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAg
IG5vdEVxdWFsLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmhzR1BSKSk7CisKKyAgICAgICAgICAg
ICAgICBKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgICAgICAgICBjb21wYXJlU3RyaWN0RXFD
ZWxscygqdGhpcywgZXF1YWwsIG5vdEVxdWFsLCBzbG93UGF0aCwgbGhzR1BSLCByaHNHUFIsIGxo
c1NjcmF0Y2hHUFIsIHJoc1NjcmF0Y2hHUFIsIHRlbXBHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgYm90aE5v
dENlbGxzLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAg
c2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2Vy
LCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEg
ZG91YmxlLgorICAgICAgICAgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAg
ICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAgICAgICAgSnVtcCByaWdodE9LID0gYnJh
bmNoSWZJbnQzMihyaHNHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmhzR1BSKSk7CisgICAgICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisKKyAgICAgICAg
ICAgIGlmIChpc0VxKQorICAgICAgICAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgbGhzR1BSLCBy
aHNHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29t
cGFyZTY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwor
CisgICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoaXNFcSA/IEpTVmFsdWU6OlZhbHVlVHJ1ZSA6IEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAg
ICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKCFp
c0VxID8gSlNWYWx1ZTo6VmFsdWVUcnVlIDogSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CisKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyNlbmRpZgorICAgICAgICB9CisK
KyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUo
ZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGxocywgcmVnVDAsIHJocywgcmVnVDEpOworCisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBT
dHJpY3RFcSk6CisgICAgICAgIElmIChsZWZ0IGlzIERvdWJsZSB8fCByaWdodCBpcyBEb3VibGUp
CisgICAgICAgICAgICBnb3RvIHNsb3dQYXRoOworICAgICAgICByZXN1bHQgPSAobGVmdCA9PSBy
aWdodCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAg
ICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMgQ2VsbCkKKyAgICAgICAgICAgIGdvdG8g
c2xvd1BhdGg7CisgICAgICAgIGRvbmU6CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICovCisKKyAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpbXBsZW1lbnRzIChsZWZ0IGlzIERvdWJs
ZSB8fCByaWdodCBpcyBEb3VibGUpLCB3aXRoIGEgc2luZ2xlIGJyYW5jaCBpbnN0ZWFkIG9mIHRo
ZSA0IHRoYXQgd291bGQgYmUgbmFpdmVseSByZXF1aXJlZCBpZiB3ZSB1c2VkIGJyYW5jaElmSW50
MzIvYnJhbmNoSWZOdW1iZXIKKyAgICAgICAgLy8gVGhlIHRyaWNrIGlzIHRoYXQgaWYgYSBKU1Zh
bHVlIGlzIGFuIEludDMyLCB0aGVuIGFkZGluZyAxPDw0OSB0byBpdCB3aWxsIG1ha2UgaXQgb3Zl
cmZsb3csIGxlYXZpbmcgYWxsIGhpZ2ggYml0cyBhdCAwCisgICAgICAgIC8vIElmIGl0IGlzIG5v
dCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25seSBoaWdoIGJpdCBz
ZXQKKyAgICAgICAgLy8gTGVhdmluZyBvbmx5IGRvdWJsZXMgYWJvdmUgb3IgZXF1YWwgMTw8NTAu
CisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgbW92ZShyZWdUMSwgcmVnVDMp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpMb3dlc3RPZkhpZ2hCaXRzKSwg
cmVnVDUpOworICAgICAgICBhZGQ2NChyZWdUNSwgcmVnVDIpOworICAgICAgICBhZGQ2NChyZWdU
NSwgcmVnVDMpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1Q1KTsKKyAg
ICAgICAgb3I2NChyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCByZWdUNSkpOworCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUNSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Q2NChO
b25aZXJvLCByZWdUNSk7CisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAv
LyBKdW1wIHNsb3cgaWYgYXQgbGVhc3Qgb25lIGlzIGEgY2VsbCAodG8gY292ZXIgc3RyaW5ncyBh
bmQgQmlnSW50cykuCisgICAgICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIC8vIEZJ
WE1FOiB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlOiB1bmxlc3MgdGhlcmUgaXMg
YSBCaWdJbnQzMiwgd2Ugb25seSBuZWVkIHRvIGRvIHRoZSBzbG93IHBhdGggaWYgYm90aCBhcmUg
c3RyaW5ncworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6TlN0cmljdEVxKQorICAgICAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTY0KDEpLCBy
ZWdUNSk7CisgICAgICAgIGJveEJvb2xlYW4ocmVnVDUsIEpTVmFsdWVSZWdzIHsgcmVnVDUgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUNSk7CiAjZWxzZSAvLyBp
ZiAhVVNFKEJJR0lOVDMyKQotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8g
Y292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEs
IHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8v
IEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBp
bnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRv
dWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0g
ICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAg
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKKworICAgICAgICAvLyBKdW1w
IHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdl
ciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgICAgICAvLyBpZiBpdCdzIGEgZG91
YmxlLgorICAgICAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgICAgICBsZWZ0T0subGlu
ayh0aGlzKTsKKyAgICAgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgICAgIHJpZ2h0
T0subGluayh0aGlzKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6
U3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAg
ICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwor
ICAgICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NzQsNjggKzE4ODYs
MjAzIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW4KIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGxocyA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciByaHMgPSBieXRlY29k
ZS5tX3JoczsKIAorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBib29sIGlzRXEgPSB0eXBl
ID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXE7CisgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKKyAgICAgICAgYXV0byBncENvbXBhcmUgPSBpc0VxID8gRXF1YWwgOiBOb3RFcXVhbDsK
KyAgICAgICAgYXV0byBmcENvbXBhcmUgPSBpc0VxID8gRG91YmxlRXF1YWxBbmRPcmRlcmVkIDog
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKworICAgICAgICBpZiAoIXZhbHVlc0NvdWxkQmVF
cXVhbChwcm92ZW5UeXBlKGxocyksIHByb3ZlblR5cGUocmhzKSkpIHsKKyAgICAgICAgICAgIGlm
ICghaXNFcSkKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
Q2VsbChyaHMpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBsaHNUZW1wIHsgKnRoaXMsIGxo
cyB9OworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAg
ICAgICAgICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJoc0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVPYmplY3QobGhzKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3QocmhzKSkgeworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChsaHMsIGxoc0dQUik7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KHJocywgcmhzR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFB0cihncENvbXBhcmUsIGxoc0dQUiwgcmhzR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3ltYm9sKGxocykgJiYgc2hvdWxkU3BlY3VsYXRl
U3ltYm9sKHJocykpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTeW1ib2wobGhzLCBsaHNH
UFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZVN5bWJvbChyaHMsIHJoc0dQUik7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoZ3BDb21wYXJlLCBsaHNHUFIsIHJoc0dQUiks
IHRhcmdldCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZVN0cmluZyhs
aHMpICYmIHNob3VsZFNwZWN1bGF0ZVN0cmluZyhyaHMpKSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nKGxocywgbGhzR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcocmhzLCByaHNHUFIpOworCisgICAgICAgICAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGhzR1BSLCByaHNHUFIpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoZ3BDb21wYXJlLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dD
YXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXJndW1lbnRzLmFwcGVuZChsaHNHUFIpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFyZ3Vt
ZW50cy5hcHBlbmQocmhzR1BSKTsKKworICAgICAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFsOwor
ICAgICAgICAgICAgICAgIEp1bXBMaXN0IG5vdEVxdWFsOworICAgICAgICAgICAgICAgIEp1bXBM
aXN0IHNsb3dQYXRoOworCisgICAgICAgICAgICAgICAgR1BSVGVtcCBsaHNUZW1wIHsgKnRoaXMg
fTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wIHJoc1RlbXAgeyAqdGhpcyB9OworICAgICAgICAg
ICAgICAgIEdQUlRlbXAgc2NyYXRjaFRlbXAgeyAqdGhpcyB9OworICAgICAgICAgICAgICAgIEdQ
UlRlbXAgc2NyYXRjaDJUZW1wIHsgKnRoaXMgfTsKKworICAgICAgICAgICAgICAgIGNvbXBhcmVT
dHJpY3RFcUNlbGxzKCp0aGlzLCBlcXVhbCwgbm90RXF1YWwsIHNsb3dQYXRoLCBsaHNHUFIsIHJo
c0dQUiwgbGhzVGVtcC5ncHIoKSwgcmhzVGVtcC5ncHIoKSwgc2NyYXRjaFRlbXAuZ3ByKCksIHNj
cmF0Y2gyVGVtcC5ncHIoKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgp
OworCisgICAgICAgICAgICAgICAgaWYgKGlzRXEpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRk
SnVtcChlcXVhbCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbm90RXF1YWwubGluayh0
aGlzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhZGRK
dW1wKG5vdEVxdWFsLCB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICBlcXVhbC5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlSW50MzIocmhz
KSkgeworICAgICAgICAgICAgSW50MzJPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07Cisg
ICAgICAgICAgICBJbnQzMk9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBsaHNHUFIgPSBsaHNUZW1wLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJo
c0dQUiA9IHJoc1RlbXAuZ3ByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGdwQ29t
cGFyZSwgbGhzR1BSLCByaHNHUFIpLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShsaHMpICYmIHNob3VsZFNwZWN1bGF0ZURvdWJsZShyaHMpKSB7Cisg
ICAgICAgICAgICBEb3VibGVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAg
ICAgICBEb3VibGVPcGVyYW5kIHJoc1RlbXAgeyAqdGhpcywgcmhzIH07CisgICAgICAgICAgICBG
UFJSZWcgbGhzRlBSID0gbGhzVGVtcC5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByaHNGUFIg
PSByaHNUZW1wLmZwcigpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoZnBDb21w
YXJlLCBsaHNGUFIsIHJoc0ZQUiksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKGxocykgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKHJocykpIHsKKyAg
ICAgICAgICAgIE51bWJlck9wZXJhbmQgbGhzVGVtcCB7ICp0aGlzLCBsaHMgfTsKKyAgICAgICAg
ICAgIE51bWJlck9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEZQ
UlJlZyBsaHNGUFIgPSBsaHNUZW1wLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJoc0ZQUiA9
IHJoc1RlbXAuZnByKCk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShmcENvbXBh
cmUsIGxoc0ZQUiwgcmhzRlBSKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IENvdWxkIGRvIG1vcmUgc3BlY3VsYXRpdmUgY2FzZXMgaGVyZS4KKworICAg
ICAgICAgICAgVmFsdWVPcGVyYW5kIGxoc1RlbXAgeyAqdGhpcywgbGhzIH07CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgcmhzVGVtcCB7ICp0aGlzLCByaHMgfTsKKyAgICAgICAgICAgIEdQUlRl
bXAgbGhzU2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBHUFJUZW1wIHJoc1NjcmF0Y2gg
eyAqdGhpcyB9OworICAgICAgICAgICAgR1BSVGVtcCB0ZW1wIHsgKnRoaXMgfTsKKyAgICAgICAg
ICAgIEdQUlRlbXAgdGVtcDIgeyAqdGhpcyB9OworCisgICAgICAgICAgICBHUFJSZWcgbGhzR1BS
ID0gbGhzVGVtcC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByaHNHUFIgPSByaHNUZW1wLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIGxoc1NjcmF0Y2hHUFIgPSBsaHNTY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJoc1NjcmF0Y2hHUFIgPSByaHNTY3JhdGNoLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHRlbXAyR1BSID0gdGVtcDIuZ3ByKCk7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIC8qIEF0
IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKLSAg
ICBJZiAobGVmdCBpcyBEb3VibGUgfHwgcmlnaHQgaXMgRG91YmxlKQotICAgICAgIGdvdG8gc2xv
d1BhdGg7Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgZ290byB0YWtlbjsKLSAgICBp
ZiAobGVmdCBpcyBDZWxsIHx8IHJpZ2h0IGlzIENlbGwpCi0gICAgICAgZ290byBzbG93UGF0aDsK
LSAgICBnb3RvIG5vdFRha2VuOwotICAgICovCi0KLSAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxl
bWVudHMgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUg
YnJhbmNoIGluc3RlYWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlm
IHdlIHVzZWQgYnJhbmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgotICAgIC8vIFRoZSB0cmljayBp
cyB0aGF0IGlmIGEgSlNWYWx1ZSBpcyBhbiBJbnQzMiwgdGhlbiBhZGRpbmcgMTw8NDkgdG8gaXQg
d2lsbCBtYWtlIGl0IG92ZXJmbG93LCBsZWF2aW5nIGFsbCBoaWdoIGJpdHMgYXQgMAotICAgIC8v
IElmIGl0IGlzIG5vdCBhIG51bWJlciBhdCBhbGwsIHRoZW4gMTw8NDkgd2lsbCBiZSBpdHMgb25s
eSBoaWdoIGJpdCBzZXQKLSAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgbW92ZShyZWdUMSwgcmVnVDMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGlnaEJpdHMpLCByZWdU
NSk7Ci0gICAgYWRkNjQocmVnVDUsIHJlZ1QyKTsKLSAgICBhZGQ2NChyZWdUNSwgcmVnVDMpOwot
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDUpOwotICAgIG9yNjQocmVnVDIsIHJl
Z1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ1QzLCByZWdU
NSkpOwotCi0gICAgSnVtcCBhcmVFcXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEp
OwotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAg
ICAgIGFkZEp1bXAoYXJlRXF1YWwsIHRhcmdldCk7Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7
Ci0gICAgLy8gSnVtcCBzbG93IGlmIGF0IGxlYXN0IG9uZSBpcyBhIGNlbGwgKHRvIGNvdmVyIHN0
cmluZ3MgYW5kIEJpZ0ludHMpLgotICAgIGFuZDY0KHJlZ1QxLCByZWdUMik7Ci0gICAgLy8gRklY
TUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBpcyBh
IEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFyZSBz
dHJpbmdzCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisgICAgICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGZhbHNlKTsKKyNlbHNlCisgICAgICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKFJlZygpLCBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGxoc0dQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcmd1bWVudHMuYXBwZW5kKHJoc0dQUik7CisKKyAgICAgICAgICAgIEp1bXBMaXN0IGVxdWFs
OworICAgICAgICAgICAgSnVtcExpc3Qgbm90RXF1YWw7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYXV0byBsZWZ0SXNDZWxsID0gYnJhbmNoSWZDZWxsKGxoc0dQUik7CisgICAgICAg
ICAgICAgICAgYXV0byBib3RoTm90Q2VsbHMgPSBicmFuY2hJZk5vdENlbGwocmhzR1BSKTsKKyAg
ICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgICAg
IGxlZnRJc0NlbGwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RFcXVhbC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHJoc0dQUikpOworCisgICAgICAgICAgICAgICAgSnVtcExpc3Qgc2xv
d1BhdGg7CisgICAgICAgICAgICAgICAgY29tcGFyZVN0cmljdEVxQ2VsbHMoKnRoaXMsIGVxdWFs
LCBub3RFcXVhbCwgc2xvd1BhdGgsIGxoc0dQUiwgcmhzR1BSLCBsaHNTY3JhdGNoR1BSLCByaHNT
Y3JhdGNoR1BSLCB0ZW1wR1BSLCB0ZW1wMkdQUik7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgYm90aE5vdENlbGxzLmxpbmsodGhpcyk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMg
YSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBh
bmQgdGhlbiB0ZXN0CisgICAgICAgICAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgICAgICAg
ICAgYXV0byBsZWZ0T0sgPSBicmFuY2hJZkludDMyKGxoc0dQUik7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk51bWJlcihsaHNHUFIpKTsKKyAgICAgICAgICAgIGxlZnRPSy5saW5r
KHRoaXMpOworICAgICAgICAgICAgYXV0byByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyaHNHUFIp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmhzR1BSKSk7CisgICAg
ICAgICAgICByaWdodE9LLmxpbmsodGhpcyk7CisgICAgICAgICAgICBpZiAoaXNFcSkgeworICAg
ICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIGxoc0dQUiwgcmhzR1BSKSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGVxdWFsLCB0YXJnZXQpOworICAgICAgICAg
ICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9IGVsc2UgeyAKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCBsaHNHUFIsIHJoc0dQUiksIHRh
cmdldCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChub3RFcXVhbCwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgICAgICBlcXVhbC5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhsaHMs
IHJlZ1QwLCByaHMsIHJlZ1QxKTsKIAotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6TlN0cmljdEVxKSB7Ci0gICAgICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAg
ICAgICBhcmVFcXVhbC5saW5rKHRoaXMpOwotICAgIH0KKyNpZiBVU0UoQklHSU5UMzIpCisgICAg
ICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmlj
dEVxKToKKyAgICAgICAgSWYgKGxlZnQgaXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSkKKyAg
ICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAg
ICAgICAgIGdvdG8gdGFrZW47CisgICAgICAgIGlmIChsZWZ0IGlzIENlbGwgfHwgcmlnaHQgaXMg
Q2VsbCkKKyAgICAgICAgICAgZ290byBzbG93UGF0aDsKKyAgICAgICAgZ290byBub3RUYWtlbjsK
KyAgICAgICAgKi8KKworICAgICAgICAvLyBUaGlzIGZyYWdtZW50IGltcGxlbWVudHMgKGxlZnQg
aXMgRG91YmxlIHx8IHJpZ2h0IGlzIERvdWJsZSksIHdpdGggYSBzaW5nbGUgYnJhbmNoIGluc3Rl
YWQgb2YgdGhlIDQgdGhhdCB3b3VsZCBiZSBuYWl2ZWx5IHJlcXVpcmVkIGlmIHdlIHVzZWQgYnJh
bmNoSWZJbnQzMi9icmFuY2hJZk51bWJlcgorICAgICAgICAvLyBUaGUgdHJpY2sgaXMgdGhhdCBp
ZiBhIEpTVmFsdWUgaXMgYW4gSW50MzIsIHRoZW4gYWRkaW5nIDE8PDQ5IHRvIGl0IHdpbGwgbWFr
ZSBpdCBvdmVyZmxvdywgbGVhdmluZyBhbGwgaGlnaCBiaXRzIGF0IDAKKyAgICAgICAgLy8gSWYg
aXQgaXMgbm90IGEgbnVtYmVyIGF0IGFsbCwgdGhlbiAxPDw0OSB3aWxsIGJlIGl0cyBvbmx5IGhp
Z2ggYml0IHNldAorICAgICAgICAvLyBMZWF2aW5nIG9ubHkgZG91YmxlcyBhYm92ZSBvciBlcXVh
bCAxPDw1MC4KKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICBtb3ZlKHJlZ1Qx
LCByZWdUMyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Okxvd2VzdE9mSGln
aEJpdHMpLCByZWdUNSk7CisgICAgICAgIGFkZDY0KHJlZ1Q1LCByZWdUMik7CisgICAgICAgIGFk
ZDY0KHJlZ1Q1LCByZWdUMyk7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxKSwgcmVn
VDUpOworICAgICAgICBvcjY0KHJlZ1QyLCByZWdUMyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVnVDMsIHJlZ1Q1KSk7CisKKyAgICAgICAgSnVtcCBhcmVF
cXVhbCA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgICAgICBpZiAodHlwZSA9
PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICAgICAgYWRkSnVtcChh
cmVFcXVhbCwgdGFyZ2V0KTsKKworICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgICAg
IC8vIEp1bXAgc2xvdyBpZiBhdCBsZWFzdCBvbmUgaXMgYSBjZWxsICh0byBjb3ZlciBzdHJpbmdz
IGFuZCBCaWdJbnRzKS4KKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgLy8g
RklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGluZyBtb3JlIHByZWNpc2U6IHVubGVzcyB0aGVyZSBp
cyBhIEJpZ0ludDMyLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIHNsb3cgcGF0aCBpZiBib3RoIGFy
ZSBzdHJpbmdzCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisg
ICAgICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKSB7Cisg
ICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGFyZUVxdWFs
LmxpbmsodGhpcyk7CisgICAgICAgIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCi0gICAg
Ly8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBt
b3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBp
cyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUs
IGFuZCB0aGVuIHRlc3QKLSAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9L
ID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIo
cmVnVDApKTsKLSAgICBsZWZ0T0subGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFu
Y2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkp
OwotICAgIHJpZ2h0T0subGluayh0aGlzKTsKLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdU
MSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgLy8gSnVtcCBzbG93IGlm
IGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KKyAgICAgICAgbW92ZShyZWdUMCwg
cmVnVDIpOworICAgICAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIg
aXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5l
LCBhbmQgdGhlbiB0ZXN0CisgICAgICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgICAgIEp1
bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwor
ICAgICAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QwKSwgdGFyZ2V0KTsKICNlbmRpZgorICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
NDgsODkgKzIwOTUsMjI4IEBAIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5z
dHIKICAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CisgICAgR1BSUmVnIGxoc0dQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyByaHNHUFIgPSByZWdUMTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
bGhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgICAgICByaHNHUFIgPSBz
bG93Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisgICAgfQorICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxoc0dQUiwgcmhzR1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAg
YXV0byBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
cmVzdG9yZUZyb21TbG93UGF0aFNhdmVQbGFuKHNsb3dDYXNlKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCB0YXJnZXQpOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
fSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xv
d0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOworICAgIEdQUlJlZyBsaHNHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgcmhzR1BS
ID0gcmVnVDE7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGxoc0dQUiA9IHNsb3dDYXNl
LmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICAgICAgcmhzR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzFdLmdwcigpOworICAgIH0KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsaHNHUFIs
IHJoc0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGF1dG8gZG9uZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHJlc3RvcmVGcm9tU2xv
d1BhdGhTYXZlUGxhbihzbG93Q2FzZSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgdGFyZ2V0KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKLQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNy
YyB9OworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BS
VGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIoc3JjKSkgeworICAg
ICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKHNyYywgaW5wdXRHUFIpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IHBy
b3ZlblR5cGUoc3JjKSAmIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSwgcmVzdWx0
R1BSLCBkc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICAgICAgfQor
CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJp
Z0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENl
bGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OwotICAgIGlzQmlnSW50LmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHNyYyksIFNwZWNCaWdJbnQgfCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpKSB7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAg
ICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihzcmMpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVOdW1iZXIoc3JjLCBpbnB1dEdQUik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gcHJvdmVuVHlwZShz
cmMpOworICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZUFueUJpZ0ludChzcmMpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGVBbnlCaWdJbnQoc3JjLCBpbnB1dEdQUik7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gcHJvdmVuVHlwZShzcmMpOworICAgICAgICB9IGVsc2UgeworI2lmIFVTRShCSUdJTlQz
MikKKyAgICAgICAgICAgIEdQUlRlbXAgc2NyYXRjaCB7ICp0aGlzIH07CisgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgICAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChpbnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0
KTsKKyAgICAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKyNpZiBVU0UoQklHSU5UMzIpCisg
ICAgICAgICAgICBhdXRvIGlzTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIoaW5wdXRHUFIpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCaWdJbnQzMihpbnB1dEdQUiwgc2NyYXRj
aEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsodGhpcyk7
CisjZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRH
UFIpLCByZXN1bHRHUFIsIGRzdCk7CisjZW5kaWYKKworICAgICAgICAgICAgbW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29k
ZU51bWJlciB8IFNwZWNCaWdJbnQ7CisgICAgICAgIH0KKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdEdQUik7CisgICAg
ICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdEhlYXBCaWdJbnQocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc0JpZ0ludCA9IGp1bXAoKTsK
KworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKKwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsg
KnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHNyYykpIHsKKyAgICAgICAgICAgIENlbGxP
cGVyYW5kIGlucHV0IHsgKnRoaXMsIHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BS
ID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoc3JjLCBpbnB1dEdQ
Uik7CisgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkg
PSBwcm92ZW5UeXBlKHNyYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWYWx1ZU9w
ZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIg
PSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChp
bnB1dEdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90U3RyaW5nKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgbW92
ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfQogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvT2JqZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0KLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJU
ZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAg
ICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJS
ZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVPYmplY3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChzcmMsIGlu
cHV0R1BSKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IHByb3ZlblR5cGUoc3JjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoaW5wdXRHUFIp
LCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGlucHV0IHsgKnRoaXMs
IHNyYyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpLCByZXN1bHRHUFIs
IGRzdCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChpbnB1dEdQ
UiksIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworCisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBkZWFs
IHdpdGggdGhpcy4KKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRlKCk7IC8vIE1ha2UgaXQgc28g
d2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBvciB0eXBlIHN0YXRlLgorCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAog
ICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKQEAgLTg4OCw5ICsyMzc0LDIzIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9wYXJlbnRfc2NvcGUoY29uc3QKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBj
dXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2Rl
Lm1fZHN0LCByZWdUMCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBwcm92ZW5UeXBlKGN1cnJlbnRTY29wZSkg
Jj0gU3BlY0NlbGw7IC8vIFdlIGtub3cgaXQncyBhIGNlbGwuCisKKyAgICAgICAgQ2VsbE9wZXJh
bmQgc2NvcGUgeyAqdGhpcywgY3VycmVudFNjb3BlIH07CisgICAgICAgIEdQUlJlZyBzY29wZUdQ
UiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhzY29wZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOworCisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjT2JqZWN0T3RoZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNSw5ICsy
NDA1LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxl
LT5lbnN1cmVDVElUYWJsZSgpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsK
KyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9y
Q2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSLCB0YWJsZUluZGV4KTsK
KyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtOTIyLDkgKzI0MzAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIoY29uc3QgSW5zdAogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFi
bGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc2NydXRpbmVlIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGlucHV0R1BSLCB0YWJs
ZUluZGV4KTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhV
bmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJp
bmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkzOCw5MyArMjQ1
NCwxNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFN0
cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1
bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzY3J1dGluZWUgfTsKKyAgICAgICAg
R1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIHNwaWxsRm9yQ2FsbCgpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBpbnB1dEdQ
UiwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Rl
YnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKKyAgICBzcGlsbEZv
ckNhbGwoKTsgLy8gT09QUzogV2UgY2FuIGRvIGJldHRlci4KICAgICBsb2FkMzIoY29kZUJsb2Nr
KCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdn
ZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1
Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplcU51bGxJbXBsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Cisg
ICAgY29uc3RleHByIGJvb2wgaXNFcSA9IHN0ZDo6aXNfc2FtZTxPcCwgT3BFcU51bGw+Ojp2YWx1
ZTsKKyAgICBhdXRvIGNvbXBhcmVPcCA9IGlzRXEgPyBFcXVhbCA6IE5vdEVxdWFsOworCisgICAg
aWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoc3JjKSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9wLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUNlbGwoc3JjKSkgeworICAgICAgICAgICAgQ2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworICAg
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1dEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaXNFcSA/IDAg
OiAxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKKworICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBpbnB1dEdQ
Uiwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGNvbXBhcmVQdHIoY29tcGFyZU9wLCBzY3Jh
dGNoR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgc3JjIH07CisgICAgICAgICAgICBHUFJUZW1w
IHNjcmF0Y2ggeyAqdGhpcyB9OworICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisK
KyAgICAgICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoaW5wdXRHUFIp
OworCisgICAgICAgICAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGlzRXEgPyAwIDogMSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICAgICAg
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgICAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgaW5wdXRHUFIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBjb21wYXJlUHRyKGNvbXBhcmVPcCwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAgICAg
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBjb21wYXJlNjQoY29tcGFyZU9w
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZXN1bHRHUFIp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVt
cCgpOworICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgICAgIH0KIAot
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJl
c3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAg
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihpc0Vx
ID8gMCA6IDEpLCByZWdUMCk7CisgICAgICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKKworICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZVB0cihjb21wYXJl
T3AsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9
IGp1bXAoKTsKKworICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1Qw
KTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChjb21wYXJlT3AsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwogCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAg
ICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICAgICAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9Cit9CiAKK3ZvaWQgSklUOjplbWl0X29w
X2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
cU51bGxJbXBsPE9wRXFOdWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVk
aWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0
ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVxTnVsbEltcGw8T3BOZXFOdWxsPihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJ
bnN0cnVjdGlvbiopCiB7CisgICAgLy8gT09QUzogYXNzZXJ0IHdlIGhhdmUgbm8gcmVnaXN0ZXIg
c3RhdGUgaGVyZSBzaW5jZSBlbWl0V3JpdGVCYXJyaWVyIGNhbiBtYWtlIEMgY2FsbHMuCisKICAg
ICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIg
Y29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9p
ZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGlu
Y3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51
bVZhcnMoKTsKLSAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAg
ICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKKyAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgIGF1dG8gdmFyaWFibGUg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUo
anNVbmRlZmluZWQoKSwgYWRkcmVzc0Zvcih2YXJpYWJsZSkpOworICAgICAgICBpZiAodXNlTE9M
KCkpCisgICAgICAgICAgICBwcm92ZW5UeXBlKHZhcmlhYmxlKSA9IFNwZWNPdGhlcjsKKyAgICB9
CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIApAQCAtMTAzNSwyMyArMjYw
NSw5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJl
Z1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEdQUlJlZyBzY29wZTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMpOworICAgICAgICBzY29wZSA9IHJlc3VsdC0+Z3By
KCk7CisgICAgfSBlbHNlCisgICAgICAgIHNjb3BlID0gcmVnVDA7CisKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjb3BlKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwg
c2NvcGUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBz
Y29wZSk7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHNjb3BlKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKICAgICBTdHJ1
Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJ
RDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7
CisgICAgYXV0byBpc1N0cmljdCA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2Vs
bChzcmNEc3QpKSB7CisgICAgICAgICAgICBDZWxsT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNE
c3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNU
b1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgbW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChpc1N0cmljdCkKKyAgICAgICAgICAgICAgICBw
cm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwcm92ZW5UeXBlKHNyY0RzdCkgPSBTcGVjT2JqZWN0OyAvLyBPT1BTOiBpcyB0
aGlzIHJpZ2h0PworICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0ICYmIHNob3VsZFNwZWN1bGF0
ZU5vdENlbGwoc3JjRHN0KSkgeworICAgICAgICAgICAgTm90Q2VsbE9wZXJhbmQgaW5wdXQgeyAq
dGhpcywgc3JjRHN0IH07CisgICAgICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIo
KTsKKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAv
LyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBzaW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4K
KyAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdCAmJiAhKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNw
ZWNPYmplY3RPdGhlcikpIHsKKyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlz
LCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOwor
ICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUoc3JjRHN0KSAmIFNwZWNDZWxsKSB7CisgICAgICAg
ICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlk
ZXNUb1RoaXMpKSwgcmVzdWx0R1BSLCBzcmNEc3QpOworICAgICAgICAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBwcm92ZW5UeXBlLCBz
aW5jZSB3ZSdyZSBhbiBpZGVudGl0eS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZh
bHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmNEc3QgfTsKKyAgICAgICAgICAgIEdQUlJlZyBp
bnB1dEdQUiA9IGlucHV0LmdwcigpOworCisgICAgICAgICAgICBKdW1wIG5vdENlbGw7CisgICAg
ICAgICAgICBpZiAoaXNTdHJpY3QpCisgICAgICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKSwgcmVzdWx0R1BSLCBzcmNEc3QpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhpbnB1
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJp
ZGVzVG9UaGlzKSksIHJlc3VsdEdQUiwgc3JjRHN0KTsKKworICAgICAgICAgICAgaWYgKG5vdENl
bGwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICBtb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworCisgICAgICAgICAgICBpZiAoaXNTdHJp
Y3QpCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3BlY0hlYXBUb3A7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvdmVuVHlwZShzcmNEc3QpID0gU3Bl
Y09iamVjdDsgLy8gT09QUzogaXMgdGhpcyByaWdodD8KKyAgICAgICAgfQogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2Fk
MzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShzcmNEc3QsIHJlc3VsdEdQUik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKworICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDU5LDYgKzI2OTks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBj
YWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklE
IGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsK
QEAgLTEwNjgsNyArMjcwOSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBjYWxsZWVP
cGVyYW5kOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAxOworICAgIE9wdGlvbmFsPEdQ
UlRlbXA+IGdwclRlbXAyOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IGdwclRlbXAzOworICAgIE9w
dGlvbmFsPEdQUlRlbXA+IGdwclRlbXA0OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBj
YWxsZWVPcGVyYW5kLmVtcGxhY2UoKnRoaXMsIGNhbGxlZSk7CisgICAgICAgIGdwclRlbXAxLmVt
cGxhY2UoKnRoaXMpOworICAgICAgICBncHJUZW1wMi5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
Z3ByVGVtcDMuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGdwclRlbXA0LmVtcGxhY2UoKnRoaXMp
OworCisgICAgICAgIGNhbGxlZVJlZyA9IGNhbGxlZU9wZXJhbmQtPmdwcigpOworICAgICAgICBh
bGxvY2F0b3JSZWcgPSBncHJUZW1wMS0+Z3ByKCk7CisgICAgICAgIHN0cnVjdHVyZVJlZyA9IGdw
clRlbXAyLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaFJlZyA9IGdwclRlbXAzLT5ncHIoKTsKKyAg
ICAgICAgcmFyZURhdGFSZWcgPSBncHJUZW1wNC0+Z3ByKCk7CisgICAgICAgIGNhY2hlZEZ1bmN0
aW9uUmVnID0gZ3ByVGVtcDQtPmdwcigpOworICAgICAgICByZXN1bHRSZWcgPSBncHJUZW1wNC0+
Z3ByKCk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVl
LCBjYWxsZWVSZWcpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBlbnN1cmVTbG93Q2Fz
ZShyZXN1bHRSZWcsIGRzdCk7CisKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9u
KGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMDg2LDY0ICsyNzUxLDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkOChBZGRyZXNzKHN0cnVj
dHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1Zh
bHVlKGRzdCwgcmVzdWx0UmVnKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0ZpbmFs
T2JqZWN0OworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKLX0KLQotCi0vLyBTbG93IGNhc2VzCi0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
PigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKCEhKHByb3ZlblR5cGUoc3JjKSAmIFNwZWNFbXB0eSkpIHsK
KyAgICAgICAgICAgIFZhbHVlT3BlcmFuZCBpbnB1dCB7ICp0aGlzLCBzcmMgfTsKKyAgICAgICAg
ICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShpbnB1dEdQUikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
KyAgICAvLyBUaGlzIHdvcmtzIGZvciBMT0wgc2luY2UgdGhlIHNsb3cgcGF0aCBkb2Vzbid0IGRv
IGFueXRoaW5nIGV4Y2VwdCBqdW1wIGhlcmUuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwpAQCAtMTE2Miw4ICsyNzk2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICByZXNldEN1cnJlbnRCbG9ja1N0YXRl
KCk7IC8vIE1ha2UgaXQgc28gd2UgY2FuIE9TUiBlbnRlciB3aXRob3V0IGFueSByZWdhbGxvYyBv
ciB0eXBlIHN0YXRlLgorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVC
bG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAg
ICAgICAgLy8gT09QUzogY2xlYXIgcmVnaXN0ZXIgc3RhdGUgaGVyZSBzbyB3ZSBjYW4gYWx3YXlz
IE9TUiBlbnRlci4KICAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVj
dXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZDY0KHB0ciwgcmVnVDApOwog
ICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1
c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7
CkBAIC0xMTg3LDEzICsyODI0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8g
RW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBp
ZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
CiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwpAQCAtMTIwNiwxMSArMjg0MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50
KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0g
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpOworICAgICAgICAvLyBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKTsgLy8gT09QUzogSSB0aGluayB0aGlzIGNhbiBqdXN0IGJlIHJlbW92ZWQg
c28gaXQgd29ya3MgaW4gTE9MIHRvby4KICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQog
CkBAIC0xMjMzLDEwICsyODY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9l
bmQoY29ucwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdp
c2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBTbG93Q2FzZSYpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKQEAgLTEyNDUsOCAr
Mjg3NywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKLSAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGlmICh1c2VMT0woKSkg
eworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhp
cywgcmV0dXJuVmFsdWVHUFIgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAg
ICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjUmVnRXhwT2JqZWN0OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xMjU2LDIz
ICsyODk4LDQyIEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnUKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKKyAgICBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0aW9uYWw8VmFs
dWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhpcywgYnl0ZWNv
ZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOworICAgICAgICBz
cGlsbEZvckNhbGwoKTsKKyAgICAgICAgcmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGlmICghdXNlTE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgc2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCBzY29wZUdQUik7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5j
RXhlYyk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmNFeGVjKTsKICAgICBlbHNlIHsKICAgICAgICAg
QVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY0V4ZWMp
OworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTMw
MSwyNCArMjk2Miw0NiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IElu
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgR1BSUmVnIHNj
b3BlR1BSID0gcmVnVDA7CisKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxp
ZEdQUlJlZzsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2NvcGUuZW1wbGFjZSgqdGhp
cywgYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgIHNjb3BlR1BSID0gc2NvcGUtPmdwcigpOwor
ICAgICAgICBzY29wZS5yZXNldCgpOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAg
cmVzdWx0LmVtcGxhY2UoKnRoaXMsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gcmVzdWx0LT5ncHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGlmICghdXNl
TE9MKCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
c2NvcGVHUFIpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBzY29wZUdQUik7
CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9j
ay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHNjb3BlR1BSLCBmdW5jdGlvbik7CiAgICAgZWxzZSBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgc2NvcGVHUFIsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBzY29wZUdQUiwgZnVuY3Rpb24pOworICAg
IH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAg
cHJvdmVuVHlwZShkc3QpID0gU3BlY0Z1bmN0aW9uOwogICAgIH0KIH0KIApAQCAtMTM0OSw5ICsz
MDMyLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUu
bV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IHJlZ1Qw
OworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHRlbXA7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIHNwaWxsRm9yQ2FsbCgpOworICAgICAgICB0ZW1wLmVtcGxhY2UoKnRoaXMsIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgYXJnR1BSID0gdGVtcC0+Z3ByKCk7CisgICAgfQorICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYXJnR1BSLCBz
aXplKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIGFyZ0dQ
Uik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNBcnJheTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzNjAsMTQgKzMwNTMsMjkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5n
dGg7CisKKyAgICBHUFJSZWcgYXJnR1BSID0gcmVnVDA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4g
dGVtcDsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7CisgICAg
ICAgIHRlbXAuZW1wbGFjZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhcmdHUFIg
PSB0ZW1wLT5ncHIoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJnR1BSID09IHJldHVyblZh
bHVlR1BSKTsKKyAgICB9CisKKyAgICAvLyBPT1BTOiBJbmxpbmUgdGhlIGFsbG9jYXRpb24gcGF0
aCBoZXJlLCBpdCBtYXR0ZXJzIGZvciBzdW5zcGlkZXItY3J5cHRvLWFlcworCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ0dQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIGFyZ0dQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0
LCBhcmdHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQXJyYXk7CisgICAgfQog
I2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExv
YWQoc2l6ZUluZGV4LCByZWdUMSwgYXJnR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5t
X2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBhcmdHUFIpKTsKICNl
bmRpZgogfQogCkBAIC0xMzgxLDE1ICszMDg5LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAg
ICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhpcywgZW51bWVyYXRvciB9Owor
ICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2UgfTsKKyAgICAgICAg
R1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9
IGVudW1lcmF0b3JWYWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVmFs
dWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUiksIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0
R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpLCByZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVzdWx0R1BS
KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgICAgICAKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTQwOSw2ICszMTM4LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KAogCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKKyAgICBtX3Vz
ZUxPTCA9IGZhbHNlOworICAgIC8vIE9PUFM6CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
QEAgLTE0MzYsNiArMzE2Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIHNwaWxsRm9y
Q2FsbCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNDYxLDE1
ICszMTk0LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWQKICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CiAKICAgICBK
SVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFi
bGVKdW1wIGJhZFR5cGU7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKIAogICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQg
QXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
ID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBl
SnVtcCk7CiAgICAgCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBh
ZGRTbG93Q2FzZShiYWRUeXBlSnVtcCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAg
ICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKQEAgLTE0NzgsMTMgKzMyMTEsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZAogCiAgICAgTGFiZWwgbmV4dEhv
dFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFi
bGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Cisg
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlW
YWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZUp1bXAsIG1v
ZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisKKyAgICBpZiAodXNlTE9MKCkpCisg
ICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCb29sZWFuOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmKQogewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtMTUxMCwzNyArMzI0NCw4MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNl
bGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlRlbXAgc2NyYXRj
aCB7ICp0aGlzIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBlbnVtZXJhdG9yVmFsdWUgeyAqdGhp
cywgZW51bWVyYXRvciB9OworICAgICAgICBJbnQzMk9wZXJhbmQgaW5kZXhWYWx1ZSB7ICp0aGlz
LCBpbmRleCB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZVZhbHVlIHsgKnRoaXMsIGJhc2Ug
fTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2VWYWx1ZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yVmFsdWUuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4VmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKIAotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUg
b2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVn
VDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoYmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSwgcmVzdWx0
R1BSLCBkc3QpOwogCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qx
LCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCByZXN1bHRHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSksIHJlc3VsdEdQUiwgZHN0
KTsKKworICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAg
IEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRleEdQUiwg
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAg
ICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtb3ZlKGluZGV4R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgbmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluayh0
aGlzKTsKKworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3Vs
dEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAgICAgLy8gSWYgaW5kZXgg
aXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVu
IGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAg
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vz
cy5saW5rKHRoaXMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7
CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU1MCwyMSArMzMyOCw1MSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsK
LSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZz
ZXQoKSkpOworICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlv
bmFsPEdQUlRlbXA+IHJlc3VsdFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRl
bXA7CisgICAgT3B0aW9uYWw8SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3du
SW50MzJPcGVyYW5kCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsK
KworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywg
aW5kZXgpOworICAgICAgICBlbnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9y
KTsKKyAgICAgICAgcmVzdWx0VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRl
bXAuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigp
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAg
ICByZXN1bHRHUFIgPSByZXN1bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hUZW1wLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1Qw
OworICAgICAgICBlbnVtZXJhdG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJl
Z1QyOworICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCBpbmRleEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQo
KSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSwgcmVzdWx0R1BSKTsKIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5s
aW5rKHRoaXMpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5k
ZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3Jh
dGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRz
dCkgPSBTcGVjU3RyaW5nIHwgU3BlY090aGVyOworICAgIH0gZWxzZQorICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTc0LDIxICszMzgyLDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmEKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3Vu
ZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgIEdQUlJl
ZyBpbmRleEdQUjsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3Vs
dFRlbXA7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gc2NyYXRjaFRlbXA7CisgICAgT3B0aW9uYWw8
SW50MzJPcGVyYW5kPiBpbmRleFRlbXA7IC8vIE9PUFM6IEtub3duSW50MzJPcGVyYW5kCisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBlbnVtZXJhdG9yVGVtcDsKKworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBpbmRleFRlbXAuZW1wbGFjZSgqdGhpcywgaW5kZXgpOworICAgICAgICBl
bnVtZXJhdG9yVGVtcC5lbXBsYWNlKCp0aGlzLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgcmVzdWx0
VGVtcC5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaFRlbXAuZW1wbGFjZSgqdGhpcyk7
CisKKyAgICAgICAgaW5kZXhHUFIgPSBpbmRleFRlbXAtPmdwcigpOworICAgICAgICBlbnVtZXJh
dG9yR1BSID0gZW51bWVyYXRvclRlbXAtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1
bHRUZW1wLT5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hUZW1wLT5ncHIoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpbmRleEdQUiA9IHJlZ1QwOworICAgICAgICBlbnVtZXJh
dG9yR1BSID0gcmVnVDE7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBzY3Jh
dGNoR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGlu
ZGV4R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVt
ZXJhdG9yR1BSKTsKKyAgICB9CisKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3cs
IGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVzdWx0R1BSKTsKIAogICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogCi0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdU
MCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0
KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0KSwgcmVz
dWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTU5OCw2ICszNDM2LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogICAgIFR5cGVMb2NhdGlvbiog
Y2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXI7CiAKKyAgICBzcGlsbEZvckNhbGwoKTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKQEAgLTE2
NTgsNiArMzQ5OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMK
IHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCku
c2hhZG93Q2hpY2tlbigpKTsKKworICAgIHNwaWxsRm9yQ2FsbCgpOworCiAgICAgdXBkYXRlVG9w
Q2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5v
bkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVl
LiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hh
ZG93Q2hpY2tlblByb2xvZ3VlPigpOwpAQCAtMTY3Miw2ICszNTE1LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Bybwogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CisKKyAgICBzcGlsbEZv
ckNhbGwoKTsKKwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwpAQCAtMTY4NCw2ICsz
NTMwLDE5MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhy
ZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
KTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRJc0NhbGxhYmxl
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3Vs
dCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8gbm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIGF1dG8gaXNGdW5jdGlv
biA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRHUFIpOworICAgICAgICBhdXRvIG5vdE9iamVjdCA9
IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gc2xv
d1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgs
IHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgCisgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
KyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBq
dW1wKCk7CisgICAgICAgIAorICAgICAgICBpc0Z1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVsc2UK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9pc19jYWxsYWJsZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxhYmxlSW1wbDxPcElzQ2FsbGFibGU+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19mdW5jdGlvbihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRJc0NhbGxh
YmxlSW1wbDxPcFR5cGVvZklzRnVuY3Rpb24+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX3R5cGVvZl9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFR5cGVvZklzT2JqZWN0PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQg
eyAqdGhpcywgb3BlcmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07Cisg
ICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8gaXNDZWxsID0gYnJhbmNoSWZD
ZWxsKGlucHV0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gaXNOdWxsID0gYnJhbmNoSWZF
cXVhbChKU1ZhbHVlUmVncyB7IGlucHV0R1BSIH0sIGpzTnVsbCgpKTsKKyAgICAgICAgYXV0byBp
c05vbk51bGxOb25DZWxsID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNDZWxsLmxpbmso
dGhpcyk7CisgICAgICAgIGF1dG8gaXNGdW5jdGlvbiA9IGJyYW5jaElmRnVuY3Rpb24oaW5wdXRH
UFIpOworICAgICAgICBhdXRvIG5vdE9iamVjdCA9IGJyYW5jaElmTm90T2JqZWN0KGlucHV0R1BS
KTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gc2xvd1BhdGggPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAg
CisgICAgICAgIGlzTnVsbC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIAorICAgICAgICBpc05vbk51bGxOb25DZWxsLmxpbmsodGhpcyk7CisgICAg
ICAgIGlzRnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47Cisg
ICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUeXBlb2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV92YWx1ZTsKKworICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgaW5wdXQgeyAqdGhpcywgb3Bl
cmFuZCB9OworICAgICAgICBHUFJUZW1wIHJlc3VsdCB7ICp0aGlzIH07CisgICAgICAgIEdQUlJl
ZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIEp1bXBMaXN0IGRvbmU7CisgICAgICAgIEp1bXAgc2xvd1Bh
dGg7CisgICAgICAgIGVtaXRUeXBlT2YoCisgICAgICAgICAgICBKU1ZhbHVlUmVncyB7IGlucHV0
R1BSIH0sIHJlc3VsdEdQUiwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlLCBib29s
IGZhbGxzVGhyb3VnaCkgeworICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Zt
LT5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgaWYgKCFmYWxsc1Rocm91Z2gpCisgICAgICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChKdW1wIHRoZVNsb3dQ
YXRoKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGggPSB0aGVTbG93UGF0aDsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGgsIHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVz
dWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY1N0cmluZzsKKyAgICB9IGVs
c2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBDZWxsT3BlcmFuZCBpbnB1
dCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAg
ICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoaW5wdXRHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOworICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJs
ZSo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7Cisg
ICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNv
ZGUubV9pbml0aWFsVmFsdWUpOworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChz
eW1ib2xUYWJsZS0+c2luZ2xldG9uKCkuaXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVt
aXRTbG93T3Aoc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50LCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGRzdCwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIFZhbHVlT3BlcmFuZCBzY29wZVRlbXAgeyAqdGhpcywgc2NvcGUg
fTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHRUZW1wIHsgKnRoaXMgfTsKKyAgICAgICAgR1BSVGVt
cCBzY3JhdGNoMVRlbXAgeyAqdGhpcyB9OworICAgICAgICBHUFJUZW1wIHNjcmF0Y2gyVGVtcCB7
ICp0aGlzIH07CisKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGVUZW1wLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0VGVtcC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDFUZW1wLmdwcigpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBzY3JhdGNoMlRlbXAuZ3ByKCk7CisKKyAgICAgICAgSnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPEpTTGV4aWNhbEVudmlyb25t
ZW50PigKKyAgICAgICAgICAgICptX3ZtLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpLCBidXR0ZXJmbHks
IHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwKKyAgICAgICAgICAgIHNsb3dQYXRoLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpKTsKKworICAgICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aCwgcmVzdWx0R1BSLCBkc3QpOworICAgICAgICAgICAgCisgICAg
ICAgIC8vIERvbid0IG5lZWQgYSBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNy
ZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQorICAgICAgICAvLyBhY3RpdmF0aW9uIG11c3Qg
YmUgeW91bmcuCisgICAgICAgIHN0b3JlUHRyKHNjb3BlR1BSLCBBZGRyZXNzKHJlc3VsdEdQUiwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihzeW1ib2xUYWJsZSksIEFkZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZTeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gTXVzdCBp
bml0aWFsaXplIGFsbCBtZW1iZXJzIHRvIHVuZGVmaW5lZCBvciB0aGUgVERaIGVtcHR5IHZhbHVl
LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3ltYm9sVGFibGUtPnNjb3BlU2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWUsIEFk
ZHJlc3MocmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShT
Y29wZU9mZnNldChpKSkpKTsKKyAgICAgICAgCisgICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5
cGUoZHN0KSA9IFNwZWNPYmplY3RPdGhlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3MDIsMTEgKzM3MzUsMjAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNW
YWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAgYm94SW50
MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFi
bGVSZWdzKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0KTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTcxNCwyOSArMzc1Niw0OCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29k
ZS5tX251bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7Ci0gICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7Ci0gICAgc3ViMzIo
SW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOworCisgICAgaWYgKHVzZUxPTCgpKSB7Cisg
ICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMgfTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlc3VsdEdQUik7CisgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKdW1wIHplcm9MZW5n
dGggPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlc3VsdEdQUiwgSW1tMzIobnVtUGFyYW1z
VG9Ta2lwKSk7CisgICAgICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICB6ZXJvTGVuZ3RoLmxp
bmsodGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2V0SW50MzIoZHN0LCByZXN1bHRHUFIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOworICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgICAg
IHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICNlbmRpZgotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgemVyb0xlbmd0aC5s
aW5rKHRoaXMpOworICAgICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkp
KSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoMCkpKSwgcmVnVDApOwogI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogI2VuZGlmCiAKLSAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAjZWxzZQotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNzQ0LDQ5ICszODA1LDk5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OworCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRoaXMg
fTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBs
b2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyksIHJlc3VsdEdQUik7CisgICAgICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5j
aDMyKExlc3NUaGFuT3JFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAg
ICAgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIGluZGV4KSksIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAg
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAgICAgYXJndW1lbnRPdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAgIHBy
b3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRvcDsKKyAgICB9IGVsc2UgewogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CisgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwogI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDEsIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVu
dE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZElt
bTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsK
LSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMik7CisgICAgICAgIEp1bXAgYXJndW1l
bnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJ
bW0zMihpbmRleCkpOworICAgICAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgICAgICBhcmd1bWVudE91dE9mQm91bmRz
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdz
KTsKKworICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZVRlbXAg
eyAqdGhpcywgdmFsdWUgfTsKKyAgICAgICAgR1BSVGVtcCByZXN1bHQgeyAqdGhpcyB9OworICAg
ICAgICBHUFJUZW1wIHNjcmF0Y2ggeyAqdGhpcyB9OworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlVGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAg
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwo
dmFsdWUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVPYmplY3QodmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVl
R1BSKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90Q2VsbCh2YWx1ZUdQUikpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdExv
YWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0sIHNj
cmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcywgcmVz
dWx0R1BSLCBkc3QpOworCisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgICAgICBzZXRKU1ZhbHVlKGRz
dCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY09iamVjdCB8IFNw
ZWNPdGhlcjsKKyAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKICNlbHNlCi0gICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
MywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7Ci0gICAgQVNTRVJUKHZh
bHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDMsIHJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMTsKKyAgICAgICAg
QVNTRVJUKHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKICNlbmRpZgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVSZWdzKTsKIAotICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1
ZVJlZ3MpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7
CiAKLSAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7CisgICAgICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIH0K
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjQsNiAr
MTQyNCw4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21wYXIKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIC8vZGF0YUxvZ0xuKCJjb21wYXJl
TGVzcywgbGhzOiAiLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksICIgcmhzOiAiLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogICAgIAogICAgIHJldHVybiBqc0xlc3M8dHJ1ZT4o
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKSk7CiB9CkBAIC0xNDkxLDYgKzE0OTMsOCBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uQ29tcGFyCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgc3JjMiA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKTsKIAorICAgIC8vZGF0YUxvZ0xuKCJzdHJpY3RlcSwgbGhzOiAiLCBzcmMxLCAiIHJo
czogIiwgc3JjMik7CisKICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFsT2Jq
ZWN0LCBzcmMxLCBzcmMyKTsKIH0KIApAQCAtMTY5MSw3ICsxNjk1LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRlYnVnLAogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGlj
IHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRPcHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9j
ayogY29kZUJsb2NrKQogewotICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsK
KyAgICBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlv
bnMoKTsKICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIH0KIApAQCAtMTcx
OSw3ICsxNzIzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQog
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKFVOTElLRUxZ
KGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgeworICAgIGlm
IChVTkxJS0VMWShjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiBjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpMT0xKSVQpKSB7CiAgICAgICAgIGRh
dGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBCYXNlbGluZS0+REZHIHRpZXItdXA6ICIs
ICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KQEAgLTE3NDUsNyArMTc0OSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25PcHRpbWkKIAogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9u
VGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJs
b2NrLCAiZGVsYXlPcHRpbWl6ZVRvREZHIiwgKCJjb3VudGVyID0gIiwgY29kZUJsb2NrLT5qaXRF
eGVjdXRlQ291bnRlcigpKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlv
bnMoKTsKKyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCktPnVwZGF0ZUFs
bFByZWRpY3Rpb25zKCk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldCwgYmVjYXVz
ZSB0aGUgdGhyZXNob2xkIGhhc24ndCBiZWVuIHJlYWNoZWQuIik7CiAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQpAQCAtMTgxNCw3ICsxODE4LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAgICAvLyBu
b3RoaW5nIGxlZnQgdG8gZG8uCiAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7CiAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9j
aywgImRlbGF5T3B0aW1pemVUb0RGRyIsICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwog
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29kZSBibG9j
ayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9w
dGltaXplZCByZXBsYWNlbWVudC4iKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
bnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KQEAgLTE4NDMsNyArMTg0Nyw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWkKICAgICAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQobnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgeworICAgICAgICBp
ZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVUb0RGR05vdygpKSB7CiAgICAgICAgICAgICBD
T0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0aW1pemVUb0RGRyIsICgiaW5z
dWZmaWNpZW50IHByb2ZpbGluZyIpKTsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwKICAgICAgICAgICAgICAgICAiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZv
ciAiLCAqY29kZUJsb2NrLApAQCAtMTg2Nyw3ICsxODcxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbk9wdGltaQogICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVl
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOworICAgICAgICBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudChjb2RlQmxvY2spOwog
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUoCiAgICAgICAg
ICAgICB2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIG51bGxwdHIsIERGRzo6REZHTW9kZSwgYnl0
ZWNvZGVJbmRleCwKICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CkBAIC0xODc5LDcgKzE4ODMsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pCiAgICAgfQogICAgIAogICAg
IENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
OwotICAgIEFTU0VSVChvcHRpbWl6ZWRDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgQVNTRVJUKG9wdGltaXpl
ZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc0RGR09yRlRMKG9wdGltaXplZENvZGVCbG9jay0+aml0
VHlwZSgpKSk7CiAgICAgCiAgICAgaWYgKHZvaWQqIGRhdGFCdWZmZXIgPSBERkc6OnByZXBhcmVP
U1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgp
KSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQob3B0aW1pemVkQ29kZUJsb2NrLCAib3Ny
RW50cnkiLCAoImF0IGJjIyIsIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTE5NzIsNyArMTk3Niw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UcnlPU1IKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CisgICAgY29kZUJsb2NrLT5iYXNlbGluZUFs
dGVybmF0aXZlKCktPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgbWV0YWRhdGEubV9idWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUp
IHsKQEAgLTM0MzMsNiArMzQzNyw0MSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ2hlY2tJCiAgICAgcmV0dXJuIDA7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25UcmlnZ2VyTE9MUmVvcHRpbWl6YXRpb25Ob3csIHZvaWQsIChDb2RlQmxvY2sqIGxv
bENvZGVCbG9jaykpCit7CisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBk
b24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAorICAgIC8v
IHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhsb2xD
b2RlQmxvY2stPnZtKCkuaGVhcCk7CisKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJpbnRF
YWNoTE9MSmV0dGlzb24oKSkpCisgICAgICAgIGRhdGFMb2dMbigiamV0dGlzb24sIGZvcmNpbmcg
cmVvcHQgbm93OiAiLCAqbG9sQ29kZUJsb2NrKTsKKyAgICBsb2xDb2RlQmxvY2stPmJhc2VsaW5l
QWx0ZXJuYXRpdmUoKS0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAKKyAgICAvLyBPT1BT
OiBwcm9jZXNzIHZhbHVlIHByb2ZpbGVzIGhlcmUsIHNpbmNlIHdlJ3JlIGpldHRpc29uaW5nLCBo
b3BlZnVsbHkgdGhleSB1cGRhdGUgdy8gdGhpbmdzIHdlIGNhcmUgYWJvdXQuCisKKyAgICBzYW5p
dGl6ZVN0YWNrRm9yVk0obG9sQ29kZUJsb2NrLT52bSgpKTsKKworICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxvbENvZGVCbG9jaywgIjogRW50ZXJlZCByZW9wdGltaXpl
IGZyb20gTE9MIik7CisKKyAgICBDb2RlQmxvY2sqIGxsaW50Q29kZUJsb2NrID0gbG9sQ29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIC8vIFdlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJh
c2VsaW5lIGNvZGUgYmxvY2suCisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGxs
aW50Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQg
PSBsbGludENvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlcGxhY2VtZW50IHx8
IHJlcGxhY2VtZW50ID09IGxsaW50Q29kZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgKmxsaW50Q29kZUJsb2NrLCAiOiBOb3QgcmVvcHRpbWl6aW5n
IExPTCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1lbnQgbXVzdCBi
ZSBvcHRpbWl6ZWQgY29kZS4gVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKKyAgICAvLyB0byBj
aGVjayBvdXIgbG9naWMuCisgICAgQVNTRVJUKGxsaW50Q29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKTsKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGxvbENv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IHN0dWNrIGlu
IGEgbG9vcCBsb2dpYworICAgIGxvbENvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9PU1JFeGl0LCBDb3VudFJlb3B0aW1pemF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMx
OSw4IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVmFsdWUKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwg
KFZNKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93
Q2hpY2tlbkxvZywgdm9pZCwgKFZNKikpOwogCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblRyaWdnZXJMT0xSZW9wdGltaXphdGlvbk5vdywgdm9pZCwgKENvZGVCbG9jayogbG9s
Q29kZUJsb2NrKSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1
LDggKzE4NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CkBAIC0yMTEsOCArMjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92
YWwoY29uc3QgSQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CkBAIC0yODEsOCArMjc3LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKICAgICAgICAgKyttX2dldEJ5VmFsSW5k
ZXg7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKQEAgLTU1OCw3ICs1NTIsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKICAgICAKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKICAgICAKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93
IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgpAQCAtNTk4LDgg
KzU5MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKQEAgLTYz
OSw4ICs2MzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CkBAIC02ODYsOCArNjc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CkBAIC03MjksOCArNzE2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjbwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CkBAIC03NzgsOCArNzYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwpAQCAtODE5LDggKzgwMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKQEAgLTExMDAsOCArMTA4MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwpAQCAtMTI1Nyw4ICsxMjM2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJl
c29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8d3Rm
L1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogI2lm
IFVTRShKU1ZBTFVFNjQpCiAKQEAgLTUyLDUxICs1NCwxMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFu
ZD4gcHJvcGVydHlWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFI7CisgICAgR1BSUmVnIHJl
c3VsdEdQUjsKKyAgICBHUFJSZWcgaW5kZXhpbmdUeXBlR1BSOworCisgICAgaWYgKG1fdXNlTE9M
KSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlzLCBiYXNlKTsKKyAgICAgICAgcHJv
cGVydHlWYWx1ZS5lbXBsYWNlKCp0aGlzLCBwcm9wZXJ0eSk7CisgICAgICAgIHJlc3VsdFZhbHVl
LmVtcGxhY2UoKnRoaXMpOworCisgICAgICAgIGJhc2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOwor
ICAgICAgICBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5VmFsdWUtPmdwcigpOworICAgICAgICByZXN1
bHRHUFIgPSByZXN1bHRWYWx1ZS0+Z3ByKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgaW5kZXhpbmdUeXBlR1BSID0gcmVzdWx0R1BSOworICAgIH0gZWxzZSB7CisgICAgICAgIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAgICAgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVnVDA7CisgICAgICAgIGluZGV4aW5nVHlwZUdQUiA9IHJlZ1QyOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCiAgICAgaWYg
KG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElD
TWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBub3RDZWxsOwor
ICAgICAgICBpZiAoIXVzZUxPTCgpIHx8ICFpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KGJhc2UpLCBTcGVjQ2VsbENoZWNrKSkKKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
YXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2ZpbGUpOworICAgICAgICBpZiAobm90Q2VsbC5p
c1NldCgpKQorICAgICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwor
ICAgICAgICBpZiAodXNlTE9MKCkpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCByZXN1bHRHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvJiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQogCi0gICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFz
ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludDMyKHByb3BlcnR5KSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAg
ZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlU3RyaW5nKHByb3BlcnR5KSB8fCBzaG91bGRTcGVjdWxh
dGVTeW1ib2wocHJvcGVydHkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVT
dHJpbmcocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZVN5bWJvbChwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhaXNTdWJ0eXBlU3Bl
Y3VsYXRpb24ocHJvdmVuVHlwZShiYXNlKSwgU3BlY0NlbGxDaGVjaykpCisgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNlR1BSLCBpbmRleGluZ1R5cGVHUFIsIHByb2Zp
bGUpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlm
IChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBlKHByb3BlcnR5KSwgU3BlY0ludDMyT25s
eSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N1YnR5cGVTcGVjdWxhdGlvbihwcm92ZW5UeXBl
KHByb3BlcnR5KSwgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoaXNTdWJ0eXBl
U3BlY3VsYXRpb24ocHJvdmVuVHlwZShwcm9wZXJ0eSksIFNwZWNTeW1ib2wpKQorICAgICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKyAgICAgICAg
fQogICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoIXVzZUxPTCgpKQorICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiAgICAgfQogCisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRHUFIpOwor
ICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKLSAg
ICAgICAgKyttX2dldEJ5VmFsSW5kZXg7Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50
c1sxXS5ncHIoKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXhdOworICAgICsrbV9nZXRCeVZhbEluZGV4OworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgaWYgKHVzZUxP
TCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDUsNDEgKzE3Myw3MyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgR1BSUmVnIGJhc2VHUFI7
CisgICAgR1BSUmVnIHByb3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisKKyAgICBP
cHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJh
bmQ+IHByb3BlcnR5VmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisK
KyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJh
c2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsKKyAg
ICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHByb3BlcnR5R1BSID0gcHJvcGVydHlWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5z
dXJlU2xvd0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMu
YXBwZW5kKGJhc2VHUFIpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHByb3Bl
cnR5R1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2Vs
bChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BSKTsKKyAgICBlbHNl
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JT
dHViKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0R1BSKTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0hl
YXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dD
YXNlKQogewotICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0KLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRz
WzBdLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sx
XS5ncHIoKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXhdOwogICAgICsrbV9nZXRCeVZhbEluZGV4OwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGlmICh1c2VM
T0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc2xvd0Nhc2UucmVzdWx0Lmdwcigp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTcsNiArMjU3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAorICAgIHNwaWxsRm9yQ2Fs
bCgpOyAvLyBPT1BTOiBNYXliZSBkbyBiZXR0ZXIgaGVyZT8KKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CiAgICAgaWYgKHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50KQpAQCAtMzE5LDggKzQyMSwxMSBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMu
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7
CiAKKyAgICBhdXRvIHVuYXZhaWxhYmxlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVuYXZhaWxhYmxlUmVnaXN0ZXJzLm1lcmdlKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dW5hdmFpbGFibGVSZWdpc3RlcnMsIHByb3BlcnR5TmFtZSwKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksIHB1
dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCkBAIC0zMzksNyArNDQ0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRC
eVZhbFdpdAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYpCiB7
CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZTsKQEAgLTM0Nyw3
ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6
OnN0cmljdCgpOwogCi0gICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICBh
dXRvIGdldFN0YXRlID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
ICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC0zNTUsMTMgKzQ2MCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxE
aXJlY3Q+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWxEaXJlY3Q+KCkpOwogICAgIGVsc2UKLSAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCkpOworICAgICAgICBnZXRTdGF0ZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMzgxLDYg
KzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5k
ZXgpOwogCisgICAgc3BpbGxGb3JDYWxsKCk7IC8vIE9PUFM6IERvIGJldHRlciBpZiB3ZSBjYW4h
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAKQEAgLTM5NCwxMyArNTAwLDEyIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgZmFzdFBhdGhKbXAsIGRvbmUsIGRvbmUpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlW
YWxJbmZvOwogICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0
S2luZDsKIAotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgTGFiZWwgc2xvd1BhdGgg
PSBsYWJlbCgpOwogCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKQEAgLTQyMCw0OSArNTI1
LDEwNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFuZCBiYXNlIHsgKnRoaXMsIGJ5
dGVjb2RlLm1fYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQgYWNjZXNzb3IgeyAqdGhpcywg
Ynl0ZWNvZGUubV9hY2Nlc3NvciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOworICAgICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgICAgIHNwaWxs
Rm9yQ2FsbCgpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCBhY2Nlc3NvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKLSAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNvZGUubV9iYXNl
IH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBhY2Nlc3NvciB7ICp0aGlzLCBieXRlY29kZS5tX2Fj
Y2Vzc29yIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxGb3JDYWxsKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIGFjY2Vzc29yR1BS
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBp
ZiAodXNlTE9MKCkpIHsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGJhc2UgeyAqdGhpcywgYnl0ZWNv
ZGUubV9iYXNlIH07CisgICAgICAgIFZhbHVlT3BlcmFuZCBnZXR0ZXIgeyAqdGhpcywgYnl0ZWNv
ZGUubV9nZXR0ZXIgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHNldHRlciB7ICp0aGlzLCBieXRl
Y29kZS5tX3NldHRlciB9OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBnZXR0ZXJHUFIgPSBnZXR0ZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
ZXR0ZXJHUFIgPSBzZXR0ZXIuZ3ByKCk7CisgICAgICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAgICBzcGlsbEZvckNhbGwoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIGdldHRlckdQUiwgc2V0dGVy
R1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOworICAgICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2dldHRlciwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2V0dGVyLCByZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0
ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
cmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywg
cmVnVDIpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7
ICp0aGlzLCBieXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5
IHsgKnRoaXMsIGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFj
Y2Vzc29yIHsgKnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7Cisg
ICAgICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAg
ICAgc3BpbGxGb3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKKyAgICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwor
ICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1ZU9wZXJhbmQgYmFzZSB7ICp0aGlzLCBi
eXRlY29kZS5tX2Jhc2UgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIHByb3BlcnR5IHsgKnRoaXMs
IGJ5dGVjb2RlLm1fcHJvcGVydHkgfTsKKyAgICAgICAgVmFsdWVPcGVyYW5kIGFjY2Vzc29yIHsg
KnRoaXMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CisgICAgICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICAgICAgc3BpbGxG
b3JDYWxsKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWws
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIGF0dHJpYnV0ZXMsIGFjY2Vzc29yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAg
ICAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMs
IHJlZ1QyKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDcyLDE4ICs2MzMsNTIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFz
ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHJlc3VsdFZhbHVlOworICAgIE9wdGlvbmFs
PEdQUlRlbXA+IHNjcmF0Y2g7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAg
ICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2UpOworICAgICAgICByZXN1bHRWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgc2NyYXRjaC5lbXBsYWNlKCp0aGlzKTsKKworICAgICAg
ICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0
VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3ByKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QxOworICAgICAgICByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworCisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkgJiYgc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0
dWIoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOworICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBzZXRKU1ZhbHVl
KGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0Jvb2xlYW47
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdp
dGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQg
ZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFy
cmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC00OTIsMjUgKzY4NywyNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIp
KTsKKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc2xv
d0Nhc2UucmVzdWx0LmdwcigpOworICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTIwLDE5ICs3MTcsNzAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBPcHRpb25hbDxWYWx1ZU9w
ZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHByb3BlcnR5VmFs
dWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVzdWx0VmFsdWU7CisgICAgT3B0aW9uYWw8R1BS
VGVtcD4gc2NyYXRjaFZhbHVlOworCisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHBy
b3BlcnR5R1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7
CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMs
IGJhc2UpOworICAgICAgICBwcm9wZXJ0eVZhbHVlLmVtcGxhY2UoKnRoaXMsIHByb3BlcnR5KTsK
KyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIHNjcmF0Y2hWYWx1
ZS5lbXBsYWNlKCp0aGlzKTsKKworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsK
KyAgICAgICAgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRj
aFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDE7Cisg
ICAgICAgIHByb3BlcnR5R1BSID0gcmVnVDA7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlZ1QzOwor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVnVDI7CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nh
c2UgPSBlbnN1cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFy
Z3VtZW50cy5hcHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBl
bmQocHJvcGVydHlHUFIpOworICAgIH0KKworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlQ2VsbChiYXNlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKworICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlQ2VsbChwcm9wZXJ0eSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKyAgICB9CisKICAg
ICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1
bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjQm9vbGVhbjsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KQEAgLTU0MSwyMjEgKzc4OSwzNjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2UpCiB7Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZh
bEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHNs
b3dDYXNlLmFyZ3VtZW50c1swXS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzbG93
Q2FzZS5hcmd1bWVudHNbMV0uZ3ByKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgT3B0
aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8R1BSVGVtcD4gcmVz
dWx0VmFsdWU7CisgICAgR1BSUmVnIGJhc2VHUFI7CisgICAgR1BSUmVnIHJlc3VsdEdQUjsKKyAg
ICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgYmFzZVZhbHVlLmVtcGxhY2UoKnRoaXMsIGJhc2Up
OworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9
IGJhc2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIH0KIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShy
ZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQoYmFzZUdQ
Uik7CisgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNl
bGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
c3VsdFJlZ3MsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNs
b3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQ
UlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLSAgICAKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworCisgICAgaWYgKHVzZUxPTCgpKQorICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2FzZS5yZXN1bHQuZ3ByKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYmFzZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRl
bXA+IHJlc3VsdFZhbHVlOworICAgIEdQUlJlZyBiYXNlR1BSOworICAgIEdQUlJlZyByZXN1bHRH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0aGlz
LCBiYXNlKTsKKyAgICAgICAgcmVzdWx0VmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgIGJh
c2VHUFIgPSBiYXNlVmFsdWUtPmdwcigpOworICAgICAgICByZXN1bHRHUFIgPSByZXN1bHRWYWx1
ZS0+Z3ByKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZUdQUiA9IHJlZ1QwOworICAgICAg
ICByZXN1bHRHUFIgPSByZWdUMDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICB9CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICB7CisgICAgICAgIGF1dG8mIHNsb3dDYXNlID0gZW5zdXJlU2xv
d0Nhc2UocmVzdWx0R1BSLCBkc3QpOworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5k
KGJhc2VHUFIpOworICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIH0gZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZXN1bHRSZWdzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB1bmF2YWlsYWJsZVJlZ2lzdGVyc0ZvclN0dWIoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0wo
KSkgeworICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVu
VHlwZShkc3QpID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgU2xvd0Nhc2UmIHNsb3dDYXNlKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIEdQUlJl
ZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERp
cmVjdE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHNsb3dD
YXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKLSAgICAKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAg
ICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFs
dWUuZW1wbGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRo
aXMpOworICAgICAgICBiYXNlR1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIg
PSByZWdUMDsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRv
JiBzbG93Q2FzZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xv
d0Nhc2UuYXJndW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNl
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKwog
ICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewogICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5j
aDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9k
ZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlM
ZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cmVnVDEsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9m
aWxlKTsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nVHlwZUdQUiA9IHVzZUxPTCgpID8gcmVzdWx0
R1BSIDogcmVnVDE7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChiYXNl
R1BSLCBpbmRleGluZ1R5cGVHUFIsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0
aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhp
cyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxl
UmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdEdQUik7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCBy
ZXN1bHRHUFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjSGVhcFRvcDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgU2xvd0Nhc2UmIHNsb3dDYXNl
KQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSkpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIAorICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBzbG93Q2Fz
ZS5yZXN1bHQuZ3ByKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25h
bDxWYWx1ZU9wZXJhbmQ+IHRoaXNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRW
YWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdGhpc0dQUjsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1w
bGFjZSgqdGhpcywgYmFzZSk7CisgICAgICAgIHRoaXNWYWx1ZS5lbXBsYWNlKCp0aGlzLCB0aGlz
VlJlZyk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgdGhpc0dQUiA9IHRoaXNWYWx1ZS0+Z3By
KCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5ncHIoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBiYXNlR1BSID0gcmVnVDA7CisgICAgICAgIHRoaXNHUFIgPSByZWdUMTsKKyAg
ICAgICAgcmVzdWx0R1BSID0gcmVnVDA7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHRoaXNHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byYgc2xvd0Nhc2UgPSBlbnN1
cmVTbG93Q2FzZShyZXN1bHRHUFIsIGRzdCk7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5h
cHBlbmQoYmFzZUdQUik7CisgICAgICAgIHNsb3dDYXNlLmFyZ3VtZW50cy5hcHBlbmQodGhpc0dQ
Uik7CisgICAgfQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVDZWxsKGJhc2UpKQorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChiYXNlLCBiYXNlR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVDZWxsKHRoaXNW
UmVnKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwodGhpc1ZSZWcsIHRoaXNHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKyAgICB9CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSk7CisgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAo
dXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
IHByb3ZlblR5cGUoZHN0KSA9IFNwZWNIZWFwVG9wOworICAgIH0gZWxzZQorICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0R1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2Uu
YXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQUlJlZyB0aGlzR1BSID0gc2xvd0Nhc2UuYXJndW1l
bnRzWzFdLmdwcigpOworCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxh
Z3MuaXNEaXJlY3QoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgLy8gSW4gb3JkZXIg
dG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9m
ZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJn
dW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFu
ZCB3ZSBnZW5lcmF0ZSBjb2RlCi0gICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZz
ZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwot
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAg
T3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBiYXNlVmFsdWU7CisgICAgT3B0aW9uYWw8VmFsdWVPcGVy
YW5kPiB2YWx1ZVZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAg
ICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIGJhc2VWYWx1ZS5lbXBsYWNlKCp0
aGlzLCBiYXNlKTsKKyAgICAgICAgdmFsdWVWYWx1ZS5lbXBsYWNlKCp0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgYmFzZUdQUiA9IGJh
c2VWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHZhbHVlR1BSID0gdmFsdWVWYWx1ZS0+Z3ByKCk7Cisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAgdmFsdWVHUFIgPSByZWdUMTsKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
YXNlLCBiYXNlR1BSLCB2YWx1ZSwgdmFsdWVHUFIpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
YXV0byYgc2xvd0Nhc2UgPSBlbnN1cmVTbG93Q2FzZShSZWcoKSwgVmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICBzbG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKGJhc2VHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcmd1bWVudHMuYXBwZW5kKHZhbHVlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNl
TE9MKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBl
bHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdW5hdmFpbGFibGVSZWdpc3RlcnNGb3JTdHViKCksCiAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVj
b2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGly
ZWN0KTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC03NjUsNzcg
KzExNjAsOTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KICAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1Ci0gICAgZW1pdFdy
aXRlQmFycmllcihiYXNlVlJlZywgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYg
c2xvd0Nhc2UpCiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKLSAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOworICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHNsb3dDYXNlLmFyZ3VtZW50c1sxXS5ncHIoKTsKIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKLQorICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4odGhpcyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAg
ICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IGJhc2VWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1w
PiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgYmFzZUdQUjsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
OworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBiYXNlVmFsdWUuZW1wbGFjZSgqdGhpcywg
YmFzZSk7CisgICAgICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBiYXNl
R1BSID0gYmFzZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0VmFsdWUt
PmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2VHUFIgPSByZWdUMDsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVnVDE7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvJiBzbG93Q2Fz
ZSA9IGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKyAgICAgICAgc2xvd0Nhc2UuYXJn
dW1lbnRzLmFwcGVuZChiYXNlR1BSKTsKKyAgICB9CisKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUNlbGwoYmFzZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGVDZWxsKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIH0KIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHVuYXZhaWxhYmxlUmVnaXN0ZXJzRm9yU3R1YigpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGlmICh1c2VMT0woKSkgewor
ICAgICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShk
c3QpID0gU3BlY0Jvb2xlYW47CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBTbG93Q2FzZSYgc2xvd0Nhc2Up
CiB7Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworICAgIEdQUlJlZyBiYXNl
R1BSID0gc2xvd0Nhc2UuYXJndW1lbnRzWzBdLmdwcigpOwogCisgICAgSklUSW5CeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKLQorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKworICAgIGlmICh1c2VMT0woKSkKKyAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
c2xvd0Nhc2UucmVzdWx0LmdwcigpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25D
aGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBHUFJSZWcgcmVzdWx0R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRj
aHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVu
c2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpLCByZXN1bHRHUFIsIGRzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg0NywxNyAr
MTI2MCwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogICAgIHVu
c2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKKyAgICBPcHRpb25h
bDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1
c2VMT0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1
bHRHUFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZH
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlc3VsdEdQUiksIHJlc3VsdEdQUiwgZHN0KTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTg2NywyMSArMTI4OCwzNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3QsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBkZXB0aCk7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAgICAgICAgIE9wdGlvbmFsPENlbGxPcGVyYW5kPiBzY29wZVZhbHVl
OworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgp
KSB7CisgICAgICAgICAgICAgICAgc2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgc2NvcGVHUFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGlmIChk
ZXB0aCA+IDApCisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbW92ZShzY29wZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHRHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgot
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25t
ZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgpAQCAtODk0LDkgKzEzMzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlc3VsdEdQUik7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTkwOSwyOSArMTM0NSwyOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSwgcmVzdWx0R1BSKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7CiAgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAotICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsK
ICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTk0MCwxNSArMTM3NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorCisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNldEpTVmFsdWUoZHN0LCByZXN1bHRH
UFIpOworICAgICAgICBwcm92ZW5UeXBlKGRzdCkgPSBTcGVjT2JqZWN0OworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCwgR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UikKIHsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CisgICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCkBA
IC05NjIsMTIgKzE0MDMsNiBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+
KCk7CkBAIC05NzgsNTEgKzE0MTMsODQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSQogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKKyAgICBPcHRpb25hbDxH
UFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSOworICAgIGlmICh1c2VM
T0woKSkgeworICAgICAgICByZXN1bHRWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAgcmVz
dWx0R1BSID0gcmVzdWx0VmFsdWUtPmdwcigpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHRH
UFIgPSByZWdUMDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0g
cmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5k
PiBzY29wZVZhbHVlOworICAgICAgICAgICAgT3B0aW9uYWw8R1BSVGVtcD4gb2Zmc2V0VmFsdWU7
CisgICAgICAgICAgICBHUFJSZWcgc2NvcGVHUFI7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0
R1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAgc2NvcGVW
YWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmFsdWUu
ZW1wbGFjZSgqdGhpcyk7CisKKyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUt
PmdwcigpOworICAgICAgICAgICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGVHUFIgPSByZWdUMTsK
KyAgICAgICAgICAgICAgICBvZmZzZXRHUFIgPSByZWdUMjsKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGVuc3VyZVNsb3dDYXNlKHJlc3VsdEdQUiwgZHN0KTsKKworICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc3RydWN0dXJlU2xvdCwgc2NvcGVHUFIsIHJlc3Vs
dEdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9p
ZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVx
dWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgfSkpOwog
Ci0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBs
b2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldEdQUik7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VO
QUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVy
VGhhbk9yRXF1YWwsIG9mZnNldEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSk7CiAgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0R1BSKTsKKyAgICAgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVzdWx0R1BSLCBvZmZzZXRHUFIsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRz
dCwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRT
bG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBy
ZWdUMCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSwgcmVzdWx0R1BSLCBkc3QpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIE9w
dGlvbmFsPFZhbHVlT3BlcmFuZD4gc2NvcGVWYWx1ZTsKKyAgICAgICAgICAgIEdQUlJlZyBzY29w
ZUdQUjsKKyAgICAgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjb3Bl
VmFsdWUuZW1wbGFjZSgqdGhpcywgc2NvcGUpOworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0g
c2NvcGVWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNjb3BlR1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkc3Qs
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCksIHJlc3VsdEdQUiwgZHN0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CkBAIC0xMDM2LDEwICsxNTA0LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlc3VsdEdQUik7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlc3VsdEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAogCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIEp1bXAg
aXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTEwNTIsMjcgKzE1
MjAsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZXN1
bHRHUFIpOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZXN1bHRHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlCiAKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKICAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwogICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpLCByZXN1bHRHUFIsIGRzdCk7CiAKICAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Miw0MCArMTU1
MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmVnVDApOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmVzdWx0R1BSKTsKKyAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgc2V0SlNWYWx1ZShk
c3QsIHJlc3VsdEdQUik7CisgICAgICAgIHByb3ZlblR5cGUoZHN0KSA9IFNwZWNCeXRlY29kZVRv
cDsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFNsb3dDYXNlJiBzbG93Q2FzZSkKIHsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShy
ZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQ
dHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHNsb3dDYXNlLnJlc3VsdC5ncHIoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTEyOSwyMSArMTU3OSw0OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zCiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0
dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAorICAgIEdQUlJlZyB2YWx1ZUdQ
UjsKKyAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHZhbHVlVmFsdWU7CisgICAgaWYgKHVzZUxP
TCgpKSB7CisgICAgICAgIHZhbHVlVmFsdWUuZW1wbGFjZSgqdGhpcywgdmFsdWUpOworICAgICAg
ICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICB9CisKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAg
ICAgICBPcHRpb25hbDxWYWx1ZU9wZXJhbmQ+IHNjb3BlVmFsdWU7CisgICAgICAgICAgICBPcHRp
b25hbDxHUFJUZW1wPiBvZmZzZXRWYWx1ZTsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+
IGJ1dHRlcmZseVZhbHVlOworICAgICAgICAgICAgR1BSUmVnIHNjb3BlR1BSOworICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBidXR0ZXJmbHlHUFI7Cisg
ICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgICAgICBzY29wZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZS5lbXBsYWNl
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHlWYWx1ZS5lbXBsYWNlKCp0aGlzKTsK
KyAgICAgICAgICAgICAgICBzY29wZUdQUiA9IHNjb3BlVmFsdWUtPmdwcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldEdQUiA9IG9mZnNldFZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHlHUFIgPSBidXR0ZXJmbHlWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgICAgICAgICAgb2Zm
c2V0R1BSID0gcmVnVDE7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5R1BSID0gcmVnVDM7Cisg
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
dHJ1Y3R1cmVTbG90LCBzY29wZUdQUiwgb2Zmc2V0R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHlHUFIpOworICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgb2Zmc2V0R1BSKTsKKyAgICAgICAgICAgIG5lZ1B0cihvZmZzZXRHUFIpOwor
ICAgICAgICAgICAgc3RvcmVQdHIodmFsdWVHUFIsIEJhc2VJbmRleChidXR0ZXJmbHlHUFIsIG9m
ZnNldEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTU0LDI4ICsxNjMyLDU3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworCisgICAgICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGlm
ICh1c2VMT0woKSkgeworICAgICAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwog
ICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNh
bid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5Lgog
ICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgIGxvYWRQdHIoJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlKHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KHZhbHVlR1BS
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlKG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAg
c3RvcmU2NCh2YWx1ZUdQUiwgYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEocHJvdmVuVHlw
ZSh2YWx1ZSkgJiBTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihj
b25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9w
ZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAg
ICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBzY29wZVZhbHVlOworICAgICAgICAgICAgR1BSUmVn
IHNjb3BlR1BSOworICAgICAgICAgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICAgICAg
c2NvcGVWYWx1ZS5lbXBsYWNlKCp0aGlzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgc2NvcGVH
UFIgPSBzY29wZVZhbHVlLT5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZShtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgc3Rv
cmVQdHIodmFsdWVHUFIsIEFkZHJlc3Moc2NvcGVHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgKCpvcGVyYW5kU2xvdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKQEAgLTExOTAsMTIgKzE2OTcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHNjcmF0Y2hWYWx1ZTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFI7CisgICAgICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAg
c2NyYXRjaFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNj
cmF0Y2hWYWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUucmVzZXQoKTsgLy8g
V2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgaW5uZXJzIG9mIGVtaXRDb2RlIGZyb20gYWxsb2Nh
dGluZyB0aGlzIHNhbWUgcmVnaXN0ZXIsIHNpbmNlIHdlIGlmIHdlIGdvIGRvd24gYW55IGVtaXRD
b2RlIHBhdGgsIHdlIHdvbid0IHVzZSBzY3JhdGNoR1BSIGFnYWluLgorICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKwogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUKIAotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBl
biBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29u
c3QgYmluZGluZy4KIAogICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKQEAg
LTEyMDksMjMgKzE3MjUsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgIH0KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgT3B0aW9uYWw8
R1BSVGVtcD4gc2NyYXRjaFZhbHVlOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKKyAgICAg
ICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgICAgICBzY3JhdGNoVmFsdWUuZW1wbGFjZSgqdGhp
cyk7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaFZhbHVlLT5ncHIoKTsKKyAgICAg
ICAgICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIHRo
ZSBpbm5lcnMgb2YgZW1pdENvZGUgZnJvbSBhbGxvY2F0aW5nIHRoaXMgc2FtZSByZWdpc3Rlciwg
c2luY2Ugd2UgaWYgd2UgZ28gZG93biBhbnkgZW1pdENvZGUgcGF0aCwgd2Ugd29uJ3QgdXNlIHNj
cmF0Y2hHUFIgYWdhaW4uCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IHJlZ1QwOworCiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZt
ZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNo
R1BSKTsgLy8gTG9hZCBSZXNvbHZlVHlwZQogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKICAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKICAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKQEAgLTEyNDIsMTAgKzE3NjcsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFNsb3dDYXNlJikKIHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CkBAIC0xMjYx
LDYxICsxNzg0LDE3OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OworCisgICAgT3B0aW9uYWw8VmFsdWVPcGVyYW5kPiBhcmd1bWVu
dHNWYWx1ZTsKKyAgICBPcHRpb25hbDxHUFJUZW1wPiByZXN1bHRWYWx1ZTsKKyAgICBHUFJSZWcg
YXJndW1lbnRzR1BSOworICAgIEdQUlJlZyByZXN1bHRHUFI7CisgICAgaWYgKHVzZUxPTCgpKSB7
CisgICAgICAgIGFyZ3VtZW50c1ZhbHVlLmVtcGxhY2UoKnRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICAgIHJlc3VsdFZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICBhcmd1bWVudHNHUFIgPSBh
cmd1bWVudHNWYWx1ZS0+Z3ByKCk7CisgICAgICAgIHJlc3VsdEdQUiA9IHJlc3VsdFZhbHVlLT5n
cHIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHNHUFIgPSByZWdUMDsKKyAgICAg
ICAgcmVzdWx0R1BSID0gcmVnVDE7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCBhcmd1bWVudHNHUFIpOworICAgIH0KICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpLCByZXN1bHRHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRHUFIpOworICAgIGlmICh1c2VMT0woKSkgeworICAg
ICAgICBzZXRKU1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3Qp
ID0gU3BlY0hlYXBUb3A7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIE9wdGlvbmFsPFZhbHVlT3BlcmFuZD4gYXJndW1lbnRzVmFsdWU7CisgICAgT3B0aW9u
YWw8VmFsdWVPcGVyYW5kPiB2YWx1ZVZhbHVlOworICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7Cisg
ICAgR1BSUmVnIHZhbHVlR1BSOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBhcmd1bWVu
dHNWYWx1ZS5lbXBsYWNlKCp0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB2YWx1ZVZhbHVlLmVt
cGxhY2UoKnRoaXMsIHZhbHVlKTsKKyAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzVmFs
dWUtPmdwcigpOworICAgICAgICB2YWx1ZUdQUiA9IHZhbHVlVmFsdWUtPmdwcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IHJlZ1QwOworICAgICAgICB2YWx1ZUdQUiA9
IHJlZ1QxOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1l
bnRzR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgIH0KKyAgICAKKyAgICBzdG9yZTY0KHZhbHVlR1BSLCBBZGRyZXNzKGFyZ3VtZW50c0dQ
UiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBl
KHZhbHVlKSAmIFNwZWNDZWxsKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CisgICAgLy8gT09QUzogTWFrZSBpdCBzbyB0aGF0IHdlOgorICAg
IC8vIC0gS25vdyBpZiB3ZSBtaWdodCBicmFuY2ggYXJvdW5kIHRoaXMgb3Igbm90LiBJZiB3ZSBk
b24ndCBicmFuY2ggYXJvb3VuZCBpdCwgaXQgY2FuIGZlZWQgaW50byByZWdhbGxvYyBzdGF0ZS4g
T3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBiZSBjYXJlZnVsIHRvIHNheSBpdAorICAgIC8vICAgZG9l
c24ndCBwb3B1bGF0ZSByZWdhbGxvYyBzdGF0ZSBzaW5jZSBydW50aW1lIGNvZGUgbWF5IG5vdCBh
bHdheXMgZXhlY3V0ZSBpdC4KKyAgICAvLyAtIE1ha2UgaXQgc28gd2UgYnJhbmNoIHRvIG91dCBv
ZiBsaW5lIGNvZGUgZm9yIGNhbGwgKyBzaWxlbnQgZmlsbAorCiAgICAgLy8gdmFsdWUgbWF5IGJl
IGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBTcGVjQ2Vs
bCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2Up
IHsKKyAgICAgICAgICAgIGlmICghKHByb3ZlblR5cGUob3duZXIpICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEp1bXAgdmFsdWVO
b3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICAgICAgaWYgKCF1c2VMT0woKSB8fCAhIShwcm92ZW5UeXBlKHZhbHVlKSAmIH5T
cGVjQ2VsbCkpIHsKKyAgICAgICAgICAgIE9wdGlvbmFsPEdQUlRlbXA+IHZhbHVlVmFsdWU7Cisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFI7CisgICAgICAgICAgICBpZiAodXNlTE9MKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZ3ByRm9yT3BlcmFuZCh2YWx1ZSkgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHJGb3JPcGVyYW5kKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVWYWx1ZS5l
bXBsYWNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSB2YWx1ZVZhbHVl
LT5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOworICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsK
KyAgICBPcHRpb25hbDxHUFJUZW1wPiBvd25lclZhbHVlOworICAgIE9wdGlvbmFsPEdQUlRlbXA+
IHNjcmF0Y2hWYWx1ZTsKKyAgICBHUFJSZWcgb3duZXJHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFI7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0
aGlzKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2hWYWx1ZS0+Z3ByKCk7CisKKyAgICAg
ICAgaWYgKGdwckZvck9wZXJhbmQob3duZXIpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICBvd25lckdQUiA9IGdwckZvck9wZXJhbmQob3duZXIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG93bmVyVmFsdWUuZW1wbGFjZSgqdGhpcyk7CisgICAgICAgICAgICBvd25lckdQUiA9
IG93bmVyVmFsdWUtPmdwcigpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
d25lciwgb3duZXJHUFIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3duZXJH
UFIgPSByZWdUMDsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHJlZ1QxOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgfQorCiAgICAgSnVtcCBvd25lck5v
dENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKSB7CisgICAgICAgIGlmICghdXNlTE9MKCkgfHwgISEo
cHJvdmVuVHlwZShvd25lcikgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgb3duZXJOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKG93bmVyR1BSKTsKKyAgICB9CiAKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJl
Z1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisgICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lckdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgT3B0aW9uYWw8U2lsZW50U3BpbGxSZWNvcmQ+IHNpbGVudFNw
aWxsUmVjb3JkOworICAgIHNjcmF0Y2hWYWx1ZS5yZXNldCgpOyAvLyBObyBuZWVkIHRvIHNpbGVu
dCBzYXZlIHRoaXMuCisgICAgaWYgKHVzZUxPTCgpKQorICAgICAgICBzaWxlbnRTcGlsbFJlY29y
ZCA9IHNpbGVudFNwaWxsQmVmb3JlQ2FsbCgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lckdQUik7CisgICAgaWYgKHVzZUxPTCgp
KQorICAgICAgICBzaWxlbnRGaWxsQWZ0ZXJDYWxsKCpzaWxlbnRTcGlsbFJlY29yZCk7CiAKLSAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlKQorICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKyAg
ICBpZiAob3duZXJOb3RDZWxsLmlzU2V0KCkpCiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwor
ICAgIC8vIE9PUFM6IE1ha2UgaXQgc28gdGhhdCB3ZToKKyAgICAvLyAtIEtub3cgaWYgd2UgbWln
aHQgYnJhbmNoIGFyb3VuZCB0aGlzIG9yIG5vdC4gSWYgd2UgZG9uJ3QgYnJhbmNoIGFyb291bmQg
aXQsIGl0IGNhbiBmZWVkIGludG8gcmVnYWxsb2Mgc3RhdGUuIE90aGVyd2lzZSwgaXQgbmVlZHMg
dG8gYmUgY2FyZWZ1bCB0byBzYXkgaXQKKyAgICAvLyAgIGRvZXNuJ3QgcG9wdWxhdGUgcmVnYWxs
b2Mgc3RhdGUgc2luY2UgcnVudGltZSBjb2RlIG1heSBub3QgYWx3YXlzIGV4ZWN1dGUgaXQuCisg
ICAgLy8gLSBNYWtlIGl0IHNvIHdlIGJyYW5jaCB0byBvdXQgb2YgbGluZSBjb2RlIGZvciBjYWxs
ICsgc2lsZW50IGZpbGwKKwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAg
IGlmICh1c2VMT0woKSkgeworICAgICAgICAgICAgaWYgKCEocHJvdmVuVHlwZSh2YWx1ZSkgJiBT
cGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
T3B0aW9uYWw8R1BSVGVtcD4gdmFsdWVWYWx1ZTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSOwor
ICAgICAgICBpZiAodXNlTE9MKCkpIHsKKyAgICAgICAgICAgIGlmIChncHJGb3JPcGVyYW5kKHZh
bHVlKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByRm9y
T3BlcmFuZCh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZVZhbHVlLmVtcGxhY2UoKnRoaXMpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gdmFsdWVW
YWx1ZS0+Z3ByKCk7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFsdWVHUFIgPSByZWdUMDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNlTE9MKCkgfHwg
ISEocHJvdmVuVHlwZSh2YWx1ZSkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BSKTsKKyAgICB9CiAKICAgICBlbWl0V3JpdGVC
YXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAg
ICBpZiAodmFsdWVOb3RDZWxsLmlzU2V0KCkpIAogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0
aGlzKTsKIH0KIApAQCAtMTMyNywxMSArMTk2NywyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChp
bmRleCkpLCByZWdUMCk7CisgICAgaWYgKHVzZUxPTCgpKSB7CisgICAgICAgIFZhbHVlT3BlcmFu
ZCBiYXNlVGVtcCB7ICp0aGlzLCBiYXNlIH07CisgICAgICAgIEdQUlRlbXAgcmVzdWx0IHsgKnRo
aXMgfTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlVGVtcC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAvLyBPT1BTOiBLbm93
bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBlKGJhc2UpICY9IFNwZWNDZWxsOworCisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZXN1bHRHUFIpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXN1bHRHUFIpOworICAgICAgICBzZXRK
U1ZhbHVlKGRzdCwgcmVzdWx0R1BSKTsKKyAgICAgICAgcHJvdmVuVHlwZShkc3QpID0gU3BlY0J5
dGVjb2RlVG9wOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzQxLDEwICsxOTk2LDIzIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRP
ZkludGVybmFsRmllbGQoaW5kZXgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGlmICh1c2VMT0woKSkgeworICAgICAgICBWYWx1
ZU9wZXJhbmQgYmFzZVRlbXAgeyAqdGhpcywgYmFzZSB9OworICAgICAgICBWYWx1ZU9wZXJhbmQg
dmFsdWVUZW1wIHsgKnRoaXMsIHZhbHVlIH07CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZVRlbXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlVGVtcC5ncHIoKTsK
KworICAgICAgICAvLyBPT1BTOiBLbm93bkNlbGxPcGVyYW5kIQorICAgICAgICBwcm92ZW5UeXBl
KGJhc2UpICY9IFNwZWNDZWxsOworCisgICAgICAgIHN0b3JlUHRyKHZhbHVlR1BSLCBBZGRyZXNz
KGJhc2VHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZp
ZWxkKGluZGV4KSkpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QxKTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgfQogfQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlW
YWw+KGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0xNDQ3LDggKzIxMTUsMjUgQEAgdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdAogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyKQogewotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW47CisgICAgeworICAgICAgICBPcHRpb25hbDxHUFJUZW1wPiBzY3Jh
dGNoVmFsdWU7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAodXNlTE9M
KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hWYWx1ZS5lbXBsYWNlKCp0aGlzKTsKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoVmFsdWUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZWdUMDsKKyAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNjcmF0Y2hHUFIpOworICAgIH0K
KworICAgIE9wdGlvbmFsPFNpbGVudFNwaWxsUmVjb3JkPiBzaWxlbnRTcGlsbFJlY29yZDsKKyAg
ICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudFNwaWxsUmVjb3JkID0gc2lsZW50U3BpbGxC
ZWZvcmVDYWxsKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBpZiAodXNlTE9MKCkpCisgICAgICAgIHNpbGVudEZp
bGxBZnRlckNhbGwoKnNpbGVudFNwaWxsUmVjb3JkKTsKKwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIApAQCAtMTQ2Niw2ICsyMTUxLDggQEAgdm9pZCBKSVQ6
OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpcwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogeworICAgIG1fdXNlTE9MID0gZmFsc2U7CisKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgCkBAIC0xNTY3LDYg
KzIyNTQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7
CisgICAgbV91c2VMT0wgPSBmYWxzZTsKKwogICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5k
OjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0
S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92
YWwpKTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrKQogewogICAgIEFTU0VSVF9VTlVTRUQocHJvZmls
ZWRERkdDb2RlQmxvY2ssICFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgfHwgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6TE9MSklUKTsKICAgICAKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgZGlkIGJl
Y29tZSByZWFkeS4iKTsKICAgICAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBKSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjawogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAg
ICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCB8fCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpMT0xKSVQpOwogICAgIAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1
bHQ6ICIsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwyMiBAQAog
I2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgogCisjaW5jbHVkZSA8d3Rm
L1Njb3BlLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6UGxhbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4gewogcHVibGlj
OgotICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAg
ICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCisgICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUOjpDb21waWxlVHlw
ZSBjb21waWxlVHlwZSwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQor
ICAgICAgICA6IG1fbGxpbnRDb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1fY29kZUJs
b2NrVG9Db21waWxlKGNvbXBpbGVUeXBlID09IEpJVDo6Q29tcGlsZVR5cGU6OkxPTCA/IG1fbGxp
bnRDb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KG1fbGxpbnRDb2RlQmxvY2spIDogbV9sbGludENv
ZGVCbG9jaykgCisgICAgICAgICwgbV9qaXQobV9jb2RlQmxvY2tUb0NvbXBpbGUtPnZtKCksIG1f
Y29kZUJsb2NrVG9Db21waWxlLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkKICAgICB7CiAgICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOworICAgICAgICAvLyBPT1BTOiB2aXNpdCB0aGlzIGluIGNvbmN1cnJlbnQgZ2MKKyAg
ICAgICAgaWYgKG1fY29kZUJsb2NrVG9Db21waWxlICE9IG1fbGxpbnRDb2RlQmxvY2spIHsKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAucHJvdGVjdChtX2NvZGVC
bG9ja1RvQ29tcGlsZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
SW5UaHJlYWQoKQpAQCAtNTMsMTcgKzYwLDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXpl
KCkKICAgICB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0Lmxpbmso
KTsKKworICAgICAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9ja1RvQ29tcGlsZSAhPSBtX2xsaW50Q29kZUJsb2NrKQorICAg
ICAgICAgICAgICAgIG1fY29kZUJsb2NrVG9Db21waWxlLT52bSgpLmhlYXAudW5wcm90ZWN0KG1f
Y29kZUJsb2NrVG9Db21waWxlKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgc3dpdGNoIChyZXN1
bHQpIHsKICAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAgICAgICAgIENPREVC
TE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0
aW9uIGZhaWxlZCIpKTsKKyAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9sbGludENv
ZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwogICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21w
aWxhdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZG9udEpJVEFueXRp
bWVTb29uKCk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRp
b24gPSB0cnVlOworICAgICAgICAgICAgbV9sbGludENvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVT
b29uKCk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxh
dGlvbiA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQ29tcGlsYXRp
b25TdWNjZXNzZnVsOgogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIpOwotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShtX2NvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBtX2NvZGVCbG9jay0+aml0U29vbigpOworICAgICAgICAgICAgbV9jb2RlQmxv
Y2tUb0NvbXBpbGUtPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShtX2NvZGVCbG9ja1Rv
Q29tcGlsZSk7CisgICAgICAgICAgICBtX2xsaW50Q29kZUJsb2NrLT5qaXRTb29uKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzEsOCArODQsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVC
bG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2tLZXkoKSB7IHJldHVybiBtX2xsaW50Q29kZUJsb2NrOyB9Cisg
ICAgVk0mIHZtKCkgeyByZXR1cm4gbV9sbGludENvZGVCbG9jay0+dm0oKTsgfQogICAgIAogICAg
IGJvb2wgaXNGaW5pc2hlZENvbXBpbGluZygpCiAgICAgewpAQCAtODAsMTUgKzkzLDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNGaW5pc2hlZENvbXBpbGluZzsKICAgICB9CiAgICAg
Ci0gICAgc3RhdGljIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
ZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQorICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGUgY29tcGlsZVR5cGUs
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAg
IFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICBQbGFuIHBsYW4oY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7CiAgICAgICAgIHBsYW4uZmlu
YWxpemUoKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CisgICAgQ29kZUJsb2NrKiBtX2xsaW50Q29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2tUb0NvbXBpbGU7CiAgICAgSklUIG1faml0OwogICAgIExvY2sgbV9sb2NrOwogICAg
IGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nIHsgZmFsc2UgfTsKQEAgLTIzMyw5ICsyNDcsMTEg
QEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgICAgICBjb2Rl
QmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisg
ICAgSklUOjpDb21waWxlVHlwZSBjb21waWxlVHlwZSA9IE9wdGlvbnM6OmZvcmNlTE9MKCkgPyBK
SVQ6OkNvbXBpbGVUeXBlOjpMT0wgOiBKSVQ6OkNvbXBpbGVUeXBlOjpCYXNlbGluZTsKICAgICAK
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgewotICAgICAgICBQbGFuOjpj
b21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNDksNyArMjY1
LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogICAgICAgICAK
ICAgICAgICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewogICAgICAgICAgICAgbV9wbGFu
bmVkLmFkZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9w
dFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2Nr
LCBjb21waWxlVHlwZSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAg
bV9wbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsK
ICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKQEAgLTI3MywxNCAr
Mjg5LDI0IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAgICAv
LyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUuIElmIHRoZSBjb25jdXJyZW50IEpJVCB0aHJl
YWQgaXMgY29udm95ZWQsIHdlIHJldmVydCB0byBtYWluCiAgICAgLy8gdGhyZWFkIGNvbXBpbGVz
LiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhcyBnb29kIGFzIGlmIHdlIGhhZCBtdWx0aXBsZSBKSVQg
dGhyZWFkcy4gTWF5YmUgd2UKICAgICAvLyBjYW4gZG8gdGhhdCBzb21lZGF5LgotICAgIFBsYW46
OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBQ
bGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgY29tcGlsZVR5cGUsIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpOwogfQogCisvKgogdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQog
ewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bmspCisKKyAgICBhdXRvIGlzQ29tcGlsZWQgPSBbJl0geworICAgICAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBs
YWNlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9OworCisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGJvb2wgaXNQbGFubmVkOwpAQCAtMjk2LDE3ICszMjIsMjQgQEAgdm9pZCBKSVRXb3Jr
bGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIAogICAgIH0KICAgICAKICAgICAvLyBOb3cgaXQg
bWlnaHQgYmUgY29tcGlsZWQhCi0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bmspCisgICAgaWYgKGlzQ29tcGlsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIC8vIFdlIGRvIHRoaXMgaW4gY2FzZSB3ZSBoYWQgcHJldmlvdXNseSBh
dHRlbXB0ZWQsIGFuZCB0aGVuIGZhaWxlZCwgdG8gY29tcGlsZSB3aXRoIHRoZQotICAgIC8vIGJh
c2VsaW5lIEpJVC4KLSAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0YSgpOwotICAgIAotICAgIC8v
IE9LLCBqdXN0IGNvbXBpbGUgaXQuCi0gICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAg
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisK
KyAgICBpZiAoT3B0aW9uczo6Zm9yY2VMT0woKSkgeworICAgICAgICBDb2RlQmxvY2sqIGxvbENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAgICAgICAgSklUOjpjb21w
aWxlKHZtLCBsb2xDb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAg
bG9sQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUobG9sQ29kZUJsb2Nr
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBkbyB0aGlzIGluIGNhc2Ugd2UgaGFkIHBy
ZXZpb3VzbHkgYXR0ZW1wdGVkLCBhbmQgdGhlbiBmYWlsZWQsIHRvIGNvbXBpbGUgd2l0aCB0aGUK
KyAgICAgICAgLy8gYmFzZWxpbmUgSklULgorICAgICAgICBjb2RlQmxvY2stPnJlc2V0SklURGF0
YSgpOworICAgICAgICAKKyAgICAgICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KKyAgICAgICAg
SklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVDo6Q29tcGlsZVR5cGU6OkJhc2VsaW5lLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAg
ICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2Nr
KTsKKyAgICB9CiB9CisqLwogCiB2b2lkIEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5z
JiBteVBsYW5zKQogewpAQCAtMzE0LDcgKzM0Nyw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmZpbmFs
aXplUGxhbnMoUGxhbnMmIG0KICAgICAgICAgcGxhbi0+ZmluYWxpemUoKTsKICAgICAgICAgCiAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAgICBtX3BsYW5uZWQucmVt
b3ZlKHBsYW4tPmNvZGVCbG9jaygpKTsKKyAgICAgICAgbV9wbGFubmVkLnJlbW92ZShwbGFuLT5j
b2RlQmxvY2tLZXkoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFdvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdC5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgcG9sbChWTSYpOwogICAgIAogICAgIHZvaWQgY29tcGlsZUxhdGVyKENv
ZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCkpOwotICAgIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAK
ICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0KCk7CiAgICAgc3Rh
dGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxsKCk7CkBAIC02Niw2
ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgVGhyZWFkOwogICAgIGZyaWVuZCBjbGFzcyBU
aHJlYWQ7CiAgICAgCisgICAgLy92b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiwgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
dm9pZCBmaW5hbGl6ZVBsYW5zKFBsYW5zJik7CiAgICAgCiAgICAgUGxhbnMgbV9xdWV1ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgJKHJldmlzaW9uIDI3MTM3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNiArNjcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tYXBbTWFj
cm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgoZnByKV07CiAgICAgfQogCisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNp
emVfdCBpKSB7IHJldHVybiBtX21hcFtpXTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6
ZV90IGkpICBjb25zdCB7IHJldHVybiBtX21hcFtpXTsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6
YXJyYXk8VCwgTWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKT4gbV9tYXAg
eyB7IH0gfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2Rl
UHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0
cikpOwogI2VuZGlmCiAgICAgfQotICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgaWYgKGlzV2Vi
QXNzZW1ibHkgfHwgSklUQ29kZTo6aXNERkdPckZUTChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUo
KSkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNl
dCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJl
dmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIEpJVDo6
Q2FsbCBjYWxsKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM/CisgICAgICAgIC8vIFdlIGp1c3Qg
d2FubmEgZG8gdGhpcyBvbiBmYXN0LCBub3Qgc2xvdyBwYXRoLgorICAgICAgICAvLyBtX2ppdC0+
c3BpbGxGb3JDYWxsKCk7CisKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBp
ZiAobV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQogICAgICAgICAgICAgbV9qaXQtPnNhbXBsZUluc3RydWN0aW9uKCZtX2ppdC0+
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21faml0LT5tX2J5dGVjb2RlT2Zmc2V0XSwgdHJ1
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI3MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4ICszNjMsMTQgQEAgaW5s
aW5lIGJvb2wgc2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsbwogfQogCiAvLyBSZXR1cm5zIHRy
dWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCi1pbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0
SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKQoraW5saW5lIENvZGVC
bG9jayogaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKSkKIHsKKyAgICBpZiAoQ29kZUJsb2NrKiBhbHJlYWR5T3B0aW1pemVkID0gY29kZUJs
b2NrLT5vcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgIGFscmVhZHlPcHRpbWl6ZWQg
PSBhbHJlYWR5T3B0aW1pemVkLT5sb2xPckJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICAgICAg
aWYgKEpJVENvZGU6OmlzSklUKGFscmVhZHlPcHRpbWl6ZWQtPmppdFR5cGUoKSkpCisgICAgICAg
ICAgICByZXR1cm4gYWxyZWFkeU9wdGltaXplZDsKKyAgICB9CisKICAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJh
bWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKE9wdGlv
bnM6OnVzZUpJVCgpKTsKICAgICAKQEAgLTM3MywyOSArMzc5LDQ1IEBAIGlubGluZSBib29sIGpp
dENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJ
VFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVy
ID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJl
IGxpZnRlZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCiAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCku
cG9sbCh2bSk7Ci0gICAgCisKKyAgICBhdXRvIGxvbENvZGVCbG9jayA9IFsmXSgpIC0+IENvZGVC
bG9jayogeworICAgICAgICBpZiAoQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IGNvZGVCbG9jay0+
b3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6TE9MSklUKQorICAgICAgICAgICAgICAgIHJldHVybiByZXBs
YWNlbWVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisg
ICAgaWYgKGF1dG8qIHJlc3VsdCA9IGxvbENvZGVCbG9jaygpKQorICAgICAgICByZXR1cm4gcmVz
dWx0OworCiAgICAgc3dpdGNoIChjb2RlQmxvY2stPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklU
VHlwZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9z
ZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuIik7CiAgICAgICAgIGNvZGVC
bG9jay0+aml0U29vbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNv
ZGVCbG9jazsKICAgICB9CiAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOiB7CiAg
ICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRlcihj
b2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CisgICAgICAgIGlmIChh
dXRvKiByZXN1bHQgPSBsb2xDb2RlQmxvY2soKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkKKyAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUg
YmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIs
ICpjb2RlQmxvY2ssICJcbiIpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlP
U1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5k
KQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5k
KQogewogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgKmNv
ZGVCbG9jaywgIjogRW50ZXJlZCAiLCBuYW1lLCAiIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLApA
QCAtNDA2LDE4ICs0MjgsMjEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihD
b2RlQgogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0K
ICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0
SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrKSkKKyAgICBDb2RlQmxvY2sqIGNvbXBpbGVkQ29kZUJs
b2NrID0gaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jayk7CisgICAgaWYg
KCFjb21waWxlZENvZGVCbG9jaykKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhudWxscHRyLCBu
dWxscHRyKTsKICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIk9TUiBl
bnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7CisgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb21waWxl
ZENvZGVCbG9jaywgIk9TUiBlbnRyeSIsICgiaW4gcHJvbG9ndWUiKSk7CisKKyAgICBjYWxsRnJh
bWUtPnNldENvZGVCbG9jayhjb21waWxlZENvZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKGtpbmQg
PT0gUHJvbG9ndWUpCi0gICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51bGxwdHIpOworICAgICAgICBMTElOVF9SRVRVUk5f
VFdPKGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIG51
bGxwdHIpOwogICAgIEFTU0VSVChraW5kID09IEFyaXR5Q2hlY2spOwotICAgIExMSU5UX1JFVFVS
Tl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKKyAgICBMTElOVF9SRVRVUk5fVFdPKGNv
bXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKIH0KICNlbHNlIC8vIEVOQUJMRShKSVQp
Ci1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBjaGFyKiwgRW50cnlLaW5kKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRy
eU9TUihDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciosIEVudHJ5
S2luZCkKIHsKICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgIExMSU5U
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CkBAIC00MjcsMzEgKzQ1MiwzMSBAQCBzdGF0
aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKENvZGVCCiBMTElOVF9TTE9XX1BBVEhfREVD
TChlbnRyeV9vc3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlP
U1IoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgImVudHJ5X29zciIsIFByb2xvZ3VlKTsKKyAgICBy
ZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlf
b3NyIiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVu
Y3Rpb25fZm9yX2NhbGwpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50
cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1
dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxs
IiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9j
a0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKIH0K
IAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpT
RnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJs
b2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCIsIFBy
b2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0IiwgUHJvbG9ndWUp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxf
YXJpdHlDaGVjaykKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIHJldHVybiBlbnRyeU9T
Uihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0YWJs
ZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJp
dHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihjYWxsRnJhbWUsIGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkt
PmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNo
ZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2spCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBj
KTsKLSAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpz
Q2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRy
eV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7Cisg
ICAgcmV0dXJuIGVudHJ5T1NSKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJh
bWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCks
ICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVj
ayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQpAQCAtNDgwLDE5ICs1MDUs
MjIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgIExMSU5UX1JFVFVS
Tl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogICAgIAotICAgIGlmICghaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkpCisgICAgQ29kZUJsb2NrKiBjb21waWxlZENvZGVCbG9jayA9IGppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAg
IGlmICghY29tcGlsZWRDb2RlQmxvY2spCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0
ciwgbnVsbHB0cik7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJv
c3JFbnRyeSIsICgiYXQgIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOworICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29tcGlsZWRDb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29tcGlsZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCB8fCBjb21waWxlZENvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkxPTEpJVCk7CiAKLSAgICBjb25zdCBKSVRDb2RlTWFw
JiBjb2RlTWFwID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CisgICAgY29uc3QgSklUQ29kZU1h
cCYgY29kZU1hcCA9IGNvbXBpbGVkQ29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7CiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAg
ICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKKworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKGNv
bXBpbGVkQ29kZUJsb2NrKTsKICAgICAKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJnZXQs
IGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKICNlbHNlIC8vIEVOQUJMRShKSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2lu
U3RhY2suY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAgT3JpZ2luU3RhY2s6Ok9yaWdpblN0YWNrKERhdGFiYXNlJiBkYXRhYgogICAgIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICBh
cHBlbmQoT3JpZ2luKAotICAgICAgICAgICAgZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKHN0
YWNrW2ldLmlubGluZUNhbGxGcmFtZSgpLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKSksCisgICAg
ICAgICAgICBkYXRhYmFzZS5lbnN1cmVCeXRlY29kZXNGb3Ioc3RhY2tbaV0uaW5saW5lQ2FsbEZy
YW1lKCktPmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpLAogICAgICAgICAgICAgc3RhY2tb
aV0uYnl0ZWNvZGVJbmRleCgpKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywyMCBAQCBGdW5jdGlvbkNvZGVCbG9j
ayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9u
Q29kZUJsb2NrKj4oZWRnZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiB9
CiAKK0Z1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmxvbE9yQmFzZWxpbmVD
b2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIGVkZ2U7CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisg
ICAgICAgIGVkZ2UgPSBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgZWxzZSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIGVk
Z2UgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKCFlZGdl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25Db2RlQmxvY2sqPihlZGdlLT5jb2RlQmxvY2soKS0+bG9sT3JCYXNlbGluZUFsdGVybmF0aXZl
KCkpOworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDEzICsxMTQsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKTsKICAgICB9CiAKKyAg
ICBGdW5jdGlvbkNvZGVCbG9jayogbG9sT3JCYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgIAotICAgIEZ1bmN0aW9uQ29kZUJs
b2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7Ci0gICAgfQot
CiAgICAgUmVmUHRyPFR5cGVTZXQ+IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKSAKICAgICB7CiAg
ICAgICAgIFJhcmVEYXRhJiByYXJlRGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjcxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwMyw2ICs0MDMsMTAgQEAgc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9wdGlvbnMo
KQogCiB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogeworICAgIC8v
T3B0aW9uczo6dXNlREZHSklUKCkgPSAwOworICAgIE9wdGlvbnM6OmZvcmNlTE9MKCkgPSAxOwor
ICAgIE9wdGlvbnM6OnVzZUxMSW50KCkgPSAxOworCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAg
IE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSA9IHRydWU7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2
aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNywxMSBAQCBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KEJvb2wsIHVzZUpJVENhZ2UsIGNhblVzZUpJ
VENhZ2UoKSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VQdWJsaWNTdGF0aWND
bGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVy
c3RhbmQgcHVibGljIHN0YXRpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCiAgICAg
dihCb29sLCB1c2VQcml2YXRlU3RhdGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRy
dWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHByaXZhdGUgc3RhdGljIGRhdGEgZmllbGRz
IGluc2lkZSBjbGFzc2VzLiIpIFwKKyAgICB2KEJvb2wsIGZvcmNlTE9MLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCisgICAgdihCb29sLCBwcmludExPTFNsb3dQYXRoQ2FsbHMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHByaW50TE9MU2xvd1BhdGhzLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBwcmludEVhY2hMT0xPU1JFeGl0LCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBwcmludEVhY2hMT0xKZXR0aXNvbiwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAg
U2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYwLDcgKzU2MCw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQK
ICAgICAgICAgICAgIG9yaWdpbi53YWxrVXBJbmxpbmVTdGFjayhbJl0gKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pIHsKICAgICAgICAgICAgICAgICBtYWNoaW5lT3JpZ2luID0gY29kZU9y
aWdpbjsKICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhpbmxp
bmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpIDog
bWFjaGluZUNvZGVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAg
ICAgICAgIGFwcGVuZENvZGVCbG9jayhpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUt
PmxvbE9yQmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkgOiBtYWNoaW5lQ29kZUJsb2NrLCBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OmNvbGxlY3RTYW1wbGluZ1Byb2ZpbGVyRGF0YUZvckpTQ1NoZWxsKCkpIHsKQEAg
LTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVk
CiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGxsaW50X2hhbmRsZV91Y2F1
Z2h0X2V4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAg
ICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
cENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9w
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpMT0xKSVQpIHsKICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogICAg
ICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0ZWNvZGVJbmRleChiaXRz
LCB0b3BDb2RlQmxvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0NCw0OSArMzQ0LDMzIEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3
Q29kZUJsb2MKIH0KIAogQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVu
dENvZGVCbG9ja0ZvcigKLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0gRXZhbEV4ZWN1
dGFibGU6OmluZm8oKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JD
YWxsKTsKLSAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4
ZWN1dGFibGUqPih0aGlzKTsKLSAgICAgICAgRXZhbENvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0
aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4oCi0gICAgICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxv
Y2soKS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBFdmFsQ29kZUJsb2NrKiByZXN1bHQg
PSBFdmFsQ29kZUJsb2NrOjpjcmVhdGUodm0sCi0gICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQ
YXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2
bSwgYmFzZWxpbmUpOworICAgICAgICBFdmFsQ29kZUJsb2NrKiByZXN1bHQgPSBFdmFsQ29kZUJs
b2NrOjpjcmVhdGUodm0sIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCBzdGF0aWNfY2FzdDxF
dmFsQ29kZUJsb2NrJj4oKmFsdGVybmF0aXZlKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJu
YXRpdmUodm0sIGFsdGVybmF0aXZlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCiAgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkg
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKLSAgICAgICAg
UHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUq
Pih0aGlzKTsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2Fz
dDxQcm9ncmFtQ29kZUJsb2NrKj4oCi0gICAgICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2so
KS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQg
PSBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sCi0gICAgICAgICAgICBDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2
ZSh2bSwgYmFzZWxpbmUpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQgPSBQcm9n
cmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCBzdGF0
aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrJj4oKmFsdGVybmF0aXZlKSk7CisgICAgICAgIHJlc3Vs
dC0+c2V0QWx0ZXJuYXRpdmUodm0sIGFsdGVybmF0aXZlKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICBpZiAoY2xhc3NJbmZvKHZtKSA9PSBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNh
bGwpOwotICAgICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxvY2sq
PigKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmNvZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24o
KSk7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHJlc3VsdCA9IE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s6OmNyZWF0ZSh2bSwKLSAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNl
ZEJsb2NrLCAqYmFzZWxpbmUpOwotICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBi
YXNlbGluZSk7CisgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHJlc3VsdCA9IE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSh2bSwgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ss
IHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxvY2smPigqYWx0ZXJuYXRpdmUpKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYWx0ZXJuYXRpdmUpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzSW5mbyh2bSkg
PT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICBGdW5j
dGlvbkNvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+
KAotICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCktPmJhc2VsaW5lVmVyc2lv
bigpKTsKLSAgICBGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gRnVuY3Rpb25Db2RlQmxvY2s6
OmNyZWF0ZSh2bSwKLSAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGlu
ZSk7Ci0gICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYmFzZWxpbmUpOworICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtLCBDb2Rl
QmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2smPigq
YWx0ZXJuYXRpdmUpKTsKKyAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZtLCBhbHRlcm5hdGl2
ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzk4LDcgKzM4Miw4IEBAIHN0YXRpYyB2
b2lkIHNldHVwTExJbnQoQ29kZUJsb2NrKiBjb2RlQmwKIHN0YXRpYyB2b2lkIHNldHVwSklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgLy8gT09QUzogRmlndXJlIG91dCB3aGF0IHdlIHdh
bnQgdG8gZG8gd2l0aCB0aGUgbm8gTExJbnQgb3B0aW9uLi4uLgorICAgIENvbXBpbGF0aW9uUmVz
dWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVQ6OkNvbXBpbGVUeXBl
OjpCYXNlbGluZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ny
aXB0RXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkw
LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5zdGFsbENvZGUoQ29kZUJsb2NrKik7CiAgICAgdm9p
ZCBpbnN0YWxsQ29kZShWTSYsIENvZGVCbG9jayosIENvZGVUeXBlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEV4Y2VwdGlvbiomKTsKLSAgICBDb2RlQmxv
Y2sqIG5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgIENvZGVCbG9jayogbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZUJsb2NrKiBhbHRl
cm5hdGl2ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAKICAgICB2b2lkIGNsZWFyQ29kZShJ
c29DZWxsU2V0Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RS
dW5uZXJVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjUsNiArNjUsOSBAQCBKU1ZhbHVlIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZSB0aGVGCiB7
CiAgICAgYm9vbCBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gZmFsc2U7CiAjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKDApOyAvLyBPT1BTCisKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpIHx8ICFP
cHRpb25zOjp1c2VCYXNlbGluZUpJVCgpIHx8ICFPcHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAg
ICAgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IHRydWU7CiAjZWxzZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lvbiAy
NzEzNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVU
aHJlYWRzLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJh
Y2luZy5oPgorI2luY2x1ZGUgIkpJVC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtODcsNiAr
ODgsMTkgQEAgVk1FbnRyeVNjb3BlOjp+Vk1FbnRyeVNjb3BlKCkKICAgICBpZiAobV92bS5lbnRy
eVNjb3BlICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vaWYgKE9wdGlvbnM6OnJl
cG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKKyAgICAvLyAgICBkYXRhTG9nTG4oKTsKKyAgICAv
LyAgICBhdXRvIGNvbXBpbGVUaW1lU3RhdHMgPSBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKTsKKyAg
ICAvLyAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGlsZVRpbWVLZXlzOworICAgIC8vICAgIGZvciAo
YXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQorICAgIC8vICAgICAgICBjb21waWxlVGlt
ZUtleXMuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgLy8gICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1l
S2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOworICAgIC8vICAgIGZvciAoY29u
c3QgQ1N0cmluZyYga2V5IDogY29tcGlsZVRpbWVLZXlzKSB7CisgICAgLy8gICAgICAgIGlmIChr
ZXkuZGF0YSgpKQorICAgIC8vICAgICAgICAgICAgcHJpbnRmKCIlNDBzOiAlLjNsZiBtc1xuIiwg
a2V5LmRhdGEoKSwgY29tcGlsZVRpbWVTdGF0cy5nZXQoa2V5KS5taWxsaXNlY29uZHMoKSk7Cisg
ICAgLy8gICAgfQorICAgIC8vfQorCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV92bS5oYXND
aGVja3BvaW50T1NSU2lkZVN0YXRlKCksICJFeGl0dGluZyB0aGUgVk0gYnV0IHBlbmRpbmcgY2hl
Y2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogCiAgICAgaWYgKE9wdGlvbnM6
OnVzZVRyYWNlUG9pbnRzKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAkocmV2aXNpb24gMjcxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lk
IFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGZvdW5kQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKSB7CisgICAgaWYgKEpJVENvZGU6OmlzREZHT3JGVEwoZm91bmRDb2RlQmxvY2st
PmppdFR5cGUoKSkpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jaygqbV9sb2Nr
KTsKICAgICAgICAgaWYgKCFsb2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUg
U2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFZN
VHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjCiAKICAgICB3aGlsZSAoY2FsbEZyYW1l
KSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6Omlz
REZHT3JGVEwoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5q
ZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwogICAgICAgICBjYWxsRnJh
bWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIH0KSW5kZXg6IFRv
b2xzL1NjcmlwdHMvY29tcGFyZS1yZXN1bHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
Y29tcGFyZS1yZXN1bHRzCShyZXZpc2lvbiAyNzEzNzYpCisrKyBUb29scy9TY3JpcHRzL2NvbXBh
cmUtcmVzdWx0cwkod29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw4IEBAIGRlZiBjb21wdXRl
TXVsdGlwbGVIeXBvdGhlc2VzU2lnbmlmaWNhbmMKIAogZGVmIGR1bXBCcmVha2Rvd25zKGEsIGIp
OgogICAgIG5hbWVMZW5ndGggPSBsZW4oInN1YnRlc3QiKQotICAgIGFMZW5ndGggPSBsZW4oYVt1
bml0TWFya2VyXSkKLSAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtlcl0pCisgICAgYUxlbmd0
aCA9IGxlbihhW3VuaXRNYXJrZXJdKSArIDMKKyAgICBiTGVuZ3RoID0gbGVuKGFbdW5pdE1hcmtl
cl0pICsgMwogICAgIHJhdGlvTGVuZ3RoID0gbGVuKCJiIC8gYSIpCiAKICAgICBwVmFsdWVIZWFk
ZXIgPSAicFZhbHVlIChzaWduaWZpY2FuY2UgdXNpbmcgRmFsc2UgRGlzY292ZXJ5IFJhdGUpIgpA
QCAtMjEyLDcgKzIxMiw3IEBAIGRlZiBkdW1wQnJlYWtkb3ducyhhLCBiKToKICAgICBwTGVuZ3Ro
ICs9IDIKIAogICAgIHN0cmluZ3MgPSBbXQotICAgIHN0cmluZ3MuYXBwZW5kKCJ8e2tleTpee25h
bWVMZW5ndGh9fXx7YVNjb3JlOl57YUxlbmd0aH19IHx7YlNjb3JlOl57Ykxlbmd0aH19IHx7Y29t
cGFyZTpee3JhdGlvTGVuZ3RofX18e3BNYXJrZXI6XntwTGVuZ3RofX18Ii5mb3JtYXQoa2V5PSJz
dWJ0ZXN0IiwgYVNjb3JlPWFbdW5pdE1hcmtlcl0sIGJTY29yZT1iW3VuaXRNYXJrZXJdLCBuYW1l
TGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1iTGVuZ3RoICwgY29t
cGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtlcj1wVmFsdWVIZWFk
ZXIsIHBMZW5ndGg9cExlbmd0aCkpCisgICAgc3RyaW5ncy5hcHBlbmQoInx7a2V5Ol57bmFtZUxl
bmd0aH19fHthU2NvcmU6XnthTGVuZ3RofX0gfHtiU2NvcmU6XntiTGVuZ3RofX0gfHtjb21wYXJl
Ol57cmF0aW9MZW5ndGh9fXx7cE1hcmtlcjpee3BMZW5ndGh9fXwiLmZvcm1hdChrZXk9InN1YnRl
c3QiLCBhU2NvcmU9ImE6ICIgKyBhW3VuaXRNYXJrZXJdLCBiU2NvcmU9ImI6ICIgKyBiW3VuaXRN
YXJrZXJdLCBuYW1lTGVuZ3RoPW5hbWVMZW5ndGgsIGFMZW5ndGg9YUxlbmd0aCwgYkxlbmd0aD1i
TGVuZ3RoICwgY29tcGFyZT0iYiAvIGEiLCByYXRpb0xlbmd0aD1yYXRpb0xlbmd0aCwgcE1hcmtl
cj1wVmFsdWVIZWFkZXIsIHBMZW5ndGg9cExlbmd0aCkpCiAgICAgZm9yIGtleSBpbiBhLmtleXMo
KToKICAgICAgICAgaWYga2V5ID09IHVuaXRNYXJrZXI6CiAgICAgICAgICAgICBjb250aW51ZQpJ
bmRleDogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5qcwkocmV2aXNpb24gMjcx
Mzc2KQorKysgTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3N0YW5kYWxvbmUtcHJlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00LDcgKzQsMjEgQEAgdmFyIHNlbGYgPSB0aGlzOwogCiBzZWxmLnRlc3RSdW5u
ZXIgPSB7CiAgICAgbmV2ZXJJbmxpbmVGdW5jdGlvbjogbmV2ZXJJbmxpbmVGdW5jdGlvbiwKLSAg
ICBudW1iZXJPZkRGR0NvbXBpbGVzOiBudW1iZXJPZkRGR0NvbXBpbGVzLAorICAgIG51bWJlck9m
REZHQ29tcGlsZXM6IChmdW5jdGlvbigpIHsKKyAgICAgICAgbGV0IG1hcDsKKyAgICAgICAgcmV0
dXJuIChmKSA9PiB7CisgICAgICAgICAgICBpZiAoaXNERkdFbmFibGVkKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXMoZik7CisKKyAgICAgICAgICAgIC8vIEVt
dWxhdGUgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIGJpdCB0byBnZXQgc29tZSB0aWVyaW5n
IGJlZm9yZSByZXR1cm5pbmcgdHJ1ZS4KKyAgICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAg
ICAgICAgIG1hcCA9IG5ldyBXZWFrTWFwOworICAgICAgICAgICAgbGV0IGNvdW50ID0gbWFwLmdl
dChmKSB8fCAwOworICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgICAgIG1hcC5zZXQo
ZiwgY291bnQpOworICAgICAgICAgICAgcmV0dXJuIChjb3VudCAvIDQwMDApIHwgMDsKKyAgICAg
ICAgfTsKKyAgICB9KSgpLAogICAgIGZhaWxOZXh0TmV3Q29kZUJsb2NrOiBmYWlsTmV4dE5ld0Nv
ZGVCbG9jawogfTsKIApAQCAtMTQ5LDggKzE2Myw5IEBAIGZ1bmN0aW9uIGRmZ1Nob3VsZEJlKHRo
ZUZ1bmN0aW9uLCBfYSwgX2IKICAgdmFsdWVzLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsK
ICAgCiAgIHRyeSB7Ci0gICAgd2hpbGUgKCFkZmdDb21waWxlZCh7Zjp0aGVGdW5jdGlvbn0pKQor
ICAgIHdoaWxlICghZGZnQ29tcGlsZWQoe2Y6dGhlRnVuY3Rpb259KSkgewogICAgICAgdmFsdWVz
LnB1c2goZXZhbChfYSkpOworICAgIH0KICAgICB2YWx1ZXMucHVzaChldmFsKF9hKSk7CiAgIH0g
Y2F0Y2ggKGUpIHsKICAgICBleGNlcHRpb24gPSBlOwpAQCAtMzQ2LDcgKzM2MSw3IEBAIGZ1bmN0
aW9uIGRmZ0luY3JlbWVudChhcmd1bWVudCkKICAgICBpZiAoZGlkRmFpbFNvbWVUZXN0cykKICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50Lmk7CiAgICAgCi0gICAgaWYgKCFkZmdDb21waWxlZChhcmd1
bWVudCkpCisgICAgaWYgKCFkZmdDb21waWxlZChhcmd1bWVudCkgJiYgaXNERkdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybiAic3RhcnQiIGluIGFyZ3VtZW50ID8gYXJndW1lbnQuc3RhcnQgOiAw
OwogICAgIAogICAgIHJldHVybiBhcmd1bWVudC5pOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>